This commit is contained in:
Aaron Robinson 2003-05-24 06:06:35 +00:00
parent 3e20fc5835
commit 6c94e96ca4
9 changed files with 74 additions and 27 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -180,7 +180,6 @@ SOOVPA<13> IDirect3DDevice8_SetRenderState_CullMode_1_0_4361 =
} }
}; };
// ****************************************************************** // ******************************************************************
// * IDirect3DDevice8_SetRenderState_ZEnable // * IDirect3DDevice8_SetRenderState_ZEnable
// ****************************************************************** // ******************************************************************

View File

@ -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,

View File

@ -333,24 +333,25 @@ 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;
// ****************************************************************** void *pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_4361, lower, upper);
// * Locate IDirect3DDevice8_SetRenderState_CullMode
// ******************************************************************
{
void *pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_4361, lower, upper);
if(pFunc != 0) // ******************************************************************
{ // * Locate D3DRenderState
xd3d8::EmuD3DRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x200); // ******************************************************************
if(pFunc != 0)
{
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

View File

@ -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);

View File

@ -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];

View File

@ -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 *)
{ {