radeonsi: don't recompile shaders when changing nr_cbufs from 0 to 1

Both cases are equivalent.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
Marek Olšák 2014-10-04 20:44:23 +02:00
parent 5e0fbe1b63
commit 34e8200599
3 changed files with 4 additions and 4 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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) {