glsl: Identify active uniform blocks that are buffer blocks as such.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
Iago Toral Quiroga 2015-03-23 11:19:12 +01:00 committed by Samuel Iglesias Gonsalvez
parent a78a589efc
commit df89ed1591
4 changed files with 11 additions and 0 deletions

View File

@ -44,6 +44,7 @@ process_block(void *mem_ctx, struct hash_table *ht, ir_variable *var)
b->type = block_type;
b->has_instance_name = var->is_interface_instance();
b->is_shader_storage = var->data.mode == ir_var_shader_storage;
if (var->data.explicit_binding) {
b->has_binding = true;

View File

@ -38,6 +38,7 @@ struct link_uniform_block_active {
bool has_instance_name;
bool has_binding;
bool is_shader_storage;
};
class link_uniform_block_active_visitor : public ir_hierarchical_visitor {

View File

@ -293,6 +293,8 @@ link_uniform_blocks(void *mem_ctx,
blocks[i].NumUniforms =
(unsigned)(ptrdiff_t)(&variables[parcel.index] - blocks[i].Uniforms);
blocks[i].IsShaderStorage = b->is_shader_storage;
i++;
}
} else {
@ -311,6 +313,8 @@ link_uniform_blocks(void *mem_ctx,
blocks[i].NumUniforms =
(unsigned)(ptrdiff_t)(&variables[parcel.index] - blocks[i].Uniforms);
blocks[i].IsShaderStorage = b->is_shader_storage;
i++;
}
}

View File

@ -2564,6 +2564,11 @@ struct gl_uniform_block
*/
GLuint UniformBufferSize;
/**
* Is this actually an interface block for a shader storage buffer?
*/
bool IsShaderStorage;
/**
* Layout specified in the shader
*