mesa: Fold _mesa_uniform_merge_location_offset into its only caller

Also delete the comment before that function.  Everything in that
comment was either stale, wrong, or captured elsewhere.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Ian Romanick 2014-08-01 18:53:09 -07:00
parent 1c759e32d8
commit 89d92fc00e
3 changed files with 3 additions and 48 deletions

View File

@ -993,9 +993,7 @@ _mesa_uniform_matrix(struct gl_context *ctx, struct gl_shader_program *shProg,
*
* Returns the uniform index into UniformStorage (also the
* glGetActiveUniformsiv uniform index), and stores the referenced
* array offset in *offset, or GL_INVALID_INDEX (-1). Those two
* return values can be encoded into a uniform location for
* glUniform* using _mesa_uniform_merge_location_offset(index, offset).
* array offset in *offset, or GL_INVALID_INDEX (-1).
*/
extern "C" unsigned
_mesa_get_uniform_location(struct gl_context *ctx,

View File

@ -932,7 +932,8 @@ _mesa_GetUniformLocation(GLuint programObj, const GLcharARB *name)
shProg->UniformStorage[index].atomic_buffer_index != -1)
return -1;
return _mesa_uniform_merge_location_offset(shProg, index, offset);
/* location in remap table + array element offset */
return shProg->UniformStorage[index].remap_location + offset;
}
GLuint GLAPIENTRY

View File

@ -323,50 +323,6 @@ struct gl_builtin_uniform_desc {
unsigned int num_elements;
};
/**
* \name GLSL uniform arrays and structs require special handling.
*
* The GL_ARB_shader_objects spec says that if you use
* glGetUniformLocation to get the location of an array, you CANNOT
* access other elements of the array by adding an offset to the
* returned location. For example, you must call
* glGetUniformLocation("foo[16]") if you want to set the 16th element
* of the array with glUniform().
*
* HOWEVER, some other OpenGL drivers allow accessing array elements
* by adding an offset to the returned array location. And some apps
* seem to depend on that behaviour.
*
* Mesa's gl_uniform_list doesn't directly support this since each
* entry in the list describes one uniform variable, not one uniform
* element. We could insert dummy entries in the list for each array
* element after [0] but that causes complications elsewhere.
*
* We solve this problem by creating multiple entries for uniform arrays
* in the UniformRemapTable so that their elements get sequential locations.
*
* Utility functions below offer functionality to split UniformRemapTable
* location in to location of the uniform in UniformStorage + offset to the
* array element (0 if not an array) and also merge it back again as the
* UniformRemapTable location.
*
*/
/*@{*/
/**
* Combine the uniform's storage index and the array index
*/
static inline GLint
_mesa_uniform_merge_location_offset(const struct gl_shader_program *prog,
unsigned storage_index,
unsigned uniform_array_index)
{
/* location in remap table + array element offset */
return prog->UniformStorage[storage_index].remap_location +
uniform_array_index;
}
/*@}*/
#ifdef __cplusplus
}
#endif