[Mesa-dev] [PATCH v3 (part2) 23/56] glsl: ignore buffer variables when counting uniform components

Iago Toral Quiroga itoral at igalia.com
Tue Jul 14 00:46:25 PDT 2015


From: Samuel Iglesias Gonsalvez <siglesias at igalia.com>

Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
---
 src/glsl/link_uniforms.cpp | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index 131e76c..eefe7dc 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -290,7 +290,7 @@ public:
    count_uniform_size(struct string_to_uint_map *map)
       : num_active_uniforms(0), num_values(0), num_shader_samplers(0),
         num_shader_images(0), num_shader_uniform_components(0),
-        is_ubo_var(false), map(map)
+        is_ubo_var(false), is_shader_storage(false), map(map)
    {
       /* empty */
    }
@@ -305,6 +305,7 @@ public:
    void process(ir_variable *var)
    {
       this->is_ubo_var = var->is_in_buffer_block();
+      this->is_shader_storage = var->is_in_shader_storage_block();
       if (var->is_interface_instance())
          program_resource_visitor::process(var->get_interface_type(),
                                            var->get_interface_type()->name);
@@ -338,6 +339,7 @@ public:
    unsigned num_shader_uniform_components;
 
    bool is_ubo_var;
+   bool is_shader_storage;
 
 private:
    virtual void visit_field(const glsl_type *type, const char *name,
@@ -364,13 +366,14 @@ private:
           * components in the default block.  The spec allows image
           * uniforms to use up no more than one scalar slot.
           */
-         this->num_shader_uniform_components += values;
+         if(!is_shader_storage)
+            this->num_shader_uniform_components += values;
       } else {
 	 /* Accumulate the total number of uniform slots used by this shader.
 	  * Note that samplers do not count against this limit because they
 	  * don't use any storage on current hardware.
 	  */
-	 if (!is_ubo_var)
+	 if (!is_ubo_var && !is_shader_storage)
 	    this->num_shader_uniform_components += values;
       }
 
@@ -963,8 +966,10 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
 
       sh->num_combined_uniform_components = sh->num_uniform_components;
       for (unsigned i = 0; i < sh->NumUniformBlocks; i++) {
-	 sh->num_combined_uniform_components +=
-	    sh->UniformBlocks[i].UniformBufferSize / 4;
+         if (!sh->UniformBlocks[i].IsShaderStorage) {
+	    sh->num_combined_uniform_components +=
+	       sh->UniformBlocks[i].UniformBufferSize / 4;
+         }
       }
    }
 
-- 
1.9.1



More information about the mesa-dev mailing list