Mesa (master): mesa: Fix the core GL genned-name handling for glBindBufferBase()/Range().

Eric Anholt anholt at kemper.freedesktop.org
Sun Nov 4 20:34:55 UTC 2012


Module: Mesa
Branch: master
Commit: 947d8ff4a7c4b7ffb4013056b48dbabe6b3931b0
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=947d8ff4a7c4b7ffb4013056b48dbabe6b3931b0

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Oct 31 15:33:41 2012 -0700

mesa: Fix the core GL genned-name handling for glBindBufferBase()/Range().

This is part of fixing gl-3.1/genned-names.

v2: Fix a missing return value.

NOTE: This is a candidate for the 9.0 branch.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Brian Paul <brianp at vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/mesa/main/bufferobj.c |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 9bf2065..730fa27 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.
@@ -676,11 +681,13 @@ handle_bind_buffer_gen(struct gl_context *ctx,
       buf = ctx->Driver.NewBufferObject(ctx, buffer, target);
       if (!buf) {
 	 _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindBufferARB");
-	 return;
+	 return false;
       }
       _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-commit mailing list