[Mesa-dev] [PATCH 3/4] radeonsi: Catch more cases that can't be handled by si_dma_copy_buffer/tile

Michel Dänzer michel at daenzer.net
Mon Sep 29 20:58:45 PDT 2014


From: Michel Dänzer <michel.daenzer at amd.com>

Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/gallium/drivers/radeonsi/si_dma.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_dma.c b/src/gallium/drivers/radeonsi/si_dma.c
index ff64722..643ce3f 100644
--- a/src/gallium/drivers/radeonsi/si_dma.c
+++ b/src/gallium/drivers/radeonsi/si_dma.c
@@ -251,7 +251,9 @@ void si_dma_copy(struct pipe_context *ctx,
 	}
 
 	if (src->format != dst->format || src_box->depth > 1 ||
-	    rdst->dirty_level_mask != 0) {
+	    rdst->dirty_level_mask != 0 ||
+	    rdst->cmask.size || rdst->fmask.size ||
+	    rsrc->cmask.size || rsrc->fmask.size) {
 		goto fallback;
 	}
 
@@ -277,14 +279,20 @@ void si_dma_copy(struct pipe_context *ctx,
 	src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
 	dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
 
-	if (src_pitch != dst_pitch || src_box->x || dst_x || src_w != dst_w) {
+	if (src_pitch != dst_pitch || src_box->x || dst_x || src_w != dst_w ||
+	    src_box->width != src_w ||
+	    src_box->height != rsrc->surface.level[src_level].npix_y ||
+	    src_box->height != rdst->surface.level[dst_level].npix_y ||
+	    rsrc->surface.level[src_level].nblk_y !=
+	    rdst->surface.level[dst_level].nblk_y) {
 		/* FIXME si can do partial blit */
 		goto fallback;
 	}
 	/* the x test here are currently useless (because we don't support partial blit)
 	 * but keep them around so we don't forget about those
 	 */
-	if ((src_pitch % 8) || (src_box->x % 8) || (dst_x % 8) || (src_box->y % 8) || (dst_y % 8)) {
+	if ((src_pitch % 8) || (src_box->x % 8) || (dst_x % 8) ||
+	    (src_box->y % 8) || (dst_y % 8) || (src_box->height % 8)) {
 		goto fallback;
 	}
 
-- 
2.1.1



More information about the mesa-dev mailing list