From 1b155413e326446ab2a00659f8d8091ffd8777e9 Mon Sep 17 00:00:00 2001 From: RadWolfie Date: Fri, 18 Jul 2025 01:09:34 -0500 Subject: [PATCH] d3d8: unpatch D3DDevice_SetFlickerFilter and D3DDevice_SetSoftDisplayFilter --- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 47 ------------------- .../Direct3D9/Direct3D9.cpp.unused-patches | 47 +++++++++++++++++++ src/core/hle/Patches.cpp | 6 +-- src/core/kernel/exports/EmuKrnlAv.cpp | 2 + 4 files changed, 52 insertions(+), 50 deletions(-) diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index 4bff3f4f5..18cc6e34c 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -8520,53 +8520,6 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetPalette) CxbxImpl_SetPalette(Stage, pPalette); } -// LTCG specific D3DDevice_SetFlickerFilter function... -// This uses a custom calling convention where parameter is passed in ESI -// Test-case: Metal Wolf Chaos -__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetFlickerFilter_0__LTCG_esi1) -( -) -{ - dword_xt Filter; - __asm { - LTCG_PROLOGUE - mov Filter, esi - } - - EMUPATCH(D3DDevice_SetFlickerFilter)(Filter); - - __asm { - LTCG_EPILOGUE - ret - } -} - -// ****************************************************************** -// * patch: D3DDevice_SetFlickerFilter -// ****************************************************************** -void WINAPI xbox::EMUPATCH(D3DDevice_SetFlickerFilter) -( - dword_xt Filter -) -{ - LOG_FUNC_ONE_ARG(Filter); - - LOG_IGNORED(); -} - -// ****************************************************************** -// * patch: D3DDevice_SetSoftDisplayFilter -// ****************************************************************** -void WINAPI xbox::EMUPATCH(D3DDevice_SetSoftDisplayFilter) -( - bool_xt Enable -) -{ - LOG_FUNC_ONE_ARG(Enable); - - LOG_IGNORED(); -} - // Overload for logging static void D3DDevice_DeleteVertexShader_0__LTCG_eax1 ( diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp.unused-patches b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp.unused-patches index 0783f0ae2..1e65d9817 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp.unused-patches +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp.unused-patches @@ -4280,3 +4280,50 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetVerticalBlankCallback) g_pXbox_VerticalBlankCallback = pCallback; } + +// LTCG specific D3DDevice_SetFlickerFilter function... +// This uses a custom calling convention where parameter is passed in ESI +// Test-case: Metal Wolf Chaos +__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetFlickerFilter_0__LTCG_esi1) +( +) +{ + dword_xt Filter; + __asm { + LTCG_PROLOGUE + mov Filter, esi + } + + EMUPATCH(D3DDevice_SetFlickerFilter)(Filter); + + __asm { + LTCG_EPILOGUE + ret + } +} + +// ****************************************************************** +// * patch: D3DDevice_SetFlickerFilter +// ****************************************************************** +void WINAPI xbox::EMUPATCH(D3DDevice_SetFlickerFilter) +( + dword_xt Filter +) +{ + LOG_FUNC_ONE_ARG(Filter); + + LOG_IGNORED(); +} + +// ****************************************************************** +// * patch: D3DDevice_SetSoftDisplayFilter +// ****************************************************************** +void WINAPI xbox::EMUPATCH(D3DDevice_SetSoftDisplayFilter) +( + bool_xt Enable +) +{ + LOG_FUNC_ONE_ARG(Enable); + + LOG_IGNORED(); +} diff --git a/src/core/hle/Patches.cpp b/src/core/hle/Patches.cpp index 10852a982..3a19770b6 100644 --- a/src/core/hle/Patches.cpp +++ b/src/core/hle/Patches.cpp @@ -135,8 +135,8 @@ std::map g_PatchTable = { PATCH_ENTRY("D3DDevice_SelectVertexShader_4__LTCG_eax1", xbox::EMUPATCH(D3DDevice_SelectVertexShader_4__LTCG_eax1), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetBackBufferScale", xbox::EMUPATCH(D3DDevice_SetBackBufferScale), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetDepthClipPlanes", xbox::EMUPATCH(D3DDevice_SetDepthClipPlanes), PATCH_HLE_D3D), - PATCH_ENTRY("D3DDevice_SetFlickerFilter", xbox::EMUPATCH(D3DDevice_SetFlickerFilter), PATCH_HLE_D3D), - PATCH_ENTRY("D3DDevice_SetFlickerFilter_0__LTCG_esi1", xbox::EMUPATCH(D3DDevice_SetFlickerFilter_0__LTCG_esi1), PATCH_HLE_D3D), + //PATCH_ENTRY("D3DDevice_SetFlickerFilter", xbox::EMUPATCH(D3DDevice_SetFlickerFilter), PATCH_HLE_D3D), + //PATCH_ENTRY("D3DDevice_SetFlickerFilter_0__LTCG_esi1", xbox::EMUPATCH(D3DDevice_SetFlickerFilter_0__LTCG_esi1), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetGammaRamp", xbox::EMUPATCH(D3DDevice_SetGammaRamp), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetIndices", xbox::EMUPATCH(D3DDevice_SetIndices), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetIndices_4__LTCG_ebx1", xbox::EMUPATCH(D3DDevice_SetIndices_4__LTCG_ebx1), PATCH_HLE_D3D), @@ -156,7 +156,7 @@ std::map g_PatchTable = { PATCH_ENTRY("D3DDevice_SetScreenSpaceOffset", xbox::EMUPATCH(D3DDevice_SetScreenSpaceOffset), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetShaderConstantMode", xbox::EMUPATCH(D3DDevice_SetShaderConstantMode), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetShaderConstantMode_0__LTCG_eax1", xbox::EMUPATCH(D3DDevice_SetShaderConstantMode_0__LTCG_eax1), PATCH_HLE_D3D), - PATCH_ENTRY("D3DDevice_SetSoftDisplayFilter", xbox::EMUPATCH(D3DDevice_SetSoftDisplayFilter), PATCH_HLE_D3D), + //PATCH_ENTRY("D3DDevice_SetSoftDisplayFilter", xbox::EMUPATCH(D3DDevice_SetSoftDisplayFilter), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetStipple", xbox::EMUPATCH(D3DDevice_SetStipple), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetStreamSource", xbox::EMUPATCH(D3DDevice_SetStreamSource), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetStreamSource_0__LTCG_eax1_edi2_ebx3", xbox::EMUPATCH(D3DDevice_SetStreamSource_0__LTCG_eax1_edi2_ebx3), PATCH_HLE_D3D), diff --git a/src/core/kernel/exports/EmuKrnlAv.cpp b/src/core/kernel/exports/EmuKrnlAv.cpp index 84ee2ef92..adaa1f226 100644 --- a/src/core/kernel/exports/EmuKrnlAv.cpp +++ b/src/core/kernel/exports/EmuKrnlAv.cpp @@ -211,6 +211,7 @@ XBSYSAPI EXPORTNUM(2) xbox::void_xt NTAPI xbox::AvSendTVEncoderOption LOG_UNIMPLEMENTED(); break; case AV_OPTION_FLICKER_FILTER: + // Test case: Is called from AvSetDisplayMode (kernel) and D3DDevice_SetFlickerFilter (D3D8) functions. LOG_UNIMPLEMENTED(); break; case AV_OPTION_ZERO_MODE: @@ -220,6 +221,7 @@ XBSYSAPI EXPORTNUM(2) xbox::void_xt NTAPI xbox::AvSendTVEncoderOption LOG_UNIMPLEMENTED(); break; case AV_OPTION_ENABLE_LUMA_FILTER: + // Test case: Is called from AvSetDisplayMode (kernel) and D3DDevice_SetSoftDisplayFilter (D3D8) functions. LOG_UNIMPLEMENTED(); break; case AV_OPTION_GUESS_FIELD: