nir/spirv: Array lengths are constants not literals
[mesa.git] / src / glsl / opt_tree_grafting.cpp
index f3bd580af19d64495ddc982eb4ceba6c30bc750c..cd58213c019348de02439c2dcd2188d722201713 100644 (file)
@@ -127,12 +127,12 @@ ir_tree_grafting_visitor::do_graft(ir_rvalue **rvalue)
       return false;
 
    if (debug) {
-      printf("GRAFTING:\n");
-      this->graft_assign->print();
-      printf("\n");
-      printf("TO:\n");
-      (*rvalue)->print();
-      printf("\n");
+      fprintf(stderr, "GRAFTING:\n");
+      this->graft_assign->fprint(stderr);
+      fprintf(stderr, "\n");
+      fprintf(stderr, "TO:\n");
+      (*rvalue)->fprint(stderr);
+      fprintf(stderr, "\n");
    }
 
    this->graft_assign->remove();
@@ -164,9 +164,9 @@ ir_tree_grafting_visitor::check_graft(ir_instruction *ir, ir_variable *var)
 {
    if (dereferences_variable(this->graft_assign->rhs, var)) {
       if (debug) {
-        printf("graft killed by: ");
-        ir->print();
-        printf("\n");
+        fprintf(stderr, "graft killed by: ");
+        ir->fprint(stderr);
+        fprintf(stderr, "\n");
       }
       return visit_stop;
    }
@@ -274,6 +274,8 @@ ir_tree_grafting_visitor::visit_enter(ir_texture *ir)
    case ir_tex:
    case ir_lod:
    case ir_query_levels:
+   case ir_texture_samples:
+   case ir_samples_identical:
       break;
    case ir_txb:
       if (do_graft(&ir->lod_info.bias))
@@ -316,9 +318,9 @@ try_tree_grafting(ir_assignment *start,
    ir_tree_grafting_visitor v(start, lhs_var);
 
    if (debug) {
-      printf("trying to graft: ");
-      lhs_var->print();
-      printf("\n");
+      fprintf(stderr, "trying to graft: ");
+      lhs_var->fprint(stderr);
+      fprintf(stderr, "\n");
    }
 
    for (ir_instruction *ir = (ir_instruction *)start->next;
@@ -326,9 +328,9 @@ try_tree_grafting(ir_assignment *start,
        ir = (ir_instruction *)ir->next) {
 
       if (debug) {
-        printf("- ");
-        ir->print();
-        printf("\n");
+        fprintf(stderr, "- ");
+        ir->fprint(stderr);
+        fprintf(stderr, "\n");
       }
 
       ir_visitor_status s = ir->accept(&v);
@@ -359,10 +361,11 @@ tree_grafting_basic_block(ir_instruction *bb_first,
       if (!lhs_var)
         continue;
 
-      if (lhs_var->data.mode == ir_var_function_out ||
-         lhs_var->data.mode == ir_var_function_inout ||
-          lhs_var->data.mode == ir_var_shader_out)
-        continue;
+   if (lhs_var->data.mode == ir_var_function_out ||
+       lhs_var->data.mode == ir_var_function_inout ||
+       lhs_var->data.mode == ir_var_shader_out ||
+       lhs_var->data.mode == ir_var_shader_storage)
+      continue;
 
       ir_variable_refcount_entry *entry = info->refs->get_variable_entry(lhs_var);
 
@@ -371,8 +374,6 @@ tree_grafting_basic_block(ir_instruction *bb_first,
          entry->referenced_count != 2)
         continue;
 
-      assert(assign == entry->assign);
-
       /* Found a possibly graftable assignment.  Now, walk through the
        * rest of the BB seeing if the deref is here, and if nothing interfered with
        * pasting its expression's values in between.