[Mesa-dev] [PATCH 15/23] mesa: refactor GetActiveUniformsiv, use _mesa_program_resource_prop
Ilia Mirkin
imirkin at alum.mit.edu
Mon Mar 16 15:38:35 PDT 2015
On Fri, Mar 13, 2015 at 4:38 AM, Tapani Pälli <tapani.palli at intel.com> wrote:
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
> src/mesa/main/uniform_query.cpp | 107 ++++++++++++++--------------------------
> 1 file changed, 38 insertions(+), 69 deletions(-)
>
> diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
> index 9f82de9..217473a 100644
> --- a/src/mesa/main/uniform_query.cpp
> +++ b/src/mesa/main/uniform_query.cpp
> @@ -79,6 +79,33 @@ _mesa_GetActiveUniform(GLuint program, GLuint index,
> }
> }
>
> +static GLenum
> +resource_prop_from_uniform_prop(GLenum uni_prop)
> +{
> + switch (uni_prop) {
> + case GL_UNIFORM_TYPE:
> + return GL_TYPE;
> + case GL_UNIFORM_SIZE:
> + return GL_ARRAY_SIZE;
> + case GL_UNIFORM_NAME_LENGTH:
> + return GL_NAME_LENGTH;
> + case GL_UNIFORM_BLOCK_INDEX:
> + return GL_BLOCK_INDEX;
> + case GL_UNIFORM_OFFSET:
> + return GL_OFFSET;
> + case GL_UNIFORM_ARRAY_STRIDE:
> + return GL_ARRAY_STRIDE;
> + case GL_UNIFORM_MATRIX_STRIDE:
> + return GL_MATRIX_STRIDE;
> + case GL_UNIFORM_IS_ROW_MAJOR:
> + return GL_IS_ROW_MAJOR;
> + case GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX:
> + return GL_ATOMIC_COUNTER_BUFFER_INDEX;
> + default:
> + return 0;
> + }
> +}
> +
> extern "C" void GLAPIENTRY
> _mesa_GetActiveUniformsiv(GLuint program,
> GLsizei uniformCount,
> @@ -88,7 +115,8 @@ _mesa_GetActiveUniformsiv(GLuint program,
> {
> GET_CURRENT_CONTEXT(ctx);
> struct gl_shader_program *shProg;
> - GLsizei i;
> + struct gl_program_resource *res;
> + GLenum res_prop;
>
> if (uniformCount < 0) {
> _mesa_error(ctx, GL_INVALID_VALUE,
> @@ -100,80 +128,21 @@ _mesa_GetActiveUniformsiv(GLuint program,
> if (!shProg)
> return;
>
> - for (i = 0; i < uniformCount; i++) {
> - GLuint index = uniformIndices[i];
> + res_prop = resource_prop_from_uniform_prop(pname);
>
> - if (index >= shProg->NumUserUniformStorage) {
> + for (int i = 0; i < uniformCount; i++) {
> + res = _mesa_program_resource_find_index(shProg, GL_UNIFORM,
> + uniformIndices[i]);
> + if (!res) {
> _mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveUniformsiv(index)");
> - return;
> + break;
indent is funny here.
> }
> - }
> -
> - for (i = 0; i < uniformCount; i++) {
> - GLuint index = uniformIndices[i];
> - const struct gl_uniform_storage *uni = &shProg->UniformStorage[index];
> -
> - switch (pname) {
> - case GL_UNIFORM_TYPE:
> - params[i] = uni->type->gl_type;
> - break;
> -
> - case GL_UNIFORM_SIZE:
> - /* array_elements is zero for non-arrays, but the API requires that 1 be
> - * returned.
> - */
> - params[i] = MAX2(1, uni->array_elements);
> - break;
> -
> - case GL_UNIFORM_NAME_LENGTH:
> - params[i] = strlen(uni->name) + 1;
> -
> - /* Page 61 (page 73 of the PDF) in section 2.11 of the OpenGL ES 3.0
> - * spec says:
> - *
> - * "If the active uniform is an array, the uniform name returned
> - * in name will always be the name of the uniform array appended
> - * with "[0]"."
> - */
> - if (uni->array_elements != 0)
> - params[i] += 3;
> - break;
>
> - case GL_UNIFORM_BLOCK_INDEX:
> - params[i] = uni->block_index;
> - break;
> -
> - case GL_UNIFORM_OFFSET:
> - params[i] = uni->offset;
> - break;
> -
> - case GL_UNIFORM_ARRAY_STRIDE:
> - params[i] = uni->array_stride;
> - break;
> -
> - case GL_UNIFORM_MATRIX_STRIDE:
> - params[i] = uni->matrix_stride;
> - break;
> -
> - case GL_UNIFORM_IS_ROW_MAJOR:
> - params[i] = uni->row_major;
> - break;
> -
> - case GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX:
> - if (!ctx->Extensions.ARB_shader_atomic_counters)
> - goto invalid_enum;
> - params[i] = uni->atomic_buffer_index;
> + if (!_mesa_program_resource_prop(shProg, res, uniformIndices[i],
> + res_prop, ¶ms[i],
> + "glGetActiveUniformsiv"))
Will this return GL_INVALID_ENUM if res_prop == 0? If not, you need to
handle that above.
With that answered or taken care of,
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
> break;
> -
> - default:
> - goto invalid_enum;
> - }
> }
> -
> - return;
> -
> - invalid_enum:
> - _mesa_error(ctx, GL_INVALID_ENUM, "glGetActiveUniformsiv(pname)");
> }
>
> static struct gl_uniform_storage *
> --
> 2.1.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list