<div dir="ltr">On 31 July 2013 18:16, Ian Romanick <span dir="ltr"><<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div><div>On 07/31/2013 02:17 PM, Paul Berry wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This patch extracts the functions mark_whole_variable() and<br>
try_mark_partial_variable() from the ir_set_program_inouts visitor<br>
functions.  This will make the code easier to follow when we add<br>
geometry shader support.<br>
---<br>
  src/glsl/ir_set_program_<u></u>inouts.cpp | 59 +++++++++++++++++++++++++++++-<u></u>--------<br>
  1 file changed, 45 insertions(+), 14 deletions(-)<br>
<br>
diff --git a/src/glsl/ir_set_program_<u></u>inouts.cpp b/src/glsl/ir_set_program_<u></u>inouts.cpp<br>
index 351f65b..8774338 100644<br>
--- a/src/glsl/ir_set_program_<u></u>inouts.cpp<br>
+++ b/src/glsl/ir_set_program_<u></u>inouts.cpp<br>
@@ -59,6 +59,10 @@ public:<br>
     virtual ir_visitor_status visit_enter(ir_discard *);<br>
     virtual ir_visitor_status visit(ir_dereference_variable *);<br>
<br>
+private:<br>
+   void mark_whole_variable(ir_<u></u>variable *var);<br>
+   bool try_mark_partial_variable(ir_<u></u>variable *var, ir_rvalue *index);<br>
+<br>
     struct gl_program *prog;<br>
     GLenum shader_type;<br>
  };<br>
@@ -103,6 +107,17 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len,<br>
     }<br>
  }<br>
<br>
+/**<br>
+ * Mark an entire variable as used.  Caller must ensure that the variable<br>
+ * represents a shader input or output.<br>
+ */<br>
+void<br>
+ir_set_program_inouts_<u></u>visitor::mark_whole_variable(<u></u>ir_variable *var)<br>
+{<br>
+   mark(this->prog, var, 0, var->type->count_attribute_<u></u>slots(),<br>
+        this->shader_type == GL_FRAGMENT_SHADER);<br>
+}<br>
+<br>
  /* Default handler: Mark all the locations in the variable as used. */<br>
  ir_visitor_status<br>
  ir_set_program_inouts_visitor:<u></u>:visit(ir_dereference_variable *ir)<br>
@@ -110,17 +125,43 @@ ir_set_program_inouts_visitor:<u></u>:visit(ir_dereference_variable *ir)<br>
     if (!is_shader_inout(ir->var))<br>
        return visit_continue;<br>
<br>
-   mark(this->prog, ir->var, 0, ir->type->count_attribute_<u></u>slots(),<br>
-        this->shader_type == GL_FRAGMENT_SHADER);<br>
+   mark_whole_variable(ir->var);<br>
<br>
     return visit_continue;<br>
  }<br>
<br>
+/**<br>
+ * Try to mark a portion of the given variable as used.  Caller must ensure<br>
+ * that the variable represents a shader input or output which can be indexed<br>
+ * into in array fashion (an array, matrix, or vector).<br>
</blockquote>
<br></div></div>
I think this comment is misleading.  All variable indexing of vectors should have been converted to the insert or extract IR by now.  Right?</blockquote><div><br></div><div>Oh yeah, thanks.  I've fixed the comment.<br>


</div></div></div></div>