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.
This commit is contained in:
parent
556a65f1dc
commit
05bae29ec3
|
@ -1 +1 @@
|
|||
Subproject commit ed4a5458feae59f0347f9fb1d921d090d7caa6ac
|
||||
Subproject commit bd11a1d915afb32e077bfb0448b0133387bf553f
|
|
@ -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
|
||||
// ******************************************************************
|
||||
|
|
|
@ -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
|
||||
// ******************************************************************
|
||||
|
|
|
@ -147,6 +147,7 @@ std::map<const std::string, const xbox_patch_t> 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),
|
||||
|
|
Loading…
Reference in New Issue