Module: Mesa
Branch: master
Commit: 215218f32f50136534cc37eec9bada2b4b6d1f95
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=215218f32f50136534cc37eec9bada2b4b6d1f95

Author: Jason Ekstrand <ja...@jlekstrand.net>
Date:   Fri Oct 16 12:52:46 2020 -0500

anv: Add a descriptor_count to descriptor sets

This is useful for asserting in-bounds descriptor set access.

Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7180>

---

 src/intel/vulkan/anv_cmd_buffer.c     | 1 +
 src/intel/vulkan/anv_descriptor_set.c | 2 ++
 src/intel/vulkan/anv_private.h        | 1 +
 src/intel/vulkan/genX_cmd_buffer.c    | 6 ++++--
 4 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/intel/vulkan/anv_cmd_buffer.c 
b/src/intel/vulkan/anv_cmd_buffer.c
index fd3a92d924a..86596b66457 100644
--- a/src/intel/vulkan/anv_cmd_buffer.c
+++ b/src/intel/vulkan/anv_cmd_buffer.c
@@ -1241,6 +1241,7 @@ anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer 
*cmd_buffer,
    }
    set->size = anv_descriptor_set_layout_size(layout);
    set->buffer_view_count = layout->buffer_view_count;
+   set->descriptor_count = layout->size;
    set->buffer_views = (*push_set)->buffer_views;
 
    if (layout->descriptor_buffer_size &&
diff --git a/src/intel/vulkan/anv_descriptor_set.c 
b/src/intel/vulkan/anv_descriptor_set.c
index 480f7272d75..883c917e3d8 100644
--- a/src/intel/vulkan/anv_descriptor_set.c
+++ b/src/intel/vulkan/anv_descriptor_set.c
@@ -982,6 +982,8 @@ anv_descriptor_set_create(struct anv_device *device,
       (struct anv_buffer_view *) &set->descriptors[layout->size];
    set->buffer_view_count = layout->buffer_view_count;
 
+   set->descriptor_count = layout->size;
+
    /* By defining the descriptors to be zero now, we can later verify that
     * a descriptor has not been populated with user data.
     */
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index d6b9aea3512..f2046fb6ffe 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -2091,6 +2091,7 @@ struct anv_descriptor_set {
    /* Link to descriptor pool's desc_sets list . */
    struct list_head pool_link;
 
+   uint32_t descriptor_count;
    struct anv_descriptor descriptors[0];
 };
 
diff --git a/src/intel/vulkan/genX_cmd_buffer.c 
b/src/intel/vulkan/genX_cmd_buffer.c
index 5f1eca71ed1..985e3b9df5f 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -2600,8 +2600,10 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
 
       default: {
          assert(binding->set < MAX_SETS);
-         const struct anv_descriptor *desc =
-            
&pipe_state->descriptors[binding->set]->descriptors[binding->index];
+         const struct anv_descriptor_set *set =
+            pipe_state->descriptors[binding->set];
+         assert(binding->index < set->descriptor_count);
+         const struct anv_descriptor *desc = &set->descriptors[binding->index];
 
          switch (desc->type) {
          case VK_DESCRIPTOR_TYPE_SAMPLER:

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to