glsl: stop allocating memory for UBOs during linking
authorTimothy Arceri <timothy.arceri@collabora.com>
Sat, 2 Jul 2016 10:02:47 +0000 (20:02 +1000)
committerTimothy Arceri <timothy.arceri@collabora.com>
Tue, 5 Jul 2016 10:18:05 +0000 (20:18 +1000)
This just stops counting and assigning a storage location for
these uniforms, the count is only used to create the uniform storage.

These uniform types don't use this storage.

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
src/compiler/glsl/link_uniforms.cpp

index 807a8f3bd04624d5c6bb62befbe1466832c04c1b..dbe808fd5328ab600eee4d03a7df8978764370e2 100644 (file)
@@ -403,7 +403,7 @@ private:
        */
       this->num_active_uniforms++;
 
-      if(!is_gl_identifier(name) && !is_shader_storage)
+      if(!is_gl_identifier(name) && !is_shader_storage && !is_buffer_block)
          this->num_values += values;
    }
 
@@ -767,9 +767,10 @@ private:
       this->uniforms[id].is_shader_storage =
          current_var->is_in_shader_storage_block();
 
-      /* Do not assign storage if the uniform is builtin */
+      /* Do not assign storage if the uniform is a builtin or buffer object */
       if (!this->uniforms[id].builtin &&
-          !this->uniforms[id].is_shader_storage)
+          !this->uniforms[id].is_shader_storage &&
+          this->buffer_block_index == -1)
          this->uniforms[id].storage = this->values;
 
       if (this->buffer_block_index != -1) {
@@ -823,7 +824,8 @@ private:
       }
 
       if (!this->uniforms[id].builtin &&
-          !this->uniforms[id].is_shader_storage)
+          !this->uniforms[id].is_shader_storage &&
+          this->buffer_block_index == -1)
          this->values += values_for_type(type);
    }
 
@@ -1257,7 +1259,8 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
 #ifndef NDEBUG
    for (unsigned i = 0; i < num_uniforms; i++) {
       assert(uniforms[i].storage != NULL || uniforms[i].builtin ||
-             uniforms[i].is_shader_storage);
+             uniforms[i].is_shader_storage ||
+             uniforms[i].block_index != -1);
    }
 
    assert(parcel.values == data_end);