From 6094619c0297180db218e5b4e45fc07aff116413 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 30 Jan 2015 18:47:59 -0800 Subject: [PATCH] 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 --- src/mesa/drivers/dri/i965/intel_pixel_read.c | 7 +++++++ 1 file changed, 7 insertions(+) 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; -- 2.30.2