From: Icecream95 Date: Tue, 12 May 2020 02:08:09 +0000 (+1200) Subject: panfrost: Fix background showing when using discard X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0dd24b381c52e0b20fe70041e95611aad6b0d258;p=mesa.git panfrost: Fix background showing when using discard 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 Part-of: --- diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 34c2c7a2af0..50eaa195a69 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -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);