panfrost: Move special Z32_S8X24 case out of panfrost_setup_layout()
authorBoris Brezillon <boris.brezillon@collabora.com>
Thu, 25 Mar 2021 17:50:20 +0000 (18:50 +0100)
committerMarge Bot <eric+marge@anholt.net>
Tue, 13 Apr 2021 18:06:37 +0000 (18:06 +0000)
We are about to move the panfrost_setup_layout() logic out of the
gallium driver, and the Z32_S8X24 split is not mandatory (some GPU
support this format natively). Let's move this special case out of
panfrost_setup_layout() and patch the format of the first plane
instead.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10033>

src/gallium/drivers/panfrost/pan_resource.c

index 22e92a0..4b7d62a 100644 (file)
@@ -350,13 +350,6 @@ panfrost_setup_layout(struct panfrost_device *dev,
         pres->image.layout.depth = height;
         pres->image.layout.array_size = res->array_size;
 
-        /* Z32_S8X24 variants are actually stored in 2 planes (one per
-         * component), we have to adjust the bytes_per_pixel value accordingly.
-         */
-        if (pres->image.layout.format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT ||
-            pres->image.layout.format == PIPE_FORMAT_X32_S8X24_UINT)
-                bytes_per_pixel = 4;
-
         /* MSAA is implemented as a 3D texture with z corresponding to the
          * sample #, horrifyingly enough */
 
@@ -653,6 +646,12 @@ panfrost_resource_setup(struct panfrost_device *dev, struct panfrost_resource *p
         pres->modifier_constant = !((pres->image.layout.modifier != DRM_FORMAT_MOD_LINEAR)
                         && (modifier == DRM_FORMAT_MOD_INVALID));
 
+        /* Z32_S8X24 variants are actually stored in 2 planes (one per
+         * component), we have to adjust the format on the first plane.
+         */
+        if (pres->image.layout.format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT)
+                pres->image.layout.format = PIPE_FORMAT_Z32_FLOAT;
+
         panfrost_setup_layout(dev, pres, bo_size);
 }