Improved D3DDevice_SetRenderState_MultiSampleRenderTargetMode OOVPA

Fix Smashing Drive regression.
This commit is contained in:
jarupxx 2018-01-09 18:10:02 +09:00
parent 660c4483b0
commit 7ea73aa763
5 changed files with 22 additions and 64 deletions

View File

@ -1503,13 +1503,14 @@ OOVPA_END;
// ******************************************************************
// * D3DDevice_SetRenderState_MultiSampleRenderTargetMode
// ******************************************************************
// Generic OOVPA as of 4034 and newer.
#ifndef WIP_LessVertexPatching
OOVPA_XREF(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, 4034, 1+8,
OOVPA_XREF(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, 4034, 1+10,
XRefNoSaveIndex,
XRefOne)
#else
OOVPA_XREF(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, 4034, 2+8,
OOVPA_XREF(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, 4034, 2+10,
XRefNoSaveIndex,
XRefTwo)
@ -1520,25 +1521,25 @@ OOVPA_XREF(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, 4034, 2+8,
XREF_ENTRY( 0x11, XREF_OFFSET_D3DDEVICE_M_RENDERTARGET ), // Derived
#endif
// D3DDevice_SetRenderState_MultiSampleRenderTargetMode+0x0F : mov ecx, [eax+0x21F0]
{ 0x00, 0x8B },
//{ 0x01, 0x4C },
{ 0x02, 0x24 },
{ 0x03, 0x04 },
{ 0x0F, 0x8B },
{ 0x10, 0x88 },
// { 0x11, 0xF0 }, // disabled. part of an offset
// { 0x12, 0x21 },
// D3DDevice_SetRenderState_MultiSampleRenderTargetMode+0x15 : cmp ecx, [eax+0x21FC]
//{ 0x10, 0x88 },
//{ 0x11, 0x70 },
//{ 0x12, 0x20 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x3B },
{ 0x16, 0x88 },
// { 0x17, 0xFC }, // disabled. part of an offset
// { 0x18, 0x21 },
// D3DDevice_SetRenderState_MultiSampleRenderTargetMode+0x1B : jz +0x0D
{ 0x1B, 0x74 },
{ 0x1C, 0x0D },
// D3DDevice_SetRenderState_MultiSampleRenderTargetMode+0x2A : retn 0x04
{ 0x2A, 0xC2 },
{ 0x2B, 0x04 },
//{ 0x16, 0x88 },
//{ 0x17, 0x7C },
//{ 0x18, 0x20 },
{ 0x19, 0x00 },
{ 0x1A, 0x00 },
{ 0x1B, 0x74 }, // MultiSampleRenderTargetMode 0x74 vs MultiSampleMode 0x75
//{ 0x1C, 0x0D },
OOVPA_END;
// ******************************************************************

View File

@ -1528,30 +1528,6 @@ OOVPA_NO_XREF(D3DDevice_SetRenderState_MultiSampleMode, 4627, 8)
{ 0x31, 0xC2 },
OOVPA_END;
// ******************************************************************
// * D3DDevice_SetRenderState_MultiSampleRenderTargetMode
// ******************************************************************
OOVPA_XREF(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, 4627, 1+10,
XRefNoSaveIndex,
XRefOne)
XREF_ENTRY( 0x0B, XREF_D3DRS_MULTISAMPLERENDERTARGETMODE ), // Derived
{ 0x03, 0x04 },
{ 0x19, 0x00 },
{ 0x1A, 0x00 },
{ 0x1B, 0x74 },
{ 0x1C, 0x14 },
{ 0x1D, 0x8D },
{ 0x1E, 0x90 },
{ 0x1F, 0x90 },
{ 0x20, 0x0A },
{ 0x31, 0xC2 },
OOVPA_END;
// ******************************************************************
// * D3DDevice_ApplyStateBlock
// ******************************************************************

View File

@ -68,25 +68,6 @@ OOVPA_XREF(D3DDevice_SetLight, 5344, 15,
{ 0x100, 0x02 },
OOVPA_END;
// ******************************************************************
// * D3DDevice_SetRenderState_MultiSampleRenderTargetMode
// ******************************************************************
OOVPA_XREF(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, 5344, 1+7,
XRefNoSaveIndex,
XRefOne)
XREF_ENTRY( 0x0B, XREF_D3DRS_MULTISAMPLERENDERTARGETMODE ), // Derived
{ 0x03, 0x04 },
{ 0x0F, 0x8B },
{ 0x15, 0x3B },
{ 0x1C, 0x07 }, // **
{ 0x1D, 0x33 }, // **
{ 0x1F, 0xE8 }, // **
{ 0x25, 0x04 }, // **
OOVPA_END;
// ******************************************************************
// * D3DDevice_SetRenderState_TwoSidedLighting
// ******************************************************************

View File

@ -327,7 +327,7 @@ OOVPATable D3D8_OOVPAV2[] = {
REGISTER_OOVPAS(D3DDevice_SetRenderState_MultiSampleAntiAlias, PATCH, 3911, 4034, 4627),
REGISTER_OOVPAS(D3DDevice_SetRenderState_MultiSampleMask, PATCH, 3911, 4034, 4627),
REGISTER_OOVPAS(D3DDevice_SetRenderState_MultiSampleMode, PATCH, 3925, 4034, 4134, 4627, 5233),
REGISTER_OOVPAS(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, PATCH, 4034, 4627, 5344), // Was 5233 (from 5344's comment)
REGISTER_OOVPAS(D3DDevice_SetRenderState_MultiSampleRenderTargetMode, PATCH, 4034), // Was 5233 (from 5344's comment)
REGISTER_OOVPAS(D3DDevice_SetRenderState_NormalizeNormals, PATCH, 3911, 4034),
REGISTER_OOVPAS(D3DDevice_SetRenderState_OcclusionCullEnable, PATCH, 3911, 4034),
REGISTER_OOVPAS(D3DDevice_SetRenderState_PSTextureModes, PATCH, 3911, 4034),

View File

@ -474,7 +474,7 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader)
patchOffset -= Increment;
// Derive address of a few other deferred render state slots (to help xref-based function location)
XRefDataBase[XREF_D3DRS_MULTISAMPLERENDERTARGETMODE] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset - 7*4;
XRefDataBase[XREF_D3DRS_MULTISAMPLERENDERTARGETMODE] = (xbaddr)DerivedAddr_D3DRS_CULLMODE + 8*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;