add missing patch for D3DDevice_GetBackBuffer2_0__LTCG_eax1
This commit is contained in:
parent
50b969549f
commit
54d3ee11bb
|
@ -300,6 +300,7 @@ g_EmuCDPD;
|
||||||
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_DeleteVertexShader_0, () ); \
|
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_DeleteVertexShader_0, () ); \
|
||||||
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_GetBackBuffer, (xbox::int_xt, D3DBACKBUFFER_TYPE, xbox::X_D3DSurface**) ); \
|
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_GetBackBuffer, (xbox::int_xt, D3DBACKBUFFER_TYPE, xbox::X_D3DSurface**) ); \
|
||||||
XB_MACRO(xbox::X_D3DSurface*, WINAPI, D3DDevice_GetBackBuffer2, (xbox::int_xt) ); \
|
XB_MACRO(xbox::X_D3DSurface*, WINAPI, D3DDevice_GetBackBuffer2, (xbox::int_xt) ); \
|
||||||
|
XB_MACRO(xbox::X_D3DSurface*, WINAPI, D3DDevice_GetBackBuffer2_0__LTCG_eax1, () ); \
|
||||||
XB_MACRO(xbox::hresult_xt, WINAPI, D3DDevice_GetDepthStencilSurface, (xbox::X_D3DSurface**) ); \
|
XB_MACRO(xbox::hresult_xt, WINAPI, D3DDevice_GetDepthStencilSurface, (xbox::X_D3DSurface**) ); \
|
||||||
XB_MACRO(xbox::X_D3DSurface*, WINAPI, D3DDevice_GetDepthStencilSurface2, (xbox::void_xt) ); \
|
XB_MACRO(xbox::X_D3DSurface*, WINAPI, D3DDevice_GetDepthStencilSurface2, (xbox::void_xt) ); \
|
||||||
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_GetDisplayMode, (xbox::X_D3DDISPLAYMODE*) ); \
|
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_GetDisplayMode, (xbox::X_D3DDISPLAYMODE*) ); \
|
||||||
|
@ -3983,18 +3984,14 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_GetGammaRamp)
|
||||||
free(pGammaRamp);
|
free(pGammaRamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ******************************************************************
|
|
||||||
// * patch: D3DDevice_GetBackBuffer2
|
|
||||||
// ******************************************************************
|
|
||||||
#define COPY_BACKBUFFER_TO_XBOX_SURFACE // Uncomment to enable writing Host Backbuffers back to Xbox surfaces
|
#define COPY_BACKBUFFER_TO_XBOX_SURFACE // Uncomment to enable writing Host Backbuffers back to Xbox surfaces
|
||||||
xbox::X_D3DSurface* WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer2)
|
xbox::X_D3DSurface* CxbxrImpl_GetBackBuffer2
|
||||||
(
|
(
|
||||||
int_xt BackBuffer
|
xbox::int_xt BackBuffer
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
LOG_FUNC_ONE_ARG(BackBuffer);
|
xbox::X_D3DSurface* pXboxBackBuffer = nullptr;
|
||||||
|
|
||||||
X_D3DSurface* pXboxBackBuffer = nullptr;
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef COPY_BACKBUFFER_TO_XBOX_SURFACE
|
#ifndef COPY_BACKBUFFER_TO_XBOX_SURFACE
|
||||||
|
@ -4068,9 +4065,16 @@ xbox::X_D3DSurface* WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer2)
|
||||||
if (XB_TRMP(D3DDevice_GetBackBuffer) != nullptr) {
|
if (XB_TRMP(D3DDevice_GetBackBuffer) != nullptr) {
|
||||||
XB_TRMP(D3DDevice_GetBackBuffer)(BackBuffer, D3DBACKBUFFER_TYPE_MONO, &pXboxBackBuffer);
|
XB_TRMP(D3DDevice_GetBackBuffer)(BackBuffer, D3DBACKBUFFER_TYPE_MONO, &pXboxBackBuffer);
|
||||||
}
|
}
|
||||||
else {
|
else if (XB_TRMP(D3DDevice_GetBackBuffer2) != nullptr) {
|
||||||
pXboxBackBuffer = XB_TRMP(D3DDevice_GetBackBuffer2)(BackBuffer);
|
pXboxBackBuffer = XB_TRMP(D3DDevice_GetBackBuffer2)(BackBuffer);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
__asm {
|
||||||
|
mov eax, BackBuffer
|
||||||
|
call XB_TRMP(D3DDevice_GetBackBuffer2_0__LTCG_eax1)
|
||||||
|
mov pXboxBackBuffer, eax
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Now pXboxBackbuffer points to the requested Xbox backbuffer
|
// Now pXboxBackbuffer points to the requested Xbox backbuffer
|
||||||
if (pXboxBackBuffer == nullptr) {
|
if (pXboxBackBuffer == nullptr) {
|
||||||
|
@ -4118,6 +4122,50 @@ xbox::X_D3DSurface* WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer2)
|
||||||
#endif // COPY_BACKBUFFER_TO_XBOX_SURFACE
|
#endif // COPY_BACKBUFFER_TO_XBOX_SURFACE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ******************************************************************
|
||||||
|
// * patch: D3DDevice_GetBackBuffer2
|
||||||
|
// ******************************************************************
|
||||||
|
xbox::X_D3DSurface* WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer2)
|
||||||
|
(
|
||||||
|
int_xt BackBuffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
LOG_FUNC_ONE_ARG(BackBuffer);
|
||||||
|
|
||||||
|
return CxbxrImpl_GetBackBuffer2(BackBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void D3DDevice_GetBackBuffer2_0__LTCG_eax1(xbox::int_xt BackBuffer)
|
||||||
|
{
|
||||||
|
LOG_FUNC_ONE_ARG(BackBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// LTCG specific GetBackBuffer2 function...
|
||||||
|
// This uses a custom calling convention where parameter is passed in EAX
|
||||||
|
__declspec(naked) xbox::X_D3DSurface* WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer2_0__LTCG_eax1)
|
||||||
|
(
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
int_xt BackBuffer;
|
||||||
|
xbox::X_D3DSurface* pBackBuffer;
|
||||||
|
__asm {
|
||||||
|
LTCG_PROLOGUE
|
||||||
|
mov BackBuffer, eax
|
||||||
|
}
|
||||||
|
|
||||||
|
// Log
|
||||||
|
D3DDevice_GetBackBuffer2_0__LTCG_eax1(BackBuffer);
|
||||||
|
|
||||||
|
pBackBuffer = CxbxrImpl_GetBackBuffer2(BackBuffer);
|
||||||
|
|
||||||
|
__asm {
|
||||||
|
mov eax, pBackBuffer
|
||||||
|
LTCG_EPILOGUE
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * patch: D3DDevice_GetBackBuffer
|
// * patch: D3DDevice_GetBackBuffer
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
@ -4130,7 +4178,7 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer)
|
||||||
{
|
{
|
||||||
LOG_FORWARD("D3DDevice_GetBackBuffer2");
|
LOG_FORWARD("D3DDevice_GetBackBuffer2");
|
||||||
|
|
||||||
*ppBackBuffer = EMUPATCH(D3DDevice_GetBackBuffer2)(BackBuffer);
|
*ppBackBuffer = CxbxrImpl_GetBackBuffer2(BackBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetHostRenderTargetDimensions(DWORD *pHostWidth, DWORD *pHostHeight, IDirect3DSurface* pHostRenderTarget = nullptr)
|
bool GetHostRenderTargetDimensions(DWORD *pHostWidth, DWORD *pHostHeight, IDirect3DSurface* pHostRenderTarget = nullptr)
|
||||||
|
|
|
@ -321,6 +321,8 @@ X_D3DSurface* WINAPI EMUPATCH(D3DDevice_GetBackBuffer2)
|
||||||
int_xt BackBuffer
|
int_xt BackBuffer
|
||||||
);
|
);
|
||||||
|
|
||||||
|
X_D3DSurface* WINAPI EMUPATCH(D3DDevice_GetBackBuffer2_0__LTCG_eax1)();
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * patch: D3DDevice_GetBackBuffer
|
// * patch: D3DDevice_GetBackBuffer
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
|
|
@ -85,6 +85,7 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
||||||
PATCH_ENTRY("D3DDevice_FlushVertexCache", xbox::EMUPATCH(D3DDevice_FlushVertexCache), PATCH_HLE_D3D),
|
PATCH_ENTRY("D3DDevice_FlushVertexCache", xbox::EMUPATCH(D3DDevice_FlushVertexCache), PATCH_HLE_D3D),
|
||||||
PATCH_ENTRY("D3DDevice_GetBackBuffer", xbox::EMUPATCH(D3DDevice_GetBackBuffer), PATCH_HLE_D3D),
|
PATCH_ENTRY("D3DDevice_GetBackBuffer", xbox::EMUPATCH(D3DDevice_GetBackBuffer), PATCH_HLE_D3D),
|
||||||
PATCH_ENTRY("D3DDevice_GetBackBuffer2", xbox::EMUPATCH(D3DDevice_GetBackBuffer2), PATCH_HLE_D3D),
|
PATCH_ENTRY("D3DDevice_GetBackBuffer2", xbox::EMUPATCH(D3DDevice_GetBackBuffer2), PATCH_HLE_D3D),
|
||||||
|
PATCH_ENTRY("D3DDevice_GetBackBuffer2_0__LTCG_eax1", xbox::EMUPATCH(D3DDevice_GetBackBuffer2_0__LTCG_eax1), PATCH_HLE_D3D),
|
||||||
PATCH_ENTRY("D3DDevice_GetDisplayFieldStatus", xbox::EMUPATCH(D3DDevice_GetDisplayFieldStatus), PATCH_HLE_D3D),
|
PATCH_ENTRY("D3DDevice_GetDisplayFieldStatus", xbox::EMUPATCH(D3DDevice_GetDisplayFieldStatus), PATCH_HLE_D3D),
|
||||||
PATCH_ENTRY("D3DDevice_GetGammaRamp", xbox::EMUPATCH(D3DDevice_GetGammaRamp), PATCH_HLE_D3D),
|
PATCH_ENTRY("D3DDevice_GetGammaRamp", xbox::EMUPATCH(D3DDevice_GetGammaRamp), PATCH_HLE_D3D),
|
||||||
PATCH_ENTRY("D3DDevice_GetMaterial", xbox::EMUPATCH(D3DDevice_GetMaterial), PATCH_HLE_D3D),
|
PATCH_ENTRY("D3DDevice_GetMaterial", xbox::EMUPATCH(D3DDevice_GetMaterial), PATCH_HLE_D3D),
|
||||||
|
|
Loading…
Reference in New Issue