From f8c1d79f69a8438d96a8177a877249a7ac22ae37 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 4 Nov 2020 11:13:55 -0500 Subject: [PATCH] pan/bi: Correctly calculate render target index Signed-off-by: Alyssa Rosenzweig Part-of: --- src/panfrost/bifrost/bifrost_compile.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index a62aa827b25..68ca813e893 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -305,6 +305,11 @@ bi_emit_frag_out(bi_context *ctx, nir_intrinsic_instr *instr) bool emit_blend = writeout & (PAN_WRITEOUT_C); bool emit_zs = writeout & (PAN_WRITEOUT_Z | PAN_WRITEOUT_S); + const nir_variable *var = + nir_find_variable_with_driver_location(ctx->nir, nir_var_shader_out, + nir_intrinsic_base(instr)); + assert(var); + if (!ctx->emitted_atest && !ctx->is_blend) { bi_emit_atest(ctx, pan_src_index(&instr->src[0]), @@ -323,10 +328,16 @@ bi_emit_frag_out(bi_context *ctx, nir_intrinsic_instr *instr) } if (emit_blend) { + unsigned loc = var->data.location; + assert(loc == FRAG_RESULT_COLOR || loc >= FRAG_RESULT_DATA0); + + unsigned rt = loc == FRAG_RESULT_COLOR ? 0 : + (loc - FRAG_RESULT_DATA0); + bi_emit_blend(ctx, pan_src_index(&instr->src[0]), nir_intrinsic_src_type(instr), - nir_intrinsic_base(instr)); + rt); } if (ctx->is_blend) {