Added Register out-of-range LOG_TEST_CASE's

Named consistently CXBX specific vertex shader constants
This commit is contained in:
patrickvl 2019-12-19 00:50:43 +01:00
parent 1f83a28a01
commit f9410dace0
2 changed files with 11 additions and 10 deletions

View File

@ -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);
}

View File

@ -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