diff options
author | Timur Kristóf <[email protected]> | 2019-02-08 22:11:08 +0100 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2019-03-05 19:13:27 +0000 |
commit | f748fa47f84397490bba5c51466f769b18e96f35 (patch) | |
tree | 8e061732491fd200731f364b4e5bcbb54eab5188 /src | |
parent | 840c7d1ebd08785b7fff5efdfc1a7fb2a8ff94b1 (diff) |
tgsi_to_nir: Extract ttn_emulate_tgsi_front_face into its own function.
We'll need to use the same logic in other places, so it makes sense to
have a separate function for this.
Signed-Off-By: Timur Kristóf <[email protected]>
Tested-by: Andre Heider <[email protected]>
Tested-by: Rob Clark <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/nir/tgsi_to_nir.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index 67058b398ae..8efae63b639 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -440,6 +440,25 @@ ttn_array_deref(struct ttn_compile *c, nir_variable *var, unsigned offset, return nir_build_deref_array(&c->build, deref, index); } +/* Special case: Turn the frontface varying into a load of the + * frontface intrinsic plus math, and appending the silly floats. + */ +static nir_ssa_def * +ttn_emulate_tgsi_front_face(struct ttn_compile *c) +{ + nir_ssa_def *tgsi_frontface[4] = { + nir_bcsel(&c->build, + nir_load_front_face(&c->build, 1), + nir_imm_float(&c->build, 1.0), + nir_imm_float(&c->build, -1.0)), + nir_imm_float(&c->build, 0.0), + nir_imm_float(&c->build, 0.0), + nir_imm_float(&c->build, 1.0), + }; + + return nir_vec(&c->build, tgsi_frontface, 4); +} + static nir_src ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index, struct tgsi_ind_register *indirect, @@ -514,22 +533,9 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index, } case TGSI_FILE_INPUT: - /* Special case: Turn the frontface varying into a load of the - * frontface intrinsic plus math, and appending the silly floats. - */ if (c->scan->processor == PIPE_SHADER_FRAGMENT && c->scan->input_semantic_name[index] == TGSI_SEMANTIC_FACE) { - nir_ssa_def *tgsi_frontface[4] = { - nir_bcsel(&c->build, - nir_load_front_face(&c->build, 1), - nir_imm_float(&c->build, 1.0), - nir_imm_float(&c->build, -1.0)), - nir_imm_float(&c->build, 0.0), - nir_imm_float(&c->build, 0.0), - nir_imm_float(&c->build, 1.0), - }; - - return nir_src_for_ssa(nir_vec(&c->build, tgsi_frontface, 4)); + return nir_src_for_ssa(ttn_emulate_tgsi_front_face(c)); } else { /* Indirection on input arrays isn't supported by TTN. */ assert(!dim); |