mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 08:20:12 +01:00
radeonsi: write all MRTs only if there is exactly one output
This doesn't fix a known bug, but better safe than sorry. Also, simplify the expression in si_shader.c. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
746a7a7498
commit
4e597c25c7
2 changed files with 5 additions and 4 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue