createdevice cleanup

This commit is contained in:
Aaron Robinson 2003-10-01 20:54:49 +00:00
parent f5810eecde
commit ccd155570a
6 changed files with 44 additions and 41 deletions

View File

@ -55,10 +55,10 @@ typedef signed short sint16;
typedef signed long sint32;
// define this to trace intercepted function calls
//#define _DEBUG_TRACE
#define _DEBUG_TRACE
// define this to trace warnings
//#define _DEBUG_WARNINGS
#define _DEBUG_WARNINGS
// version information
#ifndef _DEBUG_TRACE

View File

@ -566,9 +566,9 @@ HRESULT WINAPI EmuIDirect3D8_CreateDevice
);
// ******************************************************************
// * func: EmuIDirect3D8_GetDeviceCaps
// * func: EmuIDirect3DDevice8_GetDeviceCaps
// ******************************************************************
HRESULT WINAPI EmuIDirect3D8_GetDeviceCaps
VOID WINAPI EmuIDirect3DDevice8_GetDeviceCaps
(
D3DCAPS8 *pCaps
);

View File

@ -63,9 +63,9 @@ SOOVPA<8> IDirect3D8_CreateDevice_1_0_3925 =
};
// ******************************************************************
// * IDirect3D8_GetDeviceCaps
// * IDirect3DDevice8_GetDeviceCaps
// ******************************************************************
SOOVPA<11> IDirect3D8_GetDeviceCaps_1_0_3925 =
SOOVPA<11> IDirect3DDevice8_GetDeviceCaps_1_0_3925 =
{
0, // Large == 0
11, // Count == 11
@ -74,22 +74,22 @@ SOOVPA<11> IDirect3D8_GetDeviceCaps_1_0_3925 =
0, // XRef Not Used
{
// IDirect3D8_GetDeviceCaps+0x00 : push esi; push edi
// IDirect3DDevice8_GetDeviceCaps+0x00 : push esi; push edi
{ 0x00, 0x56 }, // (Offset,Value)-Pair #1
{ 0x01, 0x57 }, // (Offset,Value)-Pair #2
// IDirect3D8_GetDeviceCaps+0x06 : mov ecx, 0x35
// IDirect3DDevice8_GetDeviceCaps+0x06 : mov ecx, 0x35
{ 0x06, 0xB9 }, // (Offset,Value)-Pair #3
{ 0x07, 0x35 }, // (Offset,Value)-Pair #4
{ 0x08, 0x00 }, // (Offset,Value)-Pair #5
{ 0x09, 0x00 }, // (Offset,Value)-Pair #6
{ 0x0A, 0x00 }, // (Offset,Value)-Pair #7
// IDirect3D8_GetDeviceCaps+0x10 : rep movsd
// IDirect3DDevice8_GetDeviceCaps+0x10 : rep movsd
{ 0x10, 0xF3 }, // (Offset,Value)-Pair #8
{ 0x11, 0xA5 }, // (Offset,Value)-Pair #9
// IDirect3D8_GetDeviceCaps+0x14 : retn 0x04
// IDirect3DDevice8_GetDeviceCaps+0x14 : retn 0x04
{ 0x14, 0xC2 }, // (Offset,Value)-Pair #10
{ 0x15, 0x04 }, // (Offset,Value)-Pair #11
}
@ -1852,14 +1852,14 @@ OOVPATable D3D8_1_0_3925[] =
"EmuIDirect3D8_CreateDevice"
#endif
},
// IDirect3D8::GetDeviceCaps
// IDirect3DDevice8::GetDeviceCaps
{
(OOVPA*)&IDirect3D8_GetDeviceCaps_1_0_3925,
(OOVPA*)&IDirect3DDevice8_GetDeviceCaps_1_0_3925,
XTL::EmuIDirect3D8_GetDeviceCaps,
XTL::EmuIDirect3DDevice8_GetDeviceCaps,
#ifdef _DEBUG_TRACE
"EmuIDirect3D8_GetDeviceCaps"
"EmuIDirect3DDevice8_GetDeviceCaps"
#endif
},
// IDirect3DDevice8::Release

View File

@ -753,10 +753,15 @@ HRESULT WINAPI XTL::EmuIDirect3D8_CreateDevice
g_EmuCDPD.pPresentationParameters = pPresentationParameters;
g_EmuCDPD.ppReturnedDeviceInterface = ppReturnedDeviceInterface;
// Wait until proxy is done with an existing call (i highly doubt this situation will come up)
while(g_EmuCDPD.bReady)
Sleep(10);
// Signal proxy thread, and wait for completion
g_EmuCDPD.bReady = true;
g_EmuCDPD.bCreate = true;
// Wait until proxy is completed
while(g_EmuCDPD.bReady)
Sleep(10);
@ -766,9 +771,9 @@ HRESULT WINAPI XTL::EmuIDirect3D8_CreateDevice
}
// ******************************************************************
// * func: EmuIDirect3D8_GetDeviceCaps
// * func: EmuIDirect3DDevice8_GetDeviceCaps
// ******************************************************************
HRESULT WINAPI XTL::EmuIDirect3D8_GetDeviceCaps
VOID WINAPI XTL::EmuIDirect3DDevice8_GetDeviceCaps
(
D3DCAPS8 *pCaps
)
@ -780,7 +785,7 @@ HRESULT WINAPI XTL::EmuIDirect3D8_GetDeviceCaps
// ******************************************************************
#ifdef _DEBUG_TRACE
{
printf("EmuD3D8 (0x%X): EmuIDirect3D8_GetDeviceCaps\n"
printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_GetDeviceCaps\n"
"(\n"
" pCaps : 0x%.08X\n"
");\n",
@ -788,11 +793,11 @@ HRESULT WINAPI XTL::EmuIDirect3D8_GetDeviceCaps
}
#endif
HRESULT hRet = g_pD3D8->GetDeviceCaps(g_XBVideo.GetDisplayAdapter(), (g_XBVideo.GetDirect3DDevice() == 0) ? XTL::D3DDEVTYPE_HAL : XTL::D3DDEVTYPE_REF, pCaps);
g_pD3D8->GetDeviceCaps(g_XBVideo.GetDisplayAdapter(), (g_XBVideo.GetDirect3DDevice() == 0) ? XTL::D3DDEVTYPE_HAL : XTL::D3DDEVTYPE_REF, pCaps);
EmuSwapFS(); // XBox FS
return hRet;
return;
}
// ******************************************************************
@ -4214,7 +4219,7 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_SetRenderState_EdgeAntiAlias
// TODO: Analyze performance and compatibility (undefined behavior on PC with triangles or points)
// g_pD3DDevice8->SetRenderState(D3DRS_EDGEANTIALIAS, Value);
EmuWarning("SetRenderState_EdgeAntiAlias not implemented!");
// EmuWarning("SetRenderState_EdgeAntiAlias not implemented!");
EmuSwapFS(); // XBox FS
@ -4872,10 +4877,10 @@ static void EmuUpdateDeferredStates()
if(EmuD3DDeferredRenderState != 0)
{
if(XTL::EmuD3DDeferredRenderState[0] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_FOGENABLE, XTL::EmuD3DDeferredRenderState[0]);
g_pD3DDevice8->SetRenderState(D3DRS_FOGENABLE, XTL::EmuD3DDeferredRenderState[0]);
if(XTL::EmuD3DDeferredRenderState[1] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_FOGTABLEMODE, XTL::EmuD3DDeferredRenderState[1]);
g_pD3DDevice8->SetRenderState(D3DRS_FOGTABLEMODE, XTL::EmuD3DDeferredRenderState[1]);
if(XTL::EmuD3DDeferredRenderState[6] != X_D3DRS_UNK)
{
@ -4889,40 +4894,40 @@ static void EmuUpdateDeferredStates()
}
if(XTL::EmuD3DDeferredRenderState[10] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_LIGHTING, XTL::EmuD3DDeferredRenderState[10]);
g_pD3DDevice8->SetRenderState(D3DRS_LIGHTING, XTL::EmuD3DDeferredRenderState[10]);
if(XTL::EmuD3DDeferredRenderState[11] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_SPECULARENABLE, XTL::EmuD3DDeferredRenderState[11]);
g_pD3DDevice8->SetRenderState(D3DRS_SPECULARENABLE, XTL::EmuD3DDeferredRenderState[11]);
if(XTL::EmuD3DDeferredRenderState[20] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, XTL::EmuD3DDeferredRenderState[20]);
if(XTL::EmuD3DDeferredRenderState[23] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_AMBIENT, XTL::EmuD3DDeferredRenderState[23]);
g_pD3DDevice8->SetRenderState(D3DRS_AMBIENT, XTL::EmuD3DDeferredRenderState[23]);
if(XTL::EmuD3DDeferredRenderState[24] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_POINTSIZE, XTL::EmuD3DDeferredRenderState[24]);
g_pD3DDevice8->SetRenderState(D3DRS_POINTSIZE, XTL::EmuD3DDeferredRenderState[24]);
if(XTL::EmuD3DDeferredRenderState[25] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_POINTSIZE_MIN, XTL::EmuD3DDeferredRenderState[25]);
g_pD3DDevice8->SetRenderState(D3DRS_POINTSIZE_MIN, XTL::EmuD3DDeferredRenderState[25]);
if(XTL::EmuD3DDeferredRenderState[26] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_POINTSPRITEENABLE, XTL::EmuD3DDeferredRenderState[26]);
g_pD3DDevice8->SetRenderState(D3DRS_POINTSPRITEENABLE, XTL::EmuD3DDeferredRenderState[26]);
if(XTL::EmuD3DDeferredRenderState[27] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_POINTSCALEENABLE, XTL::EmuD3DDeferredRenderState[27]);
g_pD3DDevice8->SetRenderState(D3DRS_POINTSCALEENABLE, XTL::EmuD3DDeferredRenderState[27]);
if(XTL::EmuD3DDeferredRenderState[28] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_POINTSCALE_A, XTL::EmuD3DDeferredRenderState[28]);
g_pD3DDevice8->SetRenderState(D3DRS_POINTSCALE_A, XTL::EmuD3DDeferredRenderState[28]);
if(XTL::EmuD3DDeferredRenderState[29] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_POINTSCALE_B, XTL::EmuD3DDeferredRenderState[29]);
g_pD3DDevice8->SetRenderState(D3DRS_POINTSCALE_B, XTL::EmuD3DDeferredRenderState[29]);
if(XTL::EmuD3DDeferredRenderState[30] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_POINTSCALE_C, XTL::EmuD3DDeferredRenderState[30]);
g_pD3DDevice8->SetRenderState(D3DRS_POINTSCALE_C, XTL::EmuD3DDeferredRenderState[30]);
if(XTL::EmuD3DDeferredRenderState[33] != X_D3DRS_UNK)
g_pD3DDevice8->SetRenderState(D3DRS_PATCHSEGMENTS, XTL::EmuD3DDeferredRenderState[33]);
g_pD3DDevice8->SetRenderState(D3DRS_PATCHSEGMENTS, XTL::EmuD3DDeferredRenderState[33]);
/** To check for unhandled RenderStates
for(int v=0;v<117-82;v++)
@ -5135,7 +5140,7 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DrawVertices
EmuUpdateDeferredStates();
if((DWORD)PrimitiveType == 0x03 || (DWORD)PrimitiveType == 0x09 || (DWORD)PrimitiveType == 0x10)
if((DWORD)PrimitiveType == 0x09 || (DWORD)PrimitiveType == 0x10)
EmuWarning("Unsupported PrimitiveType! (%d)", (DWORD)PrimitiveType);
UINT PrimitiveCount = EmuD3DVertex2PrimitiveCount(PrimitiveType, VertexCount);
@ -5196,7 +5201,7 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DrawVerticesUP
EmuUpdateDeferredStates();
if((DWORD)PrimitiveType == 0x03 || (DWORD)PrimitiveType == 0x09 || (DWORD)PrimitiveType == 0x10)
if((DWORD)PrimitiveType == 0x09 || (DWORD)PrimitiveType == 0x10)
EmuWarning("Unsupported PrimitiveType! (%d)", (DWORD)PrimitiveType);
UINT PrimitiveCount = EmuD3DVertex2PrimitiveCount(PrimitiveType, VertexCount);
@ -5262,7 +5267,7 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DrawIndexedVertices
EmuUpdateDeferredStates();
if((DWORD)PrimitiveType == 0x03 || (DWORD)PrimitiveType == 0x08 || (DWORD)PrimitiveType == 0x09 || (DWORD)PrimitiveType == 0x10)
if((DWORD)PrimitiveType == 0x08 || (DWORD)PrimitiveType == 0x09 || (DWORD)PrimitiveType == 0x10)
EmuWarning("Unsupported PrimitiveType! (%d)", (DWORD)PrimitiveType);
UINT PrimitiveCount = EmuD3DVertex2PrimitiveCount(PrimitiveType, VertexCount);

View File

@ -1274,13 +1274,11 @@ XBSYSAPI EXPORTNUM(190) NTSTATUS NTAPI xboxkrnl::NtCreateFile
(NtDll::LARGE_INTEGER*)AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, NULL, NULL
);
if(FAILED(ret))
EmuWarning("NtCreateFile Failed (0x%.08X)", ret);
#ifdef _DEBUG_TRACE
if(FAILED(ret))
printf("EmuKrnl (0x%X): NtCreateFile Failed! (0x%.08X)", GetCurrentThreadId(), ret);
else
{
printf("EmuKrnl (0x%X): NtCreateFile = 0x%.08X\n", GetCurrentThreadId(), *FileHandle);
}
#endif
// ******************************************************************

View File

@ -614,7 +614,7 @@ DWORD WINAPI XTL::EmuXInputSetState
}
#endif
EmuWarning("Ignoring EmuXInputSetState!");
// EmuWarning("Ignoring EmuXInputSetState!");
EmuSwapFS(); // XBox FS