[Mesa-dev] [PATCH 2/7] gallium/radeon: let drivers specify SC_MODE_CNTL_1 fields

Marek Olšák maraeo at gmail.com
Fri Jun 24 12:15:38 UTC 2016


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

radeonsi will set more fields
---
 src/gallium/drivers/r600/evergreen_state.c    |  7 ++++++-
 src/gallium/drivers/radeon/cayman_msaa.c      | 12 +++++-------
 src/gallium/drivers/radeon/r600_pipe_common.h |  3 ++-
 src/gallium/drivers/radeonsi/si_state.c       |  6 +++++-
 4 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
index 4a25582..0b8488d 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1670,8 +1670,13 @@ static void evergreen_emit_framebuffer_state(struct r600_context *rctx, struct r
 	if (rctx->b.chip_class == EVERGREEN) {
 		evergreen_emit_msaa_state(rctx, rctx->framebuffer.nr_samples, rctx->ps_iter_samples);
 	} else {
+		unsigned sc_mode_cntl_1 =
+			EG_S_028A4C_FORCE_EOV_CNTDWN_ENABLE(1) |
+			EG_S_028A4C_FORCE_EOV_REZ_ENABLE(1);
+
 		cayman_emit_msaa_sample_locs(cs, rctx->framebuffer.nr_samples);
-		cayman_emit_msaa_config(cs, rctx->framebuffer.nr_samples, rctx->ps_iter_samples, 0);
+		cayman_emit_msaa_config(cs, rctx->framebuffer.nr_samples,
+					rctx->ps_iter_samples, 0, sc_mode_cntl_1);
 	}
 }
 
diff --git a/src/gallium/drivers/radeon/cayman_msaa.c b/src/gallium/drivers/radeon/cayman_msaa.c
index 9412e89..a9ec4c3 100644
--- a/src/gallium/drivers/radeon/cayman_msaa.c
+++ b/src/gallium/drivers/radeon/cayman_msaa.c
@@ -195,7 +195,8 @@ void cayman_emit_msaa_sample_locs(struct radeon_winsys_cs *cs, int nr_samples)
 }
 
 void cayman_emit_msaa_config(struct radeon_winsys_cs *cs, int nr_samples,
-			     int ps_iter_samples, int overrast_samples)
+			     int ps_iter_samples, int overrast_samples,
+			     unsigned sc_mode_cntl_1)
 {
 	int setup_samples = nr_samples > 1 ? nr_samples :
 			    overrast_samples > 1 ? overrast_samples : 0;
@@ -230,16 +231,14 @@ void cayman_emit_msaa_config(struct radeon_winsys_cs *cs, int nr_samples,
 					       S_028804_STATIC_ANCHOR_ASSOCIATIONS(1));
 			radeon_set_context_reg(cs, EG_R_028A4C_PA_SC_MODE_CNTL_1,
 					       EG_S_028A4C_PS_ITER_SAMPLE(ps_iter_samples > 1) |
-					       EG_S_028A4C_FORCE_EOV_CNTDWN_ENABLE(1) |
-					       EG_S_028A4C_FORCE_EOV_REZ_ENABLE(1));
+					       sc_mode_cntl_1);
 		} else if (overrast_samples > 1) {
 			radeon_set_context_reg(cs, CM_R_028804_DB_EQAA,
 					       S_028804_HIGH_QUALITY_INTERSECTIONS(1) |
 					       S_028804_STATIC_ANCHOR_ASSOCIATIONS(1) |
 					       S_028804_OVERRASTERIZATION_AMOUNT(log_samples));
 			radeon_set_context_reg(cs, EG_R_028A4C_PA_SC_MODE_CNTL_1,
-					       EG_S_028A4C_FORCE_EOV_CNTDWN_ENABLE(1) |
-					       EG_S_028A4C_FORCE_EOV_REZ_ENABLE(1));
+					       sc_mode_cntl_1);
 		}
 	} else {
 		radeon_set_context_reg_seq(cs, CM_R_028BDC_PA_SC_LINE_CNTL, 2);
@@ -250,7 +249,6 @@ void cayman_emit_msaa_config(struct radeon_winsys_cs *cs, int nr_samples,
 				       S_028804_HIGH_QUALITY_INTERSECTIONS(1) |
 				       S_028804_STATIC_ANCHOR_ASSOCIATIONS(1));
 		radeon_set_context_reg(cs, EG_R_028A4C_PA_SC_MODE_CNTL_1,
-				       EG_S_028A4C_FORCE_EOV_CNTDWN_ENABLE(1) |
-				       EG_S_028A4C_FORCE_EOV_REZ_ENABLE(1));
+				       sc_mode_cntl_1);
 	}
 }
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h
index fe29f68..8117c9a 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -727,7 +727,8 @@ void cayman_get_sample_position(struct pipe_context *ctx, unsigned sample_count,
 void cayman_init_msaa(struct pipe_context *ctx);
 void cayman_emit_msaa_sample_locs(struct radeon_winsys_cs *cs, int nr_samples);
 void cayman_emit_msaa_config(struct radeon_winsys_cs *cs, int nr_samples,
-			     int ps_iter_samples, int overrast_samples);
+			     int ps_iter_samples, int overrast_samples,
+			     unsigned sc_mode_cntl_1);
 
 
 /* Inline helpers. */
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 02890a1..f5da153 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -2555,10 +2555,14 @@ static void si_emit_msaa_sample_locs(struct si_context *sctx,
 static void si_emit_msaa_config(struct si_context *sctx, struct r600_atom *atom)
 {
 	struct radeon_winsys_cs *cs = sctx->b.gfx.cs;
+	unsigned sc_mode_cntl_1 =
+		S_028A4C_FORCE_EOV_CNTDWN_ENABLE(1) |
+		S_028A4C_FORCE_EOV_REZ_ENABLE(1);
 
 	cayman_emit_msaa_config(cs, sctx->framebuffer.nr_samples,
 				sctx->ps_iter_samples,
-				sctx->smoothing_enabled ? SI_NUM_SMOOTH_AA_SAMPLES : 0);
+				sctx->smoothing_enabled ? SI_NUM_SMOOTH_AA_SAMPLES : 0,
+				sc_mode_cntl_1);
 }
 
 
-- 
2.7.4



More information about the mesa-dev mailing list