KhronosGroup / Vulkan-Samples

One stop solution for all Vulkan samples
Apache License 2.0
4.33k stars 647 forks source link

Regression in samples caused by https://github.com/KhronosGroup/Vulkan-Samples/pull/1091 #1116

Closed gary-sweet closed 3 months ago

gary-sweet commented 3 months ago

I'm seeing various visual artifacts in samples - the most obvious being in 16bit_storage_input_output where the teapots regularly flash yellow.

AFBC is flickering. async_compute is also lit badly.

A bisect of recent changes has shown https://github.com/KhronosGroup/Vulkan-Samples/pull/1091 (Unify vkb::BufferPool and vkb::rendering::HPPBufferPool into vkb::BufferPool) as being the point at which the artifacts began.

gary-sweet commented 3 months ago

This change also causes command_buffer_usage to crash for me. The driver is given a null buffer at some point.

SaschaWillems commented 3 months ago

While the sample does not crash for me (Win 11 nvidia RTX 4070), I'm seeing lots of validation errors now, e.g.

[error] -36706146 - VUID-VkWriteDescriptorSet-descriptorType-00327: Validation Error: [ VUID-VkWriteDescriptorSet-descriptorType-00327 ] | MessageID = 0xfdcfe89e | vkUpdateDescriptorSets(): pDescriptorWrites[0].pBufferInfo[0].offset (95760) must be a multiple of device limit minUniformBufferOffsetAlignment 64 when descriptor type is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER. The Vulkan spec states: If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the offset member of each element of pBufferInfo must be a multiple of VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment (https://vulkan.lunarg.com/doc/view/1.3.290.0/windows/1.3-extensions/vkspec.html#VUID-VkWriteDescriptorSet-descriptorType-00327)
[error] -1774973932 - VUID-VkDescriptorBufferInfo-buffer-parameter: Validation Error: [ VUID-VkDescriptorBufferInfo-buffer-parameter ] Object 0: handle = 0x17f03a72da0, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0x96340c14 | vkUpdateDescriptorSets(): pDescriptorWrites[1].pBufferInfo[0].buffer Invalid VkBuffer Object 0xdddddddddddddddd. The Vulkan spec states: If buffer is not VK_NULL_HANDLE, buffer must be a valid VkBuffer handle (https://vulkan.lunarg.com/doc/view/1.3.290.0/windows/1.3-extensions/vkspec.html#VUID-VkDescriptorBufferInfo-buffer-parameter)

So yeah, something def. broke with that PR. I don't remember seeing these in batch mode, but I probably forgot to enable validation when I did review the PR.

Looking at it, it seems to also change a few bits here and there regarding size and offset caluculations :/