summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/softpipe/sp_surface.c
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-06-25 04:05:11 +1000
committerBen Skeggs <skeggsb@gmail.com>2008-06-25 04:05:11 +1000
commitb40ed6a0b54d1ba74799aeb3f529c4d298625aa1 (patch)
treeda1ae04dcd8c1db1294f3caab9ba28760ccb3f8e /src/gallium/drivers/softpipe/sp_surface.c
parent95fe122f67024f55d555e2816a95409a8b53a49e (diff)
parent0561a293b6596641c0200df7e6580599ecb8b111 (diff)
Merge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_surface.c')
-rw-r--r--src/gallium/drivers/softpipe/sp_surface.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/gallium/drivers/softpipe/sp_surface.c b/src/gallium/drivers/softpipe/sp_surface.c
index 29a1e92416..9fd48aeccc 100644
--- a/src/gallium/drivers/softpipe/sp_surface.c
+++ b/src/gallium/drivers/softpipe/sp_surface.c
@@ -35,12 +35,16 @@
-/* Assumes all values are within bounds -- no checking at this level -
+/**
+ * Copy a rectangular region from one surface to another.
+ * Surfaces must have same bpp.
+ *
+ * Assumes all values are within bounds -- no checking at this level -
* do it higher up if required.
*/
static void
sp_surface_copy(struct pipe_context *pipe,
- unsigned do_flip,
+ boolean do_flip,
struct pipe_surface *dst,
unsigned dstx, unsigned dsty,
struct pipe_surface *src,
@@ -54,9 +58,11 @@ sp_surface_copy(struct pipe_context *pipe,
src,
PIPE_BUFFER_USAGE_CPU_READ );
- assert( dst->cpp == src->cpp );
- assert(src_map && dst_map);
+ assert(dst->cpp == src->cpp);
+ assert(src_map);
+ assert(dst_map);
+ /* If do_flip, invert src_y position and pass negative src stride */
pipe_copy_rect(dst_map,
dst->cpp,
dst->pitch,
@@ -64,7 +70,7 @@ sp_surface_copy(struct pipe_context *pipe,
width, height,
src_map,
do_flip ? -(int) src->pitch : src->pitch,
- srcx, do_flip ? 1 - srcy - height : srcy);
+ srcx, do_flip ? src->height - 1 - srcy : srcy);
pipe->screen->surface_unmap(pipe->screen, src);
pipe->screen->surface_unmap(pipe->screen, dst);