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

Author: Jason Ekstrand <[email protected]>
Date:   Wed Jan 28 03:31:06 2015 -0800

intel/pixel_read: Properly flip the results for window system buffers

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88841

Reviewed-by: Chad Versace <[email protected]>

---

 src/mesa/drivers/dri/i965/intel_pixel_read.c |   15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/intel_pixel_read.c 
b/src/mesa/drivers/dri/i965/intel_pixel_read.c
index babf8ca..15f9e38 100644
--- a/src/mesa/drivers/dri/i965/intel_pixel_read.c
+++ b/src/mesa/drivers/dri/i965/intel_pixel_read.c
@@ -155,6 +155,21 @@ intel_readpixels_tiled_memcpy(struct gl_context * ctx,
 
    dst_pitch = _mesa_image_row_stride(pack, width, format, type);
 
+   /* For a window-system renderbuffer, the buffer is actually flipped
+    * vertically, so we need to handle that.  Since the detiling function
+    * can only really work in the forwards direction, we have to be a
+    * little creative.  First, we compute the Y-offset of the first row of
+    * the renderbuffer (in renderbuffer coordinates).  We then match that
+    * with the last row of the client's data.  Finally, we give
+    * tiled_to_linear a negative pitch so that it walks through the
+    * client's data backwards as it walks through the renderbufer forwards.
+    */
+   if (rb->Name == 0) {
+      yoffset = rb->Height - yoffset - height;
+      pixels += (ptrdiff_t) (height - 1) * dst_pitch;
+      dst_pitch = -dst_pitch;
+   }
+
    /* We postponed printing this message until having committed to executing
     * the function.
     */

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to