[Mesa-dev] [PATCH] etnaviv: Make sure rs alignment checks match
Guido Günther
agx at sigxcpu.org
Tue Oct 9 11:50:59 UTC 2018
Hi,
On Mon, Sep 17, 2018 at 04:06:57PM +0200, Guido Günther wrote:
> etna_resource_alloc and etna_resource_from_handle currently use different checks.
> This leads to
>
> etna_resource_from_handle:492: target=2, format=PIPE_FORMAT_B8G8R8X8_UNORM, 1080x1920x1, array_size=1, last_level=0, nr_samples=0, usage=0, bind=8000a, flags=0
> etna_resource_from_handle:541: BO stride 4320 is too small for RS engine width padding (4352, format PIPE_FORMAT_B8G8R8X8_UNORM)
>
> since etna_resource_from_handle wants to be aligned to a 16 byte
> boundary while the etna_resource_alloc does not.
>
> Adjust the two checks by using a common function.
Ping?
>
> Broken by baff59ebf07a114f95ad66d1f54e4b1f409eebee
>
> Signed-off-by: Guido Günther <guido.gunther at puri.sm>
> ---
> .../drivers/etnaviv/etnaviv_resource.c | 19 +++++++++++++------
> 1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c
> index 7fd374ae23d..f18c6ec6bfc 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c
> @@ -176,6 +176,15 @@ setup_miptree(struct etna_resource *rsc, unsigned paddingX, unsigned paddingY,
> return size;
> }
>
> +/* Is rs alignment needed? */
> +static bool is_rs_align(struct etna_screen *screen,
> + const struct pipe_resource *tmpl)
> +{
> + return screen->specs.use_blt ? false : (
> + VIV_FEATURE(screen, chipMinorFeatures1, TEXTURE_HALIGN) ||
> + !etna_resource_sampler_only(tmpl));
> +}
> +
> /* Create a new resource object, using the given template info */
> struct pipe_resource *
> etna_resource_alloc(struct pipe_screen *pscreen, unsigned layout,
> @@ -217,11 +226,9 @@ etna_resource_alloc(struct pipe_screen *pscreen, unsigned layout,
> * resolve engine's width. If not, we must not align resources used
> * only for textures. If this GPU uses the BLT engine, never do RS align.
> */
> - bool rs_align = screen->specs.use_blt ? false : (
> - VIV_FEATURE(screen, chipMinorFeatures1, TEXTURE_HALIGN) ||
> - !etna_resource_sampler_only(templat));
> - etna_layout_multiple(layout, screen->specs.pixel_pipes, rs_align, &paddingX,
> - &paddingY, &halign);
> + etna_layout_multiple(layout, screen->specs.pixel_pipes,
> + is_rs_align (screen, templat),
> + &paddingX, &paddingY, &halign);
> assert(paddingX && paddingY);
> } else {
> /* Compressed textures are padded to their block size, but we don't have
> @@ -519,7 +526,7 @@ etna_resource_from_handle(struct pipe_screen *pscreen,
> /* Determine padding of the imported resource. */
> unsigned paddingX = 0, paddingY = 0;
> etna_layout_multiple(rsc->layout, screen->specs.pixel_pipes,
> - VIV_FEATURE(screen, chipMinorFeatures1, TEXTURE_HALIGN),
> + is_rs_align(screen, tmpl),
> &paddingX, &paddingY, &rsc->halign);
>
> if (!screen->specs.use_blt)
> --
> 2.18.0
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the etnaviv
mailing list