diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index 4e9fca8e3..e79285008 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -496,7 +496,7 @@ void SetOverrideFlags(CxbxVertexShader* pCxbxVertexShader) { for (int i = 0; i < 16; i++) { overrideFlags[i] = pCxbxVertexShader->VertexShaderInfo.vRegisterInDeclaration[i] ? 1.0f : 0.0f; } - g_pD3DDevice->SetVertexShaderConstantF(X_D3DVS_CONSTREG_VERTEXDATA4F_FLAG_BASE, overrideFlags, 4); + g_pD3DDevice->SetVertexShaderConstantF(CXBX_D3DVS_CONSTREG_VERTEXDATA4F_FLAG_BASE, overrideFlags, 4); } } @@ -3873,8 +3873,8 @@ void UpdateViewPortOffsetAndScaleConstants() float vOffset[4], vScale[4]; GetViewPortOffsetAndScale(vOffset, vScale); - g_pD3DDevice->SetVertexShaderConstantF(X_D3DVS_VIEWPORT_SCALE_MIRROR, vScale, 1); - g_pD3DDevice->SetVertexShaderConstantF(X_D3DVS_VIEWPORT_OFFSET_MIRROR, vOffset, 1); + g_pD3DDevice->SetVertexShaderConstantF(CXBX_D3DVS_VIEWPORT_SCALE_MIRROR, vScale, 1); + g_pD3DDevice->SetVertexShaderConstantF(CXBX_D3DVS_VIEWPORT_OFFSET_MIRROR, vOffset, 1); // Store viewport offset and scale in constant registers 58 (c-38) and // 59 (c-37) used for screen space transformation. @@ -4303,6 +4303,8 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_SetVertexShaderConstant) // The host does not support negative, so we adjust to 0..191 Register += X_D3DSCM_CORRECTION; + if (Register < 0) LOG_TEST_CASE("Register < 0"); + if (Register + ConstantCount > X_D3DVS_CONSTREG_COUNT) LOG_TEST_CASE("Register + ConstantCount > X_D3DVS_CONSTREG_COUNT"); HRESULT hRet; hRet = g_pD3DDevice->SetVertexShaderConstantF( Register, @@ -4647,6 +4649,8 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_SetVertexData4f) // not present in the vertex declaration. // We use range 193 and up to store these values, as Xbox shaders stop at c192! FLOAT values[] = {a,b,c,d}; + if (Register < 0) LOG_TEST_CASE("Register < 0"); + if (Register >= 16) LOG_TEST_CASE("Register >= 16"); g_pD3DDevice->SetVertexShaderConstantF(CXBX_D3DVS_CONSTREG_VERTEXDATA4F_BASE + Register, values, 1); } diff --git a/src/core/hle/D3D8/XbD3D8Types.h b/src/core/hle/D3D8/XbD3D8Types.h index e1da19c71..974a0b26a 100644 --- a/src/core/hle/D3D8/XbD3D8Types.h +++ b/src/core/hle/D3D8/XbD3D8Types.h @@ -991,10 +991,10 @@ typedef DWORD X_VERTEXSHADERCONSTANTMODE; // Special Registers, used to pass additional information to the shaders // TODO co-locate shader workaround constants with shader code -#define X_D3DVS_CONSTREG_VERTEXDATA4F_BASE (X_D3DVS_CONSTREG_COUNT) -#define X_D3DVS_CONSTREG_VERTEXDATA4F_FLAG_BASE (X_D3DVS_CONSTREG_VERTEXDATA4F_BASE + 16) -#define X_D3DVS_VIEWPORT_SCALE_MIRROR (X_D3DVS_CONSTREG_VERTEXDATA4F_FLAG_BASE + 4) -#define X_D3DVS_VIEWPORT_OFFSET_MIRROR (X_D3DVS_VIEWPORT_SCALE_MIRROR + 1) +#define CXBX_D3DVS_CONSTREG_VERTEXDATA4F_BASE (X_D3DVS_CONSTREG_COUNT) +#define CXBX_D3DVS_CONSTREG_VERTEXDATA4F_FLAG_BASE (CXBX_D3DVS_CONSTREG_VERTEXDATA4F_BASE + 16) +#define CXBX_D3DVS_VIEWPORT_SCALE_MIRROR (CXBX_D3DVS_CONSTREG_VERTEXDATA4F_FLAG_BASE + 4) +#define CXBX_D3DVS_VIEWPORT_OFFSET_MIRROR (CXBX_D3DVS_VIEWPORT_SCALE_MIRROR + 1) #define X_D3DSCM_RESERVED_CONSTANT_SCALE_CORRECTED (X_D3DSCM_RESERVED_CONSTANT_SCALE + X_D3DSCM_CORRECTION) #define X_D3DSCM_RESERVED_CONSTANT_OFFSET_CORRECTED (X_D3DSCM_RESERVED_CONSTANT_OFFSET + X_D3DSCM_CORRECTION) @@ -1217,9 +1217,6 @@ typedef DWORD NV2AMETHOD; // Below declarations are used by Cxbx, not by the Xbox!!! // -// Host vertex shader counts -#define CXBX_D3DVS_CONSTREG_VERTEXDATA4F_BASE X_D3DVS_CONSTREG_COUNT - } // end of namespace XTL #endif