Minor refactor. Zapper still isn't happy

This commit is contained in:
Luke Usher 2018-02-23 23:15:01 +00:00
parent 1685ef4a08
commit b1affd6b8b
1 changed files with 14 additions and 19 deletions

View File

@ -101,24 +101,19 @@ void XTL::VertexPatcher::DumpCache(void)
}
}
size_t GetVertexBufferSize(XTL::VertexPatchDesc* pPatchDesc, DWORD uiStream = 0, DWORD dwStride = 0)
size_t GetVertexBufferSize(DWORD dwVertexCount, DWORD dwStride, PWORD pIndexData)
{
// If the stride wasn't passed in, get it based on the current patch details
if (dwStride == 0) {
dwStride = pPatchDesc->pVertexStreamZeroData == nullptr ? g_D3DStreamStrides[uiStream] : pPatchDesc->uiVertexStreamZeroStride;
}
// If this is not an indexed draw, the size is simply VertexCount * Stride
if (pPatchDesc->pIndexData == nullptr) {
return pPatchDesc->dwVertexCount * dwStride;
if (pIndexData == nullptr) {
return dwVertexCount * dwStride;
}
// We are an indexed draw, so we have to parse the index buffer
// The highest index we see can be used to determine the vertex buffer size
DWORD highestVertexIndex = 0;
for (DWORD i = 0; i < pPatchDesc->dwVertexCount; i++) {
if (pPatchDesc->pIndexData[i] >= highestVertexIndex) {
highestVertexIndex = pPatchDesc->pIndexData[i] + 1;
for (DWORD i = 0; i < dwVertexCount; i++) {
if (pIndexData[i] >= highestVertexIndex) {
highestVertexIndex = pIndexData[i] + 1;
}
}
@ -177,7 +172,7 @@ void XTL::VertexPatcher::CacheStream(VertexPatchDesc *pPatchDesc,
pCalculateData = (void*)GetDataFromXboxResource(pOrigVertexBuffer);
uiLength = GetVertexBufferSize(pPatchDesc, uiStream);
uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, g_D3DStreamStrides[uiStream], pPatchDesc->pIndexData);
pCachedStream->bIsUP = false;
uiKey = (uint32)pOrigVertexBuffer;
}
@ -190,7 +185,7 @@ void XTL::VertexPatcher::CacheStream(VertexPatchDesc *pPatchDesc,
}
uiStride = pPatchDesc->uiVertexStreamZeroStride;
pCalculateData = (uint08 *)pPatchDesc->pVertexStreamZeroData;
uiLength = GetVertexBufferSize(pPatchDesc, uiStream);
uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, uiStride, pPatchDesc->pIndexData);
pCachedStream->bIsUP = true;
pCachedStream->pStreamUP = pCalculateData;
uiKey = (uint32)pCalculateData;
@ -246,7 +241,7 @@ bool XTL::VertexPatcher::ApplyCachedStream(VertexPatchDesc *pPatchDesc,
{
pOrigVertexBuffer = g_D3DStreams[uiStream];
uiStride = g_D3DStreamStrides[uiStream];
uiLength = GetVertexBufferSize(pPatchDesc, uiStream);
uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, uiStride, pPatchDesc->pIndexData);
uiKey = (uint32)pOrigVertexBuffer;
//pCachedStream->bIsUP = false;
}
@ -260,7 +255,7 @@ bool XTL::VertexPatcher::ApplyCachedStream(VertexPatchDesc *pPatchDesc,
uiStride = pPatchDesc->uiVertexStreamZeroStride;
pCalculateData = (uint08 *)pPatchDesc->pVertexStreamZeroData;
uiLength = GetVertexBufferSize(pPatchDesc, uiStream);
uiLength = GetVertexBufferSize(pPatchDesc->dwPrimitiveCount, uiStride, pPatchDesc->pIndexData);
uiKey = (uint32)pCalculateData;
//pCachedStream->bIsUP = true;
//pCachedStream->pStreamUP = pCalculateData;
@ -411,7 +406,7 @@ bool XTL::VertexPatcher::PatchStream(VertexPatchDesc *pPatchDesc,
{
pOrigVertexBuffer = g_D3DStreams[uiStream];
uiStride = g_D3DStreamStrides[uiStream];
uiLength = GetVertexBufferSize(pPatchDesc, uiStream);
uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, uiStride, pPatchDesc->pIndexData);
// Set a new (exact) vertex count
uiVertexCount = pPatchDesc->dwVertexCount;
@ -446,7 +441,7 @@ bool XTL::VertexPatcher::PatchStream(VertexPatchDesc *pPatchDesc,
pOrigData = (uint08 *)pPatchDesc->pVertexStreamZeroData;
// TODO: This is sometimes the number of indices, which isn't too good
uiVertexCount = pPatchDesc->dwVertexCount;
dwNewSize = GetVertexBufferSize(pPatchDesc, uiStream, pStreamPatch->ConvertedStride);
dwNewSize = GetVertexBufferSize(uiVertexCount, pStreamPatch->ConvertedStride, pPatchDesc->pIndexData);
pNewVertexBuffer = NULL;
pNewData = (uint08*)g_VMManager.Allocate(dwNewSize);
if(!pNewData)
@ -656,7 +651,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, uiStream);
UINT uiLength = GetVertexBufferSize(pPatchDesc->dwVertexCount, uiStride, pPatchDesc->pIndexData);
uiVertexCount = pPatchDesc->dwVertexCount;
@ -1002,7 +997,7 @@ bool XTL::VertexPatcher::Apply(VertexPatchDesc *pPatchDesc, bool *pbFatalError)
// TODO: Update the converion/patching code to make a host copy even when no patching is required
// Doing this will fully remove the need to call _Register on Vertex Buffers
if (!Patched && pPatchDesc->pVertexStreamZeroData == nullptr) {
DWORD dwSize = GetVertexBufferSize(pPatchDesc, uiStream);
DWORD dwSize = GetVertexBufferSize(pPatchDesc->dwVertexCount, g_D3DStreamStrides[uiStream], pPatchDesc->pIndexData);
g_pD3DDevice8->SetStreamSource(uiStream, GetHostVertexBuffer(g_D3DStreams[uiStream], dwSize), g_D3DStreamStrides[uiStream]);
}
}