Browse Source

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 <kenneth@whitecape.org>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
tags/mesa-8.0-rc1
Brian Paul 13 years ago
parent
commit
6aed626c35
1 changed files with 7 additions and 6 deletions
  1. 7
    6
      src/mesa/main/bufferobj.c

+ 7
- 6
src/mesa/main/bufferobj.c View File

@@ -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);

Loading…
Cancel
Save