Mesa (master): radeonsi: disable alpha-to-coverage for integer colorbuffers

Marek Olšák mareko at kemper.freedesktop.org
Fri Aug 16 23:49:15 UTC 2013


Module: Mesa
Branch: master
Commit: f083f79751286b4f5ad241869ef0b83c877f6267
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f083f79751286b4f5ad241869ef0b83c877f6267

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Thu Aug  8 00:26:02 2013 +0200

radeonsi: disable alpha-to-coverage for integer colorbuffers

Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>

---

 src/gallium/drivers/radeonsi/radeonsi_shader.h |    1 +
 src/gallium/drivers/radeonsi/si_state_draw.c   |    9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.h b/src/gallium/drivers/radeonsi/radeonsi_shader.h
index d12892b..6c6b96e 100644
--- a/src/gallium/drivers/radeonsi/radeonsi_shader.h
+++ b/src/gallium/drivers/radeonsi/radeonsi_shader.h
@@ -145,6 +145,7 @@ struct si_pipe_shader {
 	unsigned			spi_ps_input_ena;
 	unsigned			spi_shader_col_format;
 	unsigned			cb_shader_mask;
+	bool				cb0_is_integer;
 	unsigned			sprite_coord_enable;
 	unsigned			so_strides[4];
 	union si_shader_key		key;
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c
index ceaead0..6be10c8 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -136,7 +136,9 @@ static void si_pipe_shader_ps(struct pipe_context *ctx, struct si_pipe_shader *s
 
 	si_pm4_inval_shader_cache(pm4);
 
-	db_shader_control = S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z);
+	db_shader_control = S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z) |
+			    S_02880C_ALPHA_TO_MASK_DISABLE(rctx->fb_cb0_is_integer);
+
 	for (i = 0; i < shader->shader.ninput; i++) {
 		switch (shader->shader.input[i].name) {
 		case TGSI_SEMANTIC_POSITION:
@@ -256,6 +258,7 @@ static void si_pipe_shader_ps(struct pipe_context *ctx, struct si_pipe_shader *s
 
 	si_pm4_set_reg(pm4, R_02880C_DB_SHADER_CONTROL, db_shader_control);
 
+	shader->cb0_is_integer = rctx->fb_cb0_is_integer;
 	shader->sprite_coord_enable = rctx->sprite_coord_enable;
 	si_pm4_bind_state(rctx, ps, shader->pm4);
 }
@@ -445,6 +448,10 @@ static void si_update_derived_state(struct r600_context *rctx)
 
 		ps_dirty = 0;
 	}
+	if (rctx->ps_shader->current->cb0_is_integer != rctx->fb_cb0_is_integer) {
+		si_pipe_shader_ps(ctx, rctx->ps_shader->current);
+		ps_dirty = 1;
+	}
 
 	if (ps_dirty) {
 		si_pm4_bind_state(rctx, ps, rctx->ps_shader->current->pm4);




More information about the mesa-commit mailing list