Mesa (master): gallium/util: add fast path for buffers in u_default_transfer_inline_write

Marek Olšák mareko at kemper.freedesktop.org
Mon Feb 27 15:26:29 UTC 2012


Module: Mesa
Branch: master
Commit: 335facb502199353e6f73c8ba20a2bb4ff7bf336
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=335facb502199353e6f73c8ba20a2bb4ff7bf336

Author: Marek Olšák <maraeo at gmail.com>
Date:   Sun Feb 26 18:56:51 2012 +0100

gallium/util: add fast path for buffers in u_default_transfer_inline_write

v2: fix indentation, add assertions

---

 src/gallium/auxiliary/util/u_transfer.c |   37 +++++++++++++++++++-----------
 1 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_transfer.c b/src/gallium/auxiliary/util/u_transfer.c
index 1fa8d94..673a984 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,29 @@ 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) {
+      assert(box->height == 1);
+      assert(box->depth == 1);
+
+      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:




More information about the mesa-commit mailing list