This commit is contained in:
parent
3e20fc5835
commit
6c94e96ca4
|
@ -1,10 +1,8 @@
|
||||||
Cxbx Todo (* denotes high priority)
|
Cxbx Todo (* denotes high priority)
|
||||||
|
|
||||||
* D3D8.lib D3DDevice_SetRenderState_ZEnable@4 for 4627
|
|
||||||
|
|
||||||
* XAPILIB XapiThreadStartup for 4627
|
* XAPILIB XapiThreadStartup for 4627
|
||||||
|
|
||||||
* Stabilize Heap Allocation (i.e. new) -> Crashes after initial commit is full
|
* Stabilize Heap Allocation (i.e. operator new) -> Crashes after initial commit is full
|
||||||
|
|
||||||
* Stabilize TLS (it's close...)
|
* Stabilize TLS (it's close...)
|
||||||
|
|
||||||
|
@ -12,8 +10,6 @@ Cxbx Todo (* denotes high priority)
|
||||||
|
|
||||||
* Retail Games (esp. XDK 4361)
|
* Retail Games (esp. XDK 4361)
|
||||||
|
|
||||||
* SetRenderState Simple for 4627 (Draw[Indexed]Vertices states are +10 up to 116, then some new ones?)
|
|
||||||
|
|
||||||
* What does SetLastError check Irql for? Should this be emulated?
|
* What does SetLastError check Irql for? Should this be emulated?
|
||||||
|
|
||||||
Perfect the timing on KeTickCount
|
Perfect the timing on KeTickCount
|
||||||
|
|
|
@ -61,7 +61,7 @@ typedef signed long sint32;
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * Version information
|
// * Version information
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
#define _CXBX_VERSION "0.7.0-pre2"
|
#define _CXBX_VERSION "0.7.0-pre3"
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * Define this to trace intercepted function calls
|
// * Define this to trace intercepted function calls
|
||||||
|
|
|
@ -72,9 +72,9 @@ extern UINT D3DVertexToPrimitive[11][2];
|
||||||
extern D3DRENDERSTATETYPE D3DRenderState2PC[160];
|
extern D3DRENDERSTATETYPE D3DRenderState2PC[160];
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * EmuD3DRenderState
|
// * EmuD3DDefferedRenderState
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
extern DWORD *EmuD3DRenderState;
|
extern DWORD *EmuD3DDefferedRenderState;
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * EmuPrimitiveType
|
// * EmuPrimitiveType
|
||||||
|
|
|
@ -180,7 +180,6 @@ SOOVPA<13> IDirect3DDevice8_SetRenderState_CullMode_1_0_4361 =
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * IDirect3DDevice8_SetRenderState_ZEnable
|
// * IDirect3DDevice8_SetRenderState_ZEnable
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
|
|
@ -147,6 +147,39 @@ SOOVPA<13> IDirect3DDevice8_CreateVertexBuffer2_1_0_4627 =
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ******************************************************************
|
||||||
|
// * IDirect3DDevice8_SetRenderState_ZEnable
|
||||||
|
// ******************************************************************
|
||||||
|
SOOVPA<13> IDirect3DDevice8_SetRenderState_ZEnable_1_0_4627 =
|
||||||
|
{
|
||||||
|
0, // Large == 0
|
||||||
|
13, // Count == 13
|
||||||
|
|
||||||
|
{
|
||||||
|
// IDirect3DDevice8_SetRenderState_CullMode+0x0C : jb +0x05
|
||||||
|
{ 0x0C, 0x72 }, // (Offset,Value)-Pair #1
|
||||||
|
{ 0x0D, 0x05 }, // (Offset,Value)-Pair #2
|
||||||
|
|
||||||
|
// IDirect3DDevice8_SetRenderState_CullMode+0x1B : mov ecx, [esi+0x21B8h]
|
||||||
|
{ 0x1B, 0x8B }, // (Offset,Value)-Pair #3
|
||||||
|
{ 0x1C, 0x8E }, // (Offset,Value)-Pair #4
|
||||||
|
{ 0x1D, 0xB8 }, // (Offset,Value)-Pair #5
|
||||||
|
{ 0x1E, 0x21 }, // (Offset,Value)-Pair #6
|
||||||
|
|
||||||
|
// IDirect3DDevice8_SetRenderState_CullMode+0x2E : mov dword ptr [eax], 0x4030
|
||||||
|
{ 0x2E, 0xC7 }, // (Offset,Value)-Pair #7
|
||||||
|
{ 0x2F, 0x00 }, // (Offset,Value)-Pair #8
|
||||||
|
{ 0x30, 0x0C }, // (Offset,Value)-Pair #9
|
||||||
|
{ 0x31, 0x03 }, // (Offset,Value)-Pair #10
|
||||||
|
{ 0x32, 0x04 }, // (Offset,Value)-Pair #11
|
||||||
|
|
||||||
|
// IDirect3DDevice8_SetRenderState_CullMode+0x8C : retn 0x04
|
||||||
|
{ 0x8C, 0xC2 }, // (Offset,Value)-Pair #12
|
||||||
|
{ 0x8D, 0x04 }, // (Offset,Value)-Pair #13
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * IDirect3DVertexBuffer8_Lock2
|
// * IDirect3DVertexBuffer8_Lock2
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
@ -232,6 +265,16 @@ OOVPATable D3D8_1_0_4627[] =
|
||||||
"EmuIDirect3DDevice8_SetRenderState_CullMode"
|
"EmuIDirect3DDevice8_SetRenderState_CullMode"
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
|
// IDirect3DDevice8::SetRenderState_ZEnable
|
||||||
|
{
|
||||||
|
(OOVPA*)&IDirect3DDevice8_SetRenderState_ZEnable_1_0_4627,
|
||||||
|
|
||||||
|
xd3d8::EmuIDirect3DDevice8_SetRenderState_ZEnable,
|
||||||
|
|
||||||
|
#ifdef _DEBUG_TRACE
|
||||||
|
"EmuIDirect3DDevice8_SetRenderState_ZEnable"
|
||||||
|
#endif
|
||||||
|
},
|
||||||
// IDirect3DDevice8::SetTransform (* unchanged since 4361 *)
|
// IDirect3DDevice8::SetTransform (* unchanged since 4361 *)
|
||||||
{
|
{
|
||||||
(OOVPA*)&IDirect3DDevice8_SetTransform_1_0_4361,
|
(OOVPA*)&IDirect3DDevice8_SetTransform_1_0_4361,
|
||||||
|
|
|
@ -333,23 +333,24 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(strcmp("D3D8", szLibraryName) == 0 && MajorVersion == 1 && MinorVersion == 0 && (BuildVersion == 4361))
|
else if(strcmp("D3D8", szLibraryName) == 0 && MajorVersion == 1 && MinorVersion == 0 && (BuildVersion == 4361 || BuildVersion == 4627))
|
||||||
{
|
{
|
||||||
uint32 lower = pXbeHeader->dwBaseAddr;
|
uint32 lower = pXbeHeader->dwBaseAddr;
|
||||||
uint32 upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage;
|
uint32 upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage;
|
||||||
|
|
||||||
// ******************************************************************
|
|
||||||
// * Locate IDirect3DDevice8_SetRenderState_CullMode
|
|
||||||
// ******************************************************************
|
|
||||||
{
|
|
||||||
void *pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_4361, lower, upper);
|
void *pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_4361, lower, upper);
|
||||||
|
|
||||||
|
// ******************************************************************
|
||||||
|
// * Locate D3DRenderState
|
||||||
|
// ******************************************************************
|
||||||
if(pFunc != 0)
|
if(pFunc != 0)
|
||||||
{
|
{
|
||||||
xd3d8::EmuD3DRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x200);
|
if(BuildVersion == 4361)
|
||||||
|
xd3d8::EmuD3DDefferedRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x200 + 82*4);
|
||||||
|
else if(BuildVersion == 4627)
|
||||||
|
xd3d8::EmuD3DDefferedRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x24C + 92*4);
|
||||||
|
|
||||||
printf("Emu (0x%X): 0x%.08X -> EmuD3DRenderState\n", GetCurrentThreadId(), xd3d8::EmuD3DRenderState);
|
printf("Emu (0x%X): 0x%.08X -> EmuD3DDefferedRenderState\n", GetCurrentThreadId(), xd3d8::EmuD3DDefferedRenderState);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -396,8 +397,6 @@ extern "C" CXBXKRNL_API void NTAPI EmuInit
|
||||||
{
|
{
|
||||||
EmuSwapFS(); // XBox FS
|
EmuSwapFS(); // XBox FS
|
||||||
|
|
||||||
_asm int 3
|
|
||||||
|
|
||||||
Entry();
|
Entry();
|
||||||
|
|
||||||
EmuSwapFS(); // Win2k/XP FS
|
EmuSwapFS(); // Win2k/XP FS
|
||||||
|
|
|
@ -99,9 +99,9 @@ UINT xd3d8::D3DVertexToPrimitive[11][2] =
|
||||||
};
|
};
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * EmuD3DRenderState
|
// * EmuD3DDefferedRenderState
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
DWORD *xd3d8::EmuD3DRenderState;
|
DWORD *xd3d8::EmuD3DDefferedRenderState;
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * D3DRenderState2PC (Convert Xbox->PC RenderState enum values)
|
// * D3DRenderState2PC (Convert Xbox->PC RenderState enum values)
|
||||||
|
@ -931,7 +931,7 @@ HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_DrawVertices
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Certain D3DRS values need to be checked on each Draw[Indexed]Vertices
|
// Certain D3DRS values need to be checked on each Draw[Indexed]Vertices
|
||||||
g_pD3D8Device->SetRenderState(D3DRS_LIGHTING, xd3d8::EmuD3DRenderState[92]);
|
g_pD3D8Device->SetRenderState(D3DRS_LIGHTING, xd3d8::EmuD3DDefferedRenderState[10]);
|
||||||
|
|
||||||
UINT PrimitiveCount = D3DVertex2PrimitiveCount(PrimitiveType, VertexCount);
|
UINT PrimitiveCount = D3DVertex2PrimitiveCount(PrimitiveType, VertexCount);
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ void EmuGenerateFS(Xbe::TLS *pTLS, void *pTLSData)
|
||||||
// * Copy Global TLS to Local
|
// * Copy Global TLS to Local
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
{
|
{
|
||||||
uint32 dwCopySize = RoundUp(pTLS->dwDataEndAddr - pTLS->dwDataStartAddr, 0x04);
|
uint32 dwCopySize = pTLS->dwDataEndAddr - pTLS->dwDataStartAddr;
|
||||||
uint32 dwZeroSize = pTLS->dwSizeofZeroFill;
|
uint32 dwZeroSize = pTLS->dwSizeofZeroFill;
|
||||||
|
|
||||||
pNewTLS = new uint08[dwCopySize + dwZeroSize];
|
pNewTLS = new uint08[dwCopySize + dwZeroSize];
|
||||||
|
|
|
@ -111,6 +111,16 @@ OOVPATable XAPI_1_0_4627[] =
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
//*/
|
//*/
|
||||||
|
// XapiThreadStartup (* unchanged since 1.0.4361 *)
|
||||||
|
{
|
||||||
|
(OOVPA*)&XapiThreadStartup_1_0_4361,
|
||||||
|
|
||||||
|
xapi::EmuXapiThreadStartup,
|
||||||
|
|
||||||
|
#ifdef _DEBUG_TRACE
|
||||||
|
"XapiThreadStartup"
|
||||||
|
#endif
|
||||||
|
},
|
||||||
//* Too High Level
|
//* Too High Level
|
||||||
// XapiInitProcess (* unchanged since 1.0.4361 *)
|
// XapiInitProcess (* unchanged since 1.0.4361 *)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue