Mesa (gallium-resources): util: map_range and flush_range have offsets relative to start of buffer

Keith Whitwell keithw at kemper.freedesktop.org
Wed Apr 7 17:00:36 UTC 2010


Module: Mesa
Branch: gallium-resources
Commit: 3f5363d4dc9d7ad48467ae82d58d5f3d9bd10698
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3f5363d4dc9d7ad48467ae82d58d5f3d9bd10698

Author: Keith Whitwell <keithw at vmware.com>
Date:   Wed Apr  7 17:26:52 2010 +0100

util: map_range and flush_range have offsets relative to start of buffer

---

 src/gallium/auxiliary/util/u_inlines.h |   23 ++++++++++++++++++++---
 1 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h
index 0ac8e70..66a8bf3 100644
--- a/src/gallium/auxiliary/util/u_inlines.h
+++ b/src/gallium/auxiliary/util/u_inlines.h
@@ -161,6 +161,7 @@ pipe_buffer_map_range(struct pipe_context *pipe,
 		      struct pipe_transfer **transfer)
 {
    struct pipe_box box;
+   char *map;
 
    assert(offset < buffer->width0);
    assert(offset + length <= buffer->width0);
@@ -177,7 +178,14 @@ pipe_buffer_map_range(struct pipe_context *pipe,
    if (*transfer == NULL)
       return NULL;
 
-   return pipe->transfer_map( pipe, *transfer );
+   map = pipe->transfer_map( pipe, *transfer );
+   if (map == NULL)
+      return NULL;
+
+   /* Match old screen->buffer_map_range() behaviour, return pointer
+    * to where the beginning of the buffer would be:
+    */
+   return (void *)(map - offset);
 }
 
 
@@ -209,10 +217,19 @@ pipe_buffer_flush_mapped_range(struct pipe_context *pipe,
                                unsigned length)
 {
    struct pipe_box box;
+   int transfer_offset;
 
    assert(length);
-
-   u_box_1d(offset, length, &box);
+   assert(transfer->box.x <= offset);
+   assert(transfer->box.x + transfer->box.width <= offset + length);
+
+   /* Match old screen->buffer_flush_mapped_range() behaviour, where
+    * offset parameter is relative to the start of the buffer, not the
+    * mapped range.
+    */
+   transfer_offset = offset - transfer->box.x;
+   
+   u_box_1d(transfer_offset, length, &box);
 
    pipe->transfer_flush_region(pipe, transfer, &box);
 }




More information about the mesa-commit mailing list