On Wed, Jul 13, 2016 at 3:34 PM, Nanley Chery <[email protected]> wrote:
> 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 <[email protected]> > Signed-off-by: Nanley Chery <[email protected]> > --- > src/intel/vulkan/anv_descriptor_set.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/src/intel/vulkan/anv_descriptor_set.c > b/src/intel/vulkan/anv_descriptor_set.c > index 448ae0e..f06d2e4 100644 > --- a/src/intel/vulkan/anv_descriptor_set.c > +++ b/src/intel/vulkan/anv_descriptor_set.c > @@ -412,8 +412,8 @@ anv_descriptor_set_create(struct anv_device *device, > /* 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++) { > - if (layout->binding[b].immutable_samplers) { > - for (uint32_t i = 0; i < layout->binding[b].array_size; i++) { > + for (uint32_t i = 0; i < layout->binding[b].array_size; i++) { > + if (layout->binding[b].immutable_samplers) { > /* The type will get changed to COMBINED_IMAGE_SAMPLER in > * UpdateDescriptorSets if needed. However, if the descriptor > * set has an immutable sampler, UpdateDescriptorSets may > never > @@ -423,6 +423,11 @@ anv_descriptor_set_create(struct anv_device *device, > .type = VK_DESCRIPTOR_TYPE_SAMPLER, > .sampler = layout->binding[b].immutable_samplers[i], > }; > + } else { > + /* By defining the descriptors to be zero now, we can later > verify that > + * the descriptor has not been populated with user data. > + */ > + zero(desc[i]); > I think I'd rather just zero the whole thing rather than one descriptor at a time. Given that the memset will use vectorized memory operations, it's almost certainly just as fast if not faster to do so and I think it's more clear. --Jason > } > } > desc += layout->binding[b].array_size; > -- > 2.9.0 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
