Mesa (master): glsl: Also update implicit sizes of varyings at link time.

Eric Anholt anholt at kemper.freedesktop.org
Tue Sep 28 21:54:55 UTC 2010


Module: Mesa
Branch: master
Commit: 586b4b500fed64fb724beb3753bc190cd1c676e0
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=586b4b500fed64fb724beb3753bc190cd1c676e0

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Sep 28 14:32:16 2010 -0700

glsl: Also update implicit sizes of varyings at link time.

Otherwise, we'll often end up with gl_TexCoord being 0 length, for
example.  With ir_to_mesa, things ended up working out anyway, as long
as multiple implicitly-sized arrays weren't involved.

---

 src/glsl/linker.cpp |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 53e18a0..4bb4e2a 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -857,13 +857,15 @@ struct uniform_node {
 
  */
 static void
-update_uniform_array_sizes(struct gl_shader_program *prog)
+update_array_sizes(struct gl_shader_program *prog)
 {
    for (unsigned i = 0; i < prog->_NumLinkedShaders; i++) {
       foreach_list(node, prog->_LinkedShaders[i]->ir) {
 	 ir_variable *const var = ((ir_instruction *) node)->as_variable();
 
-	 if ((var == NULL) || (var->mode != ir_var_uniform) ||
+	 if ((var == NULL) || (var->mode != ir_var_uniform &&
+			       var->mode != ir_var_in &&
+			       var->mode != ir_var_out) ||
 	     !var->type->is_array())
 	    continue;
 
@@ -880,6 +882,7 @@ update_uniform_array_sizes(struct gl_shader_program *prog)
 	       }
 	    }
 	 }
+
 	 if (size + 1 != var->type->fields.array->length) {
 	    var->type = glsl_type::get_array_instance(var->type->fields.array,
 						      size + 1);
@@ -979,8 +982,6 @@ assign_uniform_locations(struct gl_shader_program *prog)
 				    hash_table_string_compare);
    void *mem_ctx = talloc_new(NULL);
 
-   update_uniform_array_sizes(prog);
-
    for (unsigned i = 0; i < prog->_NumLinkedShaders; i++) {
       unsigned next_position = 0;
 
@@ -1475,6 +1476,8 @@ link_shaders(GLcontext *ctx, struct gl_shader_program *prog)
 	 ;
    }
 
+   update_array_sizes(prog);
+
    assign_uniform_locations(prog);
 
    if (prog->_NumLinkedShaders && prog->_LinkedShaders[0]->Type == GL_VERTEX_SHADER) {




More information about the mesa-commit mailing list