Mesa (main): anv: keep descriptor set's address directly in anv_descriptor_set

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 30 08:52:11 UTC 2021


Module: Mesa
Branch: main
Commit: 79a50c6f54f8f2d9906b9392cc5a685f213cc608
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=79a50c6f54f8f2d9906b9392cc5a685f213cc608

Author: Marcin Ślusarz <marcin.slusarz at intel.com>
Date:   Mon Jun 28 12:56:31 2021 +0200

anv: keep descriptor set's address directly in anv_descriptor_set

Signed-off-by: Marcin Ślusarz <marcin.slusarz at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11577>

---

 src/intel/vulkan/anv_cmd_buffer.c     | 11 ++++-------
 src/intel/vulkan/anv_descriptor_set.c | 11 +++++++----
 src/intel/vulkan/anv_private.h        |  3 +++
 src/intel/vulkan/genX_cmd_buffer.c    | 15 +++------------
 4 files changed, 17 insertions(+), 23 deletions(-)

diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c
index 3ebaa480ce0..1a98c178faa 100644
--- a/src/intel/vulkan/anv_cmd_buffer.c
+++ b/src/intel/vulkan/anv_cmd_buffer.c
@@ -941,11 +941,7 @@ anv_cmd_buffer_bind_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
       if (bind_point == VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR) {
          struct anv_push_constants *push = &pipe_state->push_constants;
 
-         struct anv_address set_addr = {
-            .bo = set->pool->bo,
-            .offset = set->desc_mem.offset,
-         };
-         push->desc_sets[set_index] = anv_address_physical(set_addr);
+         push->desc_sets[set_index] = anv_address_physical(set->desc_addr);
 
          anv_reloc_list_add_bo(cmd_buffer->batch.relocs,
                                cmd_buffer->batch.alloc,
@@ -1409,7 +1405,7 @@ anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
       }
       set->desc_mem = desc_mem;
 
-      struct anv_address addr = {
+      set->desc_addr = (struct anv_address) {
          .bo = cmd_buffer->dynamic_state_stream.state_pool->block_pool.bo,
          .offset = set->desc_mem.offset,
       };
@@ -1425,7 +1421,8 @@ anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer,
       anv_fill_buffer_surface_state(cmd_buffer->device,
                                     set->desc_surface_state, format,
                                     ISL_SURF_USAGE_CONSTANT_BUFFER_BIT,
-                                    addr, layout->descriptor_buffer_size, 1);
+                                    set->desc_addr,
+                                    layout->descriptor_buffer_size, 1);
    }
 
    return set;
diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c
index 5ac21e2db5b..cab5402e51b 100644
--- a/src/intel/vulkan/anv_descriptor_set.c
+++ b/src/intel/vulkan/anv_descriptor_set.c
@@ -1079,6 +1079,11 @@ anv_descriptor_set_create(struct anv_device *device,
       set->desc_mem.alloc_size = descriptor_buffer_size;
       set->desc_mem.map = pool->bo->map + set->desc_mem.offset;
 
+      set->desc_addr = (struct anv_address) {
+         .bo = pool->bo,
+         .offset = set->desc_mem.offset,
+      };
+
       enum isl_format format =
          anv_isl_format_for_descriptor_type(device,
                                             VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
@@ -1086,13 +1091,11 @@ anv_descriptor_set_create(struct anv_device *device,
       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,
-                                    (struct anv_address) {
-                                       .bo = pool->bo,
-                                       .offset = set->desc_mem.offset,
-                                    },
+                                    set->desc_addr,
                                     descriptor_buffer_size, 1);
    } else {
       set->desc_mem = ANV_STATE_NULL;
+      set->desc_addr = (struct anv_address) { .bo = NULL, .offset = 0 };
       set->desc_surface_state = ANV_STATE_NULL;
    }
 
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 0aa21b43749..7b133f77235 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -2047,6 +2047,9 @@ struct anv_descriptor_set {
    /* Surface state for the descriptor buffer */
    struct anv_state desc_surface_state;
 
+   /* Descriptor set address. */
+   struct anv_address desc_addr;
+
    uint32_t buffer_view_count;
    struct anv_buffer_view *buffer_views;
 
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index abb66c0de56..217e19e48b5 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -2551,25 +2551,16 @@ static struct anv_address
 anv_descriptor_set_address(struct anv_cmd_buffer *cmd_buffer,
                            struct anv_descriptor_set *set)
 {
-   if (set->pool) {
-      /* This is a normal descriptor set */
-      return (struct anv_address) {
-         .bo = set->pool->bo,
-         .offset = set->desc_mem.offset,
-      };
-   } else {
+   if (set->pool == NULL) {
       /* This is a push descriptor set.  We have to flag it as used on the GPU
        * so that the next time we push descriptors, we grab a new memory.
        */
       struct anv_push_descriptor_set *push_set =
          (struct anv_push_descriptor_set *)set;
       push_set->set_used_on_gpu = true;
-
-      return (struct anv_address) {
-         .bo = cmd_buffer->dynamic_state_stream.state_pool->block_pool.bo,
-         .offset = set->desc_mem.offset,
-      };
    }
+
+   return set->desc_addr;
 }
 
 static VkResult



More information about the mesa-commit mailing list