summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2015-01-30 18:47:59 -0800
committerJason Ekstrand <[email protected]>2015-01-31 08:54:32 -0800
commit6094619c0297180db218e5b4e45fc07aff116413 (patch)
tree06175bae3d600c28a3aeeffee5fd99e9eb90f5f5
parent11f5d8a5d4fbb861ec161f68593e429cbd65d1cd (diff)
i965/pixel_read: Don't try to do a tiled_memcpy from a multisampled buffer
The GL spec guarantees that glGetTexImage will never get a multisampled texture, but this is not true for glReadPixels. If we get a multisampled buffer, we have to do a multisample resolve on it before we can pull the data down for the user. Since this isn't practical to handle in tiled_memcpy, we just fall back to the other paths that can handle this. Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/intel_pixel_read.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_pixel_read.c b/src/mesa/drivers/dri/i965/intel_pixel_read.c
index 15f9e38d2c0..f3ab05ccbb8 100644
--- a/src/mesa/drivers/dri/i965/intel_pixel_read.c
+++ b/src/mesa/drivers/dri/i965/intel_pixel_read.c
@@ -125,6 +125,13 @@ intel_readpixels_tiled_memcpy(struct gl_context * ctx,
yoffset += irb->mt->level[level].level_y;
}
+ /* It is possible that the renderbuffer (or underlying texture) is
+ * multisampled. Since ReadPixels from a multisampled buffer requires a
+ * multisample resolve, we can't handle this here
+ */
+ if (rb->NumSamples > 1)
+ return false;
+
if (!intel_get_memcpy(rb->Format, format, type, &mem_copy, &cpp))
return false;