[Mesa-dev] [PATCH 2/2] gallium/util: add fast path for buffers in u_default_transfer_inline_write
Marek Olšák
maraeo at gmail.com
Sun Feb 26 10:17:06 PST 2012
---
src/gallium/auxiliary/util/u_transfer.c | 34 ++++++++++++++++++------------
1 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/src/gallium/auxiliary/util/u_transfer.c b/src/gallium/auxiliary/util/u_transfer.c
index 1fa8d94..f1c2a09 100644
--- a/src/gallium/auxiliary/util/u_transfer.c
+++ b/src/gallium/auxiliary/util/u_transfer.c
@@ -18,8 +18,6 @@ void u_default_transfer_inline_write( struct pipe_context *pipe,
{
struct pipe_transfer *transfer = NULL;
uint8_t *map = NULL;
- const uint8_t *src_data = data;
- unsigned i;
assert(!(usage & PIPE_TRANSFER_READ));
@@ -45,18 +43,26 @@ void u_default_transfer_inline_write( struct pipe_context *pipe,
if (map == NULL)
goto out;
- for (i = 0; i < box->depth; i++) {
- util_copy_rect(map,
- resource->format,
- transfer->stride, /* bytes */
- 0, 0,
- box->width,
- box->height,
- src_data,
- stride, /* bytes */
- 0, 0);
- map += transfer->layer_stride;
- src_data += layer_stride;
+ if (resource->target == PIPE_BUFFER) {
+ memcpy(map, data, box->width);
+ }
+ else {
+ const uint8_t *src_data = data;
+ unsigned i;
+
+ for (i = 0; i < box->depth; i++) {
+ util_copy_rect(map,
+ resource->format,
+ transfer->stride, /* bytes */
+ 0, 0,
+ box->width,
+ box->height,
+ src_data,
+ stride, /* bytes */
+ 0, 0);
+ map += transfer->layer_stride;
+ src_data += layer_stride;
+ }
}
out:
--
1.7.5.4
More information about the mesa-dev
mailing list