diff --git a/src/nouveau/vulkan/nvk_descriptor_set_layout.c b/src/nouveau/vulkan/nvk_descriptor_set_layout.c index 2f331442e62..fd5b824fda5 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set_layout.c +++ b/src/nouveau/vulkan/nvk_descriptor_set_layout.c @@ -192,10 +192,17 @@ nvk_CreateDescriptorSetLayout(VkDevice device, switch (binding->descriptorType) { case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: + layout->binding[b].dynamic_buffer_index = dynamic_buffer_count; + BITSET_SET_RANGE(layout->dynamic_ubos, dynamic_buffer_count, + dynamic_buffer_count + binding->descriptorCount - 1); + dynamic_buffer_count += binding->descriptorCount; + break; + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: layout->binding[b].dynamic_buffer_index = dynamic_buffer_count; dynamic_buffer_count += binding->descriptorCount; break; + default: break; } diff --git a/src/nouveau/vulkan/nvk_descriptor_set_layout.h b/src/nouveau/vulkan/nvk_descriptor_set_layout.h index 56425c4c485..5102d34fc36 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set_layout.h +++ b/src/nouveau/vulkan/nvk_descriptor_set_layout.h @@ -10,6 +10,8 @@ #include "vk_descriptor_set_layout.h" #include "vk_object.h" +#include "util/bitset.h" + struct nvk_device; struct nvk_physical_device; struct nvk_sampler; @@ -50,6 +52,9 @@ struct nvk_descriptor_set_layout { /* Number of dynamic UBO bindings in this set */ uint8_t dynamic_buffer_count; + /* Which dynamic buffers are UBOs */ + BITSET_DECLARE(dynamic_ubos, NVK_MAX_DYNAMIC_BUFFERS); + /* Number of bindings in this descriptor set */ uint32_t binding_count;