[Mesa-dev] [PATCH] mesa: only map src/dest regions in _mesa_copy_buffer_subdata()
Kenneth Graunke
kenneth at whitecape.org
Wed Jan 4 19:17:39 PST 2012
On 01/04/2012 01:55 PM, Brian Paul wrote:
> We were wastefully mapping the whole source/dest buffers before.
> ---
> src/mesa/main/bufferobj.c | 12 ++++++------
> 1 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
> index 66957e4..c4a7b8d 100644
> --- a/src/mesa/main/bufferobj.c
> +++ b/src/mesa/main/bufferobj.c
> @@ -502,19 +502,19 @@ _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, dst);
>
> if (srcPtr && dstPtr)
> - memcpy(dstPtr + writeOffset, srcPtr + readOffset, size);
> + memcpy(dstPtr, srcPtr, size);
>
> ctx->Driver.UnmapBuffer(ctx, src);
> ctx->Driver.UnmapBuffer(ctx, dst);
LGTM.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
More information about the mesa-dev
mailing list