panfrost: Fix background showing when using discard
authorIcecream95 <ixn@keemail.me>
Tue, 12 May 2020 02:08:09 +0000 (14:08 +1200)
committerMarge Bot <eric+marge@anholt.net>
Thu, 14 May 2020 01:08:21 +0000 (01:08 +0000)
This fixes problems in a number of games, including SuperTuxKart,
OpenMW and RVGL.

v2: Use MALI_READS_ZS | 0x20 instead of MALI_WRITES_Z to match with
the blob. Keep using 0x400 | 0x20 when depth is disabled.

Closes: #2620
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5001>

src/gallium/drivers/panfrost/pan_cmdstream.c

index 34c2c7a2af0211c4d134651504459942825e734c..50eaa195a698d0d274b16899a5add6cb2de8af61 100644 (file)
@@ -789,8 +789,14 @@ panfrost_frag_shader_meta_init(struct panfrost_context *ctx,
                  * related to forward-pixel kill, as per "Mali Performance 3: Is
                  * EGL_BUFFER_PRESERVED a good thing?" by Peter Harris */
 
+                const struct pipe_depth_stencil_alpha_state *zsa = ctx->depth_stencil;
+
+                bool depth_enabled = fs->writes_depth ||
+                   (zsa && zsa->depth.enabled && zsa->depth.func != PIPE_FUNC_ALWAYS);
+
                 SET_BIT(fragmeta->unknown2_3, MALI_CAN_DISCARD, fs->can_discard);
-                SET_BIT(fragmeta->midgard1.flags_lo, 0x400, fs->can_discard);
+                SET_BIT(fragmeta->midgard1.flags_lo, 0x400, !depth_enabled && fs->can_discard);
+                SET_BIT(fragmeta->midgard1.flags_lo, MALI_READS_ZS, depth_enabled && fs->can_discard);
         }
 
         panfrost_frag_meta_rasterizer_update(ctx, fragmeta);