diff --git a/.pick_status.json b/.pick_status.json index bd00c0b978a..414557989a9 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4354,7 +4354,7 @@ "description": "radv: fix copying images with different swizzle modes on SDMA7", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/radv_sdma.c b/src/amd/vulkan/radv_sdma.c index 6cc0426087b..8ee12b4db78 100644 --- a/src/amd/vulkan/radv_sdma.c +++ b/src/amd/vulkan/radv_sdma.c @@ -610,12 +610,6 @@ radv_sdma_use_t2t_scanline_copy(const struct radv_device *device, const struct r return true; } - /* The two images can have a different block size, - * but must have the same swizzle mode. - */ - if (src->micro_tile_mode != dst->micro_tile_mode) - return true; - /* The T2T subwindow copy packet only has fields for one metadata configuration. * It can either compress or decompress, or copy uncompressed images, but it * can't copy from a compressed image to another. @@ -623,6 +617,16 @@ radv_sdma_use_t2t_scanline_copy(const struct radv_device *device, const struct r if (src->is_compressed && dst->is_compressed) return true; + if (ver >= SDMA_7_0) { + /* No support for tiling format transformation at all. */ + if (src->surf->u.gfx9.swizzle_mode != dst->surf->u.gfx9.swizzle_mode) + return true; + } else { + /* The two images can have a different block size, but must have the same swizzle mode. */ + if (src->micro_tile_mode != dst->micro_tile_mode) + return true; + } + const bool needs_3d_alignment = src->is_3d && (src->micro_tile_mode == RADEON_MICRO_MODE_DISPLAY || src->micro_tile_mode == RADEON_MICRO_MODE_STANDARD); const unsigned log2bpp = util_logbase2(src->bpp);