Tidy up final LTCG patches

This commit is contained in:
Silent 2020-12-20 20:36:39 +01:00
parent f0531c5d09
commit 626e84763e
No known key found for this signature in database
GPG Key ID: AE53149BB0C45AF1
2 changed files with 76 additions and 86 deletions

View File

@ -7462,10 +7462,10 @@ xbox::void_xt CxbxImpl_SetPixelShader(xbox::dword_xt Handle)
// Overload for logging // Overload for logging
static void D3DDevice_SetPixelShader_0 static void D3DDevice_SetPixelShader_0
( (
xbox::dword_xt Handle xbox::dword_xt Handle
) )
{ {
LOG_FUNC_ONE_ARG(Handle); LOG_FUNC_ONE_ARG(Handle);
} }
// LTCG specific D3DDevice_SetPixelShader function... // LTCG specific D3DDevice_SetPixelShader function...
@ -7475,31 +7475,26 @@ static void D3DDevice_SetPixelShader_0
// Test-case: Midtown Madness 3 // Test-case: Midtown Madness 3
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetPixelShader_0)() __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetPixelShader_0)()
{ {
dword_xt Handle; dword_xt Handle;
// prologue __asm {
__asm { LTCG_PROLOGUE
push ebp mov Handle, eax
mov ebp, esp }
sub esp, __LOCAL_SIZE
mov Handle, eax
}
// Log // Log
D3DDevice_SetPixelShader_0(Handle); D3DDevice_SetPixelShader_0(Handle);
__asm { __asm {
mov eax, Handle mov eax, Handle
call XB_TRMP(D3DDevice_SetPixelShader_0) call XB_TRMP(D3DDevice_SetPixelShader_0)
} }
CxbxImpl_SetPixelShader(Handle); CxbxImpl_SetPixelShader(Handle);
// epilogue __asm {
__asm { LTCG_EPILOGUE
mov esp, ebp ret
pop ebp }
ret
}
} }
// ****************************************************************** // ******************************************************************
@ -7524,20 +7519,25 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetPixelShader)
// This uses a custom calling convention where parameter is passed in ECX, EAX and Stack // This uses a custom calling convention where parameter is passed in ECX, EAX and Stack
// Test Case: Conker // Test Case: Conker
// ****************************************************************** // ******************************************************************
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices_4) __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices_4)
( (
X_D3DPRIMITIVETYPE PrimitiveType X_D3DPRIMITIVETYPE PrimitiveType
) )
{ {
UINT VertexCount; uint_xt VertexCount;
UINT StartVertex; uint_xt StartVertex;
__asm {
_asm { LTCG_PROLOGUE
mov VertexCount, eax mov VertexCount, eax
mov StartVertex, ecx mov StartVertex, ecx
} }
EMUPATCH(D3DDevice_DrawVertices)(PrimitiveType, StartVertex, VertexCount); EMUPATCH(D3DDevice_DrawVertices)(PrimitiveType, StartVertex, VertexCount);
__asm {
LTCG_EPILOGUE
ret 4
}
} }
// ****************************************************************** // ******************************************************************
@ -7546,8 +7546,8 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices_4)
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices)
( (
X_D3DPRIMITIVETYPE PrimitiveType, X_D3DPRIMITIVETYPE PrimitiveType,
uint_xt StartVertex, uint_xt StartVertex,
uint_xt VertexCount uint_xt VertexCount
) )
{ {
LOG_FUNC_BEGIN LOG_FUNC_BEGIN
@ -7665,9 +7665,9 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVertices)
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP)
( (
X_D3DPRIMITIVETYPE PrimitiveType, X_D3DPRIMITIVETYPE PrimitiveType,
uint_xt VertexCount, uint_xt VertexCount,
CONST PVOID pVertexStreamZeroData, CONST PVOID pVertexStreamZeroData,
uint_xt VertexStreamZeroStride uint_xt VertexStreamZeroStride
) )
{ {
LOG_FUNC_BEGIN LOG_FUNC_BEGIN
@ -7701,19 +7701,25 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP)
// LTCG specific D3DDevice_DrawVerticesUP function... // LTCG specific D3DDevice_DrawVerticesUP function...
// This uses a custom calling convention where pVertexStreamZeroData is passed in EBX // This uses a custom calling convention where pVertexStreamZeroData is passed in EBX
// Test-case: NASCAR Heat 20002 // Test-case: NASCAR Heat 20002
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12) __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12)
( (
X_D3DPRIMITIVETYPE PrimitiveType, X_D3DPRIMITIVETYPE PrimitiveType,
uint_xt VertexCount, uint_xt VertexCount,
uint_xt VertexStreamZeroStride uint_xt VertexStreamZeroStride
) )
{ {
PVOID pVertexStreamZeroData; PVOID pVertexStreamZeroData;
__asm mov pVertexStreamZeroData, ebx __asm {
LTCG_PROLOGUE
mov pVertexStreamZeroData, ebx
}
LOG_FORWARD("D3DDevice_DrawVerticesUP"); EMUPATCH(D3DDevice_DrawVerticesUP)(PrimitiveType, VertexCount, pVertexStreamZeroData, VertexStreamZeroStride);
EMUPATCH(D3DDevice_DrawVerticesUP)(PrimitiveType, VertexCount, pVertexStreamZeroData, VertexStreamZeroStride); __asm {
LTCG_EPILOGUE
ret 0Ch
}
} }
// ****************************************************************** // ******************************************************************
@ -7722,7 +7728,7 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12)
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawIndexedVertices) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawIndexedVertices)
( (
X_D3DPRIMITIVETYPE PrimitiveType, X_D3DPRIMITIVETYPE PrimitiveType,
uint_xt VertexCount, uint_xt VertexCount,
CONST PWORD pIndexData CONST PWORD pIndexData
) )
{ {
@ -8065,12 +8071,8 @@ __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetRenderTarget_
{ {
X_D3DSurface *pRenderTarget; X_D3DSurface *pRenderTarget;
X_D3DSurface *pNewZStencil; X_D3DSurface *pNewZStencil;
// prologue
__asm { __asm {
push ebp LTCG_PROLOGUE
mov ebp, esp
sub esp, __LOCAL_SIZE
mov pRenderTarget, ecx mov pRenderTarget, ecx
mov pNewZStencil, eax mov pNewZStencil, eax
} }
@ -8078,10 +8080,8 @@ __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetRenderTarget_
// Actual function body // Actual function body
D3DDevice_SetRenderTarget_0(pRenderTarget, pNewZStencil); D3DDevice_SetRenderTarget_0(pRenderTarget, pNewZStencil);
// epilogue
__asm { __asm {
mov esp, ebp LTCG_EPILOGUE
pop ebp
ret ret
} }
} }
@ -8149,12 +8149,9 @@ __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetPalette_4)
X_D3DPalette *pPalette X_D3DPalette *pPalette
) )
{ {
dword_xt Stage; dword_xt Stage;
__asm { __asm {
push ebp LTCG_PROLOGUE
mov ebp, esp
sub esp, __LOCAL_SIZE
mov Stage, eax mov Stage, eax
} }
@ -8171,8 +8168,7 @@ __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetPalette_4)
CxbxImpl_SetPalette(Stage, pPalette); CxbxImpl_SetPalette(Stage, pPalette);
__asm { __asm {
mov esp, ebp LTCG_EPILOGUE
pop ebp
ret 4 ret 4
} }
} }
@ -8200,17 +8196,22 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetPalette)
// LTCG specific D3DDevice_SetFlickerFilter function... // LTCG specific D3DDevice_SetFlickerFilter function...
// This uses a custom calling convention where parameter is passed in ESI // This uses a custom calling convention where parameter is passed in ESI
// Test-case: Metal Wolf Chaos // Test-case: Metal Wolf Chaos
xbox::void_xt __stdcall xbox::EMUPATCH(D3DDevice_SetFlickerFilter_0) __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetFlickerFilter_0)
( (
) )
{ {
dword_xt Filter; dword_xt Filter;
__asm { __asm {
mov Filter, esi LTCG_PROLOGUE
mov Filter, esi
} }
return EMUPATCH(D3DDevice_SetFlickerFilter)(Filter); EMUPATCH(D3DDevice_SetFlickerFilter)(Filter);
__asm {
LTCG_EPILOGUE
ret
}
} }
// ****************************************************************** // ******************************************************************
@ -8256,11 +8257,8 @@ __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DeleteVertexShad
) )
{ {
dword_xt Handle; dword_xt Handle;
__asm { __asm {
push ebp LTCG_PROLOGUE
mov ebp, esp
sub esp, __LOCAL_SIZE
mov Handle, eax mov Handle, eax
} }
@ -8274,8 +8272,8 @@ __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DeleteVertexShad
__asm { __asm {
mov eax, Handle mov eax, Handle
call XB_TRMP(D3DDevice_DeleteVertexShader_0) call XB_TRMP(D3DDevice_DeleteVertexShader_0)
mov esp, ebp
pop ebp LTCG_EPILOGUE
ret ret
} }
} }
@ -8913,22 +8911,16 @@ void WINAPI xbox::EMUPATCH(D3D_BlockOnTime)( dword_xt Unknown1, int Unknown2 )
__declspec(naked) void WINAPI xbox::EMUPATCH(D3D_BlockOnTime_4)( dword_xt Unknown1 ) __declspec(naked) void WINAPI xbox::EMUPATCH(D3D_BlockOnTime_4)( dword_xt Unknown1 )
{ {
int Unknown2; int Unknown2;
// prologue
__asm { __asm {
push ebp LTCG_PROLOGUE
mov ebp, esp mov Unknown2, eax
sub esp, __LOCAL_SIZE
mov Unknown2, eax // get parameter from eax
} }
// LOG_FORWARD requires unwinding, so carry on without it // LOG_FORWARD requires unwinding, so carry on without it
EMUPATCH(D3D_BlockOnTime)(Unknown1, Unknown2); EMUPATCH(D3D_BlockOnTime)(Unknown1, Unknown2);
// epilogue
__asm { __asm {
mov esp, ebp LTCG_EPILOGUE
pop ebp
ret 4 ret 4
} }
} }
@ -8959,9 +8951,7 @@ __declspec(naked) void WINAPI xbox::EMUPATCH(D3D_DestroyResource__LTCG)()
{ {
X_D3DResource* pResource; X_D3DResource* pResource;
__asm { __asm {
push ebp LTCG_PROLOGUE
mov ebp, esp
sub esp, __LOCAL_SIZE
mov pResource, edi mov pResource, edi
} }
@ -8975,8 +8965,8 @@ __declspec(naked) void WINAPI xbox::EMUPATCH(D3D_DestroyResource__LTCG)()
__asm { __asm {
mov edi, pResource mov edi, pResource
call XB_TRMP(D3D_DestroyResource__LTCG) call XB_TRMP(D3D_DestroyResource__LTCG)
mov esp, ebp
pop ebp LTCG_EPILOGUE
ret ret
} }
} }

View File

@ -1555,17 +1555,17 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetPalette_4)
// ****************************************************************** // ******************************************************************
// * patch: D3DDevice_SetFlickerFilter // * patch: D3DDevice_SetFlickerFilter
// ****************************************************************** // ******************************************************************
void WINAPI EMUPATCH(D3DDevice_SetFlickerFilter) xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetFlickerFilter)
( (
dword_xt Filter dword_xt Filter
); );
xbox::void_xt __stdcall EMUPATCH(D3DDevice_SetFlickerFilter_0)(); xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetFlickerFilter_0)();
// ****************************************************************** // ******************************************************************
// * patch: D3DDevice_SetSoftDisplayFilter // * patch: D3DDevice_SetSoftDisplayFilter
// ****************************************************************** // ******************************************************************
void WINAPI EMUPATCH(D3DDevice_SetSoftDisplayFilter) xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetSoftDisplayFilter)
( (
bool_xt Enable bool_xt Enable
); );