panfrost: Fix tiled NPOT textures with bpp<4
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 20 Jun 2019 15:19:06 +0000 (08:19 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 20 Jun 2019 15:22:38 +0000 (08:22 -0700)
Panfrost's tiling routines (incorrectly) ignored the source stride,
masking this bug; lima's routines respect this stride, causing issues
when tiling NPOT textures whose stride is not a multiple of 64
(for instance, NPOT textures with bpp=1).

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/pan_resource.c

index 332208d4e2fe7c0168d886b8a2339e37a48fd8b2..4f4499aa4035bf75c6f1b3bd68496c4798bb5cae 100644 (file)
@@ -198,10 +198,10 @@ panfrost_setup_slices(const struct pipe_resource *tmpl, struct panfrost_bo *bo)
 
         /* We don't know how to specify a 2D stride for 3D textures */
 
-        bool should_align_stride =
+        bool can_align_stride =
                 tmpl->target != PIPE_TEXTURE_3D;
 
-        should_align &= should_align_stride;
+        should_align &= can_align_stride;
 
         unsigned offset = 0;
         unsigned size_2d = 0;
@@ -226,7 +226,7 @@ panfrost_setup_slices(const struct pipe_resource *tmpl, struct panfrost_bo *bo)
                 unsigned stride = bytes_per_pixel * effective_width;
 
                 /* ..but cache-line align it for performance */
-                if (should_align_stride)
+                if (can_align_stride && bo->layout == PAN_LINEAR)
                         stride = ALIGN(stride, 64);
 
                 slice->stride = stride;