r600: Add flag for dual-source blending to shader key
Otherwise the number of outputs and the output data index can't be
interpreted correctly.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6814>
diff --git a/src/gallium/drivers/r600/r600_shader.h b/src/gallium/drivers/r600/r600_shader.h
index 4e4942c..8acd9a3 100644
--- a/src/gallium/drivers/r600/r600_shader.h
+++ b/src/gallium/drivers/r600/r600_shader.h
@@ -137,6 +137,7 @@
unsigned color_two_side:1;
unsigned alpha_to_one:1;
unsigned apply_sample_id_mask:1;
+ unsigned dual_source_blend:1;
} ps;
struct {
unsigned prim_id_out:8;
diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index b036bf5..eae6ca1 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -821,8 +821,10 @@
key->ps.nr_cbufs = rctx->framebuffer.state.nr_cbufs;
key->ps.apply_sample_id_mask = (rctx->ps_iter_samples > 1) || !rctx->rasterizer->multisample_enable;
/* Dual-source blending only makes sense with nr_cbufs == 1. */
- if (key->ps.nr_cbufs == 1 && rctx->dual_src_blend)
+ if (key->ps.nr_cbufs == 1 && rctx->dual_src_blend) {
key->ps.nr_cbufs = 2;
+ key->ps.dual_source_blend = 1;
+ }
break;
}
case PIPE_SHADER_TESS_EVAL: