panfrost: Z24 variants should be sampled as R32UI
authorBoris Brezillon <boris.brezillon@collabora.com>
Fri, 31 Jan 2020 09:59:23 +0000 (10:59 +0100)
committerMarge Bot <eric+marge@anholt.net>
Wed, 5 Feb 2020 15:41:55 +0000 (15:41 +0000)
Midgard has no dedicated samplers for Z24S8 and Z24X8 formats, and the
GPU expects the depth to be encoded in an IEEE 32-bit float. Turn all
Z24_UNORM variants into R32UI and let the shader do the conversion
using bfe+fmul instructions.

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/3697>

src/gallium/drivers/panfrost/pan_format.c

index b4fb38fefedf8287a11c5254a9b1bc9c8aa6e7ce..4f138ca402701c89485d25c58e6263d2feb4a1fd 100644 (file)
@@ -186,9 +186,17 @@ panfrost_find_format(const struct util_format_description *desc) {
                 return MALI_RGB10_A2I;
 
         case PIPE_FORMAT_Z32_UNORM:
+                return MALI_Z32_UNORM;
+
         case PIPE_FORMAT_Z24X8_UNORM:
         case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-                return MALI_Z32_UNORM;
+                /* Midgard has no dedicated samplers for Z24S8 and Z24X8
+                 * formats, and the GPU expects the depth to be encoded in an
+                 * IEEE 32-bit float. Turn all Z24_UNORM variants into R32UI
+                 * and let the shader do the conversion using bfe+fmul
+                 * instructions.
+                 */
+                return MALI_R32UI;
 
         case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
                 /* Z32F = R32F to the hardware */