CombinedImageSampler broken with VVL + descriptor buffer + SingleArray = false
Environment:
- OS: Win11 24H2
- GPU and driver version: Intel B580, 32.0.101.6734 and 32.0.101.6793
- SDK or header version if building from repo: 1.4.313
- Options enabled (synchronization, best practices, etc.): PrintF OR GPU-AV
Describe the Issue
There seems to be an issue with combined image samplers when the following criterias are met:
- Descriptor Buffers are used
- CombinedImageSamplers are used
- GPU requires VkPhysicalDeviceDescriptorBufferPropertiesEXT.combinedImageSamplerDescriptorSingleArray = false
- VVL "Debug Printf Preset" is used OR "GPU-Assisted Preset" is used
If any of the points above isnt met (eg, disable VVL) the issue doesnt appear.
It seems that the samplers use default (uninitialized?) values.
For example:
- The whole image has color banding because the sampling in the Tonemapping LUT is using nearest instead of linear interpolation.
- The bloom bleeds over image edges because the sampler doesnt clamp anymore.
- Specular reflections are sampled with nearest and always use mip 0. (sampler min and max mip is 0)
Expected behavior
The App should render correctly, even with the Debug Printf Preset enabled.
Descriptor Buffers are used
So currently GPU-AV and DebugPrintf both rely on using a "normal" Descriptor Slot in order to write the data out into a SSBO, and unfortunately you can not mix-and-match "normal descriptors" with VK_EXT_descriptor_buffer... we try and print a warning at the start that things will likely not work
It will require a lot of work to find a solution and we haven't started looking into it yet, but this is a known issue
Yes I can see the message
vkCreateDevice(): Internal Warning: VK_EXT_descriptor_buffer is enabled, but GPU-AV does not currently support validation of descriptor buffers. [Disabling all shader instrumentation checks],
but I think expected that debugprintf gets disabled without side effects.
Instead the render result got changed.
I was debugging another bug with printf and after fixing it, I was testing all combinations of gpus and descriptor buffer on+off. It didnt work on specific GPUs and I suspected my changes to be at fault. Only after some time I found out that it works perfectly without VVL enabled.
but I think expected that debugprintf gets disabled without side effects.
I agree with this, let me look into this