diff options
author | Jason Ekstrand <[email protected]> | 2018-10-02 15:35:59 -0500 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2019-04-19 19:56:42 +0000 |
commit | d6c9bd6e01b4d593f362a3b5518a71acf2e83ca1 (patch) | |
tree | 09ced49ecd62ff877014b4c790c55e3fd4eefb90 /src | |
parent | c0d9926df7d33ab72b386444569fd0c384b115b8 (diff) |
anv: Put binding flags in descriptor set layouts
Reviewed-by: Lionel Landwerlin <[email protected]>
Reviewed-by: Caio Marcelo de Oliveira Filho <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/intel/vulkan/anv_descriptor_set.c | 16 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 3 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index 52e0a233b84..c8747caa060 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -330,6 +330,7 @@ VkResult anv_CreateDescriptorSetLayout( /* Initialize all binding_layout entries to -1 */ memset(&set_layout->binding[b], -1, sizeof(set_layout->binding[b])); + set_layout->binding[b].flags = 0; set_layout->binding[b].data = 0; set_layout->binding[b].max_plane_count = 0; set_layout->binding[b].array_size = 0; @@ -353,6 +354,12 @@ VkResult anv_CreateDescriptorSetLayout( set_layout->binding[b].immutable_samplers = (void *)binding; } + const VkDescriptorSetLayoutBindingFlagsCreateInfoEXT *binding_flags_info = + vk_find_struct_const(pCreateInfo->pNext, + DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT); + if (binding_flags_info) + assert(binding_flags_info->bindingCount == pCreateInfo->bindingCount); + for (uint32_t b = 0; b <= max_binding; b++) { const VkDescriptorSetLayoutBinding *binding = (void *)set_layout->binding[b].immutable_samplers; @@ -372,6 +379,14 @@ VkResult anv_CreateDescriptorSetLayout( #ifndef NDEBUG set_layout->binding[b].type = binding->descriptorType; #endif + + if (binding_flags_info) { + uint32_t binding_strct_idx = binding - pCreateInfo->pBindings; + assert(binding_strct_idx < binding_flags_info->bindingCount); + set_layout->binding[b].flags = + binding_flags_info->pBindingFlags[binding_strct_idx]; + } + set_layout->binding[b].data = anv_descriptor_data_for_type(&device->instance->physicalDevice, binding->descriptorType); @@ -480,6 +495,7 @@ static void sha1_update_descriptor_set_binding_layout(struct mesa_sha1 *ctx, const struct anv_descriptor_set_binding_layout *layout) { + SHA1_UPDATE_VALUE(ctx, layout->flags); SHA1_UPDATE_VALUE(ctx, layout->data); SHA1_UPDATE_VALUE(ctx, layout->max_plane_count); SHA1_UPDATE_VALUE(ctx, layout->array_size); diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index cb00d8c8731..1916104197a 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1595,6 +1595,9 @@ struct anv_descriptor_set_binding_layout { VkDescriptorType type; #endif + /* Flags provided when this binding was created */ + VkDescriptorBindingFlagsEXT flags; + /* Bitfield representing the type of data this descriptor contains */ enum anv_descriptor_data data; |