Fix crash in pixel shaders caused undefined behavior in LTCG handler
This commit is contained in:
parent
9537158007
commit
c79b11109f
|
@ -6806,25 +6806,30 @@ VOID __declspec(noinline) D3DDevice_SetPixelShaderCommon(DWORD Handle)
|
||||||
// This uses a custom calling convention where parameter is passed in EAX
|
// This uses a custom calling convention where parameter is passed in EAX
|
||||||
// Test-case: Metal Wolf Chaos
|
// Test-case: Metal Wolf Chaos
|
||||||
// Test-case: Lord of the Rings: The Third Age
|
// Test-case: Lord of the Rings: The Third Age
|
||||||
VOID WINAPI XTL::EMUPATCH(D3DDevice_SetPixelShader_0)
|
VOID WINAPI D3DDevice_SetPixelShader_0_IMPL
|
||||||
(
|
(
|
||||||
|
DWORD Handle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DWORD Handle;
|
LOG_FUNC_ONE_ARG(Handle);
|
||||||
__asm mov Handle, eax;
|
|
||||||
|
|
||||||
//LOG_FUNC_ONE_ARG(Handle);
|
// Call the Xbox function to make sure D3D structures get set
|
||||||
|
XB_trampoline(VOID, WINAPI, D3DDevice_SetPixelShader_0, ());
|
||||||
EmuLog(LOG_LEVEL::DEBUG, "D3DDevice_SetPixelShader_0(Handle : %d);", Handle);
|
|
||||||
|
|
||||||
// Call the Xbox function to make sure D3D structures get set
|
|
||||||
XB_trampoline(VOID, WINAPI, D3DDevice_SetPixelShader_0, ());
|
|
||||||
__asm {
|
__asm {
|
||||||
mov eax, Handle
|
mov eax, Handle
|
||||||
call XB_D3DDevice_SetPixelShader_0
|
call XB_D3DDevice_SetPixelShader_0
|
||||||
}
|
}
|
||||||
|
|
||||||
D3DDevice_SetPixelShaderCommon(Handle);
|
D3DDevice_SetPixelShaderCommon(Handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID WINAPI XTL::EMUPATCH(D3DDevice_SetPixelShader_0)()
|
||||||
|
{
|
||||||
|
__asm {
|
||||||
|
push eax
|
||||||
|
call D3DDevice_SetPixelShader_0_IMPL
|
||||||
|
ret
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
|
Loading…
Reference in New Issue