Closed JuanDiegoMontoya closed 3 months ago
This has been fixed with a recent refactor to how descriptors are handled. The feedback on bindless usage can now report which binding triggered the access so aliased bindings like this will be reported accurately.
I built the latest commit (943d11dace99afbe2c80c9b1322d6f869a86fa0d at the time of writing) on the default branch and can confirm that it's fixed now. Thanks!
Note for readers: it's not fixed in the recently-released v1.32. You'll have to build from source or wait for another release.
Description
I am making a bindless renderer in Vulkan using large array descriptors and descriptor indexing. With this, a GLSL shader that uses multiple storage buffers may declare their blocks like so (notice that they share a binding):
Then, I access the buffers via indices passed via push constants:
The problem is that, when I select a draw or dispatch containing this code in RenderDoc, the pipeline state tab only shows one of these declarations.
For a real example, consider this GLSL code where I declare two buffer block array bindings:
Both blocks contribute to an output of the shader. When we examine this dispatch in the pipeline state tab, notice how![image](https://github.com/baldurk/renderdoc/assets/38368197/c93c821c-ad63-4d44-b567-329a06e117ba)
exposureBuffers
appears, but notuniformsBuffers
.RenderDoc can determine which resources are dynamically accessed. The resources with italicized text are unused in this dispatch. But, as you'd expect, it makes no sense to interpret anything but
Ideally, all resource/block declarations that share a binding should appear independently and only display resources that are dynamically accessed through that declaration.
Exposure (buffer)
through this declaration. To view the data inTonemap Uniforms (buffer)
, I have to manually input a format with which to interpret the buffer data.Steps to reproduce
bug.zip
Environment