From 8ac2583cd89dc7e8602eb967e2d502daaa31ae63 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 1 Aug 2019 12:29:05 -0400 Subject: [PATCH] tgsi_to_nir: add support for the stencil FS output MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-By: Timur Kristóf Reviewed-by: Eric Anholt Reviewed-by: Connor Abbott --- src/gallium/auxiliary/nir/tgsi_to_nir.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index f33ff1f818c..24187503a30 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -418,6 +418,10 @@ ttn_emit_declaration(struct ttn_compile *c) var->data.location = FRAG_RESULT_DEPTH; var->type = glsl_float_type(); break; + case TGSI_SEMANTIC_STENCIL: + var->data.location = FRAG_RESULT_STENCIL; + var->type = glsl_int_type(); + break; default: fprintf(stderr, "Bad TGSI semantic: %d/%d\n", decl->Semantic.Name, decl->Semantic.Index); @@ -2330,12 +2334,15 @@ ttn_add_output_stores(struct ttn_compile *c) src.reg.base_offset = c->output_regs[i].offset; nir_ssa_def *store_value = nir_ssa_for_src(b, src, 4); - if (c->build.shader->info.stage == MESA_SHADER_FRAGMENT && - var->data.location == FRAG_RESULT_DEPTH) { - /* TGSI uses TGSI_SEMANTIC_POSITION.z for the depth output, while - * NIR uses a single float FRAG_RESULT_DEPTH. + if (c->build.shader->info.stage == MESA_SHADER_FRAGMENT) { + /* TGSI uses TGSI_SEMANTIC_POSITION.z for the depth output + * and TGSI_SEMANTIC_STENCIL.y for the stencil output, + * while NIR uses a single-component output. */ - store_value = nir_channel(b, store_value, 2); + if (var->data.location == FRAG_RESULT_DEPTH) + store_value = nir_channel(b, store_value, 2); + else if (var->data.location == FRAG_RESULT_STENCIL) + store_value = nir_channel(b, store_value, 1); } nir_store_deref(b, nir_build_deref_var(b, var), store_value, -- 2.30.2