mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 05:18:08 +02:00
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>
This commit is contained in:
parent
b330f1f13c
commit
6aed626c35
1 changed files with 7 additions and 6 deletions
|
|
@ -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…
Add table
Reference in a new issue