From a7362991e17e080c18e6e60bf3e32143dcfd46a4 Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Tue, 6 May 2003 06:40:09 +0000 Subject: [PATCH] Updated 4361. CxbxPong works hah! --- Include/Win32/CxbxKrnl/xd3d8.h | 32 ++- Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl | 260 +++++++++++++++++++++++- Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl | 196 ++---------------- Source/Win32/CxbxKrnl/EmuD3D8.cpp | 75 ++++++- 4 files changed, 369 insertions(+), 194 deletions(-) diff --git a/Include/Win32/CxbxKrnl/xd3d8.h b/Include/Win32/CxbxKrnl/xd3d8.h index 47e9cb451..68e038af2 100644 --- a/Include/Win32/CxbxKrnl/xd3d8.h +++ b/Include/Win32/CxbxKrnl/xd3d8.h @@ -140,6 +140,18 @@ HRESULT WINAPI EmuIDirect3DDevice8_Swap DWORD Flags ); +// ****************************************************************** +// * func: EmuIDirect3DDevice8_CreateVertexBuffer +// ****************************************************************** +HRESULT WINAPI EmuIDirect3DDevice8_CreateVertexBuffer +( + UINT Length, + DWORD Usage, + DWORD FVF, + D3DPOOL Pool, + D3DVertexBuffer **ppVertexBuffer +); + // ****************************************************************** // * func: EmuIDirect3DDevice8_CreateVertexBuffer // ****************************************************************** @@ -168,7 +180,19 @@ VOID WINAPI EmuIDirect3DDevice8_SetTransform // ****************************************************************** // * func: EmuIDirect3DVertexBuffer8_Lock // ****************************************************************** -BYTE* WINAPI EmuIDirect3DVertexBuffer8_Lock +VOID WINAPI EmuIDirect3DVertexBuffer8_Lock +( + D3DVertexBuffer *ppVertexBuffer, + UINT OffsetToLock, + UINT SizeToLock, + BYTE **ppbData, + DWORD Flags +); + +// ****************************************************************** +// * func: EmuIDirect3DVertexBuffer8_Lock2 +// ****************************************************************** +BYTE* WINAPI EmuIDirect3DVertexBuffer8_Lock2 ( D3DVertexBuffer *ppVertexBuffer, DWORD Flags @@ -177,7 +201,7 @@ BYTE* WINAPI EmuIDirect3DVertexBuffer8_Lock // ****************************************************************** // * func: EmuIDirect3DDevice8_SetStreamSource // ****************************************************************** -void WINAPI EmuIDirect3DDevice8_SetStreamSource +HRESULT WINAPI EmuIDirect3DDevice8_SetStreamSource ( UINT StreamNumber, D3DVertexBuffer *pStreamData, @@ -187,7 +211,7 @@ void WINAPI EmuIDirect3DDevice8_SetStreamSource // ****************************************************************** // * func: EmuIDirect3DDevice8_SetVertexShader // ****************************************************************** -void WINAPI EmuIDirect3DDevice8_SetVertexShader +HRESULT WINAPI EmuIDirect3DDevice8_SetVertexShader ( DWORD Handle ); @@ -195,7 +219,7 @@ void WINAPI EmuIDirect3DDevice8_SetVertexShader // ****************************************************************** // * func: EmuIDirect3DDevice8_DrawVertices // ****************************************************************** -void WINAPI EmuIDirect3DDevice8_DrawVertices +HRESULT WINAPI EmuIDirect3DDevice8_DrawVertices ( D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, diff --git a/Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl b/Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl index 81563922d..7170ecd00 100644 --- a/Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl +++ b/Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl @@ -115,10 +115,99 @@ SOOVPA<11> IDirect3DDevice8_Swap_1_0_4361 = } }; + // ****************************************************************** // * IDirect3DDevice8_CreateVertexBuffer // ****************************************************************** -// NOTE: This is set up differently than other XDK version! +SOOVPA<13> IDirect3DDevice8_CreateVertexBuffer_1_0_4627 = +{ + 0, // Large == 0 + 13, // Count == 13 + + { + // IDirect3DDevice8_CreateVertexBuffer+0x03 : push 0x40 + { 0x03, 0x6A }, // (Offset,Value)-Pair #1 + { 0x04, 0x40 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_CreateVertexBuffer+0x10 : mov eax, [esp+8] + { 0x10, 0x8B }, // (Offset,Value)-Pair #3 + { 0x11, 0x44 }, // (Offset,Value)-Pair #4 + { 0x12, 0x24 }, // (Offset,Value)-Pair #5 + { 0x13, 0x08 }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_CreateVertexBuffer+0x48 : mov dword ptr [esi], 0x01000001 + { 0x48, 0xC7 }, // (Offset,Value)-Pair #7 + { 0x49, 0x06 }, // (Offset,Value)-Pair #8 + { 0x4A, 0x01 }, // (Offset,Value)-Pair #9 + { 0x4B, 0x00 }, // (Offset,Value)-Pair #10 + { 0x4D, 0x01 }, // (Offset,Value)-Pair #11 + + // IDirect3DDevice8_CreateVertexBuffer+0x53 : retn 0x14 + { 0x53, 0xC2 }, // (Offset,Value)-Pair #12 + { 0x54, 0x14 }, // (Offset,Value)-Pair #13 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_CullMode +// ****************************************************************** +SOOVPA<13> IDirect3DDevice8_SetRenderState_CullMode_1_0_4361 = +{ + 0, // Large == 0 + 13, // Count == 13 + + { + // IDirect3DDevice8_SetRenderState_CullMode+0x19 : mov dword ptr [eax], 0x40308 + { 0x19, 0xC7 }, // (Offset,Value)-Pair #1 + { 0x1B, 0x08 }, // (Offset,Value)-Pair #2 + { 0x1C, 0x03 }, // (Offset,Value)-Pair #3 + { 0x1D, 0x04 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_CullMode+0x24 : add eax, 8 + { 0x24, 0x83 }, // (Offset,Value)-Pair #5 + { 0x25, 0xC0 }, // (Offset,Value)-Pair #6 + { 0x26, 0x08 }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_SetRenderState_CullMode+0x30 : retn 4 + { 0x30, 0xC2 }, // (Offset,Value)-Pair #8 + { 0x31, 0x04 }, // (Offset,Value)-Pair #9 + + // IDirect3DDevice8_SetRenderState_CullMode+0x53 : add edx, 0x404 + { 0x53, 0x81 }, // (Offset,Value)-Pair #10 + { 0x54, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x55, 0x04 }, // (Offset,Value)-Pair #12 + { 0x56, 0x04 }, // (Offset,Value)-Pair #13 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetTransform +// ****************************************************************** +SOOVPA<10> IDirect3DDevice8_SetTransform_1_0_4361 = +{ + 0, // Large == 0 + 10, // Count == 10 + + { + // IDirect3DDevice8_SetTransform+0x16 : lea edi, [ecx+ebx+0x750] + { 0x16, 0x8D }, // (Offset,Value)-Pair #1 + { 0x17, 0xBC }, // (Offset,Value)-Pair #2 + { 0x18, 0x19 }, // (Offset,Value)-Pair #3 + + // IDirect3DDevice8_SetTransform+0x24 : repe movsd + { 0x24, 0xF3 }, // (Offset,Value)-Pair #4 + { 0x25, 0xA5 }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_SetTransform+0x78 : fld [edx+0x3C] + { 0x78, 0xD9 }, // (Offset,Value)-Pair #6 + { 0x79, 0x42 }, // (Offset,Value)-Pair #7 + { 0x7A, 0x3C }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetTransform+0x92 : jmp +0x10 + { 0x92, 0xEB }, // (Offset,Value)-Pair #9 + { 0x93, 0x10 }, // (Offset,Value)-Pair #10 + } +}; // ****************************************************************** // * IDirect3DVertexBuffer8_Lock @@ -150,6 +239,105 @@ SOOVPA<11> IDirect3DVertexBuffer8_Lock_1_0_4361 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetStreamSource +// ****************************************************************** +SOOVPA<14> IDirect3DDevice8_SetStreamSource_1_0_4361 = +{ + 0, // Large == 0 + 14, // Count == 14 + + { + // IDirect3DDevice8_SetStreamSource+0x08 : mov edi, [esp+8+0x04] + { 0x08, 0x8B }, // (Offset,Value)-Pair #1 + { 0x09, 0x7C }, // (Offset,Value)-Pair #2 + { 0x0A, 0x24 }, // (Offset,Value)-Pair #3 + { 0x0B, 0x10 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetStreamSource+0x28 : jz +0x26 + { 0x28, 0x74 }, // (Offset,Value)-Pair #5 + { 0x29, 0x26 }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_SetStreamSource+0x70 : or ecx, 0x40 + { 0x70, 0x83 }, // (Offset,Value)-Pair #7 + { 0x71, 0xC9 }, // (Offset,Value)-Pair #8 + { 0x72, 0x40 }, // (Offset,Value)-Pair #9 + + // IDirect3DDevice8_SetStreamSource+0x7E : or ecx, 0x70 + { 0x7E, 0x83 }, // (Offset,Value)-Pair #10 + { 0x7F, 0xC9 }, // (Offset,Value)-Pair #11 + { 0x80, 0x70 }, // (Offset,Value)-Pair #12 + + // IDirect3DDevice8_SetStreamSource+0x89 : retn 0x0C + { 0x89, 0xC2 }, // (Offset,Value)-Pair #13 + { 0x8A, 0x0C }, // (Offset,Value)-Pair #14 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetVertexShader +// ****************************************************************** +SOOVPA<14> IDirect3DDevice8_SetVertexShader_1_0_4361 = +{ + 0, // Large == 0 + 14, // Count == 14 + + { + // IDirect3DDevice8_SetVertexShader+0x06 : test bl, 1 + { 0x06, 0xF6 }, // (Offset,Value)-Pair #1 + { 0x07, 0xC3 }, // (Offset,Value)-Pair #2 + { 0x08, 0x01 }, // (Offset,Value)-Pair #3 + + // IDirect3DDevice8_SetVertexShader+0x11 : mov eax, [esi+0x0380] + { 0x11, 0x8B }, // (Offset,Value)-Pair #4 + { 0x12, 0x86 }, // (Offset,Value)-Pair #5 + { 0x13, 0x80 }, // (Offset,Value)-Pair #6 + { 0x14, 0x03 }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_SetVertexShader+0x90 : retn 0x04 + { 0x90, 0xC2 }, // (Offset,Value)-Pair #8 + { 0x91, 0x04 }, // (Offset,Value)-Pair #9 + + // IDirect3DDevice8_SetVertexShader+0xB0 : mov dword ptr [eaax], 0x4194C + { 0xB0, 0xC7 }, // (Offset,Value)-Pair #10 + { 0xB1, 0x00 }, // (Offset,Value)-Pair #11 + { 0xB2, 0x4C }, // (Offset,Value)-Pair #12 + { 0xB3, 0x19 }, // (Offset,Value)-Pair #13 + { 0xB4, 0x04 }, // (Offset,Value)-Pair #14 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_DrawVertices +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_DrawVertices_1_0_4361 = +{ + 0, // Large == 0 + 12, // Count == 12 + + { + // IDirect3DDevice8_DrawVertices+0x12 : mov edi, [esp+0x0C+0x0C] + { 0x12, 0x8B }, // (Offset,Value)-Pair #1 + { 0x13, 0x7C }, // (Offset,Value)-Pair #2 + { 0x14, 0x24 }, // (Offset,Value)-Pair #3 + { 0x15, 0x18 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_DrawVertices+0x16 : lea esi, [edi-1] + { 0x16, 0x8D }, // (Offset,Value)-Pair #5 + { 0x17, 0x77 }, // (Offset,Value)-Pair #6 + { 0x18, 0xFF }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_DrawVertices+0x7E : shl edi, 0x18 + { 0x7E, 0xC1 }, // (Offset,Value)-Pair #8 + { 0x7F, 0xE7 }, // (Offset,Value)-Pair #9 + { 0x80, 0x18 }, // (Offset,Value)-Pair #10 + + // IDirect3DDevice8_DrawVertices+0x9C : retn 0x0C + { 0x9C, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x9D, 0x0C }, // (Offset,Value)-Pair #12 + } +}; + // ****************************************************************** // * D3D8_1_0_4361 // ****************************************************************** @@ -185,6 +373,76 @@ OOVPATable D3D8_1_0_4361[] = "EmuIDirect3DDevice8_Swap" #endif }, + // IDirect3DDevice8::CreateVertexBuffer + { + (OOVPA*)&IDirect3DDevice8_CreateVertexBuffer_1_0_4627, + + xd3d8::EmuIDirect3DDevice8_CreateVertexBuffer, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_CreateVertexBuffer" + #endif + }, + // IDirect3DDevice8::SetRenderState_CullMode + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetRenderState_CullMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_CullMode" + #endif + }, + // IDirect3DDevice8::SetTransform + { + (OOVPA*)&IDirect3DDevice8_SetTransform_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetTransform, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetTransform" + #endif + }, + // IDirect3DVertexBuffer8::Lock + { + (OOVPA*)&IDirect3DVertexBuffer8_Lock_1_0_4361, + + xd3d8::EmuIDirect3DVertexBuffer8_Lock, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DVertexBuffer8_Lock" + #endif + }, + // IDirect3DDevice8::SetStreamSource + { + (OOVPA*)&IDirect3DDevice8_SetStreamSource_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetStreamSource, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetStreamSource" + #endif + }, + // IDirect3DDevice8::DrawVertices + { + (OOVPA*)&IDirect3DDevice8_DrawVertices_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_DrawVertices, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_DrawVertices" + #endif + }, + // IDirect3DDevice8::SetVertexShader + { + (OOVPA*)&IDirect3DDevice8_SetVertexShader_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetVertexShader, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetVertexShader" + #endif + }, }; // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl b/Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl index 17beb9501..10fbf71c4 100644 --- a/Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl +++ b/Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl @@ -116,7 +116,7 @@ SOOVPA<11> IDirect3DDevice8_Swap_1_0_4627 = }; // ****************************************************************** -// * IDirect3DDevice8_CreateVertexBuffer +// * IDirect3DDevice8_CreateVertexBuffer2 // ****************************************************************** SOOVPA<13> IDirect3DDevice8_CreateVertexBuffer2_1_0_4627 = { @@ -148,72 +148,9 @@ SOOVPA<13> IDirect3DDevice8_CreateVertexBuffer2_1_0_4627 = }; // ****************************************************************** -// * IDirect3DDevice8_SetRenderState_CullMode +// * IDirect3DVertexBuffer8_Lock2 // ****************************************************************** -SOOVPA<13> IDirect3DDevice8_SetRenderState_CullMode_1_0_4627 = -{ - 0, // Large == 0 - 13, // Count == 13 - - { - // IDirect3DDevice8_SetRenderState_CullMode+0x19 : mov dword ptr [eax], 0x40308 - { 0x19, 0xC7 }, // (Offset,Value)-Pair #1 - { 0x1B, 0x08 }, // (Offset,Value)-Pair #2 - { 0x1C, 0x03 }, // (Offset,Value)-Pair #3 - { 0x1D, 0x04 }, // (Offset,Value)-Pair #4 - - // IDirect3DDevice8_SetRenderState_CullMode+0x24 : add eax, 8 - { 0x24, 0x83 }, // (Offset,Value)-Pair #5 - { 0x25, 0xC0 }, // (Offset,Value)-Pair #6 - { 0x26, 0x08 }, // (Offset,Value)-Pair #7 - - // IDirect3DDevice8_SetRenderState_CullMode+0x30 : retn 4 - { 0x30, 0xC2 }, // (Offset,Value)-Pair #8 - { 0x31, 0x04 }, // (Offset,Value)-Pair #9 - - // IDirect3DDevice8_SetRenderState_CullMode+0x53 : add edx, 0x404 - { 0x53, 0x81 }, // (Offset,Value)-Pair #10 - { 0x54, 0xC2 }, // (Offset,Value)-Pair #11 - { 0x55, 0x04 }, // (Offset,Value)-Pair #12 - { 0x56, 0x04 }, // (Offset,Value)-Pair #13 - } -}; - -// ****************************************************************** -// * IDirect3DDevice8_SetTransform -// ****************************************************************** -SOOVPA<12> IDirect3DDevice8_SetTransform_1_0_4627 = -{ - 0, // Large == 0 - 12, // Count == 12 - - { - // IDirect3DDevice8_SetTransform+0x16 : lea edi, [ecx+ebx+0x810] - { 0x16, 0x8D }, // (Offset,Value)-Pair #1 - { 0x17, 0xBC }, // (Offset,Value)-Pair #2 - { 0x18, 0x19 }, // (Offset,Value)-Pair #3 - { 0x19, 0x10 }, // (Offset,Value)-Pair #4 - { 0x1A, 0x08 }, // (Offset,Value)-Pair #5 - - // IDirect3DDevice8_SetTransform+0x24 : repe movsd - { 0x24, 0xF3 }, // (Offset,Value)-Pair #6 - { 0x25, 0xA5 }, // (Offset,Value)-Pair #7 - - // IDirect3DDevice8_SetTransform+0x78 : fld [edx+0x3C] - { 0x78, 0xD9 }, // (Offset,Value)-Pair #8 - { 0x79, 0x42 }, // (Offset,Value)-Pair #9 - { 0x7A, 0x3C }, // (Offset,Value)-Pair #10 - - // IDirect3DDevice8_SetTransform+0x92 : jmp +0x10 - { 0x92, 0xEB }, // (Offset,Value)-Pair #11 - { 0x93, 0x10 }, // (Offset,Value)-Pair #12 - } -}; - -// ****************************************************************** -// * IDirect3DVertexBuffer8_Lock -// ****************************************************************** -SOOVPA<11> IDirect3DVertexBuffer8_Lock_1_0_4627 = +SOOVPA<11> IDirect3DVertexBuffer8_Lock2_1_0_4627 = { 0, // Large == 0 11, // Count == 11 @@ -240,105 +177,6 @@ SOOVPA<11> IDirect3DVertexBuffer8_Lock_1_0_4627 = } }; -// ****************************************************************** -// * IDirect3DDevice8_SetStreamSource -// ****************************************************************** -SOOVPA<14> IDirect3DDevice8_SetStreamSource_1_0_4627 = -{ - 0, // Large == 0 - 14, // Count == 14 - - { - // IDirect3DDevice8_SetStreamSource+0x08 : mov edi, [esp+8+0x04] - { 0x08, 0x8B }, // (Offset,Value)-Pair #1 - { 0x09, 0x7C }, // (Offset,Value)-Pair #2 - { 0x0A, 0x24 }, // (Offset,Value)-Pair #3 - { 0x0B, 0x10 }, // (Offset,Value)-Pair #4 - - // IDirect3DDevice8_SetStreamSource+0x28 : jz +0x26 - { 0x28, 0x74 }, // (Offset,Value)-Pair #5 - { 0x29, 0x26 }, // (Offset,Value)-Pair #6 - - // IDirect3DDevice8_SetStreamSource+0x70 : or ecx, 0x40 - { 0x70, 0x83 }, // (Offset,Value)-Pair #7 - { 0x71, 0xC9 }, // (Offset,Value)-Pair #8 - { 0x72, 0x40 }, // (Offset,Value)-Pair #9 - - // IDirect3DDevice8_SetStreamSource+0x7E : or ecx, 0x70 - { 0x7E, 0x83 }, // (Offset,Value)-Pair #10 - { 0x7F, 0xC9 }, // (Offset,Value)-Pair #11 - { 0x80, 0x70 }, // (Offset,Value)-Pair #12 - - // IDirect3DDevice8_SetStreamSource+0x89 : retn 0x0C - { 0x89, 0xC2 }, // (Offset,Value)-Pair #13 - { 0x8A, 0x0C }, // (Offset,Value)-Pair #14 - } -}; - -// ****************************************************************** -// * IDirect3DDevice8_SetVertexShader -// ****************************************************************** -SOOVPA<14> IDirect3DDevice8_SetVertexShader_1_0_4627 = -{ - 0, // Large == 0 - 14, // Count == 14 - - { - // IDirect3DDevice8_SetVertexShader+0x06 : test bl, 1 - { 0x06, 0xF6 }, // (Offset,Value)-Pair #1 - { 0x07, 0xC3 }, // (Offset,Value)-Pair #2 - { 0x08, 0x01 }, // (Offset,Value)-Pair #3 - - // IDirect3DDevice8_SetVertexShader+0x11 : mov eax, [esi+0x0380] - { 0x11, 0x8B }, // (Offset,Value)-Pair #4 - { 0x12, 0x86 }, // (Offset,Value)-Pair #5 - { 0x13, 0x80 }, // (Offset,Value)-Pair #6 - { 0x14, 0x03 }, // (Offset,Value)-Pair #7 - - // IDirect3DDevice8_SetVertexShader+0x90 : retn 0x04 - { 0x90, 0xC2 }, // (Offset,Value)-Pair #8 - { 0x91, 0x04 }, // (Offset,Value)-Pair #9 - - // IDirect3DDevice8_SetVertexShader+0xB0 : mov dword ptr [eaax], 0x4194C - { 0xB0, 0xC7 }, // (Offset,Value)-Pair #10 - { 0xB1, 0x00 }, // (Offset,Value)-Pair #11 - { 0xB2, 0x4C }, // (Offset,Value)-Pair #12 - { 0xB3, 0x19 }, // (Offset,Value)-Pair #13 - { 0xB4, 0x04 }, // (Offset,Value)-Pair #14 - } -}; - -// ****************************************************************** -// * IDirect3DDevice8_DrawVertices -// ****************************************************************** -SOOVPA<12> IDirect3DDevice8_DrawVertices_1_0_4627 = -{ - 0, // Large == 0 - 12, // Count == 12 - - { - // IDirect3DDevice8_DrawVertices+0x12 : mov edi, [esp+0x0C+0x0C] - { 0x12, 0x8B }, // (Offset,Value)-Pair #1 - { 0x13, 0x7C }, // (Offset,Value)-Pair #2 - { 0x14, 0x24 }, // (Offset,Value)-Pair #3 - { 0x15, 0x18 }, // (Offset,Value)-Pair #4 - - // IDirect3DDevice8_DrawVertices+0x16 : lea esi, [edi-1] - { 0x16, 0x8D }, // (Offset,Value)-Pair #5 - { 0x17, 0x77 }, // (Offset,Value)-Pair #6 - { 0x18, 0xFF }, // (Offset,Value)-Pair #7 - - // IDirect3DDevice8_DrawVertices+0x7E : shl edi, 0x18 - { 0x7E, 0xC1 }, // (Offset,Value)-Pair #8 - { 0x7F, 0xE7 }, // (Offset,Value)-Pair #9 - { 0x80, 0x18 }, // (Offset,Value)-Pair #10 - - // IDirect3DDevice8_DrawVertices+0x9C : retn 0x0C - { 0x9C, 0xC2 }, // (Offset,Value)-Pair #11 - { 0x9D, 0x0C }, // (Offset,Value)-Pair #12 - } -}; - // ****************************************************************** // * D3D8_1_0_4627 // ****************************************************************** @@ -384,9 +222,9 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_CreateVertexBuffer2" #endif }, - // IDirect3DDevice8::SetRenderState_CullMode + // IDirect3DDevice8::SetRenderState_CullMode (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_4627, + (OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_4361, xd3d8::EmuIDirect3DDevice8_SetRenderState_CullMode, @@ -394,9 +232,9 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetRenderState_CullMode" #endif }, - // IDirect3DDevice8::SetTransform + // IDirect3DDevice8::SetTransform (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_SetTransform_1_0_4627, + (OOVPA*)&IDirect3DDevice8_SetTransform_1_0_4361, xd3d8::EmuIDirect3DDevice8_SetTransform, @@ -404,19 +242,19 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetTransform" #endif }, - // IDirect3DVertexBuffer8::Lock + // IDirect3DVertexBuffer8::Lock2 { - (OOVPA*)&IDirect3DVertexBuffer8_Lock_1_0_4627, + (OOVPA*)&IDirect3DVertexBuffer8_Lock2_1_0_4627, - xd3d8::EmuIDirect3DVertexBuffer8_Lock, + xd3d8::EmuIDirect3DVertexBuffer8_Lock2, #ifdef _DEBUG_TRACE - "EmuIDirect3DVertexBuffer8_Lock" + "EmuIDirect3DVertexBuffer8_Lock2" #endif }, - // IDirect3DDevice8::SetStreamSource + // IDirect3DDevice8::SetStreamSource (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_SetStreamSource_1_0_4627, + (OOVPA*)&IDirect3DDevice8_SetStreamSource_1_0_4361, xd3d8::EmuIDirect3DDevice8_SetStreamSource, @@ -424,9 +262,9 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetStreamSource" #endif }, - // IDirect3DDevice8::SetVertexShader + // IDirect3DDevice8::SetVertexShader (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_SetVertexShader_1_0_4627, + (OOVPA*)&IDirect3DDevice8_SetVertexShader_1_0_4361, xd3d8::EmuIDirect3DDevice8_SetVertexShader, @@ -434,9 +272,9 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetVertexShader" #endif }, - // IDirect3DDevice8::DrawVertices + // IDirect3DDevice8::DrawVertices (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_DrawVertices_1_0_4627, + (OOVPA*)&IDirect3DDevice8_DrawVertices_1_0_4361, xd3d8::EmuIDirect3DDevice8_DrawVertices, diff --git a/Source/Win32/CxbxKrnl/EmuD3D8.cpp b/Source/Win32/CxbxKrnl/EmuD3D8.cpp index 79ef703ee..9302e47eb 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8.cpp @@ -559,6 +559,23 @@ HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_Swap // ****************************************************************** // * func: EmuIDirect3DDevice8_CreateVertexBuffer // ****************************************************************** +HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_CreateVertexBuffer +( + UINT Length, + DWORD Usage, + DWORD FVF, + D3DPOOL Pool, + D3DVertexBuffer **ppVertexBuffer +) +{ + *ppVertexBuffer = EmuIDirect3DDevice8_CreateVertexBuffer2(Length); + + return D3D_OK; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_CreateVertexBuffer2 +// ****************************************************************** xd3d8::D3DVertexBuffer* WINAPI xd3d8::EmuIDirect3DDevice8_CreateVertexBuffer2 ( UINT Length @@ -689,7 +706,45 @@ VOID WINAPI xd3d8::EmuIDirect3DDevice8_SetTransform // ****************************************************************** // * func: EmuIDirect3DVertexBuffer8_Lock // ****************************************************************** -BYTE* WINAPI xd3d8::EmuIDirect3DVertexBuffer8_Lock +VOID WINAPI xd3d8::EmuIDirect3DVertexBuffer8_Lock +( + D3DVertexBuffer *ppVertexBuffer, + UINT OffsetToLock, + UINT SizeToLock, + BYTE **ppbData, + DWORD Flags +) +{ + EmuSwapFS(); // Win2k/XP FS + + // ****************************************************************** + // * debug trace + // ****************************************************************** + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%.08X): EmuIDirect3DVertexBuffer8_Lock\n" + "(\n" + " ppVertexBuffer : 0x%.08X\n" + " OffsetToLock : 0x%.08X\n" + " SizeToLock : 0x%.08X\n" + " ppbData : 0x%.08X\n" + " Flags : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), ppVertexBuffer, OffsetToLock, SizeToLock, ppbData, Flags); + } + #endif + + HRESULT hRet = ((IDirect3DVertexBuffer8*)ppVertexBuffer)->Lock(OffsetToLock, SizeToLock, ppbData, Flags); + + EmuSwapFS(); // XBox FS + + return; +} + +// ****************************************************************** +// * func: EmuIDirect3DVertexBuffer8_Lock2 +// ****************************************************************** +BYTE* WINAPI xd3d8::EmuIDirect3DVertexBuffer8_Lock2 ( D3DVertexBuffer *ppVertexBuffer, DWORD Flags @@ -702,7 +757,7 @@ BYTE* WINAPI xd3d8::EmuIDirect3DVertexBuffer8_Lock // ****************************************************************** #ifdef _DEBUG_TRACE { - printf("EmuD3D8 (0x%.08X): EmuIDirect3DVertexBuffer8_Lock\n" + printf("EmuD3D8 (0x%.08X): EmuIDirect3DVertexBuffer8_Lock2\n" "(\n" " ppVertexBuffer : 0x%.08X\n" " Flags : 0x%.08X\n" @@ -723,7 +778,7 @@ BYTE* WINAPI xd3d8::EmuIDirect3DVertexBuffer8_Lock // ****************************************************************** // * func: EmuIDirect3DDevice8_SetStreamSource // ****************************************************************** -void WINAPI xd3d8::EmuIDirect3DDevice8_SetStreamSource +HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_SetStreamSource ( UINT StreamNumber, D3DVertexBuffer *pStreamData, @@ -749,17 +804,17 @@ void WINAPI xd3d8::EmuIDirect3DDevice8_SetStreamSource ((IDirect3DVertexBuffer8*)pStreamData)->Unlock(); - HRESULT ret = g_pD3D8Device->SetStreamSource(StreamNumber, (IDirect3DVertexBuffer8*)pStreamData, Stride); + HRESULT hRet = g_pD3D8Device->SetStreamSource(StreamNumber, (IDirect3DVertexBuffer8*)pStreamData, Stride); EmuSwapFS(); // XBox FS - return; + return hRet; } // ****************************************************************** // * func: EmuIDirect3DDevice8_SetVertexShader // ****************************************************************** -void WINAPI xd3d8::EmuIDirect3DDevice8_SetVertexShader +HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_SetVertexShader ( DWORD Handle ) @@ -779,17 +834,17 @@ void WINAPI xd3d8::EmuIDirect3DDevice8_SetVertexShader } #endif - HRESULT ret = g_pD3D8Device->SetVertexShader(Handle); + HRESULT hRet = g_pD3D8Device->SetVertexShader(Handle); EmuSwapFS(); // XBox FS - return; + return hRet; } // ****************************************************************** // * func: EmuIDirect3DDevice8_DrawVertices // ****************************************************************** -void WINAPI xd3d8::EmuIDirect3DDevice8_DrawVertices +HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_DrawVertices ( D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, @@ -827,5 +882,5 @@ void WINAPI xd3d8::EmuIDirect3DDevice8_DrawVertices EmuSwapFS(); // XBox FS - return; + return hRet; }