diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index f70f1e640..d7c3b6728 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -2349,7 +2349,7 @@ void BufferViewer::configureMeshColumns() // drawing more than this many indices will read off the end of the index buffer - which while // technically not invalid is certainly not intended, so serves as a good 'upper bound' - numRowsUpperBound = bytesAvailable / draw->indexByteWidth; + numRowsUpperBound = bytesAvailable / qMax(1U, draw->indexByteWidth); } else { diff --git a/renderdoc/driver/d3d12/d3d12_postvs.cpp b/renderdoc/driver/d3d12/d3d12_postvs.cpp index 092114eb4..a524da085 100644 --- a/renderdoc/driver/d3d12/d3d12_postvs.cpp +++ b/renderdoc/driver/d3d12/d3d12_postvs.cpp @@ -371,8 +371,9 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) else // drawcall is indexed { bytebuf idxdata; - GetBufferData(rs.ibuffer.buf, rs.ibuffer.offs + drawcall->indexOffset * rs.ibuffer.bytewidth, - RDCMIN(drawcall->numIndices * rs.ibuffer.bytewidth, rs.ibuffer.size), idxdata); + if(rs.ibuffer.buf != ResourceId()) + GetBufferData(rs.ibuffer.buf, rs.ibuffer.offs + drawcall->indexOffset * rs.ibuffer.bytewidth, + RDCMIN(drawcall->numIndices * rs.ibuffer.bytewidth, rs.ibuffer.size), idxdata); vector indices; @@ -381,7 +382,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) // only read as many indices as were available in the buffer uint32_t numIndices = - RDCMIN(uint32_t(idxdata.size() / rs.ibuffer.bytewidth), drawcall->numIndices); + RDCMIN(uint32_t(idxdata.size() / RDCMAX(1, rs.ibuffer.bytewidth)), drawcall->numIndices); uint32_t idxclamp = 0; if(drawcall->baseVertex < 0) diff --git a/renderdoc/driver/vulkan/vk_postvs.cpp b/renderdoc/driver/vulkan/vk_postvs.cpp index b4efc8e68..7822e4097 100644 --- a/renderdoc/driver/vulkan/vk_postvs.cpp +++ b/renderdoc/driver/vulkan/vk_postvs.cpp @@ -1197,8 +1197,9 @@ void VulkanReplay::InitPostVSBuffers(uint32_t eventId) uint32_t *idx32 = NULL; // fetch ibuffer - GetBufferData(state.ibuffer.buf, state.ibuffer.offs + drawcall->indexOffset * idxsize, - uint64_t(drawcall->numIndices) * idxsize, idxdata); + if(state.ibuffer.buf != ResourceId()) + GetBufferData(state.ibuffer.buf, state.ibuffer.offs + drawcall->indexOffset * idxsize, + uint64_t(drawcall->numIndices) * idxsize, idxdata); // figure out what the maximum index could be, so we can clamp our index buffer to something // sane @@ -1463,7 +1464,8 @@ void VulkanReplay::InitPostVSBuffers(uint32_t eventId) offs += drawcall->vertexOffset * vi->pVertexBindingDescriptions[vb].stride; } - GetBufferData(state.vbuffers[vb].buf, offs, len, origVBs[vb]); + if(state.vbuffers[vb].buf != ResourceId()) + GetBufferData(state.vbuffers[vb].buf, offs, len, origVBs[vb]); } for(uint32_t i = 0; i < vi->vertexAttributeDescriptionCount; i++)