diff options
author | Samuel Iglesias Gonsalvez <siglesias@igalia.com> | 2015-05-15 12:26:42 +0200 |
---|---|---|
committer | Samuel Iglesias Gonsalvez <siglesias@igalia.com> | 2015-07-09 12:53:52 +0200 |
commit | 66201ecc00157bb154a49215eb0d11ee863f950f (patch) | |
tree | d92d801d16993fffa07587f38110f727e1c9353b | |
parent | 9d6ff52cf96ae59bab9d65492f924a784252ab61 (diff) |
glsl: ignore buffer variables when counting uniform components
Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
-rw-r--r-- | src/glsl/link_uniforms.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp index 131e76c610..eefe7dc132 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; + } } } |