diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 0fe546ee1..4dbebcd91 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -3832,6 +3832,31 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSetWithTemplateKHR( // recording to ApplyPushDescriptorWrites(layout, set, (uint32_t)apply.writes.size(), apply.writes.data()); + // now unwrap everything in-place to save on temp allocs. + VkWriteDescriptorSet *writes = (VkWriteDescriptorSet *)apply.writes.data(); + + for(size_t i = 0; i < apply.writes.size(); i++) + { + for(uint32_t d = 0; d < writes[i].descriptorCount; d++) + { + VkBufferView *pTexelBufferView = (VkBufferView *)writes[i].pTexelBufferView; + VkDescriptorBufferInfo *pBufferInfo = (VkDescriptorBufferInfo *)writes[i].pBufferInfo; + VkDescriptorImageInfo *pImageInfo = (VkDescriptorImageInfo *)writes[i].pImageInfo; + + if(pTexelBufferView) + pTexelBufferView[d] = Unwrap(pTexelBufferView[d]); + + if(pBufferInfo) + pBufferInfo[d].buffer = Unwrap(pBufferInfo[d].buffer); + + if(pImageInfo) + { + pImageInfo[d].imageView = Unwrap(pImageInfo[d].imageView); + pImageInfo[d].sampler = Unwrap(pImageInfo[d].sampler); + } + } + } + ObjDisp(commandBuffer) ->CmdPushDescriptorSetKHR(Unwrap(commandBuffer), bindPoint, Unwrap(layout), set, (uint32_t)apply.writes.size(), apply.writes.data()); @@ -3948,6 +3973,7 @@ void WrappedVulkan::vkCmdPushDescriptorSetWithTemplateKHR( layout, set, pData); record->AddChunk(scope.Get()); + record->MarkResourceFrameReferenced(GetResID(descriptorUpdateTemplate), eFrameRef_Read); for(size_t i = 0; i < frameRefs.size(); i++) record->MarkResourceFrameReferenced(frameRefs[i].first, frameRefs[i].second); }