[Mesa-dev] [PATCH] u_vbuf: fix potentially bogus assert

Marek Olšák maraeo at gmail.com
Sat Jul 30 17:46:27 UTC 2016


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

Marek

On Sat, Jul 30, 2016 at 5:40 PM, Rob Clark <robdclark at gmail.com> wrote:
> There are cases where we hit u_vbuf path due to alignment or pitch-
> alignment restrictions, but for an output-format that u_vbuf does not
> support translating (yet the driver does support natively).  In which
> case we hit the memcpy() path and don't care that u_vbuf doesn't
> understand it.
>
> Fixes crash with debug build of mesa in:
> dEQP-GLES3.functional.vertex_arrays.single_attribute.strides.fixed.user_ptr_stride17_components2_quads1
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95000
> Signed-off-by: Rob Clark <robdclark at gmail.com>
> ---
>  src/gallium/auxiliary/util/u_vbuf.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/util/u_vbuf.c b/src/gallium/auxiliary/util/u_vbuf.c
> index 5b4e527..532e7c0 100644
> --- a/src/gallium/auxiliary/util/u_vbuf.c
> +++ b/src/gallium/auxiliary/util/u_vbuf.c
> @@ -627,6 +627,7 @@ u_vbuf_translate_begin(struct u_vbuf *mgr,
>     for (i = 0; i < mgr->ve->count; i++) {
>        struct translate_key *k;
>        struct translate_element *te;
> +      enum pipe_format output_format = mgr->ve->native_format[i];
>        unsigned bit, vb_index = mgr->ve->ve[i].vertex_buffer_index;
>        bit = 1 << vb_index;
>
> @@ -644,7 +645,8 @@ u_vbuf_translate_begin(struct u_vbuf *mgr,
>           }
>        }
>        assert(type < VB_NUM);
> -      assert(translate_is_output_format_supported(mgr->ve->native_format[i]));
> +      if (mgr->ve->ve[i].src_format != output_format)
> +         assert(translate_is_output_format_supported(output_format));
>        /*printf("velem=%i type=%i\n", i, type);*/
>
>        /* Add the vertex element. */
> @@ -657,7 +659,7 @@ u_vbuf_translate_begin(struct u_vbuf *mgr,
>        te->input_buffer = vb_index;
>        te->input_format = mgr->ve->ve[i].src_format;
>        te->input_offset = mgr->ve->ve[i].src_offset;
> -      te->output_format = mgr->ve->native_format[i];
> +      te->output_format = output_format;
>        te->output_offset = k->output_stride;
>
>        k->output_stride += mgr->ve->native_format_size[i];
> --
> 2.7.4
>


More information about the mesa-dev mailing list