diff --git a/src/CxbxKrnl/EmuD3D8.cpp b/src/CxbxKrnl/EmuD3D8.cpp index 55ec1c960..47f90a53a 100644 --- a/src/CxbxKrnl/EmuD3D8.cpp +++ b/src/CxbxKrnl/EmuD3D8.cpp @@ -8089,6 +8089,31 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_DrawIndexedVerticesUP) return; } +// ****************************************************************** +// * patch: D3DDevice_GetLight +// ****************************************************************** +HRESULT WINAPI XTL::EMUPATCH(D3DDevice_GetLight) +( + DWORD Index, + D3DLIGHT8 *pLight +) +{ + + + DbgPrintf("EmuD3D8: EmuD3DDevice_GetLight\n" + "(\n" + " Index : 0x%.08X\n" + " pLight : 0x%.08X\n" + ");\n", + Index, pLight); + + HRESULT hRet = g_pD3DDevice8->GetLight(Index, pLight); + + + + return hRet; +} + // ****************************************************************** // * patch: D3DDevice_SetLight // ****************************************************************** diff --git a/src/CxbxKrnl/EmuD3D8.h b/src/CxbxKrnl/EmuD3D8.h index 877dea5bb..f837befca 100644 --- a/src/CxbxKrnl/EmuD3D8.h +++ b/src/CxbxKrnl/EmuD3D8.h @@ -1278,6 +1278,15 @@ VOID WINAPI EMUPATCH(D3DDevice_DrawIndexedVerticesUP) UINT VertexStreamZeroStride ); +// ****************************************************************** +// * patch: D3DDevice_GetLight +// ****************************************************************** +HRESULT WINAPI EMUPATCH(D3DDevice_GetLight) +( + DWORD Index, + D3DLIGHT8 *pLight +); + // ****************************************************************** // * patch: D3DDevice_SetLight // ****************************************************************** diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.3925.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.3925.inl index 3ba7795fc..c5a026434 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.3925.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.3925.inl @@ -2651,6 +2651,29 @@ OOVPA_NO_XREF(D3DDevice_SetRenderState_Deferred, 3925, 9) { 0x14, 0xC3 }, OOVPA_END; +// ****************************************************************** +// * D3DDevice_GetLight +// ****************************************************************** +OOVPA_NO_XREF(D3DDevice_GetLight, 3925, 10) +// Based on Dxbx patterns for 3911, 4361, 4627, 5344, 5558, 5659, 5788, 5849, 5933 + + // D3DDevice_GetLight+0x0B : mov esi, [ecx+XXXh] + { 0x0B, 0x8B }, // (Offset,Value)-Pair #1 + { 0x0C, 0xB1 }, // (Offset,Value)-Pair #2 + { 0x0F, 0x00 }, // (Offset,Value)-Pair #3 + { 0x10, 0x00 }, // (Offset,Value)-Pair #4 + + // D3DDevice_GetLight+0x12 : mov edi, [esp+8+arg_4] + { 0x12, 0x8B }, // (Offset,Value)-Pair #5 + { 0x13, 0x7C }, // (Offset,Value)-Pair #6 + { 0x14, 0x24 }, // (Offset,Value)-Pair #7 + { 0x15, 0x10 }, // (Offset,Value)-Pair #8 + + // D3DDevice_GetLight+0x1F : mov ecx, 1Ah + { 0x1E, 0xB9 }, // (Offset,Value)-Pair #9 + { 0x1F, 0x1A }, // (Offset,Value)-Pair #10 +OOVPA_END; + // ****************************************************************** // * D3DDevice_SetLight // ****************************************************************** @@ -3751,6 +3774,7 @@ OOVPATable D3D8_3925[] = { REGISTER_OOVPA(D3DResource_GetType, 3925, DISABLED), // Probably not even necessary... REGISTER_OOVPA(D3D_AllocContiguousMemory, 3925, DISABLED), // Just calls MmAllocateContiguousMemory. Was PATCH // REGISTER_OOVPA(D3DDevice_SetRenderState_Deferred, 3925, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_LightEnable, 3925, PATCH), REGISTER_OOVPA(D3DDevice_CreateVertexShader, 3925, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4034.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4034.inl index d064c319b..8b0e6f8f3 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4034.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4034.inl @@ -1240,6 +1240,7 @@ OOVPATable D3D8_4034[] = { REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 4034, PATCH), REGISTER_OOVPA(D3D_GetAdapterIdentifier, 3925, DISABLED), REGISTER_OOVPA(D3DSurface_GetDesc, 3925, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 4034, PATCH), REGISTER_OOVPA(D3DVertexBuffer_Lock, 4034, PATCH), REGISTER_OOVPA(D3DDevice_SetTexture, 4034, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl index d65a4df95..da5e27841 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4134.inl @@ -2084,6 +2084,7 @@ OOVPATable D3D8_4134[] = { REGISTER_OOVPA(D3DDevice_DrawVertices, 4034, PATCH), REGISTER_OOVPA(D3DDevice_DrawVerticesUP, 4134, PATCH), REGISTER_OOVPA(D3DDevice_DrawIndexedVertices, 4034, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetMaterial, 4134, PATCH), REGISTER_OOVPA(D3DDevice_LightEnable, 4134, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.inl index c8114e8ef..2c8a52aa7 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.inl @@ -1865,6 +1865,7 @@ OOVPATable D3D8_4361[] = { REGISTER_OOVPA(D3DDevice_DrawVertices, 4361, PATCH), REGISTER_OOVPA(D3DDevice_DrawVerticesUP, 4361, PATCH), REGISTER_OOVPA(D3DDevice_DrawIndexedVertices, 4361, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 4361, PATCH), REGISTER_OOVPA(D3DDevice_SetMaterial, 4361, PATCH), REGISTER_OOVPA(D3DDevice_LightEnable, 4361, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl index 63626139d..aed913c6a 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl @@ -750,6 +750,7 @@ OOVPATable D3D8_4432[] { REGISTER_OOVPA(D3DDevice_SetStreamSource, 4361, PATCH), REGISTER_OOVPA(D3DDevice_SetVertexShader, 4361, PATCH), REGISTER_OOVPA(D3DDevice_DrawVerticesUP, 4361, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 4361, PATCH), REGISTER_OOVPA(D3DDevice_LightEnable, 4361, PATCH), REGISTER_OOVPA(D3DResource_Register, 3925, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl index db4c79dcb..6af40356e 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl @@ -3205,6 +3205,7 @@ REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH), REGISTER_OOVPA(D3DDevice_DrawVertices, 4361, PATCH), REGISTER_OOVPA(D3DDevice_DrawVerticesUP, 4627, PATCH), REGISTER_OOVPA(D3DDevice_DrawVerticesUP, 4627, ALIAS, D3DDevice_DrawVerticesUPB), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 4361, PATCH), REGISTER_OOVPA(D3DDevice_DrawIndexedVertices, 4627, PATCH), REGISTER_OOVPA(D3DDevice_SetMaterial, 4627, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5028.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5028.inl index a43d5aa5b..e55b69f54 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5028.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5028.inl @@ -889,6 +889,7 @@ OOVPATable D3D8_5028[] = { REGISTER_OOVPA(D3DDevice_DrawVerticesUP, 4627, PATCH), REGISTER_OOVPA(D3DDevice_SetVertexShader, 5028, PATCH), REGISTER_OOVPA(D3DDevice_DrawVertices, 5028, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 5028, PATCH), REGISTER_OOVPA(D3DDevice_DrawIndexedVertices, 5028, PATCH), REGISTER_OOVPA(D3DDevice_SetMaterial, 4627, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl index 47de5d05f..b7725bca7 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl @@ -1057,6 +1057,7 @@ OOVPATable D3D8_5233[] = { REGISTER_OOVPA(D3DDevice_SetTransform, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetStreamSource, 4361, PATCH), REGISTER_OOVPA(D3D_GetDeviceCaps, 5233, DISABLED), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 5233, PATCH), REGISTER_OOVPA(D3DDevice_LightEnable, 5233, PATCH), REGISTER_OOVPA(D3DDevice_DrawIndexedVertices, 5233, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5344.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5344.inl index 62f16848b..3f37722f2 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5344.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5344.inl @@ -904,7 +904,7 @@ OOVPATable D3D8_5344[] = { REGISTER_OOVPA(D3DDevice_SetTransform, 5344, PATCH), REGISTER_OOVPA(D3DDevice_SetStreamSource, 4361, PATCH), REGISTER_OOVPA(D3D_GetDeviceCaps, 5233, DISABLED), - REGISTER_OOVPA(D3DDevice_SetLight, 5233, DISABLED), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 5344, PATCH), REGISTER_OOVPA(D3DDevice_LightEnable, 5233, DISABLED), REGISTER_OOVPA(D3DDevice_LightEnable, 5344, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl index 15235043f..ad64be5a7 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl @@ -1541,6 +1541,7 @@ OOVPATable D3D8_5558[] = { REGISTER_OOVPA(D3DDevice_SetRenderState_ZEnable, 5233, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_StencilEnable, 4361, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_StencilFail, 4134, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 5558, PATCH), REGISTER_OOVPA(D3DDevice_SetMaterial, 5558, PATCH), REGISTER_OOVPA(D3DDevice_LightEnable, 5558, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5788.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5788.inl index 771e7c2ff..c0e73568e 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5788.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5788.inl @@ -1339,6 +1339,7 @@ OOVPATable D3D8_5788[] = { REGISTER_OOVPA(D3DTexture_LockRect, 5558, PATCH), REGISTER_OOVPA(D3DSurface_LockRect, 3925, PATCH), REGISTER_OOVPA(D3DBaseTexture_GetLevelCount, 4361, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 5558, PATCH), REGISTER_OOVPA(D3DTexture_GetSurfaceLevel2, 4627, PATCH), REGISTER_OOVPA(D3DTexture_LockRect, 5788, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl index a0091f2ea..857dbea62 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl @@ -1397,6 +1397,7 @@ OOVPATable D3D8_5849[] = { REGISTER_OOVPA(D3DSurface_LockRect, 3925, PATCH), REGISTER_OOVPA(D3DBaseTexture_GetLevelCount, 4361, PATCH), REGISTER_OOVPA(D3DTexture_GetSurfaceLevel2, 4627, PATCH), + REGISTER_OOVPA(D3DDevice_GetLight, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetLight, 5558, PATCH), REGISTER_OOVPA(D3DDevice_CreateVertexBuffer2, 5849, PATCH), REGISTER_OOVPA(D3DVertexBuffer_Lock, 5849, PATCH),