From a8759a27b7ae7bb39a9182d98864e5b9fc12f24b Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Thu, 5 Feb 2004 09:07:58 +0000 Subject: [PATCH] 4432+etc --- Cxbx.opt | Bin 67072 -> 67072 bytes Include/Cxbx.h | 4 +- Include/Win32/CxbxKrnl/EmuD3D8.h | 64 +++ Include/Win32/CxbxKrnl/HLEDataBase.h | 4 +- .../CxbxKrnl/HLEDataBase/D3D8.1.0.4432.h | 2 + Source/Win32/CxbxKrnl/Emu.cpp | 69 ++- Source/Win32/CxbxKrnl/EmuD3D8.cpp | 228 ++++++++- Source/Win32/CxbxKrnl/HLEDataBase.cpp | 2 + .../CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl | 4 +- .../CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl | 472 ++++++++++++++++++ 10 files changed, 819 insertions(+), 30 deletions(-) diff --git a/Cxbx.opt b/Cxbx.opt index 1bf3f8d13c446b08b6dfc025b7c835792ac77e10..35001dadd4032e795779848410632302016a6ddb 100644 GIT binary patch delta 615 zcmZqZVQJ`L*^tA+`a%5Jf#aJCStg4zGECN!Qr@h=c0+iQ9@k`JDLF8Elhbo1DK6)V zqzZ+!%$(F>RvTCUAUn9gW=2;-VOEypilo%Z))A4M96(k@c2Qo=@nUM&ifH@7HHKGLKz`5aKJ9wgqRI{Ecn^~qI0y1PYVa#oAtWS(ZF$-zzP zlgsDoOg=hC38+_X@{1;w%^VAU@NQnfrpG9-lChDAnSp^}!$e-DfYrQAna{Zc`K@U-PMZLW~8IH#W;+1P_YS?|*Y#g$Qx1p7cU` zECO0AjZ91e3=9>F%nUDlS1@g!$o7GG(~P4mU@OtB IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4432; + extern OOVPATable D3D8_1_0_4432[]; extern uint32 D3D8_1_0_4432_SIZE; diff --git a/Source/Win32/CxbxKrnl/Emu.cpp b/Source/Win32/CxbxKrnl/Emu.cpp index 4972fa879..68e042a73 100644 --- a/Source/Win32/CxbxKrnl/Emu.cpp +++ b/Source/Win32/CxbxKrnl/Emu.cpp @@ -366,8 +366,6 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit for(uint32 c=0;c<8;c++) szLibraryName[c] = pLibraryVersion[v].szName[c]; - printf("EmuMain (0x%X): Locating HLE Information for %s %d.%d.%d...", GetCurrentThreadId(), szLibraryName, MajorVersion, MinorVersion, BuildVersion); - // TODO: HACK: These libraries are packed into one database if(strcmp(szLibraryName, "D3DX8") == 0) strcpy(szLibraryName, "D3D8"); @@ -383,23 +381,6 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit bFoundD3D = true; } - bool found=false; - - for(uint32 d=0;ddwBaseAddr; uint32 upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage; @@ -447,13 +428,28 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit { // NOTE: HACK: This is preliminary. If render states have a problem, maybe this is wrong! XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x25) - 0x1FC + 82*4); // TODO: Verify + XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (uint32)XTL::EmuD3DDeferredRenderState + 142*4 - 82*4; } else if(BuildVersion == 4134) + { XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x248 + 82*4); // TODO: Verify + XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (uint32)XTL::EmuD3DDeferredRenderState + 142*4 - 82*4; + } else if(BuildVersion == 4361) + { XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x200 + 82*4); + XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (uint32)XTL::EmuD3DDeferredRenderState + 142*4 - 82*4; + } + else if(BuildVersion == 4432) + { + XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x204 + 83*4); + XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (uint32)XTL::EmuD3DDeferredRenderState + 143*4 - 83*4; + } else if(BuildVersion == 4627) + { XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x24C + 92*4); + XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (uint32)XTL::EmuD3DDeferredRenderState + 162*4 - 92*4; + } for(int v=0;v<146;v++) XTL::EmuD3DDeferredRenderState[v] = X_D3DRS_UNK; @@ -474,6 +470,8 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4134, lower, upper); else if(BuildVersion == 4361) pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4361, lower, upper); + else if(BuildVersion == 4432) + pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4432, lower, upper); else if(BuildVersion == 4627) pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4627, lower, upper); @@ -497,6 +495,25 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit } } } + + printf("EmuMain (0x%X): Locating HLE Information for %s %d.%d.%d...", GetCurrentThreadId(), pLibraryVersion[v].szName, MajorVersion, MinorVersion, BuildVersion); + + bool found=false; + + for(uint32 d=0;dXRefSaveIndex]; // already Found, no bother patching again + } } return (void*)cur; @@ -1035,7 +1054,7 @@ static void *EmuLocateFunction(OOVPA *Oovpa, uint32 lower, uint32 upper) if(XRefDataBase[Value] == -1) goto skipout_S; // Unsatisfied XRef is not acceptable - if( (RealValue + cur + Offset + 4 != XRefDataBase[Value])) + if( (RealValue + cur + Offset + 4 != XRefDataBase[Value]) && (RealValue != XRefDataBase[Value])) break; } @@ -1068,7 +1087,9 @@ static void *EmuLocateFunction(OOVPA *Oovpa, uint32 lower, uint32 upper) return (void*)cur; } else - return 0; // already Found, no bother patching again + { + return (void*)XRefDataBase[Soovpa->XRefSaveIndex]; // already Found, no bother patching again + } } return (void*)cur; diff --git a/Source/Win32/CxbxKrnl/EmuD3D8.cpp b/Source/Win32/CxbxKrnl/EmuD3D8.cpp index c7d55f007..48bd5e3b0 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8.cpp @@ -5003,6 +5003,62 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_SetTextureState_BumpEnv return; } +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_FrontFace +// ****************************************************************** +VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_FrontFace +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_FrontFace\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + EmuWarning("SetRenderState_FrontFace not supported!\n"); + + EmuSwapFS(); // XBox FS + + return; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_LogicOp +// ****************************************************************** +VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_LogicOp +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_LogicOp\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + EmuWarning("SetRenderState_LogicOp is not supported!"); + + EmuSwapFS(); // XBox FS + + return; +} + // ****************************************************************** // * func: EmuIDirect3DDevice8_SetRenderState_NormalizeNormals // ****************************************************************** @@ -5247,7 +5303,7 @@ VOID __fastcall XTL::EmuIDirect3DDevice8_SetRenderState_Simple } if(State == -1) - EmuWarning("RenderState_Simple(0x%.08X, 0x%.08X) is unsupported", Method, Value); + EmuWarning("RenderState_Simple(0x%.08X, 0x%.08X) is unsupported!", Method, Value); else { switch(State) @@ -5408,6 +5464,36 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_CullMode return; } +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_LineWidth +// ****************************************************************** +VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_LineWidth +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_LineWidth\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + // TODO: Convert to PC format?? +// g_pD3DDevice8->SetRenderState(D3DRS_LINEPATTERN, Value); + EmuWarning("SetRenderState_LineWidth is not supported!"); + + EmuSwapFS(); // XBox FS + + return; +} + // ****************************************************************** // * func: EmuIDirect3DDevice8_SetRenderState_StencilFail // ****************************************************************** @@ -5436,6 +5522,62 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_StencilFail return; } +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_OcclusionCullEnable +// ****************************************************************** +VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_OcclusionCullEnable +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_OcclusionCullEnable\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + EmuWarning("SetRenderState_OcclusionCullEnable not supported!"); + + EmuSwapFS(); // XBox FS + + return; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_StencilCullEnable +// ****************************************************************** +VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_StencilCullEnable +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_StencilCullEnable\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + EmuWarning("SetRenderState_StencilCullEnable not supported!"); + + EmuSwapFS(); // XBox FS + + return; +} + // ****************************************************************** // * func: EmuIDirect3DDevice8_SetRenderState_ZEnable // ****************************************************************** @@ -5520,6 +5662,90 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleAntiAlias return; } +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_MultiSampleMask +// ****************************************************************** +VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleMask +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_MultiSampleMask\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + g_pD3DDevice8->SetRenderState(D3DRS_MULTISAMPLEMASK, Value); + + EmuSwapFS(); // XBox FS + + return; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_MultiSampleMode +// ****************************************************************** +VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleMode +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_MultiSampleMode\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + EmuWarning("SetRenderState_MultiSampleMode is not supported!"); + + EmuSwapFS(); // XBox FS + + return; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode +// ****************************************************************** +VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + EmuWarning("SetRenderState_MultiSampleRenderTargetMode is not supported!"); + + EmuSwapFS(); // XBox FS + + return; +} + // ****************************************************************** // * func: EmuIDirect3DDevice8_SetRenderState_ShadowFunc // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/HLEDataBase.cpp b/Source/Win32/CxbxKrnl/HLEDataBase.cpp index 70fecd3e1..5304eec7d 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase.cpp +++ b/Source/Win32/CxbxKrnl/HLEDataBase.cpp @@ -219,6 +219,8 @@ extern uint32 HLEDataBaseSize = sizeof(HLEDataBase); // ****************************************************************** extern uint32 XRefDataBase[] = { + -1, // XREF_DXSRSCULLMODE + -1, // XREF_D3DRS_STENCILCULLENABLE -1, // XREF_XNINIT -1, // XREF_FCLOSEDEVICE -1, // XREF_CLEARSTATEBLOCKFLAGS diff --git a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl index 21fd2afa6..46cba2ec1 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl +++ b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl @@ -72,8 +72,8 @@ SOOVPA<13> IDirect3DDevice8_SetRenderState_CullMode_1_0_4134 = 0, // Large == 0 13, // Count == 13 - -1, // XRef Not Saved - 0, // XRef Not Used + XREF_DXSRSCULLMODE, // XRef Is Saved + 0, // XRef Not Used { // IDirect3DDevice8_SetRenderState_CullMode+0x19 : mov dword ptr [eax], 0x40308 diff --git a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl index 127b8f24b..8d7a145b3 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl +++ b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl @@ -309,6 +309,39 @@ SOOVPA<15> IDirect3DDevice8_SetTextureState_BorderColor_1_0_4432 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_FrontFace +// ****************************************************************** +SOOVPA<11> IDirect3DDevice8_SetRenderState_FrontFace_1_0_4432 = +{ + 0, // Large == 0 + 11, // Count == 11 + + -1, // XRef Not Saved + 1, // XRef Is Used + + { + // IDirect3DDevice8_SetRenderState_FrontFace+0x36 : jmp IDirect3DDevice8_SetRenderState_CullMode + { 0x36, XREF_DXSRSCULLMODE}, // (Offset,Value)-Pair #1 + + // IDirect3DDevice8_SetRenderState_FrontFace+0x09 : cmp eax, [esi+4] + { 0x09, 0x3B }, // (Offset,Value)-Pair #2 + { 0x0A, 0x46 }, // (Offset,Value)-Pair #3 + { 0x0B, 0x04 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_FrontFace+0x13 : mov ecx, [esp+0x08] + { 0x13, 0x8B }, // (Offset,Value)-Pair #5 + { 0x14, 0x4C }, // (Offset,Value)-Pair #6 + { 0x15, 0x24 }, // (Offset,Value)-Pair #7 + { 0x16, 0x08 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetRenderState_FrontFace+0x20 : add eax, 8 + { 0x20, 0x83 }, // (Offset,Value)-Pair #9 + { 0x21, 0xC0 }, // (Offset,Value)-Pair #10 + { 0x22, 0x08 }, // (Offset,Value)-Pair #11 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetRenderState_NormalizeNormals // ****************************************************************** @@ -337,6 +370,96 @@ SOOVPA<8> IDirect3DDevice8_SetRenderState_NormalizeNormals_1_0_4432 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_LogicOp +// ****************************************************************** +SOOVPA<9> IDirect3DDevice8_SetRenderState_LogicOp_1_0_4432 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_LogicOp+0x07 : mov eax, [esi] + { 0x07, 0x8B }, // (Offset,Value)-Pair #1 + { 0x08, 0x06 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_LogicOp+0x1B : mov dword ptr [eax], 0x417BC + { 0x1B, 0xC7 }, // (Offset,Value)-Pair #3 + { 0x1C, 0x00 }, // (Offset,Value)-Pair #4 + { 0x1D, 0xBC }, // (Offset,Value)-Pair #5 + { 0x1E, 0x17 }, // (Offset,Value)-Pair #6 + { 0x1F, 0x04 }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_SetRenderState_LogicOp+0x4F : retn 0x04 + { 0x4F, 0xC2 }, // (Offset,Value)-Pair #8 + { 0x50, 0x04 }, // (Offset,Value)-Pair #9 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetTextureState_TexCoordIndex +// ****************************************************************** +SOOVPA<10> IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4432 = +{ + 0, // Large == 0 + 10, // Count == 10 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetTextureState_TexCoordIndex+0x0D : shl eax, 0x07 + { 0x0D, 0xC1 }, // (Offset,Value)-Pair #1 + { 0x0E, 0xE0 }, // (Offset,Value)-Pair #2 + { 0x0F, 0x07 }, // (Offset,Value)-Pair #3 + + // IDirect3DDevice8_SetTextureState_TexCoordIndex+0x24 : cmp eax, ecx + { 0x24, 0x3B }, // (Offset,Value)-Pair #4 + { 0x25, 0xC1 }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_SetTextureState_TexCoordIndex+0x6B : mov ebp, 0x2400 + { 0x6B, 0xBD }, // (Offset,Value)-Pair #6 + { 0x6C, 0x24 }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_SetTextureState_TexCoordIndex+0xB3 : shl edx, 0x04 + { 0xB3, 0xC1 }, // (Offset,Value)-Pair #8 + { 0xB4, 0xE2 }, // (Offset,Value)-Pair #9 + { 0xB5, 0x04 }, // (Offset,Value)-Pair #10 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_Dxt1NoiseEnable +// ****************************************************************** +SOOVPA<9> IDirect3DDevice8_SetRenderState_Dxt1NoiseEnable_1_0_4432 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_Dxt1NoiseEnable+0x0C : mov eax, [edi+0x2070] + { 0x0C, 0x8B }, // (Offset,Value)-Pair #1 + { 0x0D, 0x86 }, // (Offset,Value)-Pair #2 + { 0x0E, 0x70 }, // (Offset,Value)-Pair #3 + { 0x0F, 0x20 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_Dxt1NoiseEnable+0x6E : add eax, 0x18 + { 0x6E, 0x83 }, // (Offset,Value)-Pair #5 + { 0x6F, 0xC0 }, // (Offset,Value)-Pair #6 + { 0x70, 0x18 }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_SetRenderState_Dxt1NoiseEnable+0x7C : retn 0x04 + { 0x7C, 0xC2 }, // (Offset,Value)-Pair #8 + { 0x7D, 0x04 }, // (Offset,Value)-Pair #9 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetRenderState_ZEnable // ****************************************************************** @@ -372,6 +495,174 @@ SOOVPA<13> IDirect3DDevice8_SetRenderState_ZEnable_1_0_4432 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias +// ****************************************************************** +SOOVPA<9> IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias_1_0_4432 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias+0x04 : push esi + { 0x04, 0x56 }, // (Offset,Value)-Pair #1 + + // IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias+0x12 : call [abs] + { 0x12, 0xE8 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias+0x38 : shl ecx, 0x10 + { 0x38, 0xC1 }, // (Offset,Value)-Pair #3 + { 0x39, 0xE1 }, // (Offset,Value)-Pair #4 + { 0x3A, 0x10 }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias+0x44 : or ecx, edx + { 0x44, 0x0B }, // (Offset,Value)-Pair #6 + { 0x45, 0xCA }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias+0x4F : retn 0x04 + { 0x4F, 0xC2 }, // (Offset,Value)-Pair #8 + { 0x50, 0x04 }, // (Offset,Value)-Pair #9 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_MultiSampleMask +// ****************************************************************** +SOOVPA<13> IDirect3DDevice8_SetRenderState_MultiSampleMask_1_0_4432 = +{ + 0, // Large == 0 + 13, // Count == 13 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_MultiSampleMask+0x1C : jb +0x05 + { 0x1C, 0x72 }, // (Offset,Value)-Pair #1 + { 0x1D, 0x05 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_MultiSampleMask+0x38 : and ecx, 0x0F; shl edx, 0x10 + { 0x38, 0x83 }, // (Offset,Value)-Pair #3 + { 0x39, 0xE1 }, // (Offset,Value)-Pair #4 + { 0x3A, 0x0F }, // (Offset,Value)-Pair #5 + { 0x3B, 0xC1 }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_SetRenderState_MultiSampleMask+0x3E : mov dword ptr [eax], 0x41D7C + { 0x3E, 0xC7 }, // (Offset,Value)-Pair #7 + { 0x3F, 0x00 }, // (Offset,Value)-Pair #8 + { 0x40, 0x7C }, // (Offset,Value)-Pair #9 + { 0x41, 0x1D }, // (Offset,Value)-Pair #10 + { 0x42, 0x04 }, // (Offset,Value)-Pair #11 + + // IDirect3DDevice8_SetRenderState_MultiSampleMask+0x4F : retn 0x04 + { 0x4F, 0xC2 }, // (Offset,Value)-Pair #12 + { 0x50, 0x04 }, // (Offset,Value)-Pair #13 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_MultiSampleMode +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_SetRenderState_MultiSampleMode_1_0_4432 = +{ + 0, // Large == 0 + 12, // Count == 12 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_MultiSampleMode+0x0F : mov ecx, [eax+0x2070] + { 0x0F, 0x8B }, // (Offset,Value)-Pair #1 + { 0x10, 0x88 }, // (Offset,Value)-Pair #2 + { 0x11, 0x70 }, // (Offset,Value)-Pair #3 + { 0x12, 0x20 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_MultiSampleMode+0x15 : cmp ecx, [eax+0x207C] + { 0x15, 0x3B }, // (Offset,Value)-Pair #5 + { 0x16, 0x88 }, // (Offset,Value)-Pair #6 + { 0x17, 0x7C }, // (Offset,Value)-Pair #7 + { 0x18, 0x20 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetRenderState_MultiSampleMode+0x1B : jnz +0x0D + { 0x1B, 0x75 }, // (Offset,Value)-Pair #9 + { 0x1C, 0x0D }, // (Offset,Value)-Pair #10 + + // IDirect3DDevice8_SetRenderState_MultiSampleMode+0x2A : retn 0x04 + { 0x2A, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x2B, 0x04 }, // (Offset,Value)-Pair #12 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode_1_0_4432 = +{ + 0, // Large == 0 + 12, // Count == 12 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode+0x0F : mov ecx, [eax+0x2070] + { 0x0F, 0x8B }, // (Offset,Value)-Pair #1 + { 0x10, 0x88 }, // (Offset,Value)-Pair #2 + { 0x11, 0x70 }, // (Offset,Value)-Pair #3 + { 0x12, 0x20 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode+0x15 : cmp ecx, [eax+0x207C] + { 0x15, 0x3B }, // (Offset,Value)-Pair #5 + { 0x16, 0x88 }, // (Offset,Value)-Pair #6 + { 0x17, 0x7C }, // (Offset,Value)-Pair #7 + { 0x18, 0x20 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode+0x1B : jz +0x0D + { 0x1B, 0x74 }, // (Offset,Value)-Pair #9 + { 0x1C, 0x0D }, // (Offset,Value)-Pair #10 + + // IDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode+0x2A : retn 0x04 + { 0x2A, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x2B, 0x04 }, // (Offset,Value)-Pair #12 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_LineWidth +// ****************************************************************** +SOOVPA<10> IDirect3DDevice8_SetRenderState_LineWidth_1_0_4432 = +{ + 0, // Large == 0 + 10, // Count == 10 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_LineWidth+0x15 : fmul dword ptr [esi+0x460] + { 0x15, 0xD8 }, // (Offset,Value)-Pair #1 + { 0x16, 0x8E }, // (Offset,Value)-Pair #2 + { 0x17, 0x60 }, // (Offset,Value)-Pair #3 + { 0x18, 0x04 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_LineWidth+0x32 : cmp edi, 0x1FF + { 0x32, 0x81 }, // (Offset,Value)-Pair #5 + { 0x33, 0xFF }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_SetRenderState_LineWidth+0x3A : mov edi, 0x1FF + { 0x3A, 0xBF }, // (Offset,Value)-Pair #7 + { 0x3B, 0xFF }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetRenderState_LineWidth+0x62 : retn 0x04 + { 0x62, 0xC2 }, // (Offset,Value)-Pair #9 + { 0x63, 0x04 }, // (Offset,Value)-Pair #10 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetRenderState_StencilFail // ****************************************************************** @@ -406,6 +697,77 @@ SOOVPA<12> IDirect3DDevice8_SetRenderState_StencilFail_1_0_4432 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_OcclusionCullEnable +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_SetRenderState_OcclusionCullEnable_1_0_4432 = +{ + 0, // Large == 0 + 12, // Count == 12 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_OcclusionCullEnable+0x15 : jb +0x05 + { 0x15, 0x72 }, // (Offset,Value)-Pair #1 + { 0x16, 0x05 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_OcclusionCullEnable+0x41 : cmp [abs], 0x1E00 + { 0x41, 0x81 }, // (Offset,Value)-Pair #3 + { 0x47, 0x00 }, // (Offset,Value)-Pair #4 + { 0x48, 0x1E }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_SetRenderState_OcclusionCullEnable+0x50 : mov dword ptr [eax], 0x41D84 + { 0x50, 0xC7 }, // (Offset,Value)-Pair #6 + { 0x51, 0x00 }, // (Offset,Value)-Pair #7 + { 0x52, 0x84 }, // (Offset,Value)-Pair #8 + { 0x53, 0x1D }, // (Offset,Value)-Pair #9 + { 0x54, 0x04 }, // (Offset,Value)-Pair #10 + + // IDirect3DDevice8_SetRenderState_OcclusionCullEnable+0x5F : retn 0x04 + { 0x5F, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x60, 0x04 }, // (Offset,Value)-Pair #12 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_StencilCullEnable +// ****************************************************************** +SOOVPA<13> IDirect3DDevice8_SetRenderState_StencilCullEnable_1_0_4432 = +{ + 0, // Large == 0 + 13, // Count == 13 + + -1, // XRef Not Saved + 1, // XRef Is Used + + { + // IDirect3DDevice8_SetRenderState_StencilCullEnable+0x0C : D3D__RenderState[D3DRS_STENCILCULLENABLE] + { 0x0C, XREF_D3DRS_STENCILCULLENABLE }, // (Offset,Value)-Pair #1 + + // IDirect3DDevice8_SetRenderState_StencilCullEnable+0x15 : jb +0x05 + { 0x15, 0x72 }, // (Offset,Value)-Pair #2 + { 0x16, 0x05 }, // (Offset,Value)-Pair #3 + + // IDirect3DDevice8_SetRenderState_StencilCullEnable+0x41 : cmp [abs], 0x1E00 + { 0x41, 0x81 }, // (Offset,Value)-Pair #4 + { 0x47, 0x00 }, // (Offset,Value)-Pair #5 + { 0x48, 0x1E }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_SetRenderState_StencilCullEnable+0x50 : mov dword ptr [eax], 0x41D84 + { 0x50, 0xC7 }, // (Offset,Value)-Pair #7 + { 0x51, 0x00 }, // (Offset,Value)-Pair #8 + { 0x52, 0x84 }, // (Offset,Value)-Pair #9 + { 0x53, 0x1D }, // (Offset,Value)-Pair #10 + { 0x54, 0x04 }, // (Offset,Value)-Pair #11 + + // IDirect3DDevice8_SetRenderState_StencilCullEnable+0x5F : retn 0x04 + { 0x5F, 0xC2 }, // (Offset,Value)-Pair #12 + { 0x60, 0x04 }, // (Offset,Value)-Pair #13 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetRenderState_ShadowFunc // ****************************************************************** @@ -635,6 +997,26 @@ OOVPATable D3D8_1_0_4432[] = "EmuIDirect3DDevice8_SetRenderState_CullMode" #endif }, + // IDirect3DDevice8::SetRenderState_FrontFace + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_FrontFace_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_FrontFace, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_FrontFace" + #endif + }, + // IDirect3DDevice8::SetRenderState_LogicOp + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_LogicOp_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_LogicOp, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_LogicOp" + #endif + }, // IDirect3DDevice8::SetRenderState_NormalizeNormals { (OOVPA*)&IDirect3DDevice8_SetRenderState_NormalizeNormals_1_0_4432, @@ -715,6 +1097,16 @@ OOVPATable D3D8_1_0_4432[] = "EmuIDirect3DDevice8_SetRenderState_StencilEnable" #endif }, + // IDirect3DDevice8::SetRenderState_LineWidth + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_LineWidth_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_LineWidth, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_LineWidth" + #endif + }, // IDirect3DDevice8::SetRenderState_StencilFail { (OOVPA*)&IDirect3DDevice8_SetRenderState_StencilFail_1_0_4432, @@ -725,6 +1117,46 @@ OOVPATable D3D8_1_0_4432[] = "EmuIDirect3DDevice8_SetRenderState_StencilFail" #endif }, + // IDirect3DDevice8::SetRenderState_OcclusionCullEnable + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_OcclusionCullEnable_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_OcclusionCullEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_OcclusionCullEnable" + #endif + }, + // IDirect3DDevice8::SetRenderState_StencilCullEnable + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_StencilCullEnable_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_StencilCullEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_StencilCullEnable" + #endif + }, + // IDirect3DDevice8::SetTextureState_TexCoordIndex + { + (OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetTextureState_TexCoordIndex, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetTextureState_TexCoordIndex" + #endif + }, + // IDirect3DDevice8::SetRenderState_Dxt1NoiseEnable + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_Dxt1NoiseEnable_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_Dxt1NoiseEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_Dxt1NoiseEnable" + #endif + }, // IDirect3DDevice8::SetRenderState_ZEnable { (OOVPA*)&IDirect3DDevice8_SetRenderState_ZEnable_1_0_4432, @@ -735,6 +1167,46 @@ OOVPATable D3D8_1_0_4432[] = "EmuIDirect3DDevice8_SetRenderState_ZEnable" #endif }, + // IDirect3DDevice8::SetRenderState_MultiSampleAntiAlias + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleAntiAlias, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleAntiAlias" + #endif + }, + // IDirect3DDevice8::SetRenderState_MultiSampleMask + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_MultiSampleMask_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleMask, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleMask" + #endif + }, + // IDirect3DDevice8::SetRenderState_MultiSampleMode + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_MultiSampleMode_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleMode" + #endif + }, + // IDirect3DDevice8::SetRenderState_MultiSampleRenderTargetMode + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode" + #endif + }, // IDirect3DDevice8::SetRenderState_ShadowFunc { (OOVPA*)&IDirect3DDevice8_SetRenderState_ShadowFunc_1_0_4432,