From 971be33ed8f9b912ec65797fa84aa642a85b4d89 Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Thu, 22 Apr 2004 04:25:08 +0000 Subject: [PATCH] nba jam 2004 --- Cxbx.dsp | 2 +- Cxbx.opt | Bin 59904 -> 60928 bytes Include/Cxbx.h | 4 +- Include/Win32/CxbxKrnl/EmuD3D8.h | 17 + .../CxbxKrnl/HLEDataBase/Xapi.1.0.5558.h | 1 + Source/Win32/CxbxKrnl/Emu.cpp | 10 + Source/Win32/CxbxKrnl/EmuD3D8.cpp | 73 ++- .../CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl | 464 ++++++++++++++++++ .../CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl | 6 +- .../CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl | 33 ++ 10 files changed, 585 insertions(+), 25 deletions(-) diff --git a/Cxbx.dsp b/Cxbx.dsp index 88b043c5c..fd25a55c3 100644 --- a/Cxbx.dsp +++ b/Cxbx.dsp @@ -1,5 +1,5 @@ # Microsoft Developer Studio Project File - Name="Cxbx" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# Microsoft Developer Studio Generated Build File, Format Version 60000 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 diff --git a/Cxbx.opt b/Cxbx.opt index 58c911311e3f7bf8e0a94b591e70a37b7edfb820..44988857d3065646c288f5d618225ae86aa67a90 100644 GIT binary patch literal 60928 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 G|NSqqKo7WoDHW#t<3Gy#xW@KUlDtXYfpRt0G zdGkcJkIajt1h9+iVHe-z^plZMWb-d)Hth0?BCv~3%4y#`F(;pYvH=ShRtqOJWN?8T z_llJfzOM}Ko!<8Q{zwR!zK*bSLc!ss=*bVfa6*yOK3GGTJ* z%zDPG&0lAFvu>Wub^yE8{Hn~27y+|slLH XapiInitProcess_1_0_5558; +extern SOOVPA<8> XapiInitProcess_1_0_5659; extern OOVPATable XAPI_1_0_5558[]; extern uint32 XAPI_1_0_5558_SIZE; diff --git a/Source/Win32/CxbxKrnl/Emu.cpp b/Source/Win32/CxbxKrnl/Emu.cpp index c09cae0e5..a085b6324 100644 --- a/Source/Win32/CxbxKrnl/Emu.cpp +++ b/Source/Win32/CxbxKrnl/Emu.cpp @@ -379,6 +379,9 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit uint16 MinorVersion = pLibraryVersion[v].wMinorVersion; uint16 BuildVersion = pLibraryVersion[v].wBuildVersion; + if(BuildVersion == 5659) + BuildVersion = 5558; + char szLibraryName[9] = {0}; for(uint32 c=0;c<8;c++) @@ -423,6 +426,13 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit else if(BuildVersion >= 5558) { pFunc = EmuLocateFunction((OOVPA*)&XapiInitProcess_1_0_5558, lower, upper); + + // 5659 has an updated function + if(pFunc == 0) + { + pFunc = EmuLocateFunction((OOVPA*)&XapiInitProcess_1_0_5659, lower, upper); + } + ProcessHeapOffs = 0x51; RtlCreateHeapOffs = 0x4A; } diff --git a/Source/Win32/CxbxKrnl/EmuD3D8.cpp b/Source/Win32/CxbxKrnl/EmuD3D8.cpp index 9c6480324..5c686d58f 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8.cpp @@ -1256,6 +1256,7 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_LoadVertexShader } EmuSwapFS(); // Xbox FS + return D3D_OK; } @@ -1272,8 +1273,8 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SelectVertexShader DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SelectVertexShader\n" "(\n" - " Handle : 0x%.08X\n" - " Address : 0x%.08X\n" + " Handle : 0x%.08X\n" + " Address : 0x%.08X\n" ");\n", GetCurrentThreadId(), Handle, Address); @@ -1284,7 +1285,16 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SelectVertexShader } else if(Address < 136) { - g_pD3DDevice8->SetVertexShader(((VERTEX_SHADER *)((X_D3DVertexShader *)g_VertexShaderSlots[Address])->Handle)->Handle); + X_D3DVertexShader *pVertexShader = (X_D3DVertexShader*)g_VertexShaderSlots[Address]; + + if(pVertexShader != NULL) + { + g_pD3DDevice8->SetVertexShader(((VERTEX_SHADER *)((X_D3DVertexShader *)g_VertexShaderSlots[Address])->Handle)->Handle); + } + else + { + EmuWarning("g_VertexShaderSlots[%d] = 0", Address); + } } EmuSwapFS(); // XBox FS @@ -1941,7 +1951,7 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetShaderConstantMode DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetShaderConstantMode\n" "(\n" - " Mode : 0x%.08X\n" + " Mode : 0x%.08X\n" ");\n", GetCurrentThreadId(), Mode); @@ -3682,7 +3692,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register dwPitch = dwWidth*2; dwBPP = 2; } - else if(X_Format == 0x00 /* X_D3DFMT_L8 */ || X_Format == 0x01 /* X_D3DFMT_AL8 */ || X_Format == 0x1A /* X_D3DFMT_A8L8 */) + else if(X_Format == 0x00 /* X_D3DFMT_L8 */ || X_Format == 0x0B /* X_D3DFMT_P8 */ || X_Format == 0x01 /* X_D3DFMT_AL8 */ || X_Format == 0x1A /* X_D3DFMT_A8L8 */) { bSwizzled = TRUE; @@ -6804,18 +6814,30 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_CreatePalette X_D3DPALETTESIZE Size, X_D3DPalette **ppPalette ) +{ + *ppPalette = EmuIDirect3DDevice8_CreatePalette2(Size); + + return D3D_OK; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_CreatePalette2 +// ****************************************************************** +XTL::X_D3DPalette * WINAPI XTL::EmuIDirect3DDevice8_CreatePalette2 +( + X_D3DPALETTESIZE Size +) { EmuSwapFS(); // Win2k/XP FS - DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_CreatePalette\n" + DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_CreatePalette2\n" "(\n" " Size : 0x%.08X\n" - " ppPalette : 0x%.08X\n" ");\n", - GetCurrentThreadId(), Size, ppPalette); - - *ppPalette = new X_D3DPalette(); + GetCurrentThreadId(), Size); + X_D3DPalette *pPalette = new X_D3DPalette(); + static int lk[4] = { 256*sizeof(D3DCOLOR), // D3DPALETTE_256 @@ -6824,13 +6846,13 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_CreatePalette 32*sizeof(D3DCOLOR) // D3DPALETTE_32 }; - (*ppPalette)->Common = 0; - (*ppPalette)->Lock = 0x8000BEEF; // emulated reference count for palettes - (*ppPalette)->Data = (DWORD)new uint08[lk[Size]]; + pPalette->Common = 0; + pPalette->Lock = 0x8000BEEF; // emulated reference count for palettes + pPalette->Data = (DWORD)new uint08[lk[Size]]; EmuSwapFS(); // XBox FS - return D3D_OK; + return pPalette; } // ****************************************************************** @@ -6915,22 +6937,35 @@ HRESULT WINAPI XTL::EmuIDirect3DPalette8_Lock D3DCOLOR **ppColors, DWORD Flags ) +{ + *ppColors = EmuIDirect3DPalette8_Lock2(pThis, Flags); + + return D3D_OK; +} + +// ****************************************************************** +// * func: EmuIDirect3DPalette8_Lock2 +// ****************************************************************** +XTL::D3DCOLOR * WINAPI XTL::EmuIDirect3DPalette8_Lock2 +( + X_D3DPalette *pThis, + DWORD Flags +) { EmuSwapFS(); // Win2k/XP FS DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DPalette8_Lock\n" "(\n" " pThis : 0x%.08X\n" - " ppColors : 0x%.08X\n" " Flags : 0x%.08X\n" ");\n", - GetCurrentThreadId(), ppColors, Flags); + GetCurrentThreadId(), Flags); - *ppColors = (D3DCOLOR*)pThis->Data; + D3DCOLOR *pColors = (D3DCOLOR*)pThis->Data; EmuSwapFS(); // XBox FS - - return D3D_OK; + + return pColors; } // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl index bcfd5ac4c..35d85f47d 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl +++ b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl @@ -32,6 +32,73 @@ // * // ****************************************************************** +// ****************************************************************** +// * IDirect3DDevice8_LoadVertexShader +// ****************************************************************** +SOOVPA<10> IDirect3DDevice8_LoadVertexShader_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x09, 0x45 }, + { 0x14, 0x75 }, + { 0x21, 0x8B }, + { 0x2D, 0x8B }, + { 0x35, 0x04 }, + { 0x40, 0x00 }, + { 0x4B, 0x5E }, + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SelectVertexShader +// ****************************************************************** +SOOVPA<11> IDirect3DDevice8_SelectVertexShader_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x12, 0x07 }, + { 0x26, 0x00 }, + { 0x3A, 0x0D }, + { 0x4F, 0x8B }, + { 0x62, 0xE1 }, + { 0x76, 0x3B }, + { 0x8A, 0x89 }, + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetViewport +// ****************************************************************** +SOOVPA<9> IDirect3DDevice8_SetViewport_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x1E, 0x86 }, + { 0x3E, 0x1B }, + { 0x5E, 0x8B }, + { 0x7E, 0x6D }, + { 0x9E, 0x81 }, + { 0xBE, 0x0C }, + { 0xDE, 0x75 }, + { 0xFE, 0x85 }, + } +}; + // ****************************************************************** // * IDirect3DDevice8_Clear // ****************************************************************** @@ -55,6 +122,28 @@ LOOVPA<8> IDirect3DDevice8_Clear_1_0_5558 = } }; +// ****************************************************************** +// * IDirect3DDevice8_CreatePalette2 +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_CreatePalette2_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x0D, 0x8B }, + { 0x16, 0x00 }, + { 0x23, 0x68 }, + { 0x2E, 0x85 }, + { 0x3D, 0x5E }, + { 0x46, 0x1E }, + { 0x52, 0x89 }, + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetPixelShader // ****************************************************************** @@ -157,6 +246,76 @@ SOOVPA<8> IDirect3DDevice8_SetRenderState_ZEnable_1_0_5558 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetLight +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_SetLight_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x1E, 0x00 }, + { 0x3E, 0x89 }, + { 0x5E, 0x00 }, + { 0x7E, 0x07 }, + { 0x9E, 0xC8 }, + { 0xBE, 0xC9 }, + { 0xDE, 0x07 }, + { 0xFE, 0xC1 }, + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetMaterial +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_SetMaterial_1_0_5558 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x04, 0x08 }, + { 0x0C, 0x81 }, + { 0x0E, 0xF0 }, + { 0x10, 0x00 }, + { 0x16, 0x00 }, + { 0x1F, 0x81 }, + { 0x22, 0x90 }, + { 0x2C, 0x5E }, + { 0x2E, 0x04 }, + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_LightEnable +// ****************************************************************** +SOOVPA<13> IDirect3DDevice8_LightEnable_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x1E, 0x8D }, + { 0x3E, 0xC7 }, + { 0x5E, 0xC7 }, + { 0x7E, 0x00 }, + { 0x9E, 0x85 }, + { 0xBE, 0x01 }, + { 0xDE, 0x00 }, + { 0xFE, 0x83 }, + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetVertexShader // ****************************************************************** @@ -225,6 +384,38 @@ SOOVPA<7> IDirect3DDevice8_Begin_1_0_5558 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetPalette +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_SetPalette_1_0_5558 = +{ + 0, // Large == 0 + 12, // Count == 12 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetPalette+0x0D : mov eax, [edi+esi*4+0x0A88] + { 0x0D, 0x8B }, // (Offset,Value)-Pair #1 + { 0x0E, 0x84 }, // (Offset,Value)-Pair #2 + { 0x0F, 0xBE }, // (Offset,Value)-Pair #3 + { 0x10, 0x88 }, // (Offset,Value)-Pair #4 + { 0x11, 0x0F }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_SetPalette+0x76 : add esi, 0x41B20 + { 0x76, 0x81 }, // (Offset,Value)-Pair #6 + { 0x77, 0xC7 }, // (Offset,Value)-Pair #7 + { 0x78, 0x20 }, // (Offset,Value)-Pair #8 + { 0x79, 0x1B }, // (Offset,Value)-Pair #9 + { 0x7A, 0x04 }, // (Offset,Value)-Pair #10 + + // IDirect3DDevice8_SetPalette+0x8A : retn 0x08 + { 0x8A, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x8B, 0x08 }, // (Offset,Value)-Pair #12 + } +}; + // ****************************************************************** // * IDirect3DDevice8_Swap // ****************************************************************** @@ -247,6 +438,50 @@ SOOVPA<7> IDirect3DDevice8_Swap_1_0_5558 = } }; +// ****************************************************************** +// * IDirect3DDevice8_BlockUntilVerticalBlank +// ****************************************************************** +SOOVPA<11> IDirect3DDevice8_BlockUntilVerticalBlank_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x05, 0x6A }, + { 0x08, 0x00 }, + { 0x0D, 0xB0 }, + { 0x12, 0x00 }, + { 0x17, 0x05 }, + { 0x1C, 0x50 }, + { 0x23, 0xC3 }, + } +}; + +// ****************************************************************** +// * IDirect3DPalette8_Lock2 +// ****************************************************************** +SOOVPA<13> IDirect3DPalette8_Lock2_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x02, 0x24 }, + { 0x06, 0x8B }, + { 0x0A, 0x75 }, + { 0x12, 0x8B }, + { 0x13, 0x46 }, + { 0x16, 0x00 }, + { 0x1A, 0x5E }, + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetTransform // ****************************************************************** @@ -270,6 +505,85 @@ SOOVPA<8> IDirect3DDevice8_SetTransform_1_0_5558 = } }; +// ****************************************************************** +// * IDirect3DDevice8_GetBackBuffer2 +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_GetBackBuffer2_1_0_5558 = +{ + 0, // Large == 0 + 12, // Count == 12 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_GetBackBuffer2+0x04 : cmp eax, 0xFFFFFFFF + { 0x04, 0x83 }, // (Offset,Value)-Pair #1 + { 0x05, 0xF8 }, // (Offset,Value)-Pair #2 + { 0x06, 0xFF }, // (Offset,Value)-Pair #3 + + // IDirect3DDevice8_GetBackBuffer2+0x0D : jnz +0x19 + { 0x0D, 0x75 }, // (Offset,Value)-Pair #4 + { 0x0E, 0x19 }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_GetBackBuffer2+0x18 : mov esi, [ecx+eax*4+0x21C0] + { 0x15, 0x8B }, // (Offset,Value)-Pair #6 + { 0x16, 0xB4 }, // (Offset,Value)-Pair #7 + { 0x17, 0x81 }, // (Offset,Value)-Pair #8 + { 0x18, 0x04 }, // (Offset,Value)-Pair #9 + { 0x19, 0x1A }, // (Offset,Value)-Pair #10 + + // IDirect3DDevice8_GetBackBuffer2+0x40 : retn 0x04 + { 0x40, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x41, 0x04 }, // (Offset,Value)-Pair #12 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetShaderConstantMode +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_SetShaderConstantMode_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x1D, 0xFD }, + { 0x3C, 0x8B }, + { 0x5B, 0x0B }, + { 0x7A, 0x56 }, + { 0x99, 0xC0 }, + { 0xB8, 0x00 }, + { 0xD7, 0x89 }, + { 0xF6, 0x00 }, + } +}; + +// ****************************************************************** +// * IDirect3DTexture8_LockRect +// ****************************************************************** +SOOVPA<17> IDirect3DTexture8_LockRect_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x03, 0x14 }, + { 0x08, 0x8B }, + { 0x0D, 0x8B }, + { 0x12, 0x8B }, + { 0x17, 0x50 }, + { 0x20, 0xC2 }, + { 0x21, 0x14 }, + } +}; + // ****************************************************************** // * D3D8_1_0_5558 // ****************************************************************** @@ -285,6 +599,26 @@ OOVPATable D3D8_1_0_5558[] = "EmuIDirect3D8_CreateDevice" #endif }, + // IDirect3DDevice8::LoadVertexShader + { + (OOVPA*)&IDirect3DDevice8_LoadVertexShader_1_0_5558, + + XTL::EmuIDirect3DDevice8_LoadVertexShader, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_LoadVertexShader" + #endif + }, + // IDirect3DDevice8::SelectVertexShader + { + (OOVPA*)&IDirect3DDevice8_SelectVertexShader_1_0_5558, + + XTL::EmuIDirect3DDevice8_SelectVertexShader, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SelectVertexShader" + #endif + }, // IDirect3DDevice8::Clear { (OOVPA*)&IDirect3DDevice8_Clear_1_0_5558, @@ -295,6 +629,26 @@ OOVPATable D3D8_1_0_5558[] = "EmuIDirect3DDevice8_Clear" #endif }, + // IDirect3DDevice8::CreatePalette2 + { + (OOVPA*)&IDirect3DDevice8_CreatePalette2_1_0_5558, + + XTL::EmuIDirect3DDevice8_CreatePalette2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_CreatePalette2" + #endif + }, + // IDirect3DDevice8::SetPalette + { + (OOVPA*)&IDirect3DDevice8_SetPalette_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetPalette, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetPalette" + #endif + }, // IDirect3DDevice8::Swap { (OOVPA*)&IDirect3DDevice8_Swap_1_0_5558, @@ -305,6 +659,16 @@ OOVPATable D3D8_1_0_5558[] = "EmuIDirect3DDevice8_Swap" #endif }, + // IDirect3DDevice8::BlockUntilVerticalBlank + { + (OOVPA*)&IDirect3DDevice8_BlockUntilVerticalBlank_1_0_5558, + + XTL::EmuIDirect3DDevice8_BlockUntilVerticalBlank, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_BlockUntilVerticalBlank" + #endif + }, // IDirect3DDevice8::SetPixelShader { (OOVPA*)&IDirect3DDevice8_SetPixelShader_1_0_5558, @@ -455,6 +819,56 @@ OOVPATable D3D8_1_0_5558[] = "EmuIDirect3DDevice8_SetRenderState_ZEnable" #endif }, + // IDirect3DDevice8::SetRenderState_StencilEnable (* unchanged since 4361 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_StencilEnable_1_0_4361, + + XTL::EmuIDirect3DDevice8_SetRenderState_StencilEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_StencilEnable" + #endif + }, + // IDirect3DDevice8::SetRenderState_StencilFail (* unchanged since 4432 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_StencilFail_1_0_4432, + + XTL::EmuIDirect3DDevice8_SetRenderState_StencilFail, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_StencilFail" + #endif + }, + // IDirect3DDevice8::SetLight + { + (OOVPA*)&IDirect3DDevice8_SetLight_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetLight, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetLight" + #endif + }, + // IDirect3DDevice8::SetMaterial + { + (OOVPA*)&IDirect3DDevice8_SetMaterial_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetMaterial, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetMaterial" + #endif + }, + // IDirect3DDevice8::LightEnable + { + (OOVPA*)&IDirect3DDevice8_LightEnable_1_0_5558, + + XTL::EmuIDirect3DDevice8_LightEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_LightEnable" + #endif + }, // IDirect3DDevice8::SetRenderState_OcclusionCullEnable (* unchanged since 4432 *) { (OOVPA*)&IDirect3DDevice8_SetRenderState_OcclusionCullEnable_1_0_4432, @@ -545,6 +959,36 @@ OOVPATable D3D8_1_0_5558[] = "EmuIDirect3DDevice8_SetStreamSource" #endif }, + // IDirect3DDevice8::SetViewport + { + (OOVPA*)&IDirect3DDevice8_SetViewport_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetViewport, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetViewport" + #endif + }, + // IDirect3DDevice8::GetBackBuffer2 + { + (OOVPA*)&IDirect3DDevice8_GetBackBuffer2_1_0_5558, + + XTL::EmuIDirect3DDevice8_GetBackBuffer2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_GetBackBuffer2" + #endif + }, + // IDirect3DDevice8::SetShaderConstantMode + { + (OOVPA*)&IDirect3DDevice8_SetShaderConstantMode_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetShaderConstantMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetShaderConstantMode" + #endif + }, // IDirect3DResource8::AddRef (* unchanged since 3925 *) { (OOVPA*)&IDirect3DResource8_AddRef_1_0_3925, @@ -575,6 +1019,26 @@ OOVPATable D3D8_1_0_5558[] = "EmuIDirect3DSurface8_GetDesc" #endif }, + // IDirect3DPalette8::Lock2 + { + (OOVPA*)&IDirect3DPalette8_Lock2_1_0_5558, + + XTL::EmuIDirect3DPalette8_Lock2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DPalette8_Lock2" + #endif + }, + // IDirect3DTexture8::LockRect + { + (OOVPA*)&IDirect3DTexture8_LockRect_1_0_5558, + + XTL::EmuIDirect3DTexture8_LockRect, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DTexture8_LockRect" + #endif + }, // IDirect3DSurface8::LockRect (* unchanged since 4361 *) { (OOVPA*)&IDirect3DSurface8_LockRect_1_0_4361, diff --git a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl index defee508d..dc173357f 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl +++ b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl @@ -93,18 +93,18 @@ SOOVPA<12> IDirect3DDevice8_GetBackBuffer2_1_0_5849 = { 0x05, 0xF8 }, // (Offset,Value)-Pair #2 { 0x06, 0xFF }, // (Offset,Value)-Pair #3 - // IDirect3DDevice8_GetBackBuffer+0x0D : jnz +0x19 + // IDirect3DDevice8_GetBackBuffer2+0x0D : jnz +0x19 { 0x0D, 0x75 }, // (Offset,Value)-Pair #4 { 0x0E, 0x19 }, // (Offset,Value)-Pair #5 - // IDirect3DDevice8_GetBackBuffer+0x18 : mov esi, [ecx+eax*4+0x21C0] + // IDirect3DDevice8_GetBackBuffer2+0x18 : mov esi, [ecx+eax*4+0x21C0] { 0x15, 0x8B }, // (Offset,Value)-Pair #6 { 0x16, 0xB4 }, // (Offset,Value)-Pair #7 { 0x17, 0x81 }, // (Offset,Value)-Pair #8 { 0x18, 0x14 }, // (Offset,Value)-Pair #9 { 0x19, 0x1A }, // (Offset,Value)-Pair #10 - // IDirect3DDevice8_GetBackBuffer+0x40 : retn 0x04 + // IDirect3DDevice8_GetBackBuffer2+0x40 : retn 0x04 { 0x40, 0xC2 }, // (Offset,Value)-Pair #11 { 0x41, 0x04 }, // (Offset,Value)-Pair #12 } diff --git a/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl b/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl index 92ed14176..1e127c89d 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl +++ b/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl @@ -216,6 +216,29 @@ SOOVPA<8> XapiInitProcess_1_0_5558 = } }; +// ****************************************************************** +// * XapiInitProcess +// ****************************************************************** +SOOVPA<8> XapiInitProcess_1_0_5659 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x22, 0x6A }, + { 0x3E, 0x01 }, + { 0x5E, 0xEB }, + { 0x7E, 0x8B }, + { 0x9F, 0x68 }, + { 0xBE, 0x01 }, + { 0xDE, 0x6A }, + { 0xFE, 0x02 }, + } +}; + // ****************************************************************** // * XAPI_1_0_5558 // ****************************************************************** @@ -391,6 +414,16 @@ OOVPATable XAPI_1_0_5558[] = "EmuXapiInitProcess" #endif }, + // XapiInitProcess + { + (OOVPA*)&XapiInitProcess_1_0_5659, + + XTL::EmuXapiInitProcess, + + #ifdef _DEBUG_TRACE + "EmuXapiInitProcess" + #endif + }, // XapiBootToDash (* unchanged since 1.0.3911 *) { (OOVPA*)&XapiBootDash_1_0_3911,