[Mesa-dev] [PATCH 03/16] radeonsi: don't recompile shaders when changing nr_cbufs from 0 to 1

Marek Olšák maraeo at gmail.com
Sat Oct 4 15:42:06 PDT 2014


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

Both cases are equivalent.
---
 src/gallium/drivers/radeonsi/si_shader.c | 4 ++--
 src/gallium/drivers/radeonsi/si_shader.h | 2 +-
 src/gallium/drivers/radeonsi/si_state.c  | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index c9e6792..5a47055 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1479,8 +1479,8 @@ static void si_llvm_emit_fs_epilogue(struct lp_build_tgsi_context * bld_base)
 				/* Handle FS_COLOR0_WRITES_ALL_CBUFS. */
 				if (shader->selector->info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS] &&
                                     shader->output[i].sid == 0 &&
-				    si_shader_ctx->shader->key.ps.nr_cbufs > 1) {
-					for (int c = 1; c < si_shader_ctx->shader->key.ps.nr_cbufs; c++) {
+				    si_shader_ctx->shader->key.ps.last_cbuf > 0) {
+					for (int c = 1; c <= si_shader_ctx->shader->key.ps.last_cbuf; c++) {
 						si_llvm_init_export_args_load(bld_base,
 									      si_shader_ctx->radeon_bld.soa.outputs[index],
 									      V_008DFC_SQ_EXP_MRT + c, args);
diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h
index 76c29fe..8468e1a 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -134,7 +134,7 @@ struct si_shader_selector {
 union si_shader_key {
 	struct {
 		unsigned	export_16bpc:8;
-		unsigned	nr_cbufs:4;
+		unsigned	last_cbuf:3;
 		unsigned	color_two_side:1;
 		unsigned	alpha_func:3;
 		unsigned	flatshade:1;
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index cff2e8a..cdea1d3 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -2207,7 +2207,7 @@ static INLINE void si_shader_selector_key(struct pipe_context *ctx,
 		}
 	} else if (sel->type == PIPE_SHADER_FRAGMENT) {
 		if (sel->info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS])
-			key->ps.nr_cbufs = sctx->framebuffer.state.nr_cbufs;
+			key->ps.last_cbuf = MAX2(sctx->framebuffer.state.nr_cbufs, 1) - 1;
 		key->ps.export_16bpc = sctx->framebuffer.export_16bpc;
 
 		if (sctx->queued.named.rasterizer) {
-- 
1.9.1



More information about the mesa-dev mailing list