[Mesa-dev] [PATCH] glsl: stop allocating memory for SSBOs and builtins

Timothy Arceri timothy.arceri at collabora.com
Wed Jun 8 00:04:35 UTC 2016


Ping. This just stops counting and assigning a storage location for
these uniforms, the count is only used to create the Uniform storage
[1].

These uniform types don't use this storage.

[1] https://cgit.freedesktop.org/mesa/mesa/tree/src/compiler/glsl/link_
uniforms.cpp#n1080

On Thu, 2016-06-02 at 15:32 +1000, Timothy Arceri wrote:
> ---
>  src/compiler/glsl/link_uniforms.cpp | 20 +++++++++++++-------
>  1 file changed, 13 insertions(+), 7 deletions(-)
> 
> diff --git a/src/compiler/glsl/link_uniforms.cpp
> b/src/compiler/glsl/link_uniforms.cpp
> index a7f136c..571c49f 100644
> --- a/src/compiler/glsl/link_uniforms.cpp
> +++ b/src/compiler/glsl/link_uniforms.cpp
> @@ -402,7 +402,9 @@ private:
>         * uniforms.
>         */
>        this->num_active_uniforms++;
> -      this->num_values += values;
> +
> +      if(!is_gl_identifier(name) && !is_shader_storage)
> +         this->num_values += values;
>     }
>  
>     struct string_to_uint_map *hidden_map;
> @@ -762,13 +764,14 @@ private:
>           current_var->data.how_declared == ir_var_hidden;
>        this->uniforms[id].builtin = is_gl_identifier(name);
>  
> -      /* Do not assign storage if the uniform is builtin */
> -      if (!this->uniforms[id].builtin)
> -         this->uniforms[id].storage = this->values;
> -
>        this->uniforms[id].is_shader_storage =
>           current_var->is_in_shader_storage_block();
>  
> +      /* Do not assign storage if the uniform is builtin */
> +      if (!this->uniforms[id].builtin &&
> +          !this->uniforms[id].is_shader_storage)
> +         this->uniforms[id].storage = this->values;
> +
>        if (this->buffer_block_index != -1) {
>           this->uniforms[id].block_index = this->buffer_block_index;
>  
> @@ -819,7 +822,9 @@ private:
>           this->uniforms[id].row_major = false;
>        }
>  
> -      this->values += values_for_type(type);
> +      if (!this->uniforms[id].builtin &&
> +          !this->uniforms[id].is_shader_storage)
> +         this->values += values_for_type(type);
>     }
>  
>     /**
> @@ -1270,7 +1275,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);
> +      assert(uniforms[i].storage != NULL || uniforms[i].builtin ||
> +             uniforms[i].is_shader_storage);
>     }
>  
>     assert(parcel.values == data_end);


More information about the mesa-dev mailing list