[Mesa-dev] [PATCH 1/3] mesa: Fix the core GL genned-name handling for glBindBufferBase()/Range().

Ian Romanick idr at freedesktop.org
Thu Nov 1 11:41:26 PDT 2012


On 10/31/2012 06:10 PM, Eric Anholt wrote:
> This is part of fixing gl-3.1/genned-names.

Series is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

Also, as Ken mentioned, please mark as candidates for 9.0.

> ---
>   src/mesa/main/bufferobj.c |   20 +++++++++++++-------
>   1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
> index ac58c99..2f43eb0 100644
> --- a/src/mesa/main/bufferobj.c
> +++ b/src/mesa/main/bufferobj.c
> @@ -660,7 +660,7 @@ _mesa_free_buffer_objects( struct gl_context *ctx )
>      ctx->UniformBufferBindings = NULL;
>   }
>
> -static void
> +static bool
>   handle_bind_buffer_gen(struct gl_context *ctx,
>   		       GLenum target,
>   		       GLuint buffer,
> @@ -668,6 +668,11 @@ handle_bind_buffer_gen(struct gl_context *ctx,
>   {
>      struct gl_buffer_object *buf = *buf_handle;
>
> +   if (!buf && ctx->API == API_OPENGL_CORE) {
> +      _mesa_error(ctx, GL_INVALID_OPERATION, "glBindBuffer(non-gen name)");
> +      return false;
> +   }
> +
>      if (!buf || buf == &DummyBufferObject) {
>         /* If this is a new buffer object id, or one which was generated but
>          * never used before, allocate a buffer object now.
> @@ -681,6 +686,8 @@ handle_bind_buffer_gen(struct gl_context *ctx,
>         _mesa_HashInsert(ctx->Shared->BufferObjects, buffer, buf);
>         *buf_handle = buf;
>      }
> +
> +   return true;
>   }
>
>   /**
> @@ -717,11 +724,8 @@ bind_buffer_object(struct gl_context *ctx, GLenum target, GLuint buffer)
>      else {
>         /* non-default buffer object */
>         newBufObj = _mesa_lookup_bufferobj(ctx, buffer);
> -      if (newBufObj == NULL && ctx->API == API_OPENGL_CORE) {
> -         _mesa_error(ctx, GL_INVALID_OPERATION, "glBindBuffer(non-gen name)");
> +      if (!handle_bind_buffer_gen(ctx, target, buffer, &newBufObj))
>            return;
> -      }
> -      handle_bind_buffer_gen(ctx, target, buffer, &newBufObj);
>      }
>
>      /* bind new buffer */
> @@ -2147,7 +2151,8 @@ _mesa_BindBufferRange(GLenum target, GLuint index,
>      } else {
>         bufObj = _mesa_lookup_bufferobj(ctx, buffer);
>      }
> -   handle_bind_buffer_gen(ctx, target, buffer, &bufObj);
> +   if (!handle_bind_buffer_gen(ctx, target, buffer, &bufObj))
> +      return;
>
>      if (!bufObj) {
>         _mesa_error(ctx, GL_INVALID_OPERATION,
> @@ -2193,7 +2198,8 @@ _mesa_BindBufferBase(GLenum target, GLuint index, GLuint buffer)
>      } else {
>         bufObj = _mesa_lookup_bufferobj(ctx, buffer);
>      }
> -   handle_bind_buffer_gen(ctx, target, buffer, &bufObj);
> +   if (!handle_bind_buffer_gen(ctx, target, buffer, &bufObj))
> +      return;
>
>      if (!bufObj) {
>         _mesa_error(ctx, GL_INVALID_OPERATION,
>



More information about the mesa-dev mailing list