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

Commit 31bea36

Browse files
committed
Merge branch 'ajaus/stateblock_bugfixs_2' into 'main'
[REMIX-3586] Additional Bridge Client Device State changes and fixes. See merge request lightspeedrtx/bridge-remix-nv!115
2 parents 3e91886 + b289bd3 commit 31bea36

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)