Note: this is a candidate for the 9.1 branch. Reviewed-by: Marek Olšák <maraeo@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>tags/mesa-9.2-rc1
@@ -3733,6 +3733,7 @@ boolean evergreen_dma_blit(struct pipe_context *ctx, | |||
struct r600_texture *rdst = (struct r600_texture*)dst; | |||
unsigned dst_pitch, src_pitch, bpp, dst_mode, src_mode, copy_height; | |||
unsigned src_w, dst_w; | |||
unsigned src_x, src_y; | |||
if (rctx->rings.dma.cs == NULL) { | |||
return FALSE; | |||
@@ -3741,6 +3742,11 @@ boolean evergreen_dma_blit(struct pipe_context *ctx, | |||
return FALSE; | |||
} | |||
src_x = util_format_get_nblocksx(src->format, src_box->x); | |||
dst_x = util_format_get_nblocksx(src->format, dst_x); | |||
src_y = util_format_get_nblocksy(src->format, src_box->y); | |||
dst_y = util_format_get_nblocksy(src->format, dst_y); | |||
bpp = rdst->surface.bpe; | |||
dst_pitch = rdst->surface.level[dst_level].pitch_bytes; | |||
src_pitch = rsrc->surface.level[src_level].pitch_bytes; | |||
@@ -3785,7 +3791,7 @@ boolean evergreen_dma_blit(struct pipe_context *ctx, | |||
*/ | |||
src_offset= rsrc->surface.level[src_level].offset; | |||
src_offset += rsrc->surface.level[src_level].slice_size * src_box->z; | |||
src_offset += src_box->y * src_pitch + src_box->x * bpp; | |||
src_offset += src_y * src_pitch + src_x * bpp; | |||
dst_offset = rdst->surface.level[dst_level].offset; | |||
dst_offset += rdst->surface.level[dst_level].slice_size * dst_z; | |||
dst_offset += dst_y * dst_pitch + dst_x * bpp; | |||
@@ -3793,7 +3799,7 @@ boolean evergreen_dma_blit(struct pipe_context *ctx, | |||
src_box->height * src_pitch); | |||
} else { | |||
evergreen_dma_copy_tile(rctx, dst, dst_level, dst_x, dst_y, dst_z, | |||
src, src_level, src_box->x, src_box->y, src_box->z, | |||
src, src_level, src_x, src_y, src_box->z, | |||
copy_height, dst_pitch, bpp); | |||
} | |||
return TRUE; |
@@ -3132,6 +3132,7 @@ boolean r600_dma_blit(struct pipe_context *ctx, | |||
struct r600_texture *rdst = (struct r600_texture*)dst; | |||
unsigned dst_pitch, src_pitch, bpp, dst_mode, src_mode, copy_height; | |||
unsigned src_w, dst_w; | |||
unsigned src_x, src_y; | |||
if (rctx->rings.dma.cs == NULL) { | |||
return FALSE; | |||
@@ -3140,6 +3141,11 @@ boolean r600_dma_blit(struct pipe_context *ctx, | |||
return FALSE; | |||
} | |||
src_x = util_format_get_nblocksx(src->format, src_box->x); | |||
dst_x = util_format_get_nblocksx(src->format, dst_x); | |||
src_y = util_format_get_nblocksy(src->format, src_box->y); | |||
dst_y = util_format_get_nblocksy(src->format, dst_y); | |||
bpp = rdst->surface.bpe; | |||
dst_pitch = rdst->surface.level[dst_level].pitch_bytes; | |||
src_pitch = rsrc->surface.level[src_level].pitch_bytes; | |||
@@ -3172,7 +3178,7 @@ boolean r600_dma_blit(struct pipe_context *ctx, | |||
*/ | |||
src_offset= rsrc->surface.level[src_level].offset; | |||
src_offset += rsrc->surface.level[src_level].slice_size * src_box->z; | |||
src_offset += src_box->y * src_pitch + src_box->x * bpp; | |||
src_offset += src_y * src_pitch + src_x * bpp; | |||
dst_offset = rdst->surface.level[dst_level].offset; | |||
dst_offset += rdst->surface.level[dst_level].slice_size * dst_z; | |||
dst_offset += dst_y * dst_pitch + dst_x * bpp; | |||
@@ -3184,7 +3190,7 @@ boolean r600_dma_blit(struct pipe_context *ctx, | |||
r600_dma_copy(rctx, dst, src, dst_offset, src_offset, size); | |||
} else { | |||
return r600_dma_copy_tile(rctx, dst, dst_level, dst_x, dst_y, dst_z, | |||
src, src_level, src_box->x, src_box->y, src_box->z, | |||
src, src_level, src_x, src_y, src_box->z, | |||
copy_height, dst_pitch, bpp); | |||
} | |||
return TRUE; |