initialize commits of scan locate D3DDeferredRenderState D3DDeferredTextureState
This commit is contained in:
parent
a72cfb8191
commit
064a3173d9
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
#include "OOVPA.h"
|
#include "OOVPA.h"
|
||||||
|
|
||||||
extern LOOVPA<1+10> D3DDevice_SetTextureState_TexCoordIndex_4361;
|
extern LOOVPA<1+10> D3DDevice_SetTextureState_TexCoordIndex_4242;
|
||||||
|
|
||||||
extern OOVPATable D3D8_4361[];
|
extern OOVPATable D3D8_4361[];
|
||||||
extern uint32 D3D8_4361_SIZE;
|
extern uint32 D3D8_4361_SIZE;
|
||||||
|
|
|
@ -595,7 +595,7 @@ OOVPA_END;
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * D3DDevice_SetTextureState_TexCoordIndex
|
// * D3DDevice_SetTextureState_TexCoordIndex
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
OOVPA_XREF(D3DDevice_SetTextureState_TexCoordIndex, 4361, 1+10,
|
OOVPA_XREF(D3DDevice_SetTextureState_TexCoordIndex, 4242, 1+10,
|
||||||
|
|
||||||
XRefNoSaveIndex,
|
XRefNoSaveIndex,
|
||||||
XRefOne)
|
XRefOne)
|
||||||
|
@ -1242,7 +1242,7 @@ OOVPATable D3D8_4361[] = {
|
||||||
REGISTER_OOVPA(D3DDevice_EnableOverlay, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_EnableOverlay, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_UpdateOverlay, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_UpdateOverlay, 4361, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_BlockUntilVerticalBlank, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_BlockUntilVerticalBlank, 4361, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4242, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 4134, PATCH),
|
||||||
|
|
|
@ -645,7 +645,7 @@ OOVPATable D3D8_4432[] {
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_BackFillMode, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_BackFillMode, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4242, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_FrontFace, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_FrontFace, 4134, PATCH),
|
||||||
|
|
|
@ -36,7 +36,9 @@
|
||||||
|
|
||||||
#include "OOVPA.h"
|
#include "OOVPA.h"
|
||||||
|
|
||||||
|
#if 0 // No longer used, replaced by generic 4034 version
|
||||||
extern LOOVPA<2+13> D3DDevice_SetRenderState_CullMode_5233;
|
extern LOOVPA<2+13> D3DDevice_SetRenderState_CullMode_5233;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern OOVPATable D3D8_5233[];
|
extern OOVPATable D3D8_5233[];
|
||||||
extern uint32 D3D8_5233_SIZE;
|
extern uint32 D3D8_5233_SIZE;
|
||||||
|
|
|
@ -123,7 +123,7 @@ OOVPA_NO_XREF(D3DDevice_CreateTexture2, 5233, 12)
|
||||||
{ 0xB2, 0xC2 },
|
{ 0xB2, 0xC2 },
|
||||||
{ 0xB3, 0x1C },
|
{ 0xB3, 0x1C },
|
||||||
OOVPA_END;
|
OOVPA_END;
|
||||||
|
#if 0 // No longer used, replaced by generic 4034 version
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * D3DDevice_SetRenderState_CullMode
|
// * D3DDevice_SetRenderState_CullMode
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
@ -156,6 +156,7 @@ OOVPA_XREF(D3DDevice_SetRenderState_CullMode, 5233, 2+13,
|
||||||
{ 0x55, 0x04 },
|
{ 0x55, 0x04 },
|
||||||
{ 0x56, 0x04 },
|
{ 0x56, 0x04 },
|
||||||
OOVPA_END;
|
OOVPA_END;
|
||||||
|
#endif
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * D3DDevice_SetTexture
|
// * D3DDevice_SetTexture
|
||||||
|
@ -662,7 +663,7 @@ OOVPATable D3D8_5233[] = {
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5028, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5028, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
||||||
|
|
|
@ -1127,7 +1127,7 @@ OOVPATable D3D8_5344[] = {
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5028, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5028, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
||||||
|
|
|
@ -1722,7 +1722,7 @@ OOVPATable D3D8_5558[] = {
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_EdgeAntiAlias, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_EdgeAntiAlias, 4134, PATCH),
|
||||||
|
|
|
@ -1070,7 +1070,7 @@ OOVPATable D3D8_5788[] = {
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5788, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5788, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
||||||
|
|
|
@ -192,7 +192,7 @@ OOVPATable D3D8_5849[] = {
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5788, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5788, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH),
|
||||||
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH),
|
||||||
|
|
|
@ -224,7 +224,7 @@ OOVPATable D3D8_OOVPAV2[] = {
|
||||||
REGISTER_OOVPAS(D3DDevice_SetTextureState_BorderColor, PATCH, 3925, 4034, 4361),
|
REGISTER_OOVPAS(D3DDevice_SetTextureState_BorderColor, PATCH, 3925, 4034, 4361),
|
||||||
REGISTER_OOVPAS(D3DDevice_SetTextureState_BumpEnv, PATCH, 3925, 4039),
|
REGISTER_OOVPAS(D3DDevice_SetTextureState_BumpEnv, PATCH, 3925, 4039),
|
||||||
REGISTER_OOVPAS(D3DDevice_SetTextureState_ColorKeyColor, PATCH, 3925, 4034, 4134),
|
REGISTER_OOVPAS(D3DDevice_SetTextureState_ColorKeyColor, PATCH, 3925, 4034, 4134),
|
||||||
REGISTER_OOVPAS(D3DDevice_SetTextureState_TexCoordIndex, PATCH, 3925, 4034, 4361, 4627),
|
REGISTER_OOVPAS(D3DDevice_SetTextureState_TexCoordIndex, PATCH, 3925, 4034, 4242, 4627),
|
||||||
REGISTER_OOVPAS(D3DDevice_SetTile, PATCH, 3925, 4039, 4134, 4627, 5028, 5558, 5788),
|
REGISTER_OOVPAS(D3DDevice_SetTile, PATCH, 3925, 4039, 4134, 4627, 5028, 5558, 5788),
|
||||||
REGISTER_OOVPAS(D3DDevice_SetTransform, PATCH, 3925, 4034, 4134, 5344, 5558), // Was 4134 (from 5344's comment)
|
REGISTER_OOVPAS(D3DDevice_SetTransform, PATCH, 3925, 4034, 4134, 5344, 5558), // Was 4134 (from 5344's comment)
|
||||||
REGISTER_OOVPAS(D3DDevice_SetVertexData2f, PATCH, 3925, 4039), // Was 4627 (from 5344's comment)
|
REGISTER_OOVPAS(D3DDevice_SetVertexData2f, PATCH, 3925, 4039), // Was 4627 (from 5344's comment)
|
||||||
|
|
|
@ -339,10 +339,11 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader)
|
||||||
// Skip scanning for D3D8 symbols when LLE GPU is selected
|
// Skip scanning for D3D8 symbols when LLE GPU is selected
|
||||||
if (bLLE_GPU)
|
if (bLLE_GPU)
|
||||||
continue;
|
continue;
|
||||||
|
#if ENABLE_LEGACY_D3D8_DB
|
||||||
// Some 3911 titles have different D3D8 builds
|
// Some 3911 titles have different D3D8 builds
|
||||||
if (BuildVersion <= 3948)
|
if (BuildVersion <= 3948)
|
||||||
BuildVersion = 3925;
|
BuildVersion = 3925;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (strcmp(LibraryName.c_str(), Lib_DSOUND) == 0)
|
if (strcmp(LibraryName.c_str(), Lib_DSOUND) == 0)
|
||||||
{
|
{
|
||||||
|
@ -410,6 +411,167 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader)
|
||||||
xbaddr lower = pXbeHeader->dwBaseAddr;
|
xbaddr lower = pXbeHeader->dwBaseAddr;
|
||||||
xbaddr upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage;
|
xbaddr upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage;
|
||||||
}
|
}
|
||||||
|
#ifndef ENABLE_LEGACY_D3D8_DB
|
||||||
|
else if (strcmp(LibraryName.c_str(), Lib_D3D8) == 0)
|
||||||
|
{
|
||||||
|
xbaddr lower = pXbeHeader->dwBaseAddr;
|
||||||
|
xbaddr upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage;
|
||||||
|
xbaddr pFunc = (xbaddr)nullptr;
|
||||||
|
|
||||||
|
if(OrigBuildVersion >= 3925 && OrigBuildVersion < 4034)
|
||||||
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetRenderState_CullMode_3925, lower, upper);
|
||||||
|
else
|
||||||
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetRenderState_CullMode_4034, lower, upper);
|
||||||
|
|
||||||
|
// locate D3DDeferredRenderState
|
||||||
|
if(pFunc != (xbaddr)nullptr)
|
||||||
|
{
|
||||||
|
// offset for stencil cull enable render state in the deferred render state buffer
|
||||||
|
xbaddr DerivedAddr_D3DRS_CULLMODE = NULL;
|
||||||
|
int Decrement = 0; // TODO : Rename into something understandable
|
||||||
|
int Increment = 0; // TODO : Rename into something understandable
|
||||||
|
int patchOffset = 0; // TODO : Rename into something understandable
|
||||||
|
|
||||||
|
// Read address of D3DRS_CULLMODE from D3DDevice_SetRenderState_CullMode
|
||||||
|
// TODO : Simplify this when XREF_D3DRS_CULLMODE derivation is deemed stable
|
||||||
|
{
|
||||||
|
if (OrigBuildVersion >= 3925 && OrigBuildVersion < 4034)
|
||||||
|
{
|
||||||
|
DerivedAddr_D3DRS_CULLMODE = *(xbaddr*)(pFunc + 0x25);
|
||||||
|
Decrement = 0x1FC; // TODO: Clean up (?)
|
||||||
|
Increment = 82 * 4;
|
||||||
|
patchOffset = 140 * 4; // Verified 3925 and 3948
|
||||||
|
|
||||||
|
//Decrement = 0x19F; // TODO: Clean up (?)
|
||||||
|
//Increment = 72 * 4;
|
||||||
|
//patchOffset = 142*4; // TODO: Verify
|
||||||
|
}
|
||||||
|
else if (OrigBuildVersion >= 4034 && OrigBuildVersion <= 4361)
|
||||||
|
{
|
||||||
|
DerivedAddr_D3DRS_CULLMODE = *(xbaddr*)(pFunc + 0x2B);
|
||||||
|
Decrement = 0x200;
|
||||||
|
Increment = 82 * 4;
|
||||||
|
patchOffset = 142 * 4;
|
||||||
|
}
|
||||||
|
else if (OrigBuildVersion >= 4432 && OrigBuildVersion < 4627)
|
||||||
|
{
|
||||||
|
DerivedAddr_D3DRS_CULLMODE = *(xbaddr*)(pFunc + 0x2B);
|
||||||
|
Decrement = 0x204;
|
||||||
|
Increment = 83 * 4;
|
||||||
|
patchOffset = 143 * 4;
|
||||||
|
}
|
||||||
|
else if (OrigBuildVersion >= 4627 && OrigBuildVersion <= 5933)
|
||||||
|
{
|
||||||
|
DerivedAddr_D3DRS_CULLMODE = *(xbaddr*)(pFunc + 0x2B);
|
||||||
|
Decrement = 0x24C;
|
||||||
|
Increment = 92 * 4;
|
||||||
|
patchOffset = 162 * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Temporary verification - is XREF_D3DDEVICE derived correctly?
|
||||||
|
xbaddr DerivedAddr_D3DDevice = *(xbaddr*)((xbaddr)pFunc + 0x03);
|
||||||
|
if (XRefDataBase[XREF_D3DDEVICE] != DerivedAddr_D3DDevice)
|
||||||
|
{
|
||||||
|
if (XRefDataBase[XREF_D3DDEVICE] != XREF_ADDR_DERIVE)
|
||||||
|
CxbxPopupMessage("Second derived XREF_D3DDEVICE differs from first!");
|
||||||
|
|
||||||
|
XRefDataBase[XREF_D3DDEVICE] = DerivedAddr_D3DDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_SymbolAddresses["D3DDEVICE"] = DerivedAddr_D3DDevice;
|
||||||
|
|
||||||
|
// Temporary verification - is XREF_D3DRS_CULLMODE derived correctly?
|
||||||
|
if (XRefDataBase[XREF_D3DRS_CULLMODE] != DerivedAddr_D3DRS_CULLMODE)
|
||||||
|
{
|
||||||
|
if (XRefDataBase[XREF_D3DRS_CULLMODE] != XREF_ADDR_DERIVE)
|
||||||
|
CxbxPopupMessage("Second derived XREF_D3DRS_CULLMODE differs from first!");
|
||||||
|
|
||||||
|
XRefDataBase[XREF_D3DRS_CULLMODE] = DerivedAddr_D3DRS_CULLMODE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Derive address of EmuD3DDeferredRenderState from D3DRS_CULLMODE
|
||||||
|
XTL::EmuD3DDeferredRenderState = (DWORD*)(DerivedAddr_D3DRS_CULLMODE - Decrement + Increment);
|
||||||
|
patchOffset -= Increment;
|
||||||
|
|
||||||
|
// Derive address of a few other deferred render state slots (to help xref-based function location)
|
||||||
|
XRefDataBase[XREF_D3DRS_MULTISAMPLEMODE] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset - 8*4;
|
||||||
|
XRefDataBase[XREF_D3DRS_MULTISAMPLERENDERTARGETMODE] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset - 7*4;
|
||||||
|
XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset + 0*4;
|
||||||
|
XRefDataBase[XREF_D3DRS_ROPZCMPALWAYSREAD] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset + 1*4;
|
||||||
|
XRefDataBase[XREF_D3DRS_ROPZREAD] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset + 2*4;
|
||||||
|
XRefDataBase[XREF_D3DRS_DONOTCULLUNCOMPRESSED] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset + 3*4;
|
||||||
|
|
||||||
|
for(int v=0;v<44;v++)
|
||||||
|
{
|
||||||
|
XTL::EmuD3DDeferredRenderState[v] = XTL::X_D3DRS_UNK;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_SymbolAddresses["D3DDeferredRenderState"] = (DWORD)XTL::EmuD3DDeferredRenderState;
|
||||||
|
printf("HLE: 0x%.08X -> EmuD3DDeferredRenderState\n", XTL::EmuD3DDeferredRenderState);
|
||||||
|
//DbgPrintf("HLE: 0x%.08X -> XREF_D3DRS_ROPZCMPALWAYSREAD\n", XRefDataBase[XREF_D3DRS_ROPZCMPALWAYSREAD] );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XTL::EmuD3DDeferredRenderState = nullptr;
|
||||||
|
CxbxKrnlCleanup("EmuD3DDeferredRenderState was not found!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// locate D3DDeferredTextureState
|
||||||
|
{
|
||||||
|
pFunc = (xbaddr)nullptr;
|
||||||
|
|
||||||
|
if(OrigBuildVersion >= 3925 && OrigBuildVersion < 4034)
|
||||||
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_3925, lower, upper);
|
||||||
|
else if(OrigBuildVersion >= 4034 && OrigBuildVersion < 4242)
|
||||||
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4034, lower, upper);
|
||||||
|
else if(OrigBuildVersion >= 4242 && OrigBuildVersion < 4627)
|
||||||
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4242, lower, upper);
|
||||||
|
else if(OrigBuildVersion >= 4627)
|
||||||
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4627, lower, upper);
|
||||||
|
|
||||||
|
if (pFunc != (xbaddr)nullptr)
|
||||||
|
{
|
||||||
|
xbaddr DerivedAddr_D3DTSS_TEXCOORDINDEX = NULL;
|
||||||
|
int Decrement = 0x70; // TODO : Rename into something understandable
|
||||||
|
|
||||||
|
// TODO : Remove this when XREF_D3DTSS_TEXCOORDINDEX derivation is deemed stable
|
||||||
|
{
|
||||||
|
if (OrigBuildVersion >= 3925 && OrigBuildVersion < 4034) // 0x18F180
|
||||||
|
DerivedAddr_D3DTSS_TEXCOORDINDEX = *(xbaddr*)(pFunc + 0x11);
|
||||||
|
else if (OrigBuildVersion >= 4034 && OrigBuildVersion < 4242)
|
||||||
|
DerivedAddr_D3DTSS_TEXCOORDINDEX = *(xbaddr*)(pFunc + 0x18);
|
||||||
|
else
|
||||||
|
DerivedAddr_D3DTSS_TEXCOORDINDEX = *(xbaddr*)(pFunc + 0x19);
|
||||||
|
|
||||||
|
// Temporary verification - is XREF_D3DTSS_TEXCOORDINDEX derived correctly?
|
||||||
|
if (XRefDataBase[XREF_D3DTSS_TEXCOORDINDEX] != DerivedAddr_D3DTSS_TEXCOORDINDEX)
|
||||||
|
{
|
||||||
|
if (XRefDataBase[XREF_D3DTSS_TEXCOORDINDEX] != XREF_ADDR_DERIVE)
|
||||||
|
CxbxPopupMessage("Second derived XREF_D3DTSS_TEXCOORDINDEX differs from first!");
|
||||||
|
|
||||||
|
XRefDataBase[XREF_D3DTSS_TEXCOORDINDEX] = DerivedAddr_D3DTSS_TEXCOORDINDEX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XTL::EmuD3DDeferredTextureState = (DWORD*)(DerivedAddr_D3DTSS_TEXCOORDINDEX - Decrement);
|
||||||
|
|
||||||
|
for(int s=0;s<4;s++)
|
||||||
|
{
|
||||||
|
for(int v=0;v<32;v++)
|
||||||
|
XTL::EmuD3DDeferredTextureState[v+s*32] = X_D3DTSS_UNK;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_SymbolAddresses["D3DDeferredTextureState"] = (DWORD)XTL::EmuD3DDeferredTextureState;
|
||||||
|
printf("HLE: 0x%.08X -> EmuD3DDeferredTextureState\n", XTL::EmuD3DDeferredTextureState);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XTL::EmuD3DDeferredTextureState = nullptr;
|
||||||
|
CxbxKrnlCleanup("EmuD3DDeferredTextureState was not found!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
else if (strcmp(LibraryName.c_str(), Lib_D3D8) == 0 &&
|
else if (strcmp(LibraryName.c_str(), Lib_D3D8) == 0 &&
|
||||||
(BuildVersion == 3925 || BuildVersion == 4034 || BuildVersion == 4134 || BuildVersion == 4361
|
(BuildVersion == 3925 || BuildVersion == 4034 || BuildVersion == 4134 || BuildVersion == 4361
|
||||||
|| BuildVersion == 4432 || BuildVersion == 4627 || BuildVersion == 5028 || BuildVersion == 5233
|
|| BuildVersion == 4432 || BuildVersion == 4627 || BuildVersion == 5028 || BuildVersion == 5233
|
||||||
|
@ -544,7 +706,7 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader)
|
||||||
else if(BuildVersion == 4034 || BuildVersion == 4134)
|
else if(BuildVersion == 4034 || BuildVersion == 4134)
|
||||||
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4034, lower, upper);
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4034, lower, upper);
|
||||||
else if(BuildVersion == 4361 || BuildVersion == 4432)
|
else if(BuildVersion == 4361 || BuildVersion == 4432)
|
||||||
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4361, lower, upper);
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4242, lower, upper);
|
||||||
else if(BuildVersion == 4627 || BuildVersion == 5028 || BuildVersion == 5233 || BuildVersion == 5344
|
else if(BuildVersion == 4627 || BuildVersion == 5028 || BuildVersion == 5233 || BuildVersion == 5344
|
||||||
|| BuildVersion == 5558 || BuildVersion == 5788 || BuildVersion == 5849)
|
|| BuildVersion == 5558 || BuildVersion == 5788 || BuildVersion == 5849)
|
||||||
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4627, lower, upper);
|
pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4627, lower, upper);
|
||||||
|
@ -591,6 +753,7 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader)
|
||||||
CxbxKrnlCleanup("EmuD3DDeferredTextureState was not found!");
|
CxbxKrnlCleanup("EmuD3DDeferredTextureState was not found!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue