From 18c7eafcdcf766d255c80631322c2a14368b1467 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 27 Jan 2025 10:11:17 -0800 Subject: [PATCH] radv: fix programming mip level for TILED_SUB_WINDOWS on GFX12 Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_sdma.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/amd/vulkan/radv_sdma.c b/src/amd/vulkan/radv_sdma.c index 3be6b5b061f..d1efdc2e68a 100644 --- a/src/amd/vulkan/radv_sdma.c +++ b/src/amd/vulkan/radv_sdma.c @@ -226,21 +226,18 @@ radv_sdma_get_tiled_info_dword(const struct radv_device *const device, const str const uint32_t bpe = radv_sdma_get_bpe(image, subresource.aspectMask); const uint32_t element_size = util_logbase2(bpe); const uint32_t swizzle_mode = surf->has_stencil ? surf->u.gfx9.zs.stencil_swizzle_mode : surf->u.gfx9.swizzle_mode; + const enum gfx9_resource_type dimension = radv_sdma_surface_resource_type(device, surf); uint32_t info = element_size | swizzle_mode << 3; const enum sdma_version ver = pdev->info.sdma_ip_version; + const uint32_t mip_max = MAX2(image->vk.mip_levels, 1); + const uint32_t mip_id = subresource.mipLevel; - if (ver < SDMA_7_0) { - const enum gfx9_resource_type dimension = radv_sdma_surface_resource_type(device, surf); - info |= dimension << 9; - } - - if (ver >= SDMA_5_0) { - const uint32_t mip_max = MAX2(image->vk.mip_levels, 1); - const uint32_t mip_id = subresource.mipLevel; - - return info | (mip_max - 1) << 16 | mip_id << 20; + if (ver >= SDMA_7_0) { + return info | (mip_max - 1) << 16 | mip_id << 24; + } else if (ver >= SDMA_5_0) { + return info | dimension << 9 | (mip_max - 1) << 16 | mip_id << 20; } else if (ver >= SDMA_4_0) { - return info | surf->u.gfx9.epitch << 16; + return info | dimension << 9 | surf->u.gfx9.epitch << 16; } else { unreachable("unsupported SDMA version"); }