Implement D3DDevice_MultiplyTransform, without this, titles calling this function would set a transform based on unitialized data....

This commit is contained in:
Luke Usher 2018-03-02 22:06:34 +00:00
parent dd5aa368bf
commit b8ae74ca79
5 changed files with 87 additions and 0 deletions

View File

@ -6115,6 +6115,29 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_SetTransform)
DEBUG_D3DRESULT(hRet, "g_pD3DDevice8->SetTransform");
}
// ******************************************************************
// * patch: D3DDevice_MultiplyTransform
// ******************************************************************
VOID WINAPI XTL::EMUPATCH(D3DDevice_MultiplyTransform)
(
D3DTRANSFORMSTATETYPE State,
CONST D3DMATRIX *pMatrix
)
{
FUNC_EXPORTS
LOG_FUNC_BEGIN
LOG_FUNC_ARG(State)
LOG_FUNC_ARG(pMatrix)
LOG_FUNC_END;
State = EmuXB2PC_D3DTS(State);
HRESULT hRet = g_pD3DDevice8->MultiplyTransform(State, pMatrix);
DEBUG_D3DRESULT(hRet, "g_pD3DDevice8->MultiplyTransform");
}
// ******************************************************************
// * patch: D3DDevice_GetTransform
// ******************************************************************

View File

@ -1211,6 +1211,15 @@ VOID WINAPI EMUPATCH(D3DDevice_SetTransform)
CONST D3DMATRIX *pMatrix
);
// ******************************************************************
// * patch: D3DDevice_MultiplyTransform
// ******************************************************************
VOID WINAPI EMUPATCH(D3DDevice_MultiplyTransform)
(
D3DTRANSFORMSTATETYPE State,
CONST D3DMATRIX *pMatrix
);
// ******************************************************************
// * patch: D3DDevice_GetTransform
// ******************************************************************

View File

@ -2190,6 +2190,22 @@ OOVPA_NO_XREF(D3DDevice_SetTransform, 3911, 10)
{ 0x7B, 0xF9 },
OOVPA_END;
// ******************************************************************
// * D3DDevice_MultiplyTransform
// ******************************************************************
OOVPA_NO_XREF(D3DDevice_MultiplyTransform, 3911, 10)
{ 0x00, 0x55 },
{ 0x01, 0x8B },
{ 0x02, 0xEC },
{ 0x03, 0x83 },
{ 0x04, 0xE4 },
{ 0x12, 0x56 },
{ 0x13, 0x8B },
{ 0x14, 0x7F },
{ 0x15, 0x0C },
{ 0x16, 0x57 },
OOVPA_END;
// ******************************************************************
// * D3DDevice_SetRenderState_FogColor
// ******************************************************************

View File

@ -155,6 +155,44 @@ OOVPA_NO_XREF(D3DDevice_SetTransform, 4034, 11)
{ 0x85, 0xF9 },
OOVPA_END;
// ******************************************************************
// * D3DDevice_MultiplyTransform
// ******************************************************************
OOVPA_NO_XREF(D3DDevice_MultiplyTransform, 4034, 0x20)
{ 0x00, 0x55 },
{ 0x01, 0x8B },
{ 0x02, 0xEC },
{ 0x03, 0x83 },
{ 0x04, 0xE4 },
{ 0x05, 0xF0 },
{ 0x06, 0x81 },
{ 0x07, 0xEC },
{ 0x08, 0x88 },
{ 0x09, 0x00 },
{ 0x0A, 0x00 },
{ 0x0B, 0x00 },
{ 0x0C, 0x56 },
{ 0x0D, 0x8B },
{ 0x0E, 0x75 },
{ 0x0F, 0x0C },
{ 0x10, 0x57 },
{ 0x11, 0xB9 },
{ 0x12, 0x10 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x8D },
{ 0x17, 0x7C },
{ 0x18, 0x24 },
{ 0x19, 0x10 },
{ 0x1A, 0xF3 },
{ 0x1B, 0xA5 },
{ 0x1C, 0x8B },
{ 0x1D, 0x75 },
{ 0x1E, 0x08 },
{ 0x1F, 0x8B },
OOVPA_END;
// ******************************************************************
// * D3DDevice_SetRenderState_CullMode
// ******************************************************************

View File

@ -364,6 +364,7 @@ OOVPATable D3D8_OOVPAV2[] = {
REGISTER_OOVPAS(D3DDevice_SetTextureState_TexCoordIndex, PATCH, 3911, 4034, 4242, 4627),
REGISTER_OOVPAS(D3DDevice_SetTile, PATCH, 3911, 4034, 4627), // Then it has changed calls ?SetTileNoWait@D3D@@YGXKPBU_D3DTILE@@@Z in XDK 4627 and higher.
REGISTER_OOVPAS(D3DDevice_SetTransform, PATCH, 3911, 4034, 5344, 5558), // Was 4134 (from 5344's comment)
REGISTER_OOVPAS(D3DDevice_MultiplyTransform, PATCH, 3911, 4034), // TODO: Verify 4034 is correct
REGISTER_OOVPAS(D3DDevice_SetVertexData2f, PATCH, 3911, 4039), // Was 4627 (from 5344's comment)
REGISTER_OOVPAS(D3DDevice_SetVertexData2s, PATCH, 3911, 4134),
REGISTER_OOVPAS(D3DDevice_SetVertexData4f, PATCH, 3911, 4039),