From 0cc5ed6145088c8e2b62e969bcb82b20c788f75a Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 13 May 2018 10:13:32 +0100 Subject: [PATCH] Handle dstArrayElement when updating current bindings from initial state --- renderdoc/driver/vulkan/vk_initstate.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_initstate.cpp b/renderdoc/driver/vulkan/vk_initstate.cpp index 0adffa861..27556e309 100644 --- a/renderdoc/driver/vulkan/vk_initstate.cpp +++ b/renderdoc/driver/vulkan/vk_initstate.cpp @@ -1164,27 +1164,28 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, VkInitialContents ini for(uint32_t i = 0; i < initial.numDescriptors; i++) { RDCASSERT(writes[i].dstBinding < bindings.size()); - RDCASSERT(writes[i].dstArrayElement == 0); DescriptorSetSlot *bind = bindings[writes[i].dstBinding]; for(uint32_t d = 0; d < writes[i].descriptorCount; d++) { + uint32_t idx = writes[i].dstArrayElement + d; + if(writes[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER || writes[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER) { - bind[d].texelBufferView = writes[i].pTexelBufferView[d]; + bind[idx].texelBufferView = writes[i].pTexelBufferView[idx]; } else if(writes[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER || writes[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || writes[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER || writes[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) { - bind[d].bufferInfo = writes[i].pBufferInfo[d]; + bind[idx].bufferInfo = writes[i].pBufferInfo[idx]; } else { - bind[d].imageInfo = writes[i].pImageInfo[d]; + bind[idx].imageInfo = writes[i].pImageInfo[idx]; } } }