mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-25 16:40:30 +01:00
tgsi_to_nir: add support for the stencil FS output
Reviewed-By: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
parent
f3f1d0dfd0
commit
8ac2583cd8
1 changed files with 12 additions and 5 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue