On Thu, 26 Jan 2012 13:58:43 -0800, Ian Romanick <i...@freedesktop.org> wrote: > On 01/25/2012 05:51 PM, Eric Anholt wrote: > > Fixes piglit ARB_copy_buffer-overlap, which previously assertion failed. > > Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> > > One other orthogonal question below... > > > --- > > src/mesa/main/bufferobj.c | 25 +++++++++++++++++++------ > > 1 files changed, 19 insertions(+), 6 deletions(-) > > > > diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c > > index 5b6db78..e4f964f 100644 > > --- a/src/mesa/main/bufferobj.c > > +++ b/src/mesa/main/bufferobj.c > > @@ -526,11 +526,23 @@ _mesa_copy_buffer_subdata(struct gl_context *ctx, > > assert(!_mesa_bufferobj_mapped(src)); > > assert(!_mesa_bufferobj_mapped(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 (src == dst) { > > + srcPtr = dstPtr = ctx->Driver.MapBufferRange(ctx, 0, src->Size, > > + GL_MAP_READ_BIT | > > + GL_MAP_WRITE_BIT, src); > > + > > + if (!srcPtr) > > + return; > > + > > + srcPtr += readOffset; > > + dstPtr += writeOffset; > > + } else { > > + 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); > > + } > > > > /* Note: the src and dst regions will never overlap. Trying to do so > > * would generate GL_INVALID_VALUE earlier. > > So we have a test for the assertion in this comment? That's the only > case that concerns me in this code.
Piglit ARB_copy_buffer/overlap is quite thorough: for a buffer of size 6 (arbitrary small number), per usage, try every overlapping/non-overlapping copy, and make sure the right thing happens.
pgpyu1bgFVsky.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev