From 34e82005998138504147fd265f87825e4aace31f Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Sat, 4 Oct 2014 20:44:23 +0200 Subject: radeonsi: don't recompile shaders when changing nr_cbufs from 0 to 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both cases are equivalent. Reviewed-by: Michel Dänzer --- 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 c9e67922c3b..5a47055fc72 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 76c29fe0f36..8468e1a5eb9 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 6eec88eb483..0ef6d97441a 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) { -- cgit v1.2.3