Move D3DDevice_LoadVertexShaderProgram implementation to XbVertexShader.cpp
This commit is contained in:
parent
00e85b8af8
commit
6a8534a22e
|
@ -7861,16 +7861,7 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_LoadVertexShaderProgram)
|
|||
LOG_FUNC_ARG(Address)
|
||||
LOG_FUNC_END;
|
||||
|
||||
// D3DDevice_LoadVertexShaderProgram splits the given function buffer into batch-wise pushes to the NV2A
|
||||
|
||||
// Copy shader instructions to shader slots
|
||||
auto CxbxVertexShaderSlotPtr = GetCxbxVertexShaderSlotPtr(Address);
|
||||
if (CxbxVertexShaderSlotPtr == nullptr)
|
||||
return;
|
||||
|
||||
auto shaderHeader = *((XTL::X_VSH_SHADER_HEADER*) pFunction);
|
||||
auto tokens = &pFunction[1];
|
||||
memcpy(CxbxVertexShaderSlotPtr, tokens, shaderHeader.NumInst * X_VSH_INSTRUCTION_SIZE_BYTES);
|
||||
CxbxImpl_LoadVertexShaderProgram(pFunction, Address);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
|
|
|
@ -1403,6 +1403,20 @@ void CxbxImpl_SelectVertexShader(DWORD Handle, DWORD Address)
|
|||
}
|
||||
}
|
||||
|
||||
void CxbxImpl_LoadVertexShaderProgram(CONST DWORD* pFunction, DWORD Address)
|
||||
{
|
||||
// D3DDevice_LoadVertexShaderProgram splits the given function buffer into batch-wise pushes to the NV2A
|
||||
|
||||
// Copy shader instructions to shader slots
|
||||
auto CxbxVertexShaderSlotPtr = GetCxbxVertexShaderSlotPtr(Address);
|
||||
if (CxbxVertexShaderSlotPtr == nullptr)
|
||||
return;
|
||||
|
||||
auto shaderHeader = *((XTL::X_VSH_SHADER_HEADER*) pFunction);
|
||||
auto tokens = &pFunction[1];
|
||||
memcpy(CxbxVertexShaderSlotPtr, tokens, shaderHeader.NumInst * X_VSH_INSTRUCTION_SIZE_BYTES);
|
||||
}
|
||||
|
||||
void CxbxImpl_LoadVertexShader(DWORD Handle, DWORD Address)
|
||||
{
|
||||
// Handle is always address of an X_D3DVertexShader struct, thus always or-ed with 1 (X_D3DFVF_RESERVED0)
|
||||
|
|
|
@ -233,10 +233,9 @@ inline boolean VshHandleIsVertexShader(DWORD Handle) { return (Handle & X_D3DFVF
|
|||
inline boolean VshHandleIsFVF(DWORD Handle) { return !VshHandleIsVertexShader(Handle); }
|
||||
inline XTL::X_D3DVertexShader *VshHandleToXboxVertexShader(DWORD Handle) { return (XTL::X_D3DVertexShader *)(Handle & ~X_D3DFVF_RESERVED0);}
|
||||
|
||||
extern DWORD* GetCxbxVertexShaderSlotPtr(const DWORD SlotIndexAddress);
|
||||
extern CxbxVertexShader* GetCxbxVertexShader(DWORD XboxVertexShaderHandle);
|
||||
extern void SetCxbxVertexShader(DWORD XboxVertexShaderHandle, CxbxVertexShader* shader);
|
||||
extern void SetCxbxVertexShader(CxbxVertexShader* pCxbxVertexShader);
|
||||
extern CxbxVertexShader* GetCxbxVertexShader(DWORD XboxVertexShaderHandle);
|
||||
|
||||
extern void CxbxImpl_LoadVertexShaderProgram(CONST DWORD* pFunction, DWORD Address);
|
||||
extern void CxbxImpl_LoadVertexShader(DWORD Handle, DWORD Address);
|
||||
extern void CxbxImpl_SetVertexShader(DWORD Handle);
|
||||
extern void CxbxImpl_SelectVertexShaderDirect(XTL::X_VERTEXATTRIBUTEFORMAT* pVAF, DWORD Address);
|
||||
|
|
Loading…
Reference in New Issue