Merge remote-tracking branch 'mesa-public/master' into vulkan
[mesa.git] / src / glsl / ir_hv_accept.cpp
index 3ce8959245db8fa3eaca638a52d8c799c21249cf..d3662cf5063e7a08f4c5e8ca9c9c460495013695 100644 (file)
@@ -49,8 +49,7 @@ visit_list_elements(ir_hierarchical_visitor *v, exec_list *l,
 {
    ir_instruction *prev_base_ir = v->base_ir;
 
-   foreach_list_safe(n, l) {
-      ir_instruction *const ir = (ir_instruction *) n;
+   foreach_in_list_safe(ir_instruction, ir, l) {
       if (statement_list)
          v->base_ir = ir;
       ir_visitor_status s = ir->accept(v);
@@ -91,26 +90,6 @@ ir_loop::accept(ir_hierarchical_visitor *v)
    if (s == visit_stop)
       return s;
 
-   if (s != visit_continue_with_parent) {
-      if (this->from) {
-        s = this->from->accept(v);
-        if (s != visit_continue)
-           return (s == visit_continue_with_parent) ? visit_continue : s;
-      }
-
-      if (this->to) {
-        s = this->to->accept(v);
-        if (s != visit_continue)
-           return (s == visit_continue_with_parent) ? visit_continue : s;
-      }
-
-      if (this->increment) {
-        s = this->increment->accept(v);
-        if (s != visit_continue)
-           return (s == visit_continue_with_parent) ? visit_continue : s;
-      }
-   }
-
    return v->visit_leave(this);
 }
 
@@ -213,6 +192,8 @@ ir_texture::accept(ir_hierarchical_visitor *v)
 
    switch (this->op) {
    case ir_tex:
+   case ir_lod:
+   case ir_query_levels:
       break;
    case ir_txb:
       s = this->lod_info.bias->accept(v);
@@ -226,6 +207,11 @@ ir_texture::accept(ir_hierarchical_visitor *v)
       if (s != visit_continue)
         return (s == visit_continue_with_parent) ? visit_continue : s;
       break;
+   case ir_txf_ms:
+      s = this->lod_info.sample_index->accept(v);
+      if (s != visit_continue)
+         return (s == visit_continue_with_parent) ? visit_continue : s;
+      break;
    case ir_txd:
       s = this->lod_info.grad.dPdx->accept(v);
       if (s != visit_continue)
@@ -235,6 +221,11 @@ ir_texture::accept(ir_hierarchical_visitor *v)
       if (s != visit_continue)
         return (s == visit_continue_with_parent) ? visit_continue : s;
       break;
+   case ir_tg4:
+      s = this->lod_info.component->accept(v);
+      if (s != visit_continue)
+         return (s == visit_continue_with_parent) ? visit_continue : s;
+      break;
    }
 
    return (s == visit_stop) ? s : v->visit_leave(this);
@@ -409,3 +400,38 @@ ir_if::accept(ir_hierarchical_visitor *v)
 
    return v->visit_leave(this);
 }
+
+ir_visitor_status
+ir_emit_vertex::accept(ir_hierarchical_visitor *v)
+{
+   ir_visitor_status s = v->visit_enter(this);
+   if (s != visit_continue)
+      return (s == visit_continue_with_parent) ? visit_continue : s;
+
+   s = this->stream->accept(v);
+   if (s != visit_continue)
+      return (s == visit_continue_with_parent) ? visit_continue : s;
+
+   return (s == visit_stop) ? s : v->visit_leave(this);
+}
+
+
+ir_visitor_status
+ir_end_primitive::accept(ir_hierarchical_visitor *v)
+{
+   ir_visitor_status s = v->visit_enter(this);
+   if (s != visit_continue)
+      return (s == visit_continue_with_parent) ? visit_continue : s;
+
+   s = this->stream->accept(v);
+   if (s != visit_continue)
+      return (s == visit_continue_with_parent) ? visit_continue : s;
+
+   return (s == visit_stop) ? s : v->visit_leave(this);
+}
+
+ir_visitor_status
+ir_barrier::accept(ir_hierarchical_visitor *v)
+{
+   return v->visit(this);
+}