Merge pull request #2298 from RadWolfie/sync-xbsdb
Sync XbSymbolDatabase + Add Missing Patch
This commit is contained in:
commit
1b10e1b9d4
|
@ -1 +1 @@
|
|||
Subproject commit 02353e8aa552f3db60804626e29838406f206443
|
||||
Subproject commit 75ce58fa8d135ef0a75bee729cde9542eda393b6
|
|
@ -300,6 +300,7 @@ g_EmuCDPD;
|
|||
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::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::X_D3DSurface*, WINAPI, D3DDevice_GetDepthStencilSurface2, (xbox::void_xt) ); \
|
||||
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_GetDisplayMode, (xbox::X_D3DDISPLAYMODE*) ); \
|
||||
|
@ -338,7 +339,7 @@ g_EmuCDPD;
|
|||
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*) ); \
|
||||
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTransform, (xbox::X_D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) ); \
|
||||
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTransform_0, () ); \
|
||||
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_SetTransform_0__LTCG_eax1_edx2, () ); \
|
||||
XB_MACRO(xbox::void_xt, WINAPI, D3DDevice_MultiplyTransform, (xbox::X_D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) ); \
|
||||
XB_MACRO(xbox::void_xt, WINAPI, D3D_DestroyResource, (xbox::X_D3DResource*) ); \
|
||||
XB_MACRO(xbox::void_xt, WINAPI, D3D_DestroyResource__LTCG, (xbox::void_xt) ); \
|
||||
|
@ -3983,18 +3984,14 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_GetGammaRamp)
|
|||
free(pGammaRamp);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_GetBackBuffer2
|
||||
// ******************************************************************
|
||||
|
||||
#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);
|
||||
|
||||
X_D3DSurface* pXboxBackBuffer = nullptr;
|
||||
xbox::X_D3DSurface* pXboxBackBuffer = nullptr;
|
||||
|
||||
|
||||
#ifndef COPY_BACKBUFFER_TO_XBOX_SURFACE
|
||||
|
@ -4068,9 +4065,16 @@ xbox::X_D3DSurface* WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer2)
|
|||
if (XB_TRMP(D3DDevice_GetBackBuffer) != nullptr) {
|
||||
XB_TRMP(D3DDevice_GetBackBuffer)(BackBuffer, D3DBACKBUFFER_TYPE_MONO, &pXboxBackBuffer);
|
||||
}
|
||||
else {
|
||||
else if (XB_TRMP(D3DDevice_GetBackBuffer2) != nullptr) {
|
||||
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
|
||||
if (pXboxBackBuffer == nullptr) {
|
||||
|
@ -4118,6 +4122,50 @@ xbox::X_D3DSurface* WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer2)
|
|||
#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
|
||||
// ******************************************************************
|
||||
|
@ -4130,7 +4178,7 @@ xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_GetBackBuffer)
|
|||
{
|
||||
LOG_FORWARD("D3DDevice_GetBackBuffer2");
|
||||
|
||||
*ppBackBuffer = EMUPATCH(D3DDevice_GetBackBuffer2)(BackBuffer);
|
||||
*ppBackBuffer = CxbxrImpl_GetBackBuffer2(BackBuffer);
|
||||
}
|
||||
|
||||
bool GetHostRenderTargetDimensions(DWORD *pHostWidth, DWORD *pHostHeight, IDirect3DSurface* pHostRenderTarget = nullptr)
|
||||
|
@ -4360,7 +4408,7 @@ void CxbxImpl_SetViewport(xbox::X_D3DVIEWPORT8* pViewport)
|
|||
|
||||
// LTCG specific D3DDevice_SetShaderConstantMode function...
|
||||
// This uses a custom calling convention where parameter is passed in EAX
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetShaderConstantMode_0)
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetShaderConstantMode_0__LTCG_eax1)
|
||||
(
|
||||
)
|
||||
{
|
||||
|
@ -6738,7 +6786,7 @@ static thread_local uint32_t setTransformCount = 0;
|
|||
|
||||
// Naked functions must not contain objects that would require unwinding
|
||||
// so we cheat a bit by stashing the function body in a separate function
|
||||
static void D3DDevice_SetTransform_0
|
||||
static void D3DDevice_SetTransform_0__LTCG_eax1_edx2
|
||||
(
|
||||
xbox::X_D3DTRANSFORMSTATETYPE State,
|
||||
CONST D3DMATRIX *pMatrix
|
||||
|
@ -6755,13 +6803,13 @@ static void D3DDevice_SetTransform_0
|
|||
// Trampoline to guest code to remove the need for a GetTransform patch
|
||||
mov eax, State
|
||||
mov edx, pMatrix
|
||||
call XB_TRMP(D3DDevice_SetTransform_0)
|
||||
call XB_TRMP(D3DDevice_SetTransform_0__LTCG_eax1_edx2)
|
||||
}
|
||||
|
||||
CxbxImpl_SetTransform(State, pMatrix);
|
||||
}
|
||||
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetTransform_0)
|
||||
__declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetTransform_0__LTCG_eax1_edx2)
|
||||
(
|
||||
)
|
||||
{
|
||||
|
@ -6774,7 +6822,7 @@ __declspec(naked) xbox::void_xt WINAPI xbox::EMUPATCH(D3DDevice_SetTransform_0)
|
|||
}
|
||||
|
||||
// Log + implementation
|
||||
D3DDevice_SetTransform_0(State, pMatrix);
|
||||
D3DDevice_SetTransform_0__LTCG_eax1_edx2(State, pMatrix);
|
||||
|
||||
__asm {
|
||||
LTCG_EPILOGUE
|
||||
|
|
|
@ -321,6 +321,8 @@ X_D3DSurface* WINAPI EMUPATCH(D3DDevice_GetBackBuffer2)
|
|||
int_xt BackBuffer
|
||||
);
|
||||
|
||||
X_D3DSurface* WINAPI EMUPATCH(D3DDevice_GetBackBuffer2_0__LTCG_eax1)();
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_GetBackBuffer
|
||||
// ******************************************************************
|
||||
|
@ -366,7 +368,7 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetShaderConstantMode)
|
|||
X_VERTEXSHADERCONSTANTMODE Mode
|
||||
);
|
||||
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetShaderConstantMode_0)();
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetShaderConstantMode_0__LTCG_eax1)();
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_Reset
|
||||
|
@ -1310,7 +1312,7 @@ xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetTransform)
|
|||
CONST D3DMATRIX *pMatrix
|
||||
);
|
||||
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetTransform_0)();
|
||||
xbox::void_xt WINAPI EMUPATCH(D3DDevice_SetTransform_0__LTCG_eax1_edx2)();
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: D3DDevice_MultiplyTransform
|
||||
|
|
|
@ -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_GetBackBuffer", xbox::EMUPATCH(D3DDevice_GetBackBuffer), 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_GetGammaRamp", xbox::EMUPATCH(D3DDevice_GetGammaRamp), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_GetMaterial", xbox::EMUPATCH(D3DDevice_GetMaterial), PATCH_HLE_D3D),
|
||||
|
@ -144,7 +145,7 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
|||
PATCH_ENTRY("D3DDevice_SetRenderTarget_0", xbox::EMUPATCH(D3DDevice_SetRenderTarget_0), PATCH_HLE_D3D),
|
||||
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", xbox::EMUPATCH(D3DDevice_SetShaderConstantMode_0), 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_SetStipple", xbox::EMUPATCH(D3DDevice_SetStipple), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_SetStreamSource", xbox::EMUPATCH(D3DDevice_SetStreamSource), PATCH_HLE_D3D),
|
||||
|
@ -157,7 +158,7 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
|||
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),
|
||||
PATCH_ENTRY("D3DDevice_SetTransform_0__LTCG_eax1_edx2", xbox::EMUPATCH(D3DDevice_SetTransform_0__LTCG_eax1_edx2), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_SetVertexData2f", xbox::EMUPATCH(D3DDevice_SetVertexData2f), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_SetVertexData2s", xbox::EMUPATCH(D3DDevice_SetVertexData2s), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("D3DDevice_SetVertexData4f", xbox::EMUPATCH(D3DDevice_SetVertexData4f), PATCH_HLE_D3D),
|
||||
|
|
Loading…
Reference in New Issue