anv/descriptor_set: Fix binding partly undefined descriptor sets
Section 13.2.3. of the Vulkan spec requires that implementations be able to bind sparsely-defined Descriptor Sets without any errors or exceptions. When binding a descriptor set that contains a dynamic buffer binding/descriptor, the driver attempts to dereference the descriptor's buffer_view field if it is non-NULL. It currently segfaults on undefined descriptors as this field is never zero-initialized. Zero undefined descriptors to avoid segfaulting. This solution was suggested by Jason Ekstrand. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96850 Cc: 12.0 <mesa-stable@lists.freedesktop.org> Signed-off-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -409,6 +409,11 @@ anv_descriptor_set_create(struct anv_device *device,
|
||||
(struct anv_buffer_view *) &set->descriptors[layout->size];
|
||||
set->buffer_count = layout->buffer_count;
|
||||
|
||||
/* By defining the descriptors to be zero now, we can later verify that
|
||||
* a descriptor has not been populated with user data.
|
||||
*/
|
||||
memset(set->descriptors, 0, sizeof(struct anv_descriptor) * layout->size);
|
||||
|
||||
/* Go through and fill out immutable samplers if we have any */
|
||||
struct anv_descriptor *desc = set->descriptors;
|
||||
for (uint32_t b = 0; b < layout->binding_count; b++) {
|
||||
|
Reference in New Issue
Block a user