diff options
author | marha <marha@users.sourceforge.net> | 2011-09-05 09:00:27 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-09-05 09:00:27 +0200 |
commit | 51a003c23f4e27a826e56b0a3465d1e3e922d678 (patch) | |
tree | 502470d9e5724764860fe16653b0f73a77fb6983 /mesalib/src/mesa/main/bufferobj.c | |
parent | bdc38022df44bde91e7ff95f6446cf20e19eaa5f (diff) | |
parent | 324c1ed4069c7d49d0ff7c63261281148f9b6cd8 (diff) | |
download | vcxsrv-51a003c23f4e27a826e56b0a3465d1e3e922d678.tar.gz vcxsrv-51a003c23f4e27a826e56b0a3465d1e3e922d678.tar.bz2 vcxsrv-51a003c23f4e27a826e56b0a3465d1e3e922d678.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
libxcb/src/xcb_in.c
mesalib/src/mesa/main/formats.c
mesalib/src/mesa/main/mtypes.h
mesalib/src/mesa/program/ir_to_mesa.cpp
mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c
mesalib/src/mesa/state_tracker/st_extensions.c
mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c
mesalib/src/mesa/swrast/s_context.c
mesalib/src/mesa/swrast/s_readpix.c
Diffstat (limited to 'mesalib/src/mesa/main/bufferobj.c')
-rw-r--r-- | mesalib/src/mesa/main/bufferobj.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/mesalib/src/mesa/main/bufferobj.c b/mesalib/src/mesa/main/bufferobj.c index 79ca91e04..428384b35 100644 --- a/mesalib/src/mesa/main/bufferobj.c +++ b/mesalib/src/mesa/main/bufferobj.c @@ -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) { |