d3d8ltcg: add D3DDevice_UpdateOverlay_16__LTCG_eax2 patch

This commit is contained in:
RadWolfie 2025-07-22 21:20:24 -05:00
parent b446452feb
commit da8d26af40
3 changed files with 90 additions and 17 deletions

View File

@ -6487,25 +6487,16 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_EnableOverlay_0__LTCG)()
CxbxrImpl_EnableOverlay();
}
// ******************************************************************
// * patch: D3DDevice_UpdateOverlay
// ******************************************************************
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_UpdateOverlay)
static void CxbxrImpl_UpdateOverlay
(
X_D3DSurface *pSurface,
CONST RECT *SrcRect,
CONST RECT *DstRect,
bool_xt EnableColorKey,
D3DCOLOR ColorKey
xbox::X_D3DSurface *pSurface,
CONST RECT *SrcRect,
CONST RECT *DstRect,
xbox::bool_xt EnableColorKey,
D3DCOLOR ColorKey
)
{
LOG_FUNC_BEGIN
LOG_FUNC_ARG(pSurface)
LOG_FUNC_ARG(SrcRect)
LOG_FUNC_ARG(DstRect)
LOG_FUNC_ARG(EnableColorKey)
LOG_FUNC_ARG(ColorKey)
LOG_FUNC_END;
using namespace xbox;
// Reset and remember the overlay arguments, so our D3DDevice_Swap patch
// can correctly show this overlay surface data.
@ -6530,6 +6521,76 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_UpdateOverlay)
}
}
// ******************************************************************
// * patch: D3DDevice_UpdateOverlay
// ******************************************************************
xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_UpdateOverlay)
(
X_D3DSurface *pSurface,
CONST RECT *SrcRect,
CONST RECT *DstRect,
bool_xt EnableColorKey,
D3DCOLOR ColorKey
)
{
LOG_FUNC_BEGIN
LOG_FUNC_ARG(pSurface)
LOG_FUNC_ARG(SrcRect)
LOG_FUNC_ARG(DstRect)
LOG_FUNC_ARG(EnableColorKey)
LOG_FUNC_ARG(ColorKey)
LOG_FUNC_END;
CxbxrImpl_UpdateOverlay(pSurface, SrcRect, DstRect, EnableColorKey, ColorKey);
}
// ******************************************************************
// * patch: D3DDevice_UpdateOverlay_16__LTCG_eax2
// ******************************************************************
static void D3DDevice_UpdateOverlay_16__LTCG_eax2
(
xbox::X_D3DSurface *pSurface,
CONST RECT *SrcRect,
CONST RECT *DstRect,
xbox::bool_xt EnableColorKey,
D3DCOLOR ColorKey
)
{
LOG_FUNC_BEGIN
LOG_FUNC_ARG(pSurface)
LOG_FUNC_ARG(SrcRect)
LOG_FUNC_ARG(DstRect)
LOG_FUNC_ARG(EnableColorKey)
LOG_FUNC_ARG(ColorKey)
LOG_FUNC_END;
}
// This uses a custom calling convention where parameter is passed in EAX
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_UpdateOverlay_16__LTCG_eax2)
(
X_D3DSurface *pSurface,
CONST RECT *DstRect,
bool_xt EnableColorKey,
D3DCOLOR ColorKey
)
{
RECT* SrcRect;
__asm {
LTCG_PROLOGUE
mov SrcRect, eax
}
// Log
D3DDevice_UpdateOverlay_16__LTCG_eax2(pSurface, SrcRect, DstRect, EnableColorKey, ColorKey);
CxbxrImpl_UpdateOverlay(pSurface, SrcRect, DstRect, EnableColorKey, ColorKey);
__asm {
LTCG_EPILOGUE
ret 16
}
}
// ******************************************************************
// * patch: D3DDevice_GetOverlayUpdateStatus
// ******************************************************************

View File

@ -999,7 +999,18 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_UpdateOverlay)
X_D3DSurface *pSurface,
CONST RECT *SrcRect,
CONST RECT *DstRect,
bool_xt EnableColorKey,
bool_xt EnableColorKey,
D3DCOLOR ColorKey
);
// ******************************************************************
// * patch: D3DDevice_UpdateOverlay
// ******************************************************************
xbox::void_xt WINAPI EMUPATCH(D3DDevice_UpdateOverlay_16__LTCG_eax2)
(
X_D3DSurface *pSurface,
CONST RECT *DstRect,
bool_xt EnableColorKey,
D3DCOLOR ColorKey
);

View File

@ -194,6 +194,7 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
PATCH_ENTRY("D3DDevice_Swap_0__LTCG_eax1", xbox::EMUPATCH(D3DDevice_Swap_0__LTCG_eax1), PATCH_HLE_D3D),
PATCH_ENTRY("D3DDevice_SwitchTexture", xbox::EMUPATCH(D3DDevice_SwitchTexture), PATCH_HLE_D3D),
PATCH_ENTRY("D3DDevice_UpdateOverlay", xbox::EMUPATCH(D3DDevice_UpdateOverlay), PATCH_HLE_D3D),
PATCH_ENTRY("D3DDevice_UpdateOverlay_16__LTCG_eax2", xbox::EMUPATCH(D3DDevice_UpdateOverlay_16__LTCG_eax2), PATCH_HLE_D3D),
PATCH_ENTRY("D3DResource_BlockUntilNotBusy", xbox::EMUPATCH(D3DResource_BlockUntilNotBusy), PATCH_HLE_D3D),
PATCH_ENTRY("D3D_BlockOnTime", xbox::EMUPATCH(D3D_BlockOnTime), PATCH_HLE_D3D),
PATCH_ENTRY("D3D_BlockOnTime_4__LTCG_eax1", xbox::EMUPATCH(D3D_BlockOnTime_4__LTCG_eax1), PATCH_HLE_D3D),