[Mesa-dev] [PATCH 06/12] r600g: don't read back the MSAA depth buffer if the read flag is not set

Marek Olšák maraeo at gmail.com
Sun Jun 30 18:53:47 PDT 2013


---
 src/gallium/drivers/r600/r600_texture.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index 5ad8c65..36cca17 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -865,24 +865,24 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
 			 *
 			 * Only the region being mapped is transfered.
 			 */
-			struct pipe_resource *temp;
 			struct pipe_resource resource;
 
 			r600_init_temp_resource_from_box(&resource, texture, box, level, 0);
-			temp = ctx->screen->resource_create(ctx->screen, &resource);
 
-			r600_copy_region_with_blit(ctx, temp, 0, 0, 0, 0, texture, level, box);
-
-			if (!r600_init_flushed_depth_texture(ctx, temp, &staging_depth)) {
+			if (!r600_init_flushed_depth_texture(ctx, &resource, &staging_depth)) {
 				R600_ERR("failed to create temporary texture to hold untiled copy\n");
 				FREE(trans);
 				return NULL;
 			}
 
-			r600_blit_decompress_depth(ctx, (struct r600_texture*)temp, staging_depth,
-						   0, 0, 0, box->depth, 0, 0);
+			if (usage & PIPE_TRANSFER_READ) {
+				struct pipe_resource *temp = ctx->screen->resource_create(ctx->screen, &resource);
 
-	                pipe_resource_reference((struct pipe_resource**)&temp, NULL);
+				r600_copy_region_with_blit(ctx, temp, 0, 0, 0, 0, texture, level, box);
+				r600_blit_decompress_depth(ctx, (struct r600_texture*)temp, staging_depth,
+							   0, 0, 0, box->depth, 0, 0);
+				pipe_resource_reference((struct pipe_resource**)&temp, NULL);
+			}
 		}
 		else {
 			/* XXX: only readback the rectangle which is being mapped? */
-- 
1.8.1.2



More information about the mesa-dev mailing list