From 5c554e235dc5376a0b2d1a8847a527f9e06f4873 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 17 Jul 2019 16:19:45 -0700 Subject: [PATCH] panfrost: Use correct NO_DITHER field on MFBD Signed-off-by: Alyssa Rosenzweig --- src/gallium/drivers/panfrost/pan_blend_cso.c | 4 +++- src/gallium/drivers/panfrost/pan_context.c | 3 +++ src/panfrost/include/panfrost-job.h | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/panfrost/pan_blend_cso.c b/src/gallium/drivers/panfrost/pan_blend_cso.c index f2dafe062ce..5055d2d854e 100644 --- a/src/gallium/drivers/panfrost/pan_blend_cso.c +++ b/src/gallium/drivers/panfrost/pan_blend_cso.c @@ -142,7 +142,9 @@ panfrost_bind_blend_state(struct pipe_context *pipe, if (!blend) return; - SET_BIT(ctx->fragment_shader_core.unknown2_4, MALI_NO_DITHER, !blend->dither); + if (ctx->require_sfbd) { + SET_BIT(ctx->fragment_shader_core.unknown2_4, MALI_NO_DITHER, !blend->dither); + } /* Shader itself is not dirty, but the shader core is */ ctx->dirty |= PAN_DIRTY_FS; diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 26276cde073..c022e950c00 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -1225,6 +1225,9 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data) if (is_srgb) rts[i].flags |= MALI_BLEND_SRGB; + if (!ctx->blend->base.dither) + rts[i].flags |= MALI_BLEND_NO_DITHER; + /* TODO: sRGB in blend shaders is currently * unimplemented. Contact me (Alyssa) if you're * interested in working on this. We have diff --git a/src/panfrost/include/panfrost-job.h b/src/panfrost/include/panfrost-job.h index 297d0806adc..b7312a60720 100644 --- a/src/panfrost/include/panfrost-job.h +++ b/src/panfrost/include/panfrost-job.h @@ -439,6 +439,9 @@ union midgard_blend { #define MALI_BLEND_SRGB (0x400) +/* Dithering is specified here for MFBD, otherwise NO_DITHER for SFBD */ +#define MALI_BLEND_NO_DITHER (0x800) + struct midgard_blend_rt { /* Flags base value of 0x200 to enable the render target. * OR with 0x1 for blending (anything other than REPLACE). -- 2.30.2