radv: do not fallback to compute for image->buffer copies with emulated formats

This shouldn't be necessary because SDMA can detile the image just fine,
only buffer->image and image->image need to fallback.

It just works on GFX10+ because RADV is using NBC views, and I think
it works on eg. VEGA10 just by luck due to different
swizzles/alignments.

Fixes: 3d803d7a2e ("radv: Use compute copy for emulated formats")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
Samuel Pitoiset 2026-05-06 11:03:16 +02:00
parent f267e7797f
commit cbc2d53a8e
4 changed files with 5 additions and 70 deletions

View file

@ -1,68 +1,3 @@
# RADV_EXPERIMENTAL=transfer_queue+vk_require_etc2=true regressions since 3d803d7a2e0e7d46c04381896168c344d59d88e4
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.core.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_snorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11g11_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a1_unorm_block_64x192_5_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_buffer_transfer_queue.2d_images.mip_copies_etc2_r8g8b8a8_unorm_block_64x192_5_layers,Fail
dEQP-VK.wsi.direct.colorspace.basic,Fail
dEQP-VK.wsi.direct.colorspace.hdr,Fail
dEQP-VK.wsi.direct.present_timing.time_domain.calibration.present_stage_local,Fail

View file

@ -88,7 +88,7 @@ transfer_copy_memory_image(struct radv_cmd_buffer *cmd_buffer, VkAddressCopyFlag
const struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
struct radv_cmd_stream *cs = cmd_buffer->cs;
if (!radv_sdma_supports_image(device, image)) {
if (!radv_sdma_supports_image(device, image, to_image)) {
if (!radv_gang_init(cmd_buffer))
return;
@ -598,7 +598,7 @@ transfer_copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_i
struct radv_cmd_stream *cs = cmd_buffer->cs;
unsigned int dst_aspect_mask_remaining = region->dstSubresource.aspectMask;
if (!radv_sdma_supports_image(device, src_image) || !radv_sdma_supports_image(device, dst_image)) {
if (!radv_sdma_supports_image(device, src_image, false) || !radv_sdma_supports_image(device, dst_image, true)) {
if (!radv_gang_init(cmd_buffer))
return;

View file

@ -524,12 +524,12 @@ radv_sdma_copy_image_t2t_scanline(const struct radv_device *device, struct radv_
}
bool
radv_sdma_supports_image(const struct radv_device *device, const struct radv_image *image)
radv_sdma_supports_image(const struct radv_device *device, const struct radv_image *image, bool to_image)
{
const struct radv_physical_device *pdev = radv_device_physical(device);
if (radv_is_format_emulated(pdev, image->vk.format))
return false;
return to_image ? false : true;
if (!pdev->info.sdma_supports_sparse &&
(image->vk.create_flags & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT))

View file

@ -68,7 +68,7 @@ void radv_sdma_copy_memory(const struct radv_device *device, struct radv_cmd_str
uint64_t dst_va, uint64_t size, bool tmz);
void radv_sdma_fill_memory(const struct radv_device *device, struct radv_cmd_stream *cs, const uint64_t va,
const uint64_t size, const uint32_t value);
bool radv_sdma_supports_image(const struct radv_device *device, const struct radv_image *image);
bool radv_sdma_supports_image(const struct radv_device *device, const struct radv_image *image, bool to_image);
void radv_sdma_emit_nop(const struct radv_device *device, struct radv_cmd_stream *cs);