[Mesa-dev] [PATCH] linker: Remove erroneous multiply by 4 in uniform usage calculation

Ian Romanick idr at freedesktop.org
Mon Nov 21 11:51:13 PST 2011


From: Ian Romanick <ian.d.romanick at intel.com>

The old count_uniform_size::num_shader_uniforms was actually
calculating the number of components used.  Multiplying by 4 when
setting gl_shader::num_uniform_components caused us to count 4x as
many uniform components as were actually used.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=42930
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=42966
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=43125
Cc: Vinson Lee <vlee at vmware.com>
Cc: Marek Olšák <maraeo at gmail.com>
---
 src/glsl/link_uniforms.cpp |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index ca5da30..e87b48e 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -114,7 +114,7 @@ class count_uniform_size : public uniform_field_visitor {
 public:
    count_uniform_size(struct string_to_uint_map *map)
       : num_active_uniforms(0), num_values(0), num_shader_samplers(0),
-	num_shader_uniforms(0), map(map)
+	num_shader_uniform_components(0), map(map)
    {
       /* empty */
    }
@@ -122,7 +122,7 @@ public:
    void start_shader()
    {
       this->num_shader_samplers = 0;
-      this->num_shader_uniforms = 0;
+      this->num_shader_uniform_components = 0;
    }
 
    /**
@@ -143,7 +143,7 @@ public:
    /**
     * Number of uniforms used in the current shader
     */
-   unsigned num_shader_uniforms;
+   unsigned num_shader_uniform_components;
 
 private:
    virtual void visit_field(const glsl_type *type, const char *name)
@@ -165,7 +165,7 @@ private:
 	  * Note that samplers do not count against this limit because they
 	  * don't use any storage on current hardware.
 	  */
-	 this->num_shader_uniforms += values;
+	 this->num_shader_uniform_components += values;
       }
 
       /* If the uniform is already in the map, there's nothing more to do.
@@ -182,6 +182,7 @@ private:
        */
       this->num_active_uniforms++;
       this->num_values += values;
+      printf("%s: %d\n", name, values);
    }
 
    struct string_to_uint_map *map;
@@ -321,7 +322,7 @@ link_assign_uniform_locations(struct gl_shader_program *prog)
 
       prog->_LinkedShaders[i]->num_samplers = uniform_size.num_shader_samplers;
       prog->_LinkedShaders[i]->num_uniform_components =
-	 uniform_size.num_shader_uniforms * 4;
+	 uniform_size.num_shader_uniform_components;
    }
 
    const unsigned num_user_uniforms = uniform_size.num_active_uniforms;
-- 
1.7.6.4



More information about the mesa-dev mailing list