summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2018-10-02 15:35:59 -0500
committerJason Ekstrand <jason@jlekstrand.net>2019-04-19 19:56:42 +0000
commitd6c9bd6e01b4d593f362a3b5518a71acf2e83ca1 (patch)
tree09ced49ecd62ff877014b4c790c55e3fd4eefb90
parentc0d9926df7d33ab72b386444569fd0c384b115b8 (diff)
anv: Put binding flags in descriptor set layouts
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
-rw-r--r--src/intel/vulkan/anv_descriptor_set.c16
-rw-r--r--src/intel/vulkan/anv_private.h3
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;