d3d8ltcg: add D3DDevice_LightEnable_4__LTCG_eax1 patch
This commit is contained in:
parent
433ef5c7f2
commit
540f7a9276
|
@ -313,6 +313,7 @@ g_EmuCDPD;
|
|||
XB_MACRO(xbox::hresult_xt, WINAPI, D3DDevice_GetRenderTarget, (xbox::X_D3DSurface**) ); \
|
||||
XB_MACRO(xbox::X_D3DSurface*, WINAPI, D3DDevice_GetRenderTarget2, (xbox::void_xt) ); \
|
||||
XB_MACRO(xbox::hresult_xt, WINAPI, D3DDevice_LightEnable, (xbox::dword_xt, xbox::bool_xt) ); \
|
||||
XB_MACRO(xbox::hresult_xt, WINAPI, D3DDevice_LightEnable_4__LTCG_eax1, (xbox::bool_xt) ); \
|
||||
/*XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_LoadVertexShader, (xbox::dword_xt, xbox::dword_xt) );*/\
|
||||
/*XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_LoadVertexShaderProgram, (CONST xbox::dword_xt*, xbox::dword_xt) );*/\
|
||||
/*XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_LoadVertexShader_4__LTCG_eax1, (xbox::dword_xt) );*/\
|
||||
|
@ -8604,13 +8605,25 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetMaterial)
|
|||
DEBUG_D3DRESULT(hRet, "g_pD3DDevice->SetMaterial");
|
||||
}
|
||||
|
||||
static HRESULT CxbxrImpl_LightEnable(xbox::dword_xt Index, xbox::bool_xt bEnable)
|
||||
{
|
||||
LOG_INIT;
|
||||
|
||||
d3d8LightState.EnableLight(Index, bEnable);
|
||||
|
||||
HRESULT hRet = g_pD3DDevice->LightEnable(Index, bEnable);
|
||||
DEBUG_D3DRESULT(hRet, "g_pD3DDevice->LightEnable");
|
||||
|
||||
return hRet;
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_LightEnable
|
||||
// ******************************************************************
|
||||
xbox::hresult_xt WINAPI xbox::EMUPATCH(D3DDevice_LightEnable)
|
||||
(
|
||||
dword_xt Index,
|
||||
bool_xt bEnable
|
||||
dword_xt Index,
|
||||
bool_xt bEnable
|
||||
)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
|
@ -8620,14 +8633,58 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(D3DDevice_LightEnable)
|
|||
|
||||
XB_TRMP(D3DDevice_LightEnable)(Index, bEnable);
|
||||
|
||||
d3d8LightState.EnableLight(Index, bEnable);
|
||||
|
||||
HRESULT hRet = g_pD3DDevice->LightEnable(Index, bEnable);
|
||||
DEBUG_D3DRESULT(hRet, "g_pD3DDevice->LightEnable");
|
||||
HRESULT hRet = CxbxrImpl_LightEnable(Index, bEnable);
|
||||
|
||||
return hRet;
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_LightEnable_4__LTCG_eax1
|
||||
// ******************************************************************
|
||||
// Overload for logging
|
||||
static void D3DDevice_LightEnable_4__LTCG_eax1
|
||||
(
|
||||
xbox::dword_xt Index,
|
||||
xbox::bool_xt bEnable
|
||||
)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(Index)
|
||||
LOG_FUNC_ARG(bEnable)
|
||||
LOG_FUNC_END;
|
||||
}
|
||||
|
||||
// This uses a custom calling convention where parameter is passed in EAX
|
||||
__declspec(naked) xbox::hresult_xt WINAPI xbox::EMUPATCH(D3DDevice_LightEnable_4__LTCG_eax1)
|
||||
(
|
||||
bool_xt bEnable
|
||||
)
|
||||
{
|
||||
xbox::dword_xt Index;
|
||||
HRESULT hRet;
|
||||
__asm {
|
||||
LTCG_PROLOGUE
|
||||
mov Index, eax
|
||||
}
|
||||
|
||||
// Log
|
||||
D3DDevice_LightEnable_4__LTCG_eax1(Index, bEnable);
|
||||
|
||||
__asm {
|
||||
push bEnable
|
||||
mov eax, Index
|
||||
call XB_TRMP(D3DDevice_LightEnable_4__LTCG_eax1)
|
||||
}
|
||||
|
||||
hRet = CxbxrImpl_LightEnable(Index, bEnable);
|
||||
|
||||
__asm {
|
||||
mov eax, hRet
|
||||
LTCG_EPILOGUE
|
||||
ret 4
|
||||
}
|
||||
}
|
||||
|
||||
// SetRenderTarget can call CommonSetRenderTarget, nested call detection is required
|
||||
// Test case: Midtown Madness 3
|
||||
static thread_local uint32_t setRenderTargetCount = 0;
|
||||
|
|
|
@ -1556,6 +1556,14 @@ xbox::hresult_xt WINAPI EMUPATCH(D3DDevice_LightEnable)
|
|||
bool_xt bEnable
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_LightEnable_4__LTCG_eax1
|
||||
// ******************************************************************
|
||||
xbox::hresult_xt WINAPI EMUPATCH(D3DDevice_LightEnable_4__LTCG_eax1)
|
||||
(
|
||||
bool_xt bEnable
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_Release
|
||||
// ******************************************************************
|
||||
|
|
|
@ -116,6 +116,7 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
|||
PATCH_ENTRY("D3DDevice_IsBusy", xbox::EMUPATCH(D3DDevice_IsBusy), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_IsFencePending", xbox::EMUPATCH(D3DDevice_IsFencePending), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_LightEnable", xbox::EMUPATCH(D3DDevice_LightEnable), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_LightEnable_4__LTCG_eax1", xbox::EMUPATCH(D3DDevice_LightEnable_4__LTCG_eax1), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_LoadVertexShader", xbox::EMUPATCH(D3DDevice_LoadVertexShader), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_LoadVertexShaderProgram", xbox::EMUPATCH(D3DDevice_LoadVertexShaderProgram), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_LoadVertexShader_0__LTCG_ecx1_eax2", xbox::EMUPATCH(D3DDevice_LoadVertexShader_0__LTCG_ecx1_eax2), PATCH_HLE_D3D),
|
||||
|
|
Loading…
Reference in New Issue