[Mesa-dev] [PATCH 2/2] util/u_helpers: return correct number of bound buffers

Marek Olšák maraeo at gmail.com
Sun Dec 6 02:47:15 PST 2015


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Sun, Dec 6, 2015 at 10:12 AM, Patrick Rudolph <siro at 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 <siro at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list