From 2d16fcca99cc27d2043df7e34e8adef71aafb3c6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 16 Jul 2025 12:09:25 +0100 Subject: [PATCH] When using descriptor buffers ensure descriptor layouts are identical * During replay we add shader visibility - this could cause the layout and order of bindings to change so ensure it happens during capture as well. --- .../driver/vulkan/wrappers/vk_descriptor_funcs.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp index 9f1e93659..2e351c67d 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp @@ -479,6 +479,20 @@ VkResult WrappedVulkan::vkCreateDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout *pSetLayout) { VkDescriptorSetLayoutCreateInfo unwrapped = UnwrapInfo(pCreateInfo); + + if(m_DescriptorBuffers && + (unwrapped.flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT)) + { + for(uint32_t b = 0; b < unwrapped.bindingCount; b++) + { + VkDescriptorSetLayoutBinding &bind = (VkDescriptorSetLayoutBinding &)unwrapped.pBindings[b]; + if(b == 0 || (bind.stageFlags & VK_SHADER_STAGE_VERTEX_BIT)) + { + bind.stageFlags |= VK_SHADER_STAGE_COMPUTE_BIT; + } + } + } + VkResult ret; SERIALISE_TIME_CALL(ret = ObjDisp(device)->CreateDescriptorSetLayout(Unwrap(device), &unwrapped, NULL, pSetLayout));