[Mesa-dev] [PATCH 8/9] mesa: Add support for glGetIntegeri_v from GL_ARB_uniform_buffer_object.

Kenneth Graunke kenneth at whitecape.org
Wed Jun 20 03:14:21 PDT 2012


On 06/18/2012 06:35 PM, Eric Anholt wrote:
> Fixes piglit ARB_uniform_buffer_object/getintegeri_v.
> ---
>  src/mesa/main/get.c |   24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index 933bfe7..4798c02 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -2566,6 +2566,30 @@ find_value_indexed(const char *func, GLenum pname, int index, union value *v)
>  	 goto invalid_enum;
>        v->value_int = ctx->TransformFeedback.CurrentObject->BufferNames[index];
>        return TYPE_INT;
> +
> +   case GL_UNIFORM_BUFFER_BINDING:
> +      if (index >= ctx->Const.MaxUniformBufferBindings)
> +	 goto invalid_value;
> +      if (!ctx->Extensions.ARB_uniform_buffer_object)
> +	 goto invalid_enum;
> +      v->value_int = ctx->UniformBufferBindings[index].BufferObject->Name;
> +      return TYPE_INT;
> +
> +   case GL_UNIFORM_BUFFER_START:
> +      if (index >= ctx->Const.MaxUniformBufferBindings)
> +	 goto invalid_value;
> +      if (!ctx->Extensions.ARB_uniform_buffer_object)
> +	 goto invalid_enum;
> +      v->value_int = ctx->UniformBufferBindings[index].Offset;
> +      return TYPE_INT;
> +
> +   case GL_UNIFORM_BUFFER_SIZE:
> +      if (index >= ctx->Const.MaxUniformBufferBindings)
> +	 goto invalid_value;
> +      if (!ctx->Extensions.ARB_uniform_buffer_object)
> +	 goto invalid_enum;
> +      v->value_int = ctx->UniformBufferBindings[index].Size;
> +      return TYPE_INT;
>     }
>  
>   invalid_enum:

Total nitpick: it seems like you should reorder the two checks, i.e.

if (!ctx->Extensions.ARB_uniform_buffer_object)
   goto invalid_enum;

if (index out of bounds)
   goto invalid_value;

because if I query these on an implementation that doesn't support
ARB_uniform_buffer_object, I would expect to get GL_INVALID_ENUM ("WTF
are you talking about?"), not a complaint that my index value is out of
bounds.  (Not to mention the fact that you can't glGet() the upper bound
in the first place...)

It doesn't really matter, though I bet there's some picky conformance
suite out there that might care.  (I haven't checked oglconform, but it
just sounds like the sort of thing they'd check for. :))


More information about the mesa-dev mailing list