From 9c98a76f0a2682f7dd605073d3187d9cb40ac94f Mon Sep 17 00:00:00 2001 From: Luke Usher Date: Wed, 14 Mar 2018 10:45:34 +0000 Subject: [PATCH] Reduce the number of calls to GetVertexBufferSize --- src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp | 13 +++++++------ src/CxbxKrnl/EmuD3D8/VertexBuffer.h | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp b/src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp index 4fc812af6..ffa452d98 100755 --- a/src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp +++ b/src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp @@ -238,7 +238,7 @@ bool XTL::VertexPatcher::PatchStream(VertexPatchDesc *pPatchDesc, { pOrigVertexBuffer = g_D3DStreams[uiStream]; uiStride = g_D3DStreamStrides[uiStream]; - uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, uiStride, pPatchDesc->pIndexData, pPatchDesc->dwStartVertex, pPatchDesc->dwIndexBase); + uiLength = pPatchDesc->uiSize; // Set a new (exact) vertex count uiVertexCount = uiLength / uiStride; @@ -272,7 +272,7 @@ bool XTL::VertexPatcher::PatchStream(VertexPatchDesc *pPatchDesc, uiStride = pPatchDesc->uiXboxVertexStreamZeroStride; pStreamPatch->ConvertedStride = max(pStreamPatch->ConvertedStride, uiStride); // ?? pOrigData = (uint08 *)pPatchDesc->pXboxVertexStreamZeroData; - uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, uiStride, pPatchDesc->pIndexData, pPatchDesc->dwStartVertex, pPatchDesc->dwIndexBase); + uiLength = pPatchDesc->uiSize; uiVertexCount = uiLength / uiStride; dwNewSize = uiVertexCount * pStreamPatch->ConvertedStride; pNewVertexBuffer = NULL; @@ -473,7 +473,7 @@ bool XTL::VertexPatcher::NormalizeTexCoords(VertexPatchDesc *pPatchDesc, UINT ui pNewVertexBuffer = 0; pData = (uint08 *)pPatchDesc->pXboxVertexStreamZeroData; uiStride = pPatchDesc->uiXboxVertexStreamZeroStride; - DWORD uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, uiStride, pPatchDesc->pIndexData, pPatchDesc->dwStartVertex, pPatchDesc->dwIndexBase); + DWORD uiLength = pPatchDesc->uiSize; uiVertexCount = uiLength / uiStride; } else @@ -481,7 +481,7 @@ bool XTL::VertexPatcher::NormalizeTexCoords(VertexPatchDesc *pPatchDesc, UINT ui // Copy stream for patching and caching. pOrigVertexBuffer = g_D3DStreams[uiStream]; uiStride = g_D3DStreamStrides[uiStream]; - UINT uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, uiStride, pPatchDesc->pIndexData, pPatchDesc->dwStartVertex, pPatchDesc->dwIndexBase); + UINT uiLength = pPatchDesc->uiSize; uiVertexCount = uiLength / uiStride; @@ -611,7 +611,7 @@ bool XTL::VertexPatcher::PatchPrimitive(VertexPatchDesc *pPatchDesc, pStream->uiOrigStride = pPatchDesc->uiXboxVertexStreamZeroStride; } - DWORD uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, pStream->uiOrigStride, pPatchDesc->pIndexData, pPatchDesc->dwStartVertex, pPatchDesc->dwIndexBase); + DWORD uiLength = pPatchDesc->uiSize; DWORD uiVertexCount = uiLength / pStream->uiOrigStride; // Unsupported primitives that don't need deep patching. @@ -788,6 +788,7 @@ bool XTL::VertexPatcher::Apply(VertexPatchDesc *pPatchDesc, bool *pbFatalError) for(UINT uiStream = 0; uiStream < m_uiNbrStreams; uiStream++) { bool LocalPatched = false; + pPatchDesc->uiSize = GetVertexBufferSize(pPatchDesc->dwVertexCount, g_D3DStreamStrides[uiStream], pPatchDesc->pIndexData, pPatchDesc->dwStartVertex, pPatchDesc->dwIndexBase); LocalPatched |= PatchPrimitive(pPatchDesc, uiStream); LocalPatched |= PatchStream(pPatchDesc, uiStream); @@ -798,7 +799,7 @@ bool XTL::VertexPatcher::Apply(VertexPatchDesc *pPatchDesc, bool *pbFatalError) // Doing this will fully remove the need to call _Register on Vertex Buffers if (!Patched && pPatchDesc->pXboxVertexStreamZeroData == nullptr) { - g_pD3DDevice8->SetStreamSource(uiStream, GetHostVertexBuffer(g_D3DStreams[uiStream], dwSize), g_D3DStreamStrides[uiStream]); + g_pD3DDevice8->SetStreamSource(uiStream, GetHostVertexBuffer(g_D3DStreams[uiStream], pPatchDesc->uiSize), g_D3DStreamStrides[uiStream]); } } diff --git a/src/CxbxKrnl/EmuD3D8/VertexBuffer.h b/src/CxbxKrnl/EmuD3D8/VertexBuffer.h index eb700f4a0..ebc74dc8b 100755 --- a/src/CxbxKrnl/EmuD3D8/VertexBuffer.h +++ b/src/CxbxKrnl/EmuD3D8/VertexBuffer.h @@ -48,6 +48,7 @@ typedef struct _VertexPatchDesc IN DWORD hVertexShader; IN PWORD pIndexData = nullptr; IN DWORD dwIndexBase = 0; + IN size_t uiSize; // Data if Draw...UP call IN PVOID pXboxVertexStreamZeroData; IN UINT uiXboxVertexStreamZeroStride;