Hello,
I'm trying to write resource binding related code for my Vulkan rendererr.
The idea is there are a few static descriptor set layouts, and a few descriptor sets.
Each descriptor set contains data based on how often the data needs to be updated.
Like this: https://zoo.dev/blog/vulkan-resource-binding-2023
Set0: per frame, Set1: per render pass, Set2: per material, etc…
Note: “render pass” is not vkRenderPass, it's more general, like recording G buffer, pre Z pass.
For per render pass descriptor set, since different textures needs to be bound, so I enabled Descriptor Indexing, VkdescriptorBindingFlags is VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT.
My hope was calling vkCmdBindDescriptorSets once, and just using vkUpdateDescriptorSets for different resources at different render passes.
It works(renders properly) except:
validation layer complains
My Observations:
1. I use descriptor indexing across different render passes(each render pass surrounded by vkCmdBeginRenderPass / vkCmdEndRenderPass)
2. Each cmd of these render pass share one cmdBuffer, and recorded sequentially.
3. Textures get bound for different render passes share no dependency.
4. No performance slow down
Like this:
CmdBindDescriptorSets();
BindTexture(0, texture0)
BindTexture(1, texture1)
BindTexture(2, texture2)
RenderPassA.Draw();
BindTexture(3, texture3)
RenderPassB.Draw()
Number 0, 1, 2, 3, 4 is for the dstArrayElement param of VkWriteDescriptorSet.
Any suggestions are really appreciated!
Per Render Pass Resource Binding (Vulkan)
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement