mirror of
https://github.com/Cxbx-Reloaded/Cxbx-Reloaded.git
synced 2024-06-12 17:47:45 -04:00
d3d8: fix GTA: SA bug and add LTCG patch for D3DDevice_DrawVertices variant
Plus other variant LTCG patches that only does logging. And symbol renames.
This commit is contained in:
parent
ed8a6124e4
commit
ef3439e46f
2
import/XbSymbolDatabase
vendored
2
import/XbSymbolDatabase
vendored
|
@ -1 +1 @@
|
|||
Subproject commit 313ed04a76e1079178652fa0deaf78c96c061e37
|
||||
Subproject commit 774111351210e6f340246d6fb32741b09708f381
|
|
@ -3317,12 +3317,12 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_GetDisplayFieldStatus)(X_D3DFIELD_
|
|||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_BeginPush
|
||||
// * patch: D3DDevice_BeginPush_4
|
||||
// TODO: Find a test case and verify this
|
||||
// Starting from XDK 4531, this changed to 1 parameter only.
|
||||
// Is this definition incorrect, or did it change at some point?
|
||||
// ******************************************************************
|
||||
xbox::PDWORD WINAPI xbox::EMUPATCH(D3DDevice_BeginPush)(dword_xt Count)
|
||||
xbox::PDWORD WINAPI xbox::EMUPATCH(D3DDevice_BeginPush_4)(dword_xt Count)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(Count);
|
||||
|
||||
|
@ -3340,11 +3340,11 @@ xbox::PDWORD WINAPI xbox::EMUPATCH(D3DDevice_BeginPush)(dword_xt Count)
|
|||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_BeginPush2
|
||||
// * patch: D3DDevice_BeginPush_8
|
||||
// TODO: Find a test case and verify this: RalliSport Challenge XDK 4134
|
||||
// For XDK before 4531
|
||||
// ******************************************************************
|
||||
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_BeginPush2)(dword_xt Count, dword_xt** ppPush)
|
||||
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_BeginPush_8)(dword_xt Count, dword_xt** ppPush)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(Count)
|
||||
|
@ -7851,7 +7851,7 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetPixelShader)
|
|||
// This uses a custom calling convention where parameter is passed in ECX, EAX and Stack
|
||||
// Test Case: Conker
|
||||
// ******************************************************************
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices_4)
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices_4__LTCG_ecx2_eax3)
|
||||
(
|
||||
X_D3DPRIMITIVETYPE PrimitiveType
|
||||
)
|
||||
|
@ -7872,6 +7872,30 @@ __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices_4)
|
|||
}
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_DrawVertices_8__LTCG_eax3
|
||||
// LTCG specific D3DDevice_DrawVertices function...
|
||||
// ******************************************************************
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices_8__LTCG_eax3)
|
||||
(
|
||||
X_D3DPRIMITIVETYPE PrimitiveType,
|
||||
uint_xt StartVertex
|
||||
)
|
||||
{
|
||||
uint_xt VertexCount;
|
||||
__asm {
|
||||
LTCG_PROLOGUE
|
||||
mov VertexCount, eax
|
||||
}
|
||||
|
||||
EMUPATCH(D3DDevice_DrawVertices)(PrimitiveType, StartVertex, VertexCount);
|
||||
|
||||
__asm {
|
||||
LTCG_EPILOGUE
|
||||
ret 4
|
||||
}
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_DrawVertices
|
||||
// ******************************************************************
|
||||
|
@ -8033,7 +8057,7 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP)
|
|||
// LTCG specific D3DDevice_DrawVerticesUP function...
|
||||
// This uses a custom calling convention where pVertexStreamZeroData is passed in EBX
|
||||
// Test-case: NASCAR Heat 20002
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12)
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12__LTCG_ebx3)
|
||||
(
|
||||
X_D3DPRIMITIVETYPE PrimitiveType,
|
||||
uint_xt VertexCount,
|
||||
|
@ -9120,15 +9144,52 @@ xbox::void_xt WINAPI xbox::EMUPATCH(CDevice_SetStateVB_8)(addr_xt _this, ulong_x
|
|||
// ******************************************************************
|
||||
// * patch: CDevice_SetStateUP (D3D::CDevice::SetStateUP)
|
||||
// ******************************************************************
|
||||
xbox::void_xt WINAPI xbox::EMUPATCH(CDevice_SetStateUP)()
|
||||
xbox::void_xt CxbxrImpl_CDevice_SetStateUP(xbox::addr_xt _this)
|
||||
{
|
||||
LOG_FUNC();
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
// TODO: Anything?
|
||||
// __asm int 3;
|
||||
//__asm int 3;
|
||||
}
|
||||
|
||||
xbox::void_xt WINAPI xbox::EMUPATCH(CDevice_SetStateUP)()
|
||||
{
|
||||
addr_xt _this;
|
||||
__asm mov _this, ecx;
|
||||
|
||||
LOG_FUNC_ONE_ARG(_this);
|
||||
|
||||
CxbxrImpl_CDevice_SetStateUP(_this);
|
||||
}
|
||||
|
||||
xbox::void_xt WINAPI xbox::EMUPATCH(CDevice_SetStateUP_4)(xbox::addr_xt _this)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(_this);
|
||||
|
||||
CxbxrImpl_CDevice_SetStateUP(_this);
|
||||
}
|
||||
static void CDevice_SetStateUP_0__LTCG_esi1(xbox::addr_xt _this)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(_this);
|
||||
}
|
||||
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(CDevice_SetStateUP_0__LTCG_esi1)()
|
||||
{
|
||||
addr_xt _this;
|
||||
__asm {
|
||||
LTCG_PROLOGUE
|
||||
mov _this, esi
|
||||
}
|
||||
|
||||
// Log
|
||||
CDevice_SetStateUP_0__LTCG_esi1(_this);
|
||||
|
||||
CxbxrImpl_CDevice_SetStateUP(_this);
|
||||
|
||||
__asm {
|
||||
LTCG_EPILOGUE
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
|
|
|
@ -144,14 +144,14 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_GetDisplayFieldStatus)
|
|||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_BeginPush
|
||||
// * patch: D3DDevice_BeginPush_4
|
||||
// ******************************************************************
|
||||
xbox::PDWORD WINAPI EMUPATCH(D3DDevice_BeginPush)(dword_xt Count);
|
||||
xbox::PDWORD WINAPI EMUPATCH(D3DDevice_BeginPush_4)(dword_xt Count);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_BeginPush2 //two arg version for xdk before 4531
|
||||
// * patch: D3DDevice_BeginPush_8
|
||||
// ******************************************************************
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_BeginPush2)(dword_xt Count, dword_xt **ppPush);
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_BeginPush_8)(dword_xt Count, dword_xt **ppPush);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_EndPush
|
||||
|
@ -1399,13 +1399,22 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVertices)
|
|||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_DrawVertices_4
|
||||
// * patch: D3DDevice_DrawVertices_4__LTCG_ecx2_eax3
|
||||
// ******************************************************************
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVertices_4)
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVertices_4__LTCG_ecx2_eax3)
|
||||
(
|
||||
X_D3DPRIMITIVETYPE PrimitiveType
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_DrawVertices_8__LTCG_eax3
|
||||
// ******************************************************************
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVertices_8__LTCG_eax3)
|
||||
(
|
||||
X_D3DPRIMITIVETYPE PrimitiveType,
|
||||
uint_xt StartVertex
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_DrawVerticesUP
|
||||
// ******************************************************************
|
||||
|
@ -1417,7 +1426,7 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVerticesUP)
|
|||
uint_xt VertexStreamZeroStride
|
||||
);
|
||||
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVerticesUP_12)
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVerticesUP_12__LTCG_ebx3)
|
||||
(
|
||||
X_D3DPRIMITIVETYPE PrimitiveType,
|
||||
uint_xt VertexCount,
|
||||
|
@ -1908,6 +1917,8 @@ xbox::void_xt WINAPI EMUPATCH(CDevice_SetStateVB_8)(xbox::addr_xt _this, xbox::u
|
|||
// * patch: CDevice_SetStateUP (D3D::CDevice::SetStateUP)
|
||||
// ******************************************************************
|
||||
xbox::void_xt WINAPI EMUPATCH(CDevice_SetStateUP)();
|
||||
xbox::void_xt WINAPI EMUPATCH(CDevice_SetStateUP_4)(xbox::addr_xt _this);
|
||||
xbox::void_xt WINAPI EMUPATCH(CDevice_SetStateUP_0__LTCG_esi1)();
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_SetStipple
|
||||
|
|
|
@ -57,11 +57,13 @@ const uint32_t PATCH_IS_FIBER = 1 << 4;
|
|||
std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
||||
// Direct3D
|
||||
PATCH_ENTRY("CDevice_SetStateUP", xbox::EMUPATCH(CDevice_SetStateUP), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("CDevice_SetStateUP_4", xbox::EMUPATCH(CDevice_SetStateUP_4), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("CDevice_SetStateUP_0__LTCG_esi1", xbox::EMUPATCH(CDevice_SetStateUP_0__LTCG_esi1), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("CDevice_SetStateVB", xbox::EMUPATCH(CDevice_SetStateVB), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("CDevice_SetStateVB_8", xbox::EMUPATCH(CDevice_SetStateVB_8), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_Begin", xbox::EMUPATCH(D3DDevice_Begin), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_BeginPush", xbox::EMUPATCH(D3DDevice_BeginPush), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_BeginPush2", xbox::EMUPATCH(D3DDevice_BeginPush2), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_BeginPush_4", xbox::EMUPATCH(D3DDevice_BeginPush_4), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_BeginPush_8", xbox::EMUPATCH(D3DDevice_BeginPush_8), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_BeginVisibilityTest", xbox::EMUPATCH(D3DDevice_BeginVisibilityTest), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_BlockOnFence", xbox::EMUPATCH(D3DDevice_BlockOnFence), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_BlockUntilVerticalBlank", xbox::EMUPATCH(D3DDevice_BlockUntilVerticalBlank), PATCH_HLE_D3D),
|
||||
|
@ -75,9 +77,10 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
|||
PATCH_ENTRY("D3DDevice_DrawRectPatch", xbox::EMUPATCH(D3DDevice_DrawRectPatch), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_DrawTriPatch", xbox::EMUPATCH(D3DDevice_DrawTriPatch), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_DrawVertices", xbox::EMUPATCH(D3DDevice_DrawVertices), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_DrawVertices_4", xbox::EMUPATCH(D3DDevice_DrawVertices_4), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_DrawVertices_4__LTCG_ecx2_eax3", xbox::EMUPATCH(D3DDevice_DrawVertices_4__LTCG_ecx2_eax3), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_DrawVertices_8__LTCG_eax3", xbox::EMUPATCH(D3DDevice_DrawVertices_8__LTCG_eax3), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_DrawVerticesUP", xbox::EMUPATCH(D3DDevice_DrawVerticesUP), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_DrawVerticesUP_12", xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_DrawVerticesUP_12__LTCG_ebx3", xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12__LTCG_ebx3), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_EnableOverlay", xbox::EMUPATCH(D3DDevice_EnableOverlay), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_End", xbox::EMUPATCH(D3DDevice_End), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_EndPush", xbox::EMUPATCH(D3DDevice_EndPush), PATCH_HLE_D3D),
|
||||
|
|
Loading…
Reference in a new issue