From 24fa7dc935cf3c40192a3b79ee007d44e0a1cb8f Mon Sep 17 00:00:00 2001 From: Silent Date: Mon, 5 Oct 2020 22:57:30 +0200 Subject: [PATCH 1/7] D3DDevice_SetTexture_4: Fix Xbox implementation call --- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index 4e703ae44..5f886db47 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -4318,7 +4318,6 @@ xbox::void_xt __fastcall xbox::EMUPATCH(D3DDevice_SetVertexShaderConstantNotInli // LTCG specific D3DDevice_SetTexture function... // This uses a custom calling convention where parameter is passed in EAX -// TODO: XB_trampoline plus Log function is not working due lost parameter in EAX. // Test-case: Metal Wolf Chaos xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetTexture_4) ( @@ -4335,7 +4334,11 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetTexture_4) EmuLog(LOG_LEVEL::DEBUG, "D3DDevice_SetTexture_4(Stage : %d pTexture : %08x);", Stage, pTexture); // Call the Xbox implementation of this function, to properly handle reference counting for us - //XB_TRMP(D3DDevice_SetTexture_4)(pTexture); + __asm { + mov eax, Stage + push pTexture + call XB_TRMP(D3DDevice_SetTexture_4) + } g_pXbox_SetTexture[Stage] = pTexture; } From 3fdfa89812a43d63ed45da2cd48149d9810f6552 Mon Sep 17 00:00:00 2001 From: Silent Date: Mon, 5 Oct 2020 23:04:49 +0200 Subject: [PATCH 2/7] Implement LTCG D3DDevice::SetTexture for xdk-3911 Test case: NASCAR Heat 2002 --- import/XbSymbolDatabase | 2 +- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 32 +++++++++++++++++++++-- src/core/hle/D3D8/Direct3D9/Direct3D9.h | 5 ++++ src/core/hle/Patches.cpp | 1 + 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/import/XbSymbolDatabase b/import/XbSymbolDatabase index 78d06c0d9..ed4a5458f 160000 --- a/import/XbSymbolDatabase +++ b/import/XbSymbolDatabase @@ -1 +1 @@ -Subproject commit 78d06c0d9d8fe3b5d43e90312fc5910928c9c651 +Subproject commit ed4a5458feae59f0347f9fb1d921d090d7caa6ac diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index 5f886db47..ffd1c8daa 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -295,7 +295,8 @@ g_EmuCDPD = {0}; XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetStreamSource_4, (xbox::uint_xt, xbox::X_D3DVertexBuffer*, xbox::uint_xt) ); \ XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetStreamSource_8, (xbox::X_D3DVertexBuffer*, xbox::uint_xt) ); \ XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTexture, (xbox::dword_xt, xbox::X_D3DBaseTexture*) ); \ - XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTexture_4, (xbox::X_D3DBaseTexture*) ); \ + XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTexture_4__LTCG_eax_pTexture, (xbox::dword_xt) ); \ + XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTexture_4, (xbox::X_D3DBaseTexture*) ); \ /*XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetVertexShader, (xbox::dword_xt) );*/\ /*XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetVertexShaderInput, (xbox::dword_xt, xbox::uint_xt, xbox::X_STREAMINPUT*) );*/\ XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetViewport, (CONST xbox::X_D3DVIEWPORT8*) ); \ @@ -4317,7 +4318,34 @@ xbox::void_xt __fastcall xbox::EMUPATCH(D3DDevice_SetVertexShaderConstantNotInli } // LTCG specific D3DDevice_SetTexture function... -// This uses a custom calling convention where parameter is passed in EAX +// This uses a custom calling convention where pTexture is passed in EAX +// Test-case: NASCAR Heat 2002 +xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetTexture_4__LTCG_eax_pTexture) +( + dword_xt Stage +) +{ + X_D3DBaseTexture *pTexture; + __asm mov pTexture, eax; + + //LOG_FUNC_BEGIN + // LOG_FUNC_ARG(Stage) + // LOG_FUNC_ARG(pTexture) + // LOG_FUNC_END; + EmuLog(LOG_LEVEL::DEBUG, "D3DDevice_SetTexture_4__LTCG_eax_pTexture(Stage : %d pTexture : %08x);", Stage, pTexture); + + // Call the Xbox implementation of this function, to properly handle reference counting for us + __asm { + mov eax, pTexture + push Stage + call XB_TRMP(D3DDevice_SetTexture_4__LTCG_eax_pTexture) + } + + g_pXbox_SetTexture[Stage] = pTexture; +} + +// LTCG specific D3DDevice_SetTexture function... +// This uses a custom calling convention where Stage is passed in EAX // Test-case: Metal Wolf Chaos xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetTexture_4) ( diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.h b/src/core/hle/D3D8/Direct3D9/Direct3D9.h index 83306448f..4ccf40436 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.h +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.h @@ -619,6 +619,11 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetTexture) X_D3DBaseTexture *pTexture ); +xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetTexture_4__LTCG_eax_pTexture) +( + dword_xt Stage +); + xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetTexture_4) ( X_D3DBaseTexture *pTexture diff --git a/src/core/hle/Patches.cpp b/src/core/hle/Patches.cpp index 39201e985..68bd55856 100644 --- a/src/core/hle/Patches.cpp +++ b/src/core/hle/Patches.cpp @@ -149,6 +149,7 @@ std::map g_PatchTable = { PATCH_ENTRY("D3DDevice_SetStreamSource_8", xbox::EMUPATCH(D3DDevice_SetStreamSource_8), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetSwapCallback", xbox::EMUPATCH(D3DDevice_SetSwapCallback), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetTexture", xbox::EMUPATCH(D3DDevice_SetTexture), PATCH_HLE_D3D), + PATCH_ENTRY("D3DDevice_SetTexture_4__LTCG_eax_pTexture", xbox::EMUPATCH(D3DDevice_SetTexture_4__LTCG_eax_pTexture), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetTexture_4", xbox::EMUPATCH(D3DDevice_SetTexture_4), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetTransform", xbox::EMUPATCH(D3DDevice_SetTransform), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetTransform_0", xbox::EMUPATCH(D3DDevice_SetTransform_0), PATCH_HLE_D3D), From 556a65f1dcc80c4376e44ac88eabdb4083bb6c6d Mon Sep 17 00:00:00 2001 From: Silent Date: Tue, 6 Oct 2020 19:12:17 +0200 Subject: [PATCH 3/7] Fix wrong D3DDevice_SetVertexShaderConstant_8 implementation The assumption that one of the parameters has to be taken from EDX was correct, but the function was not implemented properly --- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 27 ++++++++++------------- src/core/hle/D3D8/Direct3D9/Direct3D9.h | 9 +++++++- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index ffd1c8daa..3562e4a5d 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -4189,26 +4189,23 @@ xbox::hresult_xt WINAPI xbox::EMUPATCH(D3DDevice_CreateVertexShader) } // LTCG specific D3DDevice_SetVertexShaderConstant function... -// This uses a custom calling convention where parameter is passed in EDX +// This uses a custom calling convention where ConstantCount parameter is passed in EDX // Test-case: Murakumo -xbox::void_xt __stdcall xbox::EMUPATCH(D3DDevice_SetVertexShaderConstant_8) +xbox::void_xt __fastcall xbox::EMUPATCH(D3DDevice_SetVertexShaderConstant_8) ( + void*, + dword_xt ConstantCount, + int_xt Register, + CONST PVOID pConstantData ) { - static uint32_t returnAddr; + LOG_FUNC_BEGIN + LOG_FUNC_ARG(Register) + LOG_FUNC_ARG(pConstantData) + LOG_FUNC_ARG(ConstantCount) + LOG_FUNC_END; -#ifdef _DEBUG_TRACE - __asm add esp, 4 -#endif - - __asm { - pop returnAddr - push edx - call EmuPatch_D3DDevice_SetVertexShaderConstant - mov eax, 0 - push returnAddr - ret - } + CxbxImpl_SetVertexShaderConstant(Register, pConstantData, ConstantCount); } // ****************************************************************** diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.h b/src/core/hle/D3D8/Direct3D9/Direct3D9.h index 4ccf40436..f2ec5c764 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.h +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.h @@ -444,7 +444,14 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetVertexShaderConstant) dword_xt ConstantCount ); -xbox::void_xt __stdcall EMUPATCH(D3DDevice_SetVertexShaderConstant_8)(); +xbox::void_xt __fastcall EMUPATCH(D3DDevice_SetVertexShaderConstant_8) +( + void*, + dword_xt ConstantCount, + int_xt Register, + CONST PVOID pConstantData +); + // ****************************************************************** // * patch: D3DDevice_SetVertexShaderConstant1 From 05bae29ec34b1d109f8896e3f5e3598c7a6311fe Mon Sep 17 00:00:00 2001 From: Silent Date: Tue, 6 Oct 2020 20:15:14 +0200 Subject: [PATCH 4/7] Add a proper D3DDevice_SetStreamSource for xdk-391 LTCG The signature was correct, but it was redirecting to a wrong version of SetStreamSource. The correct version passes the first argument in EDX. --- import/XbSymbolDatabase | 2 +- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 24 +++++++++++++++++++++++ src/core/hle/D3D8/Direct3D9/Direct3D9.h | 8 ++++++++ src/core/hle/Patches.cpp | 1 + 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/import/XbSymbolDatabase b/import/XbSymbolDatabase index ed4a5458f..bd11a1d91 160000 --- a/import/XbSymbolDatabase +++ b/import/XbSymbolDatabase @@ -1 +1 @@ -Subproject commit ed4a5458feae59f0347f9fb1d921d090d7caa6ac +Subproject commit bd11a1d915afb32e077bfb0448b0133387bf553f diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index 3562e4a5d..c4f08298c 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -294,6 +294,7 @@ g_EmuCDPD = {0}; XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetStreamSource, (xbox::uint_xt, xbox::X_D3DVertexBuffer*, xbox::uint_xt) ); \ XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetStreamSource_4, (xbox::uint_xt, xbox::X_D3DVertexBuffer*, xbox::uint_xt) ); \ XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetStreamSource_8, (xbox::X_D3DVertexBuffer*, xbox::uint_xt) ); \ + XB_MACRO(xbox::void_xt, __fastcall, D3DDevice_SetStreamSource_8__LTCG_edx_StreamNumber, (void*, xbox::uint_xt, xbox::X_D3DVertexBuffer*, xbox::uint_xt) ); \ XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTexture, (xbox::dword_xt, xbox::X_D3DBaseTexture*) ); \ XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTexture_4__LTCG_eax_pTexture, (xbox::dword_xt) ); \ XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTexture_4, (xbox::X_D3DBaseTexture*) ); \ @@ -6640,6 +6641,29 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetStreamSource_8) //XB_TRMP(D3DDevice_SetStreamSource_8)(pStreamData, Stride); } +// This uses a custom calling convention where StreamNumber parameter is passed in EDX +// Test-case: NASCAR Heat 2002 +xbox::void_xt __fastcall xbox::EMUPATCH(D3DDevice_SetStreamSource_8__LTCG_edx_StreamNumber) +( + void*, + uint_xt StreamNumber, + X_D3DVertexBuffer *pStreamData, + uint_xt Stride +) +{ + LOG_FUNC_BEGIN + LOG_FUNC_ARG(StreamNumber) + LOG_FUNC_ARG(pStreamData) + LOG_FUNC_ARG(Stride) + LOG_FUNC_END; + + CxbxImpl_SetStreamSource(StreamNumber, pStreamData, Stride); + + // Forward to Xbox implementation + // This should stop us having to patch GetStreamSource! + XB_TRMP(D3DDevice_SetStreamSource_8__LTCG_edx_StreamNumber)(nullptr, StreamNumber, pStreamData, Stride); +} + // ****************************************************************** // * patch: D3DDevice_SetStreamSource // ****************************************************************** diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.h b/src/core/hle/D3D8/Direct3D9/Direct3D9.h index f2ec5c764..f1b9cbda4 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.h +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.h @@ -1384,6 +1384,14 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetStreamSource_8) uint_xt Stride ); +xbox::void_xt __fastcall EMUPATCH(D3DDevice_SetStreamSource_8__LTCG_edx_StreamNumber) +( + void*, + uint_xt StreamNumber, + X_D3DVertexBuffer *pStreamData, + uint_xt Stride +); + // ****************************************************************** // * patch: D3DDevice_SetVertexShader // ****************************************************************** diff --git a/src/core/hle/Patches.cpp b/src/core/hle/Patches.cpp index 68bd55856..ccbbbc491 100644 --- a/src/core/hle/Patches.cpp +++ b/src/core/hle/Patches.cpp @@ -147,6 +147,7 @@ std::map g_PatchTable = { PATCH_ENTRY("D3DDevice_SetStreamSource", xbox::EMUPATCH(D3DDevice_SetStreamSource), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetStreamSource_4", xbox::EMUPATCH(D3DDevice_SetStreamSource_4), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetStreamSource_8", xbox::EMUPATCH(D3DDevice_SetStreamSource_8), PATCH_HLE_D3D), + PATCH_ENTRY("D3DDevice_SetStreamSource_8__LTCG_edx_StreamNumber", xbox::EMUPATCH(D3DDevice_SetStreamSource_8__LTCG_edx_StreamNumber), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetSwapCallback", xbox::EMUPATCH(D3DDevice_SetSwapCallback), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetTexture", xbox::EMUPATCH(D3DDevice_SetTexture), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetTexture_4__LTCG_eax_pTexture", xbox::EMUPATCH(D3DDevice_SetTexture_4__LTCG_eax_pTexture), PATCH_HLE_D3D), From 13d79192c8e66b0715332487a1d86dfe116c20bf Mon Sep 17 00:00:00 2001 From: Silent Date: Wed, 7 Oct 2020 18:56:29 +0200 Subject: [PATCH 5/7] Implemented D3DDevice_DrawVerticesUP_12 LTCG version of D3DDevice_DrawVerticesUP which passes pVertexStreamZeroData in EBX --- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 18 ++++++++++++++++++ src/core/hle/D3D8/Direct3D9/Direct3D9.h | 8 ++++++++ src/core/hle/Patches.cpp | 1 + 3 files changed, 27 insertions(+) diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index c4f08298c..790eab9bb 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -7489,6 +7489,24 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP) CxbxHandleXboxCallbacks(); } +// LTCG specific D3DDevice_DrawVerticesUP function... +// This uses a custom calling convention where pVertexStreamZeroData is passed in EBX +// Test-case: NASCAR Heat 20002 +xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12) +( + X_D3DPRIMITIVETYPE PrimitiveType, + uint_xt VertexCount, + uint_xt VertexStreamZeroStride +) +{ + PVOID pVertexStreamZeroData; + __asm mov pVertexStreamZeroData, ebx + + LOG_FORWARD("D3DDevice_DrawVerticesUP"); + + EMUPATCH(D3DDevice_DrawVerticesUP)(PrimitiveType, VertexCount, pVertexStreamZeroData, VertexStreamZeroStride); +} + // ****************************************************************** // * patch: D3DDevice_DrawIndexedVertices // ****************************************************************** diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.h b/src/core/hle/D3D8/Direct3D9/Direct3D9.h index f1b9cbda4..cf2c72b19 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.h +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.h @@ -1429,6 +1429,14 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVerticesUP) uint_xt VertexStreamZeroStride ); +xbox::void_xt WINAPI EMUPATCH(D3DDevice_DrawVerticesUP_12) +( + X_D3DPRIMITIVETYPE PrimitiveType, + uint_xt VertexCount, + uint_xt VertexStreamZeroStride +); + + // ****************************************************************** // * patch: D3DDevice_DrawIndexedVertices // ****************************************************************** diff --git a/src/core/hle/Patches.cpp b/src/core/hle/Patches.cpp index ccbbbc491..deeff679f 100644 --- a/src/core/hle/Patches.cpp +++ b/src/core/hle/Patches.cpp @@ -74,6 +74,7 @@ std::map g_PatchTable = { PATCH_ENTRY("D3DDevice_DrawVertices", xbox::EMUPATCH(D3DDevice_DrawVertices), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_DrawVertices_4", xbox::EMUPATCH(D3DDevice_DrawVertices_4), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_DrawVerticesUP", xbox::EMUPATCH(D3DDevice_DrawVerticesUP), PATCH_HLE_D3D), + PATCH_ENTRY("D3DDevice_DrawVerticesUP_12", xbox::EMUPATCH(D3DDevice_DrawVerticesUP_12), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_EnableOverlay", xbox::EMUPATCH(D3DDevice_EnableOverlay), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_End", xbox::EMUPATCH(D3DDevice_End), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_EndPush", xbox::EMUPATCH(D3DDevice_EndPush), PATCH_HLE_D3D), From 665dc378774ac1e3a124defaa578e6be9b57c823 Mon Sep 17 00:00:00 2001 From: Silent Date: Wed, 7 Oct 2020 19:11:02 +0200 Subject: [PATCH 6/7] Implemented D3DDevice_SetVertexShader_0 LTCG version of D3DDevice_SetVertexShader which passes Handle in EBX --- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 14 ++++++++++++++ src/core/hle/D3D8/Direct3D9/Direct3D9.h | 2 ++ src/core/hle/Patches.cpp | 1 + 3 files changed, 17 insertions(+) diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index 790eab9bb..3fb235cca 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -6702,6 +6702,20 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetVertexShader) UpdateViewPortOffsetAndScaleConstants(); } +// This uses a custom calling convention where Handle is passed in EBX +// Test-case: NASCAR Heat 2002 +xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetVertexShader_0)() +{ + dword_xt Handle; + __asm mov Handle, ebx + + LOG_FUNC_ONE_ARG(Handle); + + CxbxImpl_SetVertexShader(Handle); + + UpdateViewPortOffsetAndScaleConstants(); +} + // TODO : Move to own file constexpr unsigned int IndicesPerPage = PAGE_SIZE / sizeof(INDEX16); constexpr unsigned int InputQuadsPerPage = ((IndicesPerPage * VERTICES_PER_QUAD) / VERTICES_PER_TRIANGLE) / TRIANGLES_PER_QUAD; diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.h b/src/core/hle/D3D8/Direct3D9/Direct3D9.h index cf2c72b19..9232494c3 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.h +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.h @@ -1400,6 +1400,8 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetVertexShader) dword_xt Handle ); +xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetVertexShader_0)(); + // ****************************************************************** // * patch: D3DDevice_DrawVertices // ****************************************************************** diff --git a/src/core/hle/Patches.cpp b/src/core/hle/Patches.cpp index deeff679f..3fef16dfa 100644 --- a/src/core/hle/Patches.cpp +++ b/src/core/hle/Patches.cpp @@ -163,6 +163,7 @@ std::map g_PatchTable = { PATCH_ENTRY("D3DDevice_SetVertexData4ub", xbox::EMUPATCH(D3DDevice_SetVertexData4ub), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetVertexDataColor", xbox::EMUPATCH(D3DDevice_SetVertexDataColor), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetVertexShader", xbox::EMUPATCH(D3DDevice_SetVertexShader), PATCH_HLE_D3D), + PATCH_ENTRY("D3DDevice_SetVertexShader_0", xbox::EMUPATCH(D3DDevice_SetVertexShader_0), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetVertexShaderConstant", xbox::EMUPATCH(D3DDevice_SetVertexShaderConstant), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetVertexShaderConstant1", xbox::EMUPATCH(D3DDevice_SetVertexShaderConstant1), PATCH_HLE_D3D), PATCH_ENTRY("D3DDevice_SetVertexShaderConstant1Fast", xbox::EMUPATCH(D3DDevice_SetVertexShaderConstant1Fast), PATCH_HLE_D3D), From ec8c930ebcf299550002617c7cfaa3ef0097a658 Mon Sep 17 00:00:00 2001 From: Silent Date: Fri, 9 Oct 2020 17:39:25 +0200 Subject: [PATCH 7/7] Update XbSymbolDatabase submodule Add a signature for D3DDevice_DrawIndexedVertices for xdk-3911 LTCG --- import/XbSymbolDatabase | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/import/XbSymbolDatabase b/import/XbSymbolDatabase index bd11a1d91..e6df7d427 160000 --- a/import/XbSymbolDatabase +++ b/import/XbSymbolDatabase @@ -1 +1 @@ -Subproject commit bd11a1d915afb32e077bfb0448b0133387bf553f +Subproject commit e6df7d42775fc35ae0dec546f94c5c40452cec02