[Mesa-dev] [PATCH 03/23] radeonsi: write all MRTs only if there is exactly one output

Marek Olšák maraeo at gmail.com
Wed Jan 6 04:41:25 PST 2016


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

This doesn't fix a known bug, but better safe than sorry.

Also, simplify the expression in si_shader.c.
---
 src/gallium/drivers/radeonsi/si_shader.c        | 5 ++---
 src/gallium/drivers/radeonsi/si_state_shaders.c | 4 +++-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index b7c44b9..f322c4e 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -2189,9 +2189,8 @@ static void si_llvm_emit_fs_epilogue(struct lp_build_tgsi_context * bld_base)
 			/* This instruction will be emitted at the end of the shader. */
 			memcpy(last_args, args, sizeof(args));
 
-			/* Handle FS_COLOR0_WRITES_ALL_CBUFS. */
-			if (shader->selector->info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS] &&
-			    semantic_index == 0 &&
+			/* If last_cbuf > 0, FS_COLOR0_WRITES_ALL_CBUFS is true. */
+			if (semantic_index == 0 &&
 			    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,
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 61db8ef..4b007ec 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -552,8 +552,10 @@ static inline void si_shader_selector_key(struct pipe_context *ctx,
 	case PIPE_SHADER_FRAGMENT: {
 		struct si_state_rasterizer *rs = sctx->queued.named.rasterizer;
 
-		if (sel->info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS])
+		if (sel->info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS] &&
+		    sel->info.colors_written == 0x1)
 			key->ps.last_cbuf = MAX2(sctx->framebuffer.state.nr_cbufs, 1) - 1;
+
 		key->ps.export_16bpc = sctx->framebuffer.export_16bpc;
 
 		if (rs) {
-- 
2.1.4



More information about the mesa-dev mailing list