mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 19:58:09 +02:00
r600g: x/y coordinates must be divided by block dim in dma blit
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>
(cherry picked from commit 9974593dfb)
This commit is contained in:
parent
6a2df5a030
commit
f4cf23e350
2 changed files with 16 additions and 4 deletions
|
|
@ -3644,6 +3644,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;
|
||||
|
|
@ -3652,6 +3653,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;
|
||||
|
|
@ -3696,7 +3702,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;
|
||||
|
|
@ -3704,7 +3710,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;
|
||||
|
|
|
|||
|
|
@ -3110,6 +3110,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;
|
||||
|
|
@ -3118,6 +3119,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;
|
||||
|
|
@ -3150,7 +3156,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;
|
||||
|
|
@ -3162,7 +3168,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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue