nir: Share get_io_offset handling in nir_lower_io.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 12 Jul 2016 09:16:30 +0000 (02:16 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 16 Jul 2016 00:17:09 +0000 (17:17 -0700)
The load/store/atomic cases all duplicated the get_io_offset code, with
a few tiny differences: stores didn't bother checking for per-vertex
inputs, because they can't be stored to, and atomics didn't check at
all, since shared variables aren't per-vertex.

However, it's harmless to check, and allows us to share more code.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/nir_lower_io.c

index 9b53efffd94cd8690ace3102519b67dafb7db79b..45cc67123a53e34700dba58af67051ea7ce7af5f 100644 (file)
@@ -279,19 +279,18 @@ nir_lower_io_block(nir_block *block,
 
       b->cursor = nir_before_instr(instr);
 
-      switch (intrin->intrinsic) {
-      case nir_intrinsic_load_var: {
-         const bool per_vertex =
-            is_per_vertex_input(state, var) ||
-            is_per_vertex_output(state, var);
+      const bool per_vertex =
+         is_per_vertex_input(state, var) || is_per_vertex_output(state, var);
 
-         nir_ssa_def *offset;
-         nir_ssa_def *vertex_index;
+      nir_ssa_def *offset;
+      nir_ssa_def *vertex_index;
 
-         offset = get_io_offset(b, intrin->variables[0],
-                                per_vertex ? &vertex_index : NULL,
-                                state->type_size);
+      offset = get_io_offset(b, intrin->variables[0],
+                             per_vertex ? &vertex_index : NULL,
+                             state->type_size);
 
+      switch (intrin->intrinsic) {
+      case nir_intrinsic_load_var: {
          nir_intrinsic_instr *load =
             nir_intrinsic_instr_create(state->mem_ctx,
                                        load_op(mode, per_vertex));
@@ -330,15 +329,6 @@ nir_lower_io_block(nir_block *block,
       case nir_intrinsic_store_var: {
          assert(mode == nir_var_shader_out || mode == nir_var_shared);
 
-         nir_ssa_def *offset;
-         nir_ssa_def *vertex_index;
-
-         const bool per_vertex = is_per_vertex_output(state, var);
-
-         offset = get_io_offset(b, intrin->variables[0],
-                                per_vertex ? &vertex_index : NULL,
-                                state->type_size);
-
          nir_intrinsic_instr *store =
             nir_intrinsic_instr_create(state->mem_ctx,
                                        store_op(state, mode, per_vertex));
@@ -375,11 +365,6 @@ nir_lower_io_block(nir_block *block,
       case nir_intrinsic_var_atomic_comp_swap: {
          assert(mode == nir_var_shared);
 
-         nir_ssa_def *offset;
-
-         offset = get_io_offset(b, intrin->variables[0],
-                                NULL, state->type_size);
-
          nir_intrinsic_instr *atomic =
             nir_intrinsic_instr_create(state->mem_ctx,
                                        atomic_op(intrin->intrinsic));