nir: Add src/dest num_components helpers
[mesa.git] / src / compiler / nir / nir_lower_samplers_as_deref.c
index d2717840c94b63a22429eaaa0fbf40ea965ae59d..b1272e25a929b6f5b8dcca360206c24ea1c45fa4 100644 (file)
@@ -116,7 +116,7 @@ lower_deref(nir_deref_var *deref,
             nir_builder *b)
 {
    nir_variable *var = deref->var;
-   gl_shader_stage stage = state->shader->stage;
+   gl_shader_stage stage = state->shader->info.stage;
    unsigned location = var->data.location;
    unsigned binding;
    const struct glsl_type *orig_type = deref->deref.type;
@@ -157,8 +157,10 @@ static bool
 lower_sampler(nir_tex_instr *instr, struct lower_samplers_as_deref_state *state,
               nir_builder *b)
 {
+   if (!instr->texture)
+      return false;
+
    /* In GLSL, we only fill out the texture field.  The sampler is inferred */
-   assert(instr->texture != NULL);
    assert(instr->sampler == NULL);
 
    b->cursor = nir_before_instr(&instr->instr);
@@ -181,17 +183,17 @@ lower_intrinsic(nir_intrinsic_instr *instr,
                 struct lower_samplers_as_deref_state *state,
                 nir_builder *b)
 {
-   if (instr->intrinsic == nir_intrinsic_image_load ||
-       instr->intrinsic == nir_intrinsic_image_store ||
-       instr->intrinsic == nir_intrinsic_image_atomic_add ||
-       instr->intrinsic == nir_intrinsic_image_atomic_min ||
-       instr->intrinsic == nir_intrinsic_image_atomic_max ||
-       instr->intrinsic == nir_intrinsic_image_atomic_and ||
-       instr->intrinsic == nir_intrinsic_image_atomic_or ||
-       instr->intrinsic == nir_intrinsic_image_atomic_xor ||
-       instr->intrinsic == nir_intrinsic_image_atomic_exchange ||
-       instr->intrinsic == nir_intrinsic_image_atomic_comp_swap ||
-       instr->intrinsic == nir_intrinsic_image_size) {
+   if (instr->intrinsic == nir_intrinsic_image_var_load ||
+       instr->intrinsic == nir_intrinsic_image_var_store ||
+       instr->intrinsic == nir_intrinsic_image_var_atomic_add ||
+       instr->intrinsic == nir_intrinsic_image_var_atomic_min ||
+       instr->intrinsic == nir_intrinsic_image_var_atomic_max ||
+       instr->intrinsic == nir_intrinsic_image_var_atomic_and ||
+       instr->intrinsic == nir_intrinsic_image_var_atomic_or ||
+       instr->intrinsic == nir_intrinsic_image_var_atomic_xor ||
+       instr->intrinsic == nir_intrinsic_image_var_atomic_exchange ||
+       instr->intrinsic == nir_intrinsic_image_var_atomic_comp_swap ||
+       instr->intrinsic == nir_intrinsic_image_var_size) {
       b->cursor = nir_before_instr(&instr->instr);
       lower_deref(instr->variables[0], state, b);
       return true;