Ensure shader has been created before setting it in SetVertexShader

This commit is contained in:
Anthony Miles 2020-05-04 20:49:03 +12:00
parent 79102c6ef8
commit 176dc9a38c
1 changed files with 11 additions and 6 deletions

View File

@ -1471,13 +1471,18 @@ void CxbxImpl_SetVertexShader(DWORD Handle)
if (VshHandleIsVertexShader(Handle)) { if (VshHandleIsVertexShader(Handle)) {
CxbxVertexShader* pCxbxVertexShader = GetCxbxVertexShader(Handle); CxbxVertexShader* pCxbxVertexShader = GetCxbxVertexShader(Handle);
SetCxbxVertexShaderHandle(pCxbxVertexShader); if (pCxbxVertexShader) {
SetCxbxVertexShaderHandle(pCxbxVertexShader);
auto CxbxVertexShaderSlotPtr = GetCxbxVertexShaderSlotPtr(g_CxbxVertexShaderSlotAddress); auto CxbxVertexShaderSlotPtr = GetCxbxVertexShaderSlotPtr(g_CxbxVertexShaderSlotAddress);
if (CxbxVertexShaderSlotPtr) { if (CxbxVertexShaderSlotPtr) {
// Skip the header DWORD at the beginning // Skip the header DWORD at the beginning
auto pTokens = &pCxbxVertexShader->pXboxFunctionCopy[1]; auto pTokens = &pCxbxVertexShader->pXboxFunctionCopy[1];
memcpy(CxbxVertexShaderSlotPtr, pTokens, pCxbxVertexShader->XboxNrAddressSlots * X_VSH_INSTRUCTION_SIZE_BYTES); memcpy(CxbxVertexShaderSlotPtr, pTokens, pCxbxVertexShader->XboxNrAddressSlots * X_VSH_INSTRUCTION_SIZE_BYTES);
}
}
else {
EmuLog(LOG_LEVEL::DEBUG, "SetVertexShader with shader handle that has not been created");
} }
} }
else { else {