tgsi_to_nir: Extract ttn_emulate_tgsi_front_face into its own function.
authorTimur Kristóf <timur.kristof@gmail.com>
Fri, 8 Feb 2019 21:11:08 +0000 (22:11 +0100)
committerEric Anholt <eric@anholt.net>
Tue, 5 Mar 2019 19:13:27 +0000 (19:13 +0000)
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 <timur.kristof@gmail.com>
Tested-by: Andre Heider <a.heider@gmail.com>
Tested-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/gallium/auxiliary/nir/tgsi_to_nir.c

index 67058b398aecb9660665fa7ac2993eaf202733f5..8efae63b6395c277233c14a7bfce9d28c5b01472 100644 (file)
@@ -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);