diff options
author | Brian Paul <[email protected]> | 2012-01-04 14:53:55 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2012-01-05 08:14:32 -0700 |
commit | 6aed626c35db96c99106e2c12ef23dc58965ece0 (patch) | |
tree | bdea8aec61d439f0c230857fbcedd52ea689362a /src/mesa/main/bufferobj.c | |
parent | b330f1f13c4b491b3fd7083535b8942cb16a7589 (diff) |
mesa: only map src/dest regions in _mesa_copy_buffer_subdata()
We were wastefully mapping the whole source/dest buffers before.
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Yuanhan Liu <[email protected]>
Diffstat (limited to 'src/mesa/main/bufferobj.c')
-rw-r--r-- | src/mesa/main/bufferobj.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 66957e46d88..462519895a4 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -502,19 +502,20 @@ _mesa_copy_buffer_subdata(struct gl_context *ctx, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { - GLubyte *srcPtr, *dstPtr; + void *srcPtr, *dstPtr; /* buffer should not already be mapped */ assert(!_mesa_bufferobj_mapped(src)); assert(!_mesa_bufferobj_mapped(dst)); - srcPtr = (GLubyte *) ctx->Driver.MapBufferRange(ctx, 0, src->Size, - GL_MAP_READ_BIT, src); - dstPtr = (GLubyte *) ctx->Driver.MapBufferRange(ctx, 0, dst->Size, - GL_MAP_WRITE_BIT, dst); + srcPtr = ctx->Driver.MapBufferRange(ctx, readOffset, size, + GL_MAP_READ_BIT, src); + dstPtr = ctx->Driver.MapBufferRange(ctx, writeOffset, size, + (GL_MAP_WRITE_BIT | + GL_MAP_INVALIDATE_RANGE_BIT), dst); if (srcPtr && dstPtr) - memcpy(dstPtr + writeOffset, srcPtr + readOffset, size); + memcpy(dstPtr, srcPtr, size); ctx->Driver.UnmapBuffer(ctx, src); ctx->Driver.UnmapBuffer(ctx, dst); |