summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/softpipe/sp_surface.c
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2008-06-23 08:44:30 -0600
committerBrian Paul <[email protected]>2008-06-23 08:44:30 -0600
commit92d48a4cb9481adc7abd7cdf9550fbf5a9c9613d (patch)
tree01ea337560c186227adf53544e295b6abf19ce6a /src/gallium/drivers/softpipe/sp_surface.c
parent016dbb0cf395702cfad046f827e3cc4541ae5818 (diff)
gallium: fix bad srcy coord if do_flip
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_surface.c')
-rw-r--r--src/gallium/drivers/softpipe/sp_surface.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/gallium/drivers/softpipe/sp_surface.c b/src/gallium/drivers/softpipe/sp_surface.c
index 29a1e92416e..acedebfcc58 100644
--- a/src/gallium/drivers/softpipe/sp_surface.c
+++ b/src/gallium/drivers/softpipe/sp_surface.c
@@ -35,7 +35,11 @@
-/* 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
@@ -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);