glsl: Add gl_uniform_buffer_variable::IndexName field
glGetUniformIndices requires that the block instance index not be present in the name of queried uniforms. However, gl_uniform_buffer_variable::Name will include the instance index. The IndexName field is added to handle this difference. Note that currently IndexName will always point to the same string as Name. This will change soon. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Carl Worth <cworth@cworth.org>
This commit is contained in:
parent
11d42de681
commit
90b1dd03e5
|
@ -4322,6 +4322,7 @@ ast_uniform_block::hir(exec_list *instructions,
|
|||
&ubo->Uniforms[ubo->NumUniforms++];
|
||||
|
||||
ubo_var->Name = ralloc_strdup(state->uniform_blocks, fields[i].name);
|
||||
ubo_var->IndexName = ubo_var->Name;
|
||||
ubo_var->Type = fields[i].type;
|
||||
ubo_var->Offset = 0; /* Assigned at link time. */
|
||||
ubo_var->RowMajor = fields[i].row_major;
|
||||
|
|
|
@ -510,7 +510,13 @@ link_cross_validate_uniform_block(void *mem_ctx,
|
|||
struct gl_uniform_buffer_variable *ubo_var =
|
||||
&linked_block->Uniforms[i];
|
||||
|
||||
ubo_var->Name = ralloc_strdup(*linked_blocks, ubo_var->Name);
|
||||
if (ubo_var->Name == ubo_var->IndexName) {
|
||||
ubo_var->Name = ralloc_strdup(*linked_blocks, ubo_var->Name);
|
||||
ubo_var->IndexName = ubo_var->Name;
|
||||
} else {
|
||||
ubo_var->Name = ralloc_strdup(*linked_blocks, ubo_var->Name);
|
||||
ubo_var->IndexName = ralloc_strdup(*linked_blocks, ubo_var->IndexName);
|
||||
}
|
||||
}
|
||||
|
||||
return linked_block_index;
|
||||
|
|
|
@ -2273,6 +2273,19 @@ typedef enum
|
|||
struct gl_uniform_buffer_variable
|
||||
{
|
||||
char *Name;
|
||||
|
||||
/**
|
||||
* Name of the uniform as seen by glGetUniformIndices.
|
||||
*
|
||||
* glGetUniformIndices requires that the block instance index \b not be
|
||||
* present in the name of queried uniforms.
|
||||
*
|
||||
* \note
|
||||
* \c gl_uniform_buffer_variable::IndexName and
|
||||
* \c gl_uniform_buffer_variable::Name may point to identical storage.
|
||||
*/
|
||||
char *IndexName;
|
||||
|
||||
const struct glsl_type *Type;
|
||||
unsigned int Offset;
|
||||
GLboolean RowMajor;
|
||||
|
|
|
@ -695,7 +695,7 @@ _mesa_GetActiveUniformBlockiv(GLuint program,
|
|||
for (i = 0; i < block->NumUniforms; i++) {
|
||||
unsigned offset;
|
||||
params[i] = _mesa_get_uniform_location(ctx, shProg,
|
||||
block->Uniforms[i].Name,
|
||||
block->Uniforms[i].IndexName,
|
||||
&offset);
|
||||
}
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue