Fix overrunning vector bounds if vertex attributes use high locations

This commit is contained in:
baldurk
2018-01-24 22:52:25 +00:00
parent 77f767394b
commit a159af9cfe
+8 -2
View File
@@ -1222,7 +1222,7 @@ void VulkanReplay::InitPostVSBuffers(uint32_t eventId)
};
std::vector<bool> attrIsInstanced;
std::vector<CompactedAttrBuffer> vbuffers;
CompactedAttrBuffer vbuffers[64] = {};
{
VkWriteDescriptorSet descWrites[64];
@@ -1260,12 +1260,18 @@ void VulkanReplay::InitPostVSBuffers(uint32_t eventId)
GetBufferData(state.vbuffers[vb].buf, offs, len, origVBs[vb]);
}
vbuffers.resize(vi->vertexAttributeDescriptionCount);
for(uint32_t i = 0; i < vi->vertexAttributeDescriptionCount; i++)
{
const VkVertexInputAttributeDescription &attrDesc = vi->pVertexAttributeDescriptions[i];
uint32_t attr = attrDesc.location;
RDCASSERT(attr < 64);
if(attr >= ARRAY_COUNT(vbuffers))
{
RDCERR("Attribute index too high! Resize array.");
continue;
}
bool isInstanced = false;
size_t stride = 1;