@@ -100,8 +100,8 @@ void RefreshCacheIfNeeded()
100
100
const CClientVariables* currentSource = cvars;
101
101
const int currentRevision = cvars ? cvars->GetRevision () : -1 ;
102
102
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 );
105
105
106
106
if (cachedSource == currentSource && cachedRevision == currentRevision)
107
107
return ;
@@ -433,7 +433,7 @@ CProxyDirect3DDevice9::~CProxyDirect3DDevice9()
433
433
434
434
g_GammaState.bOriginalGammaStored = false ;
435
435
g_GammaState.bLastWasBorderless = false ;
436
- ZeroMemory (& g_GammaState.originalGammaRamp , sizeof (g_GammaState. originalGammaRamp )) ;
436
+ g_GammaState.originalGammaRamp = {} ;
437
437
}
438
438
}
439
439
@@ -1341,8 +1341,8 @@ HRESULT CProxyDirect3DDevice9::SetTexture(DWORD Stage, IDirect3DBaseTexture9* pT
1341
1341
// Fast-path: avoid AddRef/Release if texture hasn't changed
1342
1342
if (DeviceState.TextureState [Stage].Texture != pTexture)
1343
1343
{
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);
1346
1346
}
1347
1347
}
1348
1348
return m_pDevice->SetTexture (Stage, CDirect3DEvents9::GetRealTexture (pTexture));
@@ -1475,7 +1475,9 @@ HRESULT CProxyDirect3DDevice9::CreateVertexDeclaration(CONST D3DVERTEXELEMENT9*
1475
1475
1476
1476
HRESULT CProxyDirect3DDevice9::SetVertexDeclaration (IDirect3DVertexDeclaration9* pDecl)
1477
1477
{
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);
1479
1481
return CDirect3DEvents9::SetVertexDeclaration (m_pDevice, pDecl);
1480
1482
}
1481
1483
@@ -1501,7 +1503,9 @@ HRESULT CProxyDirect3DDevice9::CreateVertexShader(CONST DWORD* pFunction, IDirec
1501
1503
1502
1504
HRESULT CProxyDirect3DDevice9::SetVertexShader (IDirect3DVertexShader9* pShader)
1503
1505
{
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);
1505
1509
return m_pDevice->SetVertexShader (pShader);
1506
1510
}
1507
1511
@@ -1544,7 +1548,9 @@ HRESULT CProxyDirect3DDevice9::SetStreamSource(UINT StreamNumber, IDirect3DVerte
1544
1548
{
1545
1549
if (StreamNumber < NUMELMS (DeviceState.VertexStreams ))
1546
1550
{
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);
1548
1554
DeviceState.VertexStreams [StreamNumber].StreamOffset = OffsetInBytes;
1549
1555
DeviceState.VertexStreams [StreamNumber].StreamStride = Stride;
1550
1556
}
@@ -1568,7 +1574,9 @@ HRESULT CProxyDirect3DDevice9::GetStreamSourceFreq(UINT StreamNumber, UINT* pSet
1568
1574
1569
1575
HRESULT CProxyDirect3DDevice9::SetIndices (IDirect3DIndexBuffer9* pIndexData)
1570
1576
{
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);
1572
1580
return m_pDevice->SetIndices (CDirect3DEvents9::GetRealIndexBuffer (pIndexData));
1573
1581
}
1574
1582
@@ -1584,7 +1592,9 @@ HRESULT CProxyDirect3DDevice9::CreatePixelShader(CONST DWORD* pFunction, IDirect
1584
1592
1585
1593
HRESULT CProxyDirect3DDevice9::SetPixelShader (IDirect3DPixelShader9* pShader)
1586
1594
{
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);
1588
1598
return m_pDevice->SetPixelShader (pShader);
1589
1599
}
1590
1600
0 commit comments