From 128b1452a2d9155f6c32bdcd63a9675e7c273c35 Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Sat, 18 Oct 2003 06:28:08 +0000 Subject: [PATCH] crap --- Cxbx.opt | Bin 59904 -> 65536 bytes Include/Win32/CxbxKrnl/EmuD3D8.h | 3 + Source/Win32/CxbxKrnl/EmuD3D8.cpp | 114 ++++++++++++++++++++++------ Source/Win32/CxbxKrnl/EmuDSound.cpp | 2 +- 4 files changed, 93 insertions(+), 26 deletions(-) diff --git a/Cxbx.opt b/Cxbx.opt index d140ec6890a0af8c3c347048ca26f6acb3465302..283e56b34a00a29dfb9b67120594e4f1b1c8d70a 100644 GIT binary patch literal 65536 zcmeI5{cjw_8OP^#ZRZ?f$4Q(QpuiRggr*4)2QYz##CJAa66eJi>?F8^y}gNj@!syS zyO*3PC8<V;N9*Fkij`>^eYRzr9M#2RQVv<@1C z)T$hJ=pGrMxYdwhDM<==uzk~h~hkK z_d^Guap)j)2s#WMfhM3VbQF3VqI0IOJq8_zPC!pU)6nOkC!v!N#p&4QAOp%n5;_IV zK(kN*qPRJ1O{fT2kPVffry&P&A&MiN!TwpO0?k9uKwp5Kg}w+q2T>fQ3Djf@PiVMu z3tPuO0|9NO4R~UzH7zXAGZU9ye*Q1N+4IJ46V!GXH-*+6F^B$_gboT4J;|aUIz%j5 zB~2*)b4t%B^`lihl`Hf?4=d6LTDL*VMQg;d(=;HI1pV&N?@YVxucAhR_D6Bo3%FLI za52`~XBzyz286JP>NfC(@GCcp%k028>wlz3RqV{sAQg7w*rv#uYoLKf_9&=o7n6_rqu0 zv-W-Qpz(sQQpS}die1Z(D*N&Cr&|7?@`RFCHr4V+lrj7qt>q__ z$MExA^ap+l+MiIqCEgOh1dlNPL-7-F_=$dao_kQ9ReIDO_55*^`~A%-o8d&>I$6*E zTKqv=AIX0pZcFR}ziNG1NfC(@GCcp%k025#WOn?boO$6Bg3;jj*|JeUq ze*Rw)qyNSa?8DI3ONafj|93TgQ*&RK025#WOn?b60Vco%m;e)C0!)AjTs{Hz|JeTv z$1k$~xBUFSM)R+yFeBN*ykwde-74LR`NuRKup4T3{_&@&(qR5^7Oj*q_nBsXpTu}e zJD7!TW48NAjAykl8=mI6H%nX4zCZCf_-GavJ-(GPLHilZ;?MXkS1=F1of+rRnrQ6< zB|&Q=gnd|C+BkO~9d6h@&DifOQTsF~mDX-(m;WQwM9{v9JJ&^%yn9oo?z)o&dA9rE z(L)ovqn`s5KvT6fgMy?REnGDrUAycUvhlfV=-jkvYEBRqoZL^xmmW-x70gIIH&5Bl zoLkZjsohE8cka@Lv{H3y`WE-Dl{hA~Q#i$?-AZ-Wuh{RbUlQ%=`q7Ff9ZNU0v@A(0 zFD;`GUQCO&qSY+vCDG)>1egF5U;<2l2`~XBzyz286JP>N;HoCT{xAE#?Elhy{^dFU zd+)caYrhUWY}uY>*p}zmrYZBgHyFF7b$>0$z;JV?4R~z9N|Bv~SK1G+tr|%lWD8G@ z{lBaFpBC;M6JP>NfC(@GCcp%k025#WOn?boMFiOYWB-r+zvb)yJ@rv_J;$~FSh{W6 zRKXhBf#Gpj^)X3@sxN0rid67Mm$=^aS2X<@e}O$1azGf^NUpjf;|l>3vh({->I@jhLVn z8Ot!sc^MOu3`ac1#PnqSF_AG5)!tM;t2p?R2`~XBzyz286JP>NfC(@GCcp%kz?CAv z{vZ2)?EkULn=**VGG^bb^q+{7}9!EKi-ntGl<)CdBG! zFiouv;*$9a&5e!=>CM5!_1t`1%ynpP*qbj&H!fmOFceyqi4 zVeQ3s(+yaEa20|(S^sb!RZcIrMhe@n<~sjeDU@2I`o8_)I!%3I;H>15u&rE)ZoiC8lM^&g!-QjAzeYu_||2MhSb)s zaT{)Mdp>CQtZv46l5HBC?O4xUb}p`^wmj!{-SXCUa#y@>y|R+CD|1*rHLlAoP2}Vp zmM)dCb#yykY&qS=)`op|J~tEB)AkH#x&M0gY5zUk@_bnOcZ_*k+!M3Z_boc(`)J&mXn$^L)SQSj{lN2U@)W(TnU z-a^%neLdG z&zg3QUJCE8;+i<`zaO5yOBGPIy3#BAe~T8Os{$(y_xjzFrT=ShAuUo`yF-4UqUEond_%_ap6S$a|5 zpz{wqI1zVG<{RC;j}g*ez2c>3-NfC(@GCeSVc_W#)bWB+gY`hRI*3j^zq7P0!MB|NNy+F2UBjP*y$)I_lU zYG{T|NfC*el0_^{?|I7aG^7ViJ4SL7@4gdfE literal 59904 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/); EmuSwapFS(); // Win2k/XP FS - for(v=0;v<16;v++) + if(pResource->Lock != X_D3DRESOURCE_LOCK_FLAG_NOSIZE) { - if(pCache[v].Data == 0) + for(v=0;v<16;v++) { - pCache[v].Data = pResource->Data; - pCache[v].EmuResource8 = pResource->EmuResource8; - break; - } + if(pCache[v].Data == 0) + { + pCache[v].Data = pResource->Data; + pCache[v].EmuResource8 = pResource->EmuResource8; + break; + } - if(v == 16) - EmuCleanup("X_D3DResource cache is maxed out!"); + if(v == 16) + EmuCleanup("X_D3DResource cache is maxed out!"); + } } } @@ -2296,32 +2310,45 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetIndices } #endif - // HACK: Halo Hack - if(pIndexData != 0 && pIndexData->Lock == 0x00840863) - pIndexData->Lock = 0; //* fflush(stdout); if(pIndexData != 0) { static int chk = 0; - if(chk++ > 0) + if(chk++ >= 0) { - Sleep(3000); _asm int 3 } } //*/ - IDirect3DIndexBuffer8 *pIndexBuffer = 0; + HRESULT hRet = D3D_OK; if(pIndexData != 0) { + g_pIndexBuffer = pIndexData; + g_dwBaseVertexIndex = BaseVertexIndex; + + // HACK: Halo Hack + if(pIndexData->Lock == 0x00840863) + { + _asm int 3 + pIndexData->Lock = 0; + } + EmuVerifyResourceIsRegistered(pIndexData); - pIndexBuffer = pIndexData->EmuIndexBuffer8; - } + IDirect3DIndexBuffer8 *pIndexBuffer = pIndexData->EmuIndexBuffer8; - HRESULT hRet = g_pD3DDevice8->SetIndices(pIndexBuffer, BaseVertexIndex); + if(pIndexData->Lock != X_D3DRESOURCE_LOCK_FLAG_NOSIZE) + hRet = g_pD3DDevice8->SetIndices(pIndexBuffer, BaseVertexIndex); + } + else + { + g_pIndexBuffer = 0; + + hRet = g_pD3DDevice8->SetIndices(0, BaseVertexIndex); + } EmuSwapFS(); // XBox FS @@ -2906,9 +2933,12 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register if(dwSize == -1) { // TODO: once this is known to be working, remove the warning - EmuWarning("Vertex buffer allocation size unknown"); - dwSize = 0x2000; // temporarily assign a small buffer, which will be increased later - dwSize = 0x336; + EmuWarning("Index buffer allocation size unknown"); + + pIndexBuffer->Lock = X_D3DRESOURCE_LOCK_FLAG_NOSIZE; + + break; + // Halo dwSize = 0x336; } HRESULT hRet = g_pD3DDevice8->CreateIndexBuffer @@ -3196,7 +3226,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register char szBuffer[255]; - sprintf(szBuffer, "C:\\Aaron\\Textures\\Surface%.03d.bmp", dwDumpSurface++); + sprintf(szBuffer, "C:\\Aaron\\Textures\\%.03d-Surface%.03d.bmp", X_Format, dwDumpSurface++); D3DXSaveSurfaceToFile(szBuffer, D3DXIFF_BMP, pResource->EmuSurface8, NULL, NULL); } @@ -3212,7 +3242,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register { IDirect3DSurface8 *pSurface=0; - sprintf(szBuffer, "C:\\Aaron\\Textures\\CubeTex%.03d-%d.bmp", dwDumpCube++, v); + sprintf(szBuffer, "C:\\Aaron\\Textures\\%.03d-CubeTex%.03d-%d.bmp", X_Format, dwDumpCube++, v); pResource->EmuCubeTexture8->GetCubeMapSurface((D3DCUBEMAP_FACES)v, 0, &pSurface); @@ -3225,7 +3255,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register char szBuffer[255]; - sprintf(szBuffer, "C:\\Aaron\\Textures\\Texture%.03d.bmp", dwDumpTex++); + sprintf(szBuffer, "C:\\Aaron\\Textures\\%.03d-Texture%.03d.bmp", X_Format, dwDumpTex++); D3DXSaveTextureToFile(szBuffer, D3DXIFF_BMP, pResource->EmuTexture8, NULL); } @@ -3680,7 +3710,7 @@ HRESULT WINAPI XTL::EmuIDirect3DTexture8_LockRect GetCurrentThreadId(), pThis, Level, pLockedRect, pRect, Flags); } #endif - + EmuVerifyResourceIsRegistered(pThis); IDirect3DTexture8 *pTexture8 = pThis->EmuTexture8; @@ -5030,6 +5060,8 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetStreamSource } #endif + g_pVertexBuffer = pStreamData; + IDirect3DVertexBuffer8 *pVertexBuffer8 = NULL; if(pStreamData != NULL) @@ -5467,6 +5499,39 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DrawIndexedVertices } #endif + // update index buffer, if necessary + if(g_pIndexBuffer != 0 && g_pIndexBuffer->Lock == X_D3DRESOURCE_LOCK_FLAG_NOSIZE) + { + DWORD dwSize = VertexCount*2; // 16-bit indices + + HRESULT hRet = g_pD3DDevice8->CreateIndexBuffer + ( + dwSize, 0, D3DFMT_INDEX16, D3DPOOL_MANAGED, + &g_pIndexBuffer->EmuIndexBuffer8 + ); + + if(FAILED(hRet)) + EmuCleanup("CreateIndexBuffer Failed!"); + + BYTE *pData = 0; + + hRet = g_pIndexBuffer->EmuIndexBuffer8->Lock(0, dwSize, &pData, 0); + + if(FAILED(hRet)) + EmuCleanup("IndexBuffer Lock Failed!"); + + memcpy(pData, (void*)g_pIndexBuffer->Data, dwSize); + + g_pIndexBuffer->EmuIndexBuffer8->Unlock(); + + g_pIndexBuffer->Data = (ULONG)pData; + + hRet = g_pD3DDevice8->SetIndices(g_pIndexBuffer->EmuIndexBuffer8, g_dwBaseVertexIndex); + + if(FAILED(hRet)) + EmuCleanup("SetIndices Failed!"); + } + EmuUpdateDeferredStates(); if((DWORD)PrimitiveType == 0x08 || (DWORD)PrimitiveType == 0x09 || (DWORD)PrimitiveType == 0x10) @@ -5493,7 +5558,6 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DrawIndexedVertices if(nStride != -1) EmuFixupVerticesB(nStride, pOrigVertexBuffer8, pHackVertexBuffer8); - g_pD3DDevice8->Present(0, 0, 0, 0); EmuSwapFS(); // XBox FS return; diff --git a/Source/Win32/CxbxKrnl/EmuDSound.cpp b/Source/Win32/CxbxKrnl/EmuDSound.cpp index 0d387447c..c255405d6 100644 --- a/Source/Win32/CxbxKrnl/EmuDSound.cpp +++ b/Source/Win32/CxbxKrnl/EmuDSound.cpp @@ -318,7 +318,7 @@ HRESULT WINAPI XTL::EmuDirectSoundCreateStream if(DSBufferDesc.lpwfxFormat->wFormatTag != WAVE_FORMAT_PCM) { - EmuWarning("Invalid WAVE_FORMAT!\n"); + EmuWarning("Invalid WAVE_FORMAT!"); *(*ppStream)->GetSoundBufferRef() = 0;