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.roman...@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,


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to