nir/gather_info: Handle multi-slot variables in io bitfields
[mesa.git] / src / glsl / lower_subroutine.cpp
index b29912ad1509777d7833019ab2a3ca5b4fd4e53f..a0df5e1df817e8b36e19574f9b384e2a147c694c 100644 (file)
@@ -84,7 +84,7 @@ lower_subroutine_visitor::visit_leave(ir_call *ir)
          continue;
 
       if (ir->array_idx != NULL)
-         var = new(mem_ctx) ir_dereference_array(ir->sub_var, ir->array_idx->clone(mem_ctx, NULL));
+         var = ir->array_idx->clone(mem_ctx, NULL);
       else
          var = new(mem_ctx) ir_dereference_variable(ir->sub_var);
 
@@ -98,7 +98,7 @@ lower_subroutine_visitor::visit_leave(ir_call *ir)
       else
          last_branch = if_tree(equal(subr_to_int(var), lc), new_call, last_branch);
 
-      if (s > 0)
+      if (return_deref && s > 0)
         return_deref = return_deref->clone(mem_ctx, NULL);
    }
    if (last_branch)