Reduce the number of calls to GetVertexBufferSize

This commit is contained in:
Luke Usher 2018-03-14 10:45:34 +00:00
parent cdd7ed973c
commit 9c98a76f0a
2 changed files with 8 additions and 6 deletions

View File

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

View File

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