st/mesa: implement CopyBufferSubData using resource_copy_region
authorMarek Olšák <maraeo@gmail.com>
Thu, 21 Apr 2011 10:54:56 +0000 (12:54 +0200)
committerMarek Olšák <maraeo@gmail.com>
Thu, 21 Apr 2011 13:51:18 +0000 (15:51 +0200)
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
src/mesa/state_tracker/st_cb_bufferobjects.c

index b9b606d539c4a39d384ff08b41b7967ebc2b4632..1e489b29d931fc186ecf96d1e80192c3adc2bd56 100644 (file)
@@ -408,9 +408,7 @@ st_copy_buffer_subdata(struct gl_context *ctx,
    struct pipe_context *pipe = st_context(ctx)->pipe;
    struct st_buffer_object *srcObj = st_buffer_object(src);
    struct st_buffer_object *dstObj = st_buffer_object(dst);
-   struct pipe_transfer *src_transfer;
-   struct pipe_transfer *dst_transfer;
-   ubyte *srcPtr, *dstPtr;
+   struct pipe_box box;
 
    if(!size)
       return;
@@ -419,23 +417,10 @@ st_copy_buffer_subdata(struct gl_context *ctx,
    assert(!src->Pointer);
    assert(!dst->Pointer);
 
-   srcPtr = (ubyte *) pipe_buffer_map_range(pipe,
-                                            srcObj->buffer,
-                                            readOffset, size,
-                                            PIPE_TRANSFER_READ,
-                                           &src_transfer);
+   u_box_1d(readOffset, size, &box);
 
-   dstPtr = (ubyte *) pipe_buffer_map_range(pipe,
-                                            dstObj->buffer,
-                                            writeOffset, size,
-                                            PIPE_TRANSFER_WRITE,
-                                           &dst_transfer);
-
-   if (srcPtr && dstPtr)
-      memcpy(dstPtr + writeOffset, srcPtr + readOffset, size);
-
-   pipe_buffer_unmap(pipe, src_transfer);
-   pipe_buffer_unmap(pipe, dst_transfer);
+   pipe->resource_copy_region(pipe, dstObj->buffer, 0, writeOffset, 0, 0,
+                              srcObj->buffer, 0, &box);
 }