[Mesa-dev] [PATCH 2/4] radeonsi: disallow MIN/MAX blend equations for dual source blending

Marek Olšák maraeo at gmail.com
Tue Aug 9 23:34:59 UTC 2016


From: Marek Olšák <marek.olsak at amd.com>

---
 src/gallium/drivers/radeonsi/si_state.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index f5b2330..8f7203e 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -457,20 +457,30 @@ static void *si_create_blend_state_mode(struct pipe_context *ctx,
 		unsigned blend_cntl = 0;
 
 		sx_mrt_blend_opt[i] =
 			S_028760_COLOR_COMB_FCN(V_028760_OPT_COMB_BLEND_DISABLED) |
 			S_028760_ALPHA_COMB_FCN(V_028760_OPT_COMB_BLEND_DISABLED);
 
 		/* Only set dual source blending for MRT0 to avoid a hang. */
 		if (i >= 1 && blend->dual_src_blend)
 			continue;
 
+		/* Only addition and subtraction equations are supported with
+		 * dual source blending.
+		 */
+		if (blend->dual_src_blend &&
+		    (eqRGB == PIPE_BLEND_MIN || eqRGB == PIPE_BLEND_MAX ||
+		     eqA == PIPE_BLEND_MIN || eqA == PIPE_BLEND_MAX)) {
+			assert(!"Unsupported equation for dual source blending");
+			continue;
+		}
+
 		if (!state->rt[j].colormask)
 			continue;
 
 		/* cb_render_state will disable unused ones */
 		blend->cb_target_mask |= (unsigned)state->rt[j].colormask << (4 * i);
 
 		if (!state->rt[j].blend_enable) {
 			si_pm4_set_reg(pm4, R_028780_CB_BLEND0_CONTROL + i * 4, blend_cntl);
 			continue;
 		}
-- 
2.7.4



More information about the mesa-dev mailing list