panfrost: Implement linear Z/S for SFBD
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 11 Nov 2020 18:17:43 +0000 (13:17 -0500)
committerMarge Bot <eric+marge@anholt.net>
Fri, 13 Nov 2020 19:03:07 +0000 (19:03 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Tested-by: Robin Murphy <robin.murphy@arm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7557>

src/gallium/drivers/panfrost/pan_sfbd.c

index f8de633..8bfeee1 100644 (file)
@@ -115,12 +115,19 @@ panfrost_sfbd_set_zsbuf(
         unsigned level = surf->u.tex.level;
         assert(surf->u.tex.first_layer == 0);
 
-        if (rsrc->modifier != DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED)
-                unreachable("Invalid render modifier.");
-
-        fb->zs_block_format = MALI_BLOCK_FORMAT_TILED_U_INTERLEAVED;
         fb->zs_writeback.base = rsrc->bo->ptr.gpu + rsrc->slices[level].offset;
-        fb->zs_writeback.row_stride = rsrc->slices[level].stride * 16;
+        fb->zs_writeback.row_stride = rsrc->slices[level].stride;
+
+        if (rsrc->modifier == DRM_FORMAT_MOD_LINEAR)
+                fb->zs_block_format = MALI_BLOCK_FORMAT_LINEAR;
+        else if (rsrc->modifier == DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED) {
+                fb->zs_block_format = MALI_BLOCK_FORMAT_TILED_U_INTERLEAVED;
+                fb->zs_writeback.row_stride *= 16;
+        } else {
+                fprintf(stderr, "Invalid render modifier\n");
+                assert(0);
+        }
+
         switch (surf->format) {
         case PIPE_FORMAT_Z16_UNORM:
                 fb->zs_format = MALI_ZS_FORMAT_D16;