From ef1c633df383da0c77832ae21b5a745b0707d818 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 31 Oct 2024 12:47:18 +0000 Subject: [PATCH] Offset per-primitive data correctly when meshlet filtering --- qrenderdoc/Windows/BufferViewer.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index bc400b2fe..874cab7f6 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -3445,6 +3445,8 @@ void BufferViewer::OnEventChanged(uint32_t eventId) bufdata->postOut1 = r->GetPostVSData(0, bufdata->inConfig.curView, MeshDataStage::TaskOut); bufdata->postOut2 = r->GetPostVSData(0, bufdata->inConfig.curView, MeshDataStage::MeshOut); + const uint32_t vertsPerPrim = RENDERDOC_NumVerticesPerPrimitive(bufdata->postOut2.topology); + // apply mesh/task filtering to mesh data here, which will also propagate to preview if(m_FilteredMeshGroup != ~0U) { @@ -3465,6 +3467,9 @@ void BufferViewer::OnEventChanged(uint32_t eventId) bufdata->postOut2.numIndices = numIndices; bufdata->postOut2.meshletSizes = {meshletSize}; bufdata->postOut2.indexByteOffset += indexCount * bufdata->postOut2.indexByteStride; + + bufdata->postOut2.perPrimitiveOffset += + (indexCount / vertsPerPrim) * bufdata->postOut2.perPrimitiveStride; } indexCount += numIndices; vertexCount += meshletSize.numVertices; @@ -3511,6 +3516,9 @@ void BufferViewer::OnEventChanged(uint32_t eventId) bufdata->postOut2.meshletOffset = meshletCounter; bufdata->out2Config.taskOrMeshletOffset = meshletCounter; bufdata->postOut2.indexByteOffset += indexCount * bufdata->postOut2.indexByteStride; + + bufdata->postOut2.perPrimitiveOffset += + (indexCount / vertsPerPrim) * bufdata->postOut2.perPrimitiveStride; } indexCount += indicesInMeshlet; vertexCount += bufdata->postOut2.meshletSizes[i].numVertices;