radv/sdma: fix unaligned 96-bits copies on GFX9

On SDMA4, when the pitch isn't aligned, the width needs to be scaled
by 3 for 96-bits formats.

On SDMA5+, the pitch is aligned and the driver doesn't need to fallback
to unaligned copies.

CC: mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36067>
This commit is contained in:
Samuel Pitoiset 2025-07-11 10:50:14 +02:00 committed by Marge Bot
parent 36172c41dc
commit a51afbaff8
3 changed files with 1 additions and 11 deletions

View file

@ -12,8 +12,3 @@ dEQP-VK.api.copy_and_blit.dedicated_allocation.resolve_image.whole_copy_before_r
# CTS bug
dEQP-VK.reconvergence.maximal.fragment.terminate_invocation,Fail
# Likely a RADV bug on transfer queue
dEQP-VK.api.copy_and_blit.copy_commands2.buffer_to_image_transfer_queue.2d_images.whole_unaligned_rgb32_sfloat_linear,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.whole_unaligned_r32g32b32_sfloat_linear,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.whole_unaligned_r32g32b32_uint_linear,Fail

View file

@ -18,8 +18,3 @@ dEQP-VK.video.synchronization2.decode_h265.basic.event.device_set_reset,Fail
# CTS bug
dEQP-VK.reconvergence.maximal.fragment.terminate_invocation,Fail
# Likely a RADV bug on transfer queue
dEQP-VK.api.copy_and_blit.copy_commands2.buffer_to_image_transfer_queue.2d_images.whole_unaligned_rgb32_sfloat_linear,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.whole_unaligned_r32g32b32_sfloat_linear,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.whole_unaligned_r32g32b32_uint_linear,Fail

View file

@ -131,7 +131,7 @@ static struct radv_sdma_chunked_copy_info
radv_sdma_get_chunked_copy_info(const struct radv_device *const device, const struct radv_sdma_surf *const img,
const VkExtent3D extent)
{
const unsigned extent_horizontal_blocks = DIV_ROUND_UP(extent.width, img->blk_w);
const unsigned extent_horizontal_blocks = DIV_ROUND_UP(extent.width * img->texel_scale, img->blk_w);
const unsigned extent_vertical_blocks = DIV_ROUND_UP(extent.height, img->blk_h);
const unsigned aligned_row_pitch = ALIGN(extent_horizontal_blocks, 4);
const unsigned aligned_row_bytes = aligned_row_pitch * img->bpp;