[Mesa-dev] [FLAG-DAY-PREP 6/9] nir: use nir_intrinsic_var() accessor

Rob Clark robdclark at gmail.com
Thu Mar 15 14:28:05 UTC 2018


---
 src/compiler/nir/nir_gather_info.c                 |  2 +-
 src/compiler/nir/nir_inline_functions.c            |  6 +++---
 src/compiler/nir/nir_linking_helpers.c             | 10 ++++------
 src/compiler/nir/nir_lower_alpha_test.c            |  2 +-
 src/compiler/nir/nir_lower_atomics.c               | 11 ++++++-----
 src/compiler/nir/nir_lower_clamp_color_outputs.c   |  2 +-
 src/compiler/nir/nir_lower_global_vars_to_local.c  |  2 +-
 src/compiler/nir/nir_lower_indirect_derefs.c       |  4 ++--
 src/compiler/nir/nir_lower_io.c                    | 10 +++++-----
 src/compiler/nir/nir_lower_io_arrays_to_elements.c |  4 ++--
 src/compiler/nir/nir_lower_io_to_scalar.c          |  2 +-
 src/compiler/nir/nir_lower_io_types.c              |  2 +-
 src/compiler/nir/nir_lower_locals_to_regs.c        |  4 ++--
 src/compiler/nir/nir_lower_phis_to_scalar.c        |  9 +++++----
 src/compiler/nir/nir_lower_system_values.c         |  2 +-
 src/compiler/nir/nir_lower_wpos_ytransform.c       |  4 ++--
 src/compiler/nir/nir_opt_peephole_select.c         |  2 +-
 src/compiler/nir/nir_propagate_invariant.c         |  8 ++++----
 src/compiler/nir/nir_remove_dead_variables.c       | 11 ++++++-----
 src/compiler/nir/nir_validate.c                    | 22 +++++++++++++---------
 20 files changed, 62 insertions(+), 57 deletions(-)

diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c
index 743f968035b..1f7f95b94ae 100644
--- a/src/compiler/nir/nir_gather_info.c
+++ b/src/compiler/nir/nir_gather_info.c
@@ -233,7 +233,7 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader)
    case nir_intrinsic_interp_var_at_offset:
    case nir_intrinsic_load_var:
    case nir_intrinsic_store_var: {
-      nir_variable *var = instr->variables[0]->var;
+      nir_variable *var = nir_intrinsic_var(instr, 0);
 
       if (var->data.mode == nir_var_shader_in ||
           var->data.mode == nir_var_shader_out) {
diff --git a/src/compiler/nir/nir_inline_functions.c b/src/compiler/nir/nir_inline_functions.c
index b91e7bc86da..db66e398ae1 100644
--- a/src/compiler/nir/nir_inline_functions.c
+++ b/src/compiler/nir/nir_inline_functions.c
@@ -118,12 +118,12 @@ lower_params_to_locals_block(nir_block *block, nir_function_impl *impl)
 
       switch (intrin->intrinsic) {
       case nir_intrinsic_store_var:
-         lower_param_to_local(intrin->variables[0]->var, impl, true);
+         lower_param_to_local(nir_intrinsic_var(intrin, 0), impl, true);
          break;
 
       case nir_intrinsic_copy_var:
-         lower_param_to_local(intrin->variables[0]->var, impl, true);
-         lower_param_to_local(intrin->variables[1]->var, impl, false);
+         lower_param_to_local(nir_intrinsic_var(intrin, 0), impl, true);
+         lower_param_to_local(nir_intrinsic_var(intrin, 1), impl, false);
          break;
 
       case nir_intrinsic_load_var:
diff --git a/src/compiler/nir/nir_linking_helpers.c b/src/compiler/nir/nir_linking_helpers.c
index 2b0a2668a33..fd8f6d947b4 100644
--- a/src/compiler/nir/nir_linking_helpers.c
+++ b/src/compiler/nir/nir_linking_helpers.c
@@ -71,18 +71,16 @@ tcs_add_output_reads(nir_shader *shader, uint64_t *read, uint64_t *patches_read)
                nir_intrinsic_instr *intrin_instr =
                   nir_instr_as_intrinsic(instr);
                if (intrin_instr->intrinsic == nir_intrinsic_load_var &&
-                   intrin_instr->variables[0]->var->data.mode ==
+                   nir_intrinsic_var(intrin_instr, 0)->data.mode ==
                    nir_var_shader_out) {
 
-                  nir_variable *var = intrin_instr->variables[0]->var;
+                  nir_variable *var = nir_intrinsic_var(intrin_instr, 0);
                   if (var->data.patch) {
                      patches_read[var->data.location_frac] |=
-                        get_variable_io_mask(intrin_instr->variables[0]->var,
-                                             shader->info.stage);
+                        get_variable_io_mask(var, shader->info.stage);
                   } else {
                      read[var->data.location_frac] |=
-                        get_variable_io_mask(intrin_instr->variables[0]->var,
-                                             shader->info.stage);
+                        get_variable_io_mask(var, shader->info.stage);
                   }
                }
             }
diff --git a/src/compiler/nir/nir_lower_alpha_test.c b/src/compiler/nir/nir_lower_alpha_test.c
index 6bf9ff142df..8ebf37806d9 100644
--- a/src/compiler/nir/nir_lower_alpha_test.c
+++ b/src/compiler/nir/nir_lower_alpha_test.c
@@ -56,7 +56,7 @@ nir_lower_alpha_test(nir_shader *shader, enum compare_func func,
 
                switch (intr->intrinsic) {
                case nir_intrinsic_store_var:
-                  out = intr->variables[0]->var;
+                  out = nir_intrinsic_var(intr, 0);
                   break;
                case nir_intrinsic_store_output:
                   /* already had i/o lowered.. lookup the matching output var: */
diff --git a/src/compiler/nir/nir_lower_atomics.c b/src/compiler/nir/nir_lower_atomics.c
index bdab4b87377..3ceeea2f349 100644
--- a/src/compiler/nir/nir_lower_atomics.c
+++ b/src/compiler/nir/nir_lower_atomics.c
@@ -90,13 +90,14 @@ lower_instr(nir_intrinsic_instr *instr,
       return false;
    }
 
-   if (instr->variables[0]->var->data.mode != nir_var_uniform &&
-       instr->variables[0]->var->data.mode != nir_var_shader_storage &&
-       instr->variables[0]->var->data.mode != nir_var_shared)
+   const nir_variable *var = nir_intrinsic_var(instr, 0);
+   if (var->data.mode != nir_var_uniform &&
+       var->data.mode != nir_var_shader_storage &&
+       var->data.mode != nir_var_shared)
       return false; /* atomics passed as function arguments can't be lowered */
 
    void *mem_ctx = ralloc_parent(instr);
-   unsigned uniform_loc = instr->variables[0]->var->data.location;
+   unsigned uniform_loc = var->data.location;
 
    nir_intrinsic_instr *new_instr = nir_intrinsic_instr_create(mem_ctx, op);
    nir_intrinsic_set_base(new_instr,
@@ -104,7 +105,7 @@ lower_instr(nir_intrinsic_instr *instr,
 
    nir_load_const_instr *offset_const =
       nir_load_const_instr_create(mem_ctx, 1, 32);
-   offset_const->value.u32[0] = instr->variables[0]->var->data.offset;
+   offset_const->value.u32[0] = var->data.offset;
 
    nir_instr_insert_before(&instr->instr, &offset_const->instr);
 
diff --git a/src/compiler/nir/nir_lower_clamp_color_outputs.c b/src/compiler/nir/nir_lower_clamp_color_outputs.c
index 55becbf769e..d8dd6d0e7be 100644
--- a/src/compiler/nir/nir_lower_clamp_color_outputs.c
+++ b/src/compiler/nir/nir_lower_clamp_color_outputs.c
@@ -68,7 +68,7 @@ lower_intrinsic(lower_state *state, nir_intrinsic_instr *intr)
 
    switch (intr->intrinsic) {
    case nir_intrinsic_store_var:
-      out = intr->variables[0]->var;
+      out = nir_intrinsic_var(intr, 0);
       break;
    case nir_intrinsic_store_output:
       /* already had i/o lowered.. lookup the matching output var: */
diff --git a/src/compiler/nir/nir_lower_global_vars_to_local.c b/src/compiler/nir/nir_lower_global_vars_to_local.c
index c8fdfde8cb1..b67040a13a0 100644
--- a/src/compiler/nir/nir_lower_global_vars_to_local.c
+++ b/src/compiler/nir/nir_lower_global_vars_to_local.c
@@ -44,7 +44,7 @@ mark_global_var_uses_block(nir_block *block, nir_function_impl *impl,
       unsigned num_vars = nir_intrinsic_infos[intrin->intrinsic].num_variables;
 
       for (unsigned i = 0; i < num_vars; i++) {
-         nir_variable *var = intrin->variables[i]->var;
+         nir_variable *var = nir_intrinsic_var(intrin, i);
          if (var->data.mode != nir_var_global)
             continue;
 
diff --git a/src/compiler/nir/nir_lower_indirect_derefs.c b/src/compiler/nir/nir_lower_indirect_derefs.c
index c949224b15c..76f19ecd7e6 100644
--- a/src/compiler/nir/nir_lower_indirect_derefs.c
+++ b/src/compiler/nir/nir_lower_indirect_derefs.c
@@ -152,8 +152,8 @@ lower_indirect_block(nir_block *block, nir_builder *b,
        * array variables.  (We can't handle indirects on tightly packed
        * scalar arrays, so we need to lower them regardless.)
        */
-      if (!(modes & intrin->variables[0]->var->data.mode) &&
-          !intrin->variables[0]->var->data.compact)
+      nir_variable *var = nir_intrinsic_var(intrin, 0);
+      if (!(modes & var->data.mode) && !var->data.compact)
          continue;
 
       b->cursor = nir_before_instr(&intrin->instr);
diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c
index df91febd68d..96a5cec1df2 100644
--- a/src/compiler/nir/nir_lower_io.c
+++ b/src/compiler/nir/nir_lower_io.c
@@ -160,7 +160,7 @@ lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state,
            unsigned component)
 {
    const nir_shader *nir = state->builder.shader;
-   nir_variable *var = intrin->variables[0]->var;
+   nir_variable *var = nir_intrinsic_var(intrin, 0);
    nir_variable_mode mode = var->data.mode;
    nir_ssa_def *barycentric = NULL;
 
@@ -232,7 +232,7 @@ lower_store(nir_intrinsic_instr *intrin, struct lower_io_state *state,
             nir_ssa_def *vertex_index, nir_ssa_def *offset,
             unsigned component)
 {
-   nir_variable *var = intrin->variables[0]->var;
+   nir_variable *var = nir_intrinsic_var(intrin, 0);
    nir_variable_mode mode = var->data.mode;
 
    nir_intrinsic_op op;
@@ -269,7 +269,7 @@ static nir_intrinsic_instr *
 lower_atomic(nir_intrinsic_instr *intrin, struct lower_io_state *state,
              nir_ssa_def *offset)
 {
-   nir_variable *var = intrin->variables[0]->var;
+   nir_variable *var = nir_intrinsic_var(intrin, 0);
 
    assert(var->data.mode == nir_var_shared);
 
@@ -308,7 +308,7 @@ static nir_intrinsic_instr *
 lower_interpolate_at(nir_intrinsic_instr *intrin, struct lower_io_state *state,
                      nir_ssa_def *offset, unsigned component)
 {
-   nir_variable *var = intrin->variables[0]->var;
+   nir_variable *var = nir_intrinsic_var(intrin, 0);
 
    assert(var->data.mode == nir_var_shader_in);
 
@@ -398,7 +398,7 @@ nir_lower_io_block(nir_block *block,
          continue;
       }
 
-      nir_variable *var = intrin->variables[0]->var;
+      nir_variable *var = nir_intrinsic_var(intrin, 0);
       nir_variable_mode mode = var->data.mode;
 
       if ((state->modes & mode) == 0)
diff --git a/src/compiler/nir/nir_lower_io_arrays_to_elements.c b/src/compiler/nir/nir_lower_io_arrays_to_elements.c
index 9a5eec8f870..ff868e179c1 100644
--- a/src/compiler/nir/nir_lower_io_arrays_to_elements.c
+++ b/src/compiler/nir/nir_lower_io_arrays_to_elements.c
@@ -242,7 +242,7 @@ create_indirects_mask(nir_shader *shader, uint64_t *indirects,
                    intr->intrinsic != nir_intrinsic_interp_var_at_offset)
                   continue;
 
-               nir_variable *var = intr->variables[0]->var;
+               nir_variable *var = nir_intrinsic_var(intr, 0);
 
                if (var->data.mode != mode)
                   continue;
@@ -286,7 +286,7 @@ lower_io_arrays_to_elements(nir_shader *shader, nir_variable_mode mask,
                    intr->intrinsic != nir_intrinsic_interp_var_at_offset)
                   continue;
 
-               nir_variable *var = intr->variables[0]->var;
+               nir_variable *var = nir_intrinsic_var(intr, 0);
 
                /* Skip indirects */
                uint64_t loc_mask = ((uint64_t)1) << var->data.location;
diff --git a/src/compiler/nir/nir_lower_io_to_scalar.c b/src/compiler/nir/nir_lower_io_to_scalar.c
index 7774c2d2458..0144cc26b38 100644
--- a/src/compiler/nir/nir_lower_io_to_scalar.c
+++ b/src/compiler/nir/nir_lower_io_to_scalar.c
@@ -311,7 +311,7 @@ nir_lower_io_to_scalar_early(nir_shader *shader, nir_variable_mode mask)
                    intr->intrinsic != nir_intrinsic_interp_var_at_offset)
                   continue;
 
-               nir_variable *var = intr->variables[0]->var;
+               nir_variable *var = nir_intrinsic_var(intr, 0);
                nir_variable_mode mode = var->data.mode;
 
                /* TODO: add patch support */
diff --git a/src/compiler/nir/nir_lower_io_types.c b/src/compiler/nir/nir_lower_io_types.c
index 795bbd80d5d..cbe6d956148 100644
--- a/src/compiler/nir/nir_lower_io_types.c
+++ b/src/compiler/nir/nir_lower_io_types.c
@@ -121,7 +121,7 @@ lower_io_types_block(struct lower_io_types_state *state, nir_block *block)
           (intr->intrinsic != nir_intrinsic_store_var))
          continue;
 
-      nir_variable *var = intr->variables[0]->var;
+      nir_variable *var = nir_intrinsic_var(intr, 0);
 
       if ((var->data.mode != nir_var_shader_in) &&
           (var->data.mode != nir_var_shader_out))
diff --git a/src/compiler/nir/nir_lower_locals_to_regs.c b/src/compiler/nir/nir_lower_locals_to_regs.c
index d0667bc5040..b224e64332e 100644
--- a/src/compiler/nir/nir_lower_locals_to_regs.c
+++ b/src/compiler/nir/nir_lower_locals_to_regs.c
@@ -206,7 +206,7 @@ lower_locals_to_regs_block(nir_block *block,
 
       switch (intrin->intrinsic) {
       case nir_intrinsic_load_var: {
-         if (intrin->variables[0]->var->data.mode != nir_var_local)
+         if (nir_intrinsic_var(intrin, 0)->data.mode != nir_var_local)
             continue;
 
          nir_alu_instr *mov = nir_alu_instr_create(state->shader, nir_op_imov);
@@ -230,7 +230,7 @@ lower_locals_to_regs_block(nir_block *block,
       }
 
       case nir_intrinsic_store_var: {
-         if (intrin->variables[0]->var->data.mode != nir_var_local)
+         if (nir_intrinsic_var(intrin, 0)->data.mode != nir_var_local)
             continue;
 
          nir_src reg_src = get_deref_reg_src(intrin->variables[0],
diff --git a/src/compiler/nir/nir_lower_phis_to_scalar.c b/src/compiler/nir/nir_lower_phis_to_scalar.c
index b12718f2732..11cf9ab5c69 100644
--- a/src/compiler/nir/nir_lower_phis_to_scalar.c
+++ b/src/compiler/nir/nir_lower_phis_to_scalar.c
@@ -83,10 +83,11 @@ is_phi_src_scalarizable(nir_phi_src *src,
       nir_intrinsic_instr *src_intrin = nir_instr_as_intrinsic(src_instr);
 
       switch (src_intrin->intrinsic) {
-      case nir_intrinsic_load_var:
-         return src_intrin->variables[0]->var->data.mode == nir_var_shader_in ||
-                src_intrin->variables[0]->var->data.mode == nir_var_uniform;
-
+      case nir_intrinsic_load_var: {
+         const nir_variable *var = nir_intrinsic_var(src_intrin, 0);
+         return var->data.mode == nir_var_shader_in ||
+                var->data.mode == nir_var_uniform;
+      }
       case nir_intrinsic_interp_var_at_centroid:
       case nir_intrinsic_interp_var_at_sample:
       case nir_intrinsic_interp_var_at_offset:
diff --git a/src/compiler/nir/nir_lower_system_values.c b/src/compiler/nir/nir_lower_system_values.c
index fb560ee21bb..31c3d2acf14 100644
--- a/src/compiler/nir/nir_lower_system_values.c
+++ b/src/compiler/nir/nir_lower_system_values.c
@@ -42,7 +42,7 @@ convert_block(nir_block *block, nir_builder *b)
       if (load_var->intrinsic != nir_intrinsic_load_var)
          continue;
 
-      nir_variable *var = load_var->variables[0]->var;
+      nir_variable *var = nir_intrinsic_var(load_var, 0);
       if (var->data.mode != nir_var_system_value)
          continue;
 
diff --git a/src/compiler/nir/nir_lower_wpos_ytransform.c b/src/compiler/nir/nir_lower_wpos_ytransform.c
index 62166e78746..1ad21cfc46f 100644
--- a/src/compiler/nir/nir_lower_wpos_ytransform.c
+++ b/src/compiler/nir/nir_lower_wpos_ytransform.c
@@ -81,7 +81,7 @@ emit_wpos_adjustment(lower_wpos_ytransform_state *state,
                      bool invert, float adjX, float adjY[2])
 {
    nir_builder *b = &state->b;
-   nir_variable *fragcoord = intr->variables[0]->var;
+   nir_variable *fragcoord = nir_intrinsic_var(intr, 0);
    nir_ssa_def *wpostrans, *wpos_temp, *wpos_temp_y, *wpos_input;
 
    assert(intr->dest.is_ssa);
@@ -147,7 +147,7 @@ static void
 lower_fragcoord(lower_wpos_ytransform_state *state, nir_intrinsic_instr *intr)
 {
    const nir_lower_wpos_ytransform_options *options = state->options;
-   nir_variable *fragcoord = intr->variables[0]->var;
+   nir_variable *fragcoord = nir_intrinsic_var(intr, 0);
    float adjX = 0.0f;
    float adjY[2] = { 0.0f, 0.0f };
    bool invert = false;
diff --git a/src/compiler/nir/nir_opt_peephole_select.c b/src/compiler/nir/nir_opt_peephole_select.c
index 4ca4f80d788..f1331917559 100644
--- a/src/compiler/nir/nir_opt_peephole_select.c
+++ b/src/compiler/nir/nir_opt_peephole_select.c
@@ -67,7 +67,7 @@ block_check_for_allowed_instrs(nir_block *block, unsigned *count, bool alu_ok)
 
          switch (intrin->intrinsic) {
          case nir_intrinsic_load_var:
-            switch (intrin->variables[0]->var->data.mode) {
+            switch (nir_intrinsic_var(intrin, 0)->data.mode) {
             case nir_var_shader_in:
             case nir_var_uniform:
                break;
diff --git a/src/compiler/nir/nir_propagate_invariant.c b/src/compiler/nir/nir_propagate_invariant.c
index 7b5bd6cce6b..190fead4e54 100644
--- a/src/compiler/nir/nir_propagate_invariant.c
+++ b/src/compiler/nir/nir_propagate_invariant.c
@@ -100,17 +100,17 @@ propagate_invariant_instr(nir_instr *instr, struct set *invariants)
       switch (intrin->intrinsic) {
       case nir_intrinsic_copy_var:
          /* If the destination is invariant then so is the source */
-         if (var_is_invariant(intrin->variables[0]->var, invariants))
-            add_var(intrin->variables[1]->var, invariants);
+         if (var_is_invariant(nir_intrinsic_var(intrin, 0), invariants))
+            add_var(nir_intrinsic_var(intrin, 1), invariants);
          break;
 
       case nir_intrinsic_load_var:
          if (dest_is_invariant(&intrin->dest, invariants))
-            add_var(intrin->variables[0]->var, invariants);
+            add_var(nir_intrinsic_var(intrin, 0), invariants);
          break;
 
       case nir_intrinsic_store_var:
-         if (var_is_invariant(intrin->variables[0]->var, invariants))
+         if (var_is_invariant(nir_intrinsic_var(intrin, 0), invariants))
             add_src(&intrin->src[0], invariants);
          break;
 
diff --git a/src/compiler/nir/nir_remove_dead_variables.c b/src/compiler/nir/nir_remove_dead_variables.c
index eff66f92d43..ebd56bc413c 100644
--- a/src/compiler/nir/nir_remove_dead_variables.c
+++ b/src/compiler/nir/nir_remove_dead_variables.c
@@ -35,16 +35,17 @@ add_var_use_intrinsic(nir_intrinsic_instr *instr, struct set *live,
 
    switch (instr->intrinsic) {
    case nir_intrinsic_copy_var:
-      _mesa_set_add(live, instr->variables[1]->var);
+      _mesa_set_add(live, nir_intrinsic_var(instr, 1));
       /* Fall through */
    case nir_intrinsic_store_var: {
+      const nir_variable *var = nir_intrinsic_var(instr, 0);
       /* The first source in both copy_var and store_var is the destination.
        * If the variable is a local that never escapes the shader, then we
        * don't mark it as live for just a store.
        */
-      nir_variable_mode mode = instr->variables[0]->var->data.mode;
+      nir_variable_mode mode = var->data.mode;
       if (!(mode & (nir_var_local | nir_var_global | nir_var_shared)))
-         _mesa_set_add(live, instr->variables[0]->var);
+         _mesa_set_add(live, var);
       break;
    }
 
@@ -58,7 +59,7 @@ add_var_use_intrinsic(nir_intrinsic_instr *instr, struct set *live,
 
    default:
       for (unsigned i = 0; i < num_vars; i++) {
-         _mesa_set_add(live, instr->variables[i]->var);
+         _mesa_set_add(live, nir_intrinsic_var(instr, i));
       }
       break;
    }
@@ -140,7 +141,7 @@ remove_dead_var_writes(nir_shader *shader, struct set *live)
                continue;
 
             /* Stores to dead variables need to be removed */
-            if (intrin->variables[0]->var->data.mode == 0)
+            if (nir_intrinsic_var(intrin, 0)->data.mode == 0)
                nir_instr_remove(instr);
          }
       }
diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c
index a49948fbb48..b1a20004a47 100644
--- a/src/compiler/nir/nir_validate.c
+++ b/src/compiler/nir/nir_validate.c
@@ -509,34 +509,38 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
 
    switch (instr->intrinsic) {
    case nir_intrinsic_load_var: {
+      nir_variable *var = nir_intrinsic_var(instr, 0);
       const struct glsl_type *type =
          nir_deref_tail(&instr->variables[0]->deref)->type;
       validate_assert(state, glsl_type_is_vector_or_scalar(type) ||
-             (instr->variables[0]->var->data.mode == nir_var_uniform &&
+             (var->data.mode == nir_var_uniform &&
               glsl_get_base_type(type) == GLSL_TYPE_SUBROUTINE));
       validate_assert(state, instr->num_components == glsl_get_vector_elements(type));
       break;
    }
    case nir_intrinsic_store_var: {
+      nir_variable *var = nir_intrinsic_var(instr, 0);
       const struct glsl_type *type =
          nir_deref_tail(&instr->variables[0]->deref)->type;
       validate_assert(state, glsl_type_is_vector_or_scalar(type) ||
-             (instr->variables[0]->var->data.mode == nir_var_uniform &&
+             (var->data.mode == nir_var_uniform &&
               glsl_get_base_type(type) == GLSL_TYPE_SUBROUTINE));
       validate_assert(state, instr->num_components == glsl_get_vector_elements(type));
-      validate_assert(state, instr->variables[0]->var->data.mode != nir_var_shader_in &&
-             instr->variables[0]->var->data.mode != nir_var_uniform &&
-             instr->variables[0]->var->data.mode != nir_var_shader_storage);
+      validate_assert(state, var->data.mode != nir_var_shader_in &&
+             var->data.mode != nir_var_uniform &&
+             var->data.mode != nir_var_shader_storage);
       validate_assert(state, (nir_intrinsic_write_mask(instr) & ~((1 << instr->num_components) - 1)) == 0);
       break;
    }
-   case nir_intrinsic_copy_var:
+   case nir_intrinsic_copy_var: {
+      nir_variable *var = nir_intrinsic_var(instr, 0);
       validate_assert(state, nir_deref_tail(&instr->variables[0]->deref)->type ==
              nir_deref_tail(&instr->variables[1]->deref)->type);
-      validate_assert(state, instr->variables[0]->var->data.mode != nir_var_shader_in &&
-             instr->variables[0]->var->data.mode != nir_var_uniform &&
-             instr->variables[0]->var->data.mode != nir_var_shader_storage);
+      validate_assert(state, var->data.mode != nir_var_shader_in &&
+             var->data.mode != nir_var_uniform &&
+             var->data.mode != nir_var_shader_storage);
       break;
+   }
    default:
       break;
    }
-- 
2.14.3



More information about the mesa-dev mailing list