Commit 947d8ff4 authored by Eric Anholt's avatar Eric Anholt

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's avatarKenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Brian Paul's avatarBrian Paul <brianp@vmware.com>
Reviewed-by: 's avatarIan Romanick <ian.d.romanick@intel.com>
parent 5ac46da5
......@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment