Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek
On Sun, Dec 6, 2015 at 10:12 AM, Patrick Rudolph <s...@das-labor.org> wrote: > In case a state tracker unbinds every slot by a seperate > pipe->set_vertex_buffers() call, starting from slot zero, the number > of bound buffers would not reach zero at all. Unbinding all buffers > at once or starting at the top-most slot results in correct behaviour. > > Calculating the correct number of bound buffers fixes a NULL pointer > dereference in nvc0_validate_vertex_buffers_shared(). > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93004 > > Signed-off-by: Patrick Rudolph <s...@das-labor.org> > --- > src/gallium/auxiliary/util/u_helpers.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/auxiliary/util/u_helpers.c > b/src/gallium/auxiliary/util/u_helpers.c > index 09619c1..09020b0 100644 > --- a/src/gallium/auxiliary/util/u_helpers.c > +++ b/src/gallium/auxiliary/util/u_helpers.c > @@ -81,7 +81,13 @@ void util_set_vertex_buffers_count(struct > pipe_vertex_buffer *dst, > const struct pipe_vertex_buffer *src, > unsigned start_slot, unsigned count) > { > - uint32_t enabled_buffers = (1ull << *dst_count) - 1; > + unsigned i; > + uint32_t enabled_buffers = 0; > + > + for (i = 0; i < *dst_count; i++) { > + if (dst[i].buffer || dst[i].user_buffer) > + enabled_buffers |= (1ull << i); > + } > > util_set_vertex_buffers_mask(dst, &enabled_buffers, src, start_slot, > count); > -- > 2.4.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev