venus: layout to track variable descriptor count binding info

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Ryan Neph <ryanneph@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12501>
This commit is contained in:
Yiwei Zhang 2021-08-24 20:57:23 +00:00 committed by Marge Bot
parent d8e89b4e33
commit d2b1a7c2bb
2 changed files with 34 additions and 0 deletions

View File

@ -42,6 +42,18 @@ vn_descriptor_set_layout_init(
VkDevice dev_handle = vn_device_to_handle(dev);
VkDescriptorSetLayout layout_handle =
vn_descriptor_set_layout_to_handle(layout);
const VkDescriptorSetLayoutBindingFlagsCreateInfo *binding_flags =
vk_find_struct_const(create_info->pNext,
DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO);
/* 14.2.1. Descriptor Set Layout
*
* If bindingCount is zero or if this structure is not included in
* the pNext chain, the VkDescriptorBindingFlags for each descriptor
* set layout binding is considered to be zero.
*/
if (binding_flags && !binding_flags->bindingCount)
binding_flags = NULL;
layout->last_binding = last_binding;
@ -51,6 +63,27 @@ vn_descriptor_set_layout_init(
struct vn_descriptor_set_layout_binding *binding =
&layout->bindings[binding_info->binding];
if (binding_info->binding == last_binding) {
/* 14.2.1. Descriptor Set Layout
*
* VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT must only be
* used for the last binding in the descriptor set layout (i.e. the
* binding with the largest value of binding).
*
* 41. Features
*
* descriptorBindingVariableDescriptorCount indicates whether the
* implementation supports descriptor sets with a variable-sized last
* binding. If this feature is not enabled,
* VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT must not be
* used.
*/
layout->has_variable_descriptor_count =
binding_flags &&
(binding_flags->pBindingFlags[i] &
VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT);
}
binding->type = binding_info->descriptorType;
binding->count = binding_info->descriptorCount;

View File

@ -23,6 +23,7 @@ struct vn_descriptor_set_layout {
struct vn_object_base base;
uint32_t last_binding;
bool has_variable_descriptor_count;
/* bindings must be the last field in the layout */
struct vn_descriptor_set_layout_binding bindings[];