mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 18:00:24 +01:00
ac/sdma: fix src/dst pitch for sdma < 4
Fixes DRM_PRIME with AMD_DEBUG=notiling.
Fixes: 5f8fa6ae03 ("ac,radv,radeonsi: add ac_emit_sdma_copy_linear_sub_window()")
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39019>
This commit is contained in:
parent
2f347b5725
commit
bfa8dcf3b3
1 changed files with 6 additions and 5 deletions
|
|
@ -151,12 +151,13 @@ ac_emit_sdma_copy_linear_sub_window(struct ac_cmdbuf *cs, enum sdma_version sdma
|
|||
/* This packet is the same since SDMA v2.4, haven't bothered to check older versions.
|
||||
* The main difference is the bitfield sizes:
|
||||
*
|
||||
* v2.4 - src/dst_pitch: 14 bits, rect_z: 11 bits
|
||||
* v4.0 - src/dst_pitch: 19 bits, rect_z: 11 bits
|
||||
* v5.0 - src/dst_pitch: 19 bits, rect_z: 13 bits
|
||||
* v2.4 - src/dst_pitch: 14 bits (shift: 16), rect_z: 11 bits
|
||||
* v4.0 - src/dst_pitch: 19 bits (shift: 13), rect_z: 11 bits
|
||||
* v5.0 - src/dst_pitch: 19 bits (shift: 13), rect_z: 13 bits
|
||||
*
|
||||
* We currently use the smallest limits (from SDMA v2.4).
|
||||
*/
|
||||
uint32_t pitch_shift = (sdma_ip_version >= SDMA_7_0 || sdma_ip_version < SDMA_4_0) ? 16 : 13;
|
||||
assert(src->bpp == dst->bpp);
|
||||
assert(util_is_power_of_two_nonzero(src->bpp));
|
||||
ac_sdma_check_pitches(src->pitch, src->slice_pitch, src->bpp, false);
|
||||
|
|
@ -168,12 +169,12 @@ ac_emit_sdma_copy_linear_sub_window(struct ac_cmdbuf *cs, enum sdma_version sdma
|
|||
ac_cmdbuf_emit(src->va);
|
||||
ac_cmdbuf_emit(src->va >> 32);
|
||||
ac_cmdbuf_emit(src->offset.x | src->offset.y << 16);
|
||||
ac_cmdbuf_emit(src->offset.z | (src->pitch - 1) << (sdma_ip_version >= SDMA_7_0 ? 16 : 13));
|
||||
ac_cmdbuf_emit(src->offset.z | (src->pitch - 1) << pitch_shift);
|
||||
ac_cmdbuf_emit(src->slice_pitch - 1);
|
||||
ac_cmdbuf_emit(dst->va);
|
||||
ac_cmdbuf_emit(dst->va >> 32);
|
||||
ac_cmdbuf_emit(dst->offset.x | dst->offset.y << 16);
|
||||
ac_cmdbuf_emit(dst->offset.z | (dst->pitch - 1) << (sdma_ip_version >= SDMA_7_0 ? 16 : 13));
|
||||
ac_cmdbuf_emit(dst->offset.z | (dst->pitch - 1) << pitch_shift);
|
||||
ac_cmdbuf_emit(dst->slice_pitch - 1);
|
||||
if (sdma_ip_version == SDMA_2_0) {
|
||||
ac_cmdbuf_emit(width | (height << 16));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue