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