mesa: handle zero-size buffers in MapBuffer and ranges in MapBufferRange (v3)

Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Marek Olšák
2011-08-30 19:10:06 +02:00
parent 0a33ac5413
commit 5572de8e7e
2 changed files with 31 additions and 25 deletions

View File

@@ -1004,6 +1004,12 @@ _mesa_MapBufferARB(GLenum target, GLenum access)
return NULL;
}
if (!bufObj->Size) {
_mesa_error(ctx, GL_OUT_OF_MEMORY,
"glMapBuffer(buffer size = 0)");
return NULL;
}
ASSERT(ctx->Driver.MapBufferRange);
map = ctx->Driver.MapBufferRange(ctx, 0, bufObj->Size, accessFlags, bufObj);
if (!map) {
@@ -1410,7 +1416,23 @@ _mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length,
"glMapBufferRange(buffer already mapped)");
return NULL;
}
if (!bufObj->Size) {
_mesa_error(ctx, GL_OUT_OF_MEMORY,
"glMapBufferRange(buffer size = 0)");
return NULL;
}
/* Mapping zero bytes should return a non-null pointer. */
if (!length) {
static long dummy = 0;
bufObj->Pointer = &dummy;
bufObj->Length = length;
bufObj->Offset = offset;
bufObj->AccessFlags = access;
return bufObj->Pointer;
}
ASSERT(ctx->Driver.MapBufferRange);
map = ctx->Driver.MapBufferRange(ctx, offset, length, access, bufObj);
if (!map) {