Skip to content
This repository was archived by the owner on May 5, 2025. It is now read-only.

Commit 2a06da2

Browse files
committed
[REMIX-3586] Additional Bridge Client Device State changes and fixes.
Correct Palette typo. Change ScissorRect and CurrentTexturePalette defaults, and the LightEnable True value to match D3D9 values found through experimentation. Fix StateBlock issues with the set texture. The texture type was being lost. Match SetStreamSource() nullptr behavior to match D3D9.
1 parent 2aff2f6 commit 2a06da2

File tree

4 files changed

+32
-12
lines changed

4 files changed

+32
-12
lines changed

src/client/d3d9_device.cpp

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,14 +1468,15 @@ template<bool EnableSync>
14681468
HRESULT Direct3DDevice9Ex_LSS<EnableSync>::GetLightEnable(DWORD Index, BOOL* pEnable) {
14691469
ZoneScoped;
14701470
LogFunctionCall();
1471-
14721471
if (pEnable == nullptr) {
14731472
return D3DERR_INVALIDCALL;
14741473
}
14751474

14761475
{
14771476
BRIDGE_DEVICE_LOCKGUARD();
1478-
*pEnable = m_state.bLightEnables[Index];
1477+
// This is the true value for light-enables found through experimentation
1478+
constexpr BOOL LightEnableTrue = 128;
1479+
*pEnable = m_state.bLightEnables[Index] ? LightEnableTrue : 0;
14791480
}
14801481
return S_OK;
14811482
}
@@ -1757,6 +1758,7 @@ void Direct3DDevice9Ex_LSS<EnableSync>::StateBlockSetCaptureFlags(D3DSTATEBLOCKT
17571758
if (Type == D3DSBT_ALL) {
17581759
std::fill(std::begin(flags.textures), std::end(flags.textures), true);
17591760
std::fill(std::begin(flags.streams), std::end(flags.streams), true);
1761+
std::fill(std::begin(flags.streamOffsetsAndStrides), std::end(flags.streamOffsetsAndStrides), true);
17601762

17611763
flags.indices = true;
17621764
flags.viewport = true;
@@ -2200,7 +2202,7 @@ HRESULT Direct3DDevice9Ex_LSS<EnableSync>::SetPaletteEntries(UINT PaletteNumber,
22002202

22012203
{
22022204
BRIDGE_DEVICE_LOCKGUARD();
2203-
m_palleteEntries[PaletteNumber] = *pEntries;
2205+
m_paletteEntries[PaletteNumber] = *pEntries;
22042206
}
22052207
return S_OK;
22062208
}
@@ -2216,7 +2218,7 @@ HRESULT Direct3DDevice9Ex_LSS<EnableSync>::GetPaletteEntries(UINT PaletteNumber,
22162218

22172219
{
22182220
BRIDGE_DEVICE_LOCKGUARD();
2219-
*pEntries = m_palleteEntries[PaletteNumber];
2221+
*pEntries = m_paletteEntries[PaletteNumber];
22202222
}
22212223
return S_OK;
22222224
}
@@ -2227,7 +2229,7 @@ HRESULT Direct3DDevice9Ex_LSS<EnableSync>::SetCurrentTexturePalette(UINT Palette
22272229
LogFunctionCall();
22282230
{
22292231
BRIDGE_DEVICE_LOCKGUARD();
2230-
m_curTexPallete = PaletteNumber;
2232+
m_curTexPalette = PaletteNumber;
22312233
}
22322234
return S_OK;
22332235
}
@@ -2243,7 +2245,7 @@ HRESULT Direct3DDevice9Ex_LSS<EnableSync>::GetCurrentTexturePalette(UINT* pPalet
22432245

22442246
{
22452247
BRIDGE_DEVICE_LOCKGUARD();
2246-
*pPaletteNumber = m_curTexPallete;
2248+
*pPaletteNumber = m_curTexPalette;
22472249
}
22482250
return S_OK;
22492251
}
@@ -2807,13 +2809,18 @@ HRESULT Direct3DDevice9Ex_LSS<EnableSync>::SetStreamSource(UINT StreamNumber, ID
28072809
BRIDGE_DEVICE_LOCKGUARD();
28082810
if (m_stateRecording) {
28092811
m_stateRecording->m_captureState.streams[StreamNumber] = MakeD3DAutoPtr(pLssStreamData);
2810-
m_stateRecording->m_captureState.streamOffsets[StreamNumber] = OffsetInBytes;
2811-
m_stateRecording->m_captureState.streamStrides[StreamNumber] = Stride;
2812+
if (pStreamData != nullptr) {
2813+
m_stateRecording->m_captureState.streamOffsets[StreamNumber] = OffsetInBytes;
2814+
m_stateRecording->m_captureState.streamStrides[StreamNumber] = Stride;
2815+
m_stateRecording->m_dirtyFlags.streamOffsetsAndStrides[StreamNumber] = true;
2816+
}
28122817
m_stateRecording->m_dirtyFlags.streams[StreamNumber] = true;
28132818
} else {
28142819
m_state.streams[StreamNumber] = MakeD3DAutoPtr(pLssStreamData);
2815-
m_state.streamOffsets[StreamNumber] = OffsetInBytes;
2816-
m_state.streamStrides[StreamNumber] = Stride;
2820+
if (pStreamData != nullptr) {
2821+
m_state.streamOffsets[StreamNumber] = OffsetInBytes;
2822+
m_state.streamStrides[StreamNumber] = Stride;
2823+
}
28172824
}
28182825
}
28192826
{
@@ -3751,6 +3758,10 @@ HRESULT Direct3DDevice9Ex_LSS<EnableSync>::ResetState() {
37513758
m_state.streamFreqs[i] = 1;
37523759
}
37533760

3761+
// Set The Current Texture Palette entry to it's default
3762+
// found through experimentation.
3763+
m_curTexPalette = 65535;
3764+
37543765
return S_OK;
37553766
}
37563767

src/client/d3d9_device_base.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ BaseDirect3DDevice9Ex_LSS::BaseDirect3DDevice9Ex_LSS(const bool bExtended,
5656
memset(&m_state.viewport, 0, sizeof(m_state.viewport));
5757
m_state.viewport.Width = m_presParams.BackBufferWidth;
5858
m_state.viewport.Height = m_presParams.BackBufferHeight;
59+
memset(&m_state.scissorRect, 0, sizeof(m_state.scissorRect));
60+
m_state.scissorRect.right = m_presParams.BackBufferWidth;
61+
m_state.scissorRect.bottom = m_presParams.BackBufferHeight;
5962
m_state.viewport.MaxZ = 1.f;
6063

6164
// Games may override client's exception handler when it was setup early.

src/client/d3d9_device_base.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ class BaseDirect3DDevice9Ex_LSS: public D3DBase<IDirect3DDevice9Ex>
183183

184184
D3DGAMMARAMP m_gammaRamp;
185185
D3DPRESENT_PARAMETERS m_previousPresentParams;
186-
std::unordered_map<UINT, PALETTEENTRY> m_palleteEntries;
187-
UINT m_curTexPallete;
186+
std::unordered_map<UINT, PALETTEENTRY> m_paletteEntries;
187+
UINT m_curTexPalette;
188188
BOOL m_bSoftwareVtxProcessing;
189189
D3DCLIPSTATUS9 m_clipStatus;
190190
float m_NPatchMode;
@@ -203,6 +203,7 @@ class BaseDirect3DDevice9Ex_LSS: public D3DBase<IDirect3DDevice9Ex>
203203
std::array<std::array<bool, kMaxStageSamplerStateTypes>, kNumStageSamplers> samplerStates;
204204
// Streams
205205
std::array<bool, caps::MaxStreams> streams;
206+
std::array<bool, caps::MaxStreams> streamOffsetsAndStrides;
206207
std::array<bool, caps::MaxStreams> streamFreqs;
207208
// Textures
208209
std::array<bool, kNumStageSamplers> textures;

src/client/d3d9_stateblock.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ void Direct3DStateBlock9_LSS::StateTransfer(const BaseDirect3DDevice9Ex_LSS::Sta
9191
for (int i = 0; i < flags.streams.size(); i++) {
9292
if (flags.streams[i]) {
9393
dst.streams[i] = src.streams[i];
94+
}
95+
}
96+
for (int i = 0; i < flags.streamOffsetsAndStrides.size(); i++) {
97+
if (flags.streamOffsetsAndStrides[i]) {
9498
dst.streamOffsets[i] = src.streamOffsets[i];
9599
dst.streamStrides[i] = src.streamStrides[i];
96100
}
@@ -103,6 +107,7 @@ void Direct3DStateBlock9_LSS::StateTransfer(const BaseDirect3DDevice9Ex_LSS::Sta
103107
for (int i = 0; i < flags.textures.size(); i++) {
104108
if (flags.textures[i]) {
105109
dst.textures[i] = src.textures[i];
110+
dst.textureTypes[i] = src.textureTypes[i];
106111
}
107112
}
108113
if (flags.vertexShader) {

0 commit comments

Comments
 (0)