[Mesa-dev] [PATCH] panfrost: Fix stride check when mipmapping

Tomeu Vizoso tomeu.vizoso at collabora.com
Mon Jun 10 08:23:25 UTC 2019


On Sat, 8 Jun 2019 at 02:15, Alyssa Rosenzweig
<alyssa.rosenzweig at collabora.com> wrote:
>
> Now that we support custom strides on mipmapped lines textures
> (theoretically, at least), extend the stride check to support mipmaps.
> Fixes incorrect strides of linear windows in Weston.
>
> Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>

Looks good too me!

Reviewed-by: Tomeu Vizoso <tomeu.vizoso at collabora.com>

Thanks,

Tomeu

> ---
>  src/gallium/drivers/panfrost/pan_context.c | 22 +++++++++++++++-------
>  1 file changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
> index 90f60f35581..c5e49805872 100644
> --- a/src/gallium/drivers/panfrost/pan_context.c
> +++ b/src/gallium/drivers/panfrost/pan_context.c
> @@ -2002,15 +2002,23 @@ panfrost_create_sampler_view(
>
>          /* Check if we need to set a custom stride by computing the "expected"
>           * stride and comparing it to what the BO actually wants. Only applies
> -         * to linear textures TODO: Mipmap? */
> +         * to linear textures, since tiled/compressed textures have strict
> +         * alignment requirements for their strides as it is */
>
> -        unsigned actual_stride = prsrc->bo->slices[0].stride;
> +        unsigned first_level = template->u.tex.first_level;
> +        unsigned last_level = template->u.tex.last_level;
>
> -        if (prsrc->bo->layout == PAN_LINEAR &&
> -            template->u.tex.last_level == 0 &&
> -            template->u.tex.first_level == 0 &&
> -            (texture->width0 * bytes_per_pixel) != actual_stride) {
> -                usage2_layout |= MALI_TEX_MANUAL_STRIDE;
> +        if (prsrc->bo->layout == PAN_LINEAR) {
> +                for (unsigned l = first_level; l <= last_level; ++l) {
> +                        unsigned actual_stride = prsrc->bo->slices[l].stride;
> +                        unsigned width = u_minify(texture->width0, l);
> +                        unsigned comp_stride = width * bytes_per_pixel;
> +
> +                        if (comp_stride != actual_stride) {
> +                                usage2_layout |= MALI_TEX_MANUAL_STRIDE;
> +                                break;
> +                        }
> +                }
>          }
>
>          struct mali_texture_descriptor texture_descriptor = {
> --
> 2.20.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list