From 4ab0e9c466be0ac81f69031dd219becb9c75c846 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 29 Jul 2019 10:57:59 +0100 Subject: [PATCH] Make sure transform feedback buffers are referenced in frame correctly --- .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 6f9274791..93917f37e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -4520,7 +4520,8 @@ void WrappedVulkan::vkCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer command { size = pSizes[i]; } - record->MarkBufferFrameReferenced(GetRecord(pBuffers[i]), pOffsets[i], size, eFrameRef_Read); + record->MarkBufferFrameReferenced(GetRecord(pBuffers[i]), pOffsets[i], size, + eFrameRef_PartialWrite); } } } @@ -4609,6 +4610,15 @@ void WrappedVulkan::vkCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer pCounterBuffers, pCounterBufferOffsets); record->AddChunk(scope.Get()); + for(uint32_t i = 0; i < bufferCount; i++) + { + if(pCounterBuffers && pCounterBuffers[i] != VK_NULL_HANDLE) + { + VkDeviceSize offset = pCounterBufferOffsets ? pCounterBufferOffsets[i] : 0; + record->MarkBufferFrameReferenced(GetRecord(pCounterBuffers[i]), offset, 4, + eFrameRef_ReadBeforeWrite); + } + } } } @@ -4689,6 +4699,15 @@ void WrappedVulkan::vkCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, pCounterBuffers, pCounterBufferOffsets); record->AddChunk(scope.Get()); + for(uint32_t i = 0; i < bufferCount; i++) + { + if(pCounterBuffers && pCounterBuffers[i] != VK_NULL_HANDLE) + { + VkDeviceSize offset = pCounterBufferOffsets ? pCounterBufferOffsets[i] : 0; + record->MarkBufferFrameReferenced(GetRecord(pCounterBuffers[i]), offset, 4, + eFrameRef_ReadBeforeWrite); + } + } } }