anv: rename host only descriptor internal flag
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Fri, 4 Mar 2022 10:52:04 +0000 (12:52 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 11 Mar 2022 08:47:15 +0000 (08:47 +0000)
We add an assert to verify that those are not bound.

v2: Drop != 0 (Tapani)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Rohan Garg <rohan.garg@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15241>

src/intel/vulkan/anv_cmd_buffer.c
src/intel/vulkan/anv_descriptor_set.c
src/intel/vulkan/anv_private.h

index 1d012ad..78f8728 100644 (file)
@@ -993,6 +993,17 @@ anv_cmd_buffer_bind_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
                                    uint32_t *dynamic_offset_count,
                                    const uint32_t **dynamic_offsets)
 {
+   /* Either we have no pool because it's a push descriptor or the pool is not
+    * host only :
+    *
+    * VUID-vkCmdBindDescriptorSets-pDescriptorSets-04616:
+    *
+    *    "Each element of pDescriptorSets must not have been allocated from a
+    *     VkDescriptorPool with the
+    *     VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE flag set"
+    */
+   assert(!set->pool || !set->pool->host_only);
+
    struct anv_descriptor_set_layout *set_layout =
       layout->set[set_index].layout;
 
index 733cea8..6b277fd 100644 (file)
@@ -944,7 +944,7 @@ VkResult anv_CreateDescriptorPool(
    pool->size = pool_size;
    pool->next = 0;
    pool->free_list = EMPTY;
-   pool->allocate_surface_states = (pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE) == 0;
+   pool->host_only = pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE;
 
    if (descriptor_bo_size > 0) {
       VkResult result = anv_device_alloc_bo(device,
@@ -1091,7 +1091,7 @@ struct surface_state_free_list_entry {
 static struct anv_state
 anv_descriptor_pool_alloc_state(struct anv_descriptor_pool *pool)
 {
-   assert(pool->allocate_surface_states);
+   assert(!pool->host_only);
 
    struct surface_state_free_list_entry *entry =
       pool->surface_state_free_list;
@@ -1174,7 +1174,7 @@ anv_descriptor_set_create(struct anv_device *device,
          anv_isl_format_for_descriptor_type(device,
                                             VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
 
-      if (pool->allocate_surface_states) {
+      if (!pool->host_only) {
          set->desc_surface_state = anv_descriptor_pool_alloc_state(pool);
          anv_fill_buffer_surface_state(device, set->desc_surface_state, format,
                                        ISL_SURF_USAGE_CONSTANT_BUFFER_BIT,
@@ -1230,7 +1230,7 @@ anv_descriptor_set_create(struct anv_device *device,
    /* Allocate null surface state for the buffer views since
     * we lazy allocate this in the write anyway.
     */
-   if (pool->allocate_surface_states) {
+   if (!pool->host_only) {
       for (uint32_t b = 0; b < set->buffer_view_count; b++) {
          set->buffer_views[b].surface_state =
             anv_descriptor_pool_alloc_state(pool);
@@ -1259,7 +1259,7 @@ anv_descriptor_set_destroy(struct anv_device *device,
          anv_descriptor_pool_free_state(pool, set->desc_surface_state);
    }
 
-   if (pool->allocate_surface_states) {
+   if (!pool->host_only) {
       for (uint32_t b = 0; b < set->buffer_view_count; b++) {
          if (set->buffer_views[b].surface_state.alloc_size)
             anv_descriptor_pool_free_state(pool, set->buffer_views[b].surface_state);
@@ -1417,7 +1417,7 @@ anv_descriptor_set_write_image_view(struct anv_device *device,
       .sampler = sampler,
    };
 
-   if (set->pool && !set->pool->allocate_surface_states)
+   if (set->pool && set->pool->host_only)
       return;
 
    void *desc_map = set->desc_mem.map + bind_layout->descriptor_offset +
@@ -1522,7 +1522,7 @@ anv_descriptor_set_write_buffer_view(struct anv_device *device,
       .buffer_view = buffer_view,
    };
 
-   if (set->pool && !set->pool->allocate_surface_states)
+   if (set->pool && set->pool->host_only)
       return;
 
    enum anv_descriptor_data data =
@@ -1590,7 +1590,7 @@ anv_descriptor_set_write_buffer(struct anv_device *device,
       .buffer = buffer,
    };
 
-   if (set->pool && !set->pool->allocate_surface_states)
+   if (set->pool && set->pool->host_only)
       return;
 
    void *desc_map = set->desc_mem.map + bind_layout->descriptor_offset +
@@ -1693,7 +1693,7 @@ anv_descriptor_set_write_acceleration_structure(struct anv_device *device,
       .accel_struct = accel,
    };
 
-   if (set->pool && !set->pool->allocate_surface_states)
+   if (set->pool && set->pool->host_only)
       return;
 
    struct anv_address_range_descriptor desc_data = { };
index 90ec212..95e8d8b 100644 (file)
@@ -2021,7 +2021,7 @@ struct anv_descriptor_pool {
 
    struct list_head desc_sets;
 
-   bool allocate_surface_states;
+   bool host_only;
 
    char data[0];
 };