diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 620425196ba..1a170f6ee3b 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -723,6 +723,14 @@ panfrost_emit_frag_shader(struct panfrost_context *ctx, * need to signal CAN_DISCARD for nontrivial blend modes (so * we're able to read back the destination buffer) */ + if (blend[0].no_colour) + return; + + fragmeta->unknown2_4 |= MALI_SFBD_ENABLE; + + SET_BIT(fragmeta->unknown2_4, MALI_SFBD_SRGB, + util_format_is_srgb(ctx->pipe_framebuffer.cbufs[0]->format)); + SET_BIT(fragmeta->unknown2_3, MALI_HAS_BLEND_SHADER, blend[0].is_shader); @@ -737,7 +745,6 @@ panfrost_emit_frag_shader(struct panfrost_context *ctx, SET_BIT(fragmeta->unknown2_3, MALI_CAN_DISCARD, blend[0].load_dest); - fragmeta->unknown2_4 |= 0x10; SET_BIT(fragmeta->unknown2_4, MALI_NO_DITHER, !ctx->blend->base.dither); } else if (!(dev->quirks & IS_BIFROST)) { /* Bug where MRT-capable hw apparently reads the last blend diff --git a/src/panfrost/include/panfrost-job.h b/src/panfrost/include/panfrost-job.h index e2267069860..18dbb95ed96 100644 --- a/src/panfrost/include/panfrost-job.h +++ b/src/panfrost/include/panfrost-job.h @@ -80,6 +80,8 @@ typedef uint64_t mali_ptr; #define MALI_ALPHA_TO_COVERAGE (1 << 1) +#define MALI_SFBD_ENABLE (1 << 4) +#define MALI_SFBD_SRGB (1 << 8) #define MALI_NO_DITHER (1 << 9) #define MALI_DEPTH_RANGE_A (1 << 12) #define MALI_DEPTH_RANGE_B (1 << 13)