@@ -100,8 +100,8 @@ void RefreshCacheIfNeeded()
100100 const CClientVariables* currentSource = cvars;
101101 const int currentRevision = cvars ? cvars->GetRevision () : -1 ;
102102
103- const CClientVariables* cachedSource = g_cachedSettings.source .load (std::memory_order_acquire );
104- const int cachedRevision = g_cachedSettings.revision .load (std::memory_order_acquire );
103+ const CClientVariables* cachedSource = g_cachedSettings.source .load (std::memory_order_relaxed );
104+ const int cachedRevision = g_cachedSettings.revision .load (std::memory_order_relaxed );
105105
106106 if (cachedSource == currentSource && cachedRevision == currentRevision)
107107 return ;
@@ -433,7 +433,7 @@ CProxyDirect3DDevice9::~CProxyDirect3DDevice9()
433433
434434 g_GammaState.bOriginalGammaStored = false ;
435435 g_GammaState.bLastWasBorderless = false ;
436- ZeroMemory (& g_GammaState.originalGammaRamp , sizeof (g_GammaState. originalGammaRamp )) ;
436+ g_GammaState.originalGammaRamp = {} ;
437437 }
438438 }
439439
@@ -1341,8 +1341,8 @@ HRESULT CProxyDirect3DDevice9::SetTexture(DWORD Stage, IDirect3DBaseTexture9* pT
13411341 // Fast-path: avoid AddRef/Release if texture hasn't changed
13421342 if (DeviceState.TextureState [Stage].Texture != pTexture)
13431343 {
1344- const char * context = GetSetTextureContextString (Stage);
1345- ReplaceInterface (DeviceState.TextureState [Stage].Texture , pTexture, context );
1344+ // Hot path: use non-validating ReplaceInterface since textures come from D3D9 driver
1345+ ReplaceInterface (DeviceState.TextureState [Stage].Texture , pTexture);
13461346 }
13471347 }
13481348 return m_pDevice->SetTexture (Stage, CDirect3DEvents9::GetRealTexture (pTexture));
@@ -1475,7 +1475,9 @@ HRESULT CProxyDirect3DDevice9::CreateVertexDeclaration(CONST D3DVERTEXELEMENT9*
14751475
14761476HRESULT CProxyDirect3DDevice9::SetVertexDeclaration (IDirect3DVertexDeclaration9* pDecl)
14771477{
1478- ReplaceInterface (DeviceState.VertexDeclaration , pDecl);
1478+ // Avoid validation overhead since declarations come from D3D9 driver
1479+ if (DeviceState.VertexDeclaration != pDecl)
1480+ ReplaceInterface (DeviceState.VertexDeclaration , pDecl);
14791481 return CDirect3DEvents9::SetVertexDeclaration (m_pDevice, pDecl);
14801482}
14811483
@@ -1501,7 +1503,9 @@ HRESULT CProxyDirect3DDevice9::CreateVertexShader(CONST DWORD* pFunction, IDirec
15011503
15021504HRESULT CProxyDirect3DDevice9::SetVertexShader (IDirect3DVertexShader9* pShader)
15031505{
1504- ReplaceInterface (DeviceState.VertexShader , pShader);
1506+ // Avoid validation overhead since shaders come from D3D9 driver
1507+ if (DeviceState.VertexShader != pShader)
1508+ ReplaceInterface (DeviceState.VertexShader , pShader);
15051509 return m_pDevice->SetVertexShader (pShader);
15061510}
15071511
@@ -1544,7 +1548,9 @@ HRESULT CProxyDirect3DDevice9::SetStreamSource(UINT StreamNumber, IDirect3DVerte
15441548{
15451549 if (StreamNumber < NUMELMS (DeviceState.VertexStreams ))
15461550 {
1547- ReplaceInterface (DeviceState.VertexStreams [StreamNumber].StreamData , pStreamData);
1551+ // Avoid validation overhead since vertex buffers come from D3D9 driver
1552+ if (DeviceState.VertexStreams [StreamNumber].StreamData != pStreamData)
1553+ ReplaceInterface (DeviceState.VertexStreams [StreamNumber].StreamData , pStreamData);
15481554 DeviceState.VertexStreams [StreamNumber].StreamOffset = OffsetInBytes;
15491555 DeviceState.VertexStreams [StreamNumber].StreamStride = Stride;
15501556 }
@@ -1568,7 +1574,9 @@ HRESULT CProxyDirect3DDevice9::GetStreamSourceFreq(UINT StreamNumber, UINT* pSet
15681574
15691575HRESULT CProxyDirect3DDevice9::SetIndices (IDirect3DIndexBuffer9* pIndexData)
15701576{
1571- ReplaceInterface (DeviceState.IndexBufferData , pIndexData);
1577+ // Avoid validation overhead since index buffers come from D3D9 driver
1578+ if (DeviceState.IndexBufferData != pIndexData)
1579+ ReplaceInterface (DeviceState.IndexBufferData , pIndexData);
15721580 return m_pDevice->SetIndices (CDirect3DEvents9::GetRealIndexBuffer (pIndexData));
15731581}
15741582
@@ -1584,7 +1592,9 @@ HRESULT CProxyDirect3DDevice9::CreatePixelShader(CONST DWORD* pFunction, IDirect
15841592
15851593HRESULT CProxyDirect3DDevice9::SetPixelShader (IDirect3DPixelShader9* pShader)
15861594{
1587- ReplaceInterface (DeviceState.PixelShader , pShader);
1595+ // Avoid validation overhead since shaders come from D3D9 driver
1596+ if (DeviceState.PixelShader != pShader)
1597+ ReplaceInterface (DeviceState.PixelShader , pShader);
15881598 return m_pDevice->SetPixelShader (pShader);
15891599}
15901600
0 commit comments