From f4597930effd81cde962888c11e300ecb2300aaf Mon Sep 17 00:00:00 2001 From: Autumn Ashton Date: Fri, 22 Aug 2025 20:57:42 +0100 Subject: [PATCH] radv: Support VK_IMAGE_TILING_OPTIMAL for quantization maps Saw this when implementing something else, that I could just add the handling here to radv_choose_tiling in order to expose OPTIMAL. Signed-off-by: Autumn Ashton Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_formats.c | 4 ++++ src/amd/vulkan/radv_image.c | 3 +++ src/amd/vulkan/radv_video.c | 14 +++++--------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index d1874e59113..ef48a5bf878 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -826,6 +826,10 @@ radv_check_modifier_support(struct radv_physical_device *pdev, const VkPhysicalD return VK_ERROR_FORMAT_NOT_SUPPORTED; } + /* QP map needs linear. */ + if (info->usage & VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR && modifier != DRM_FORMAT_MOD_LINEAR) + return VK_ERROR_FORMAT_NOT_SUPPORTED; + /* We can expand this as needed and implemented but there is not much demand * for more. * Video can't support array layers with swizzle modes that use slice index diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 092b06040b8..bbae20f278e 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -52,6 +52,9 @@ radv_choose_tiling(struct radv_device *device, const VkImageCreateInfo *pCreateI pCreateInfo->usage & (VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR)) return RADEON_SURF_MODE_LINEAR_ALIGNED; + if (pCreateInfo->usage & VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR) + return RADEON_SURF_MODE_LINEAR_ALIGNED; + /* MSAA resources must be 2D tiled. */ if (pCreateInfo->samples > 1) return RADEON_SURF_MODE_2D; diff --git a/src/amd/vulkan/radv_video.c b/src/amd/vulkan/radv_video.c index 42961df1ac3..2c0cbf3d54d 100644 --- a/src/amd/vulkan/radv_video.c +++ b/src/amd/vulkan/radv_video.c @@ -1289,17 +1289,13 @@ radv_GetPhysicalDeviceVideoFormatPropertiesKHR(VkPhysicalDevice physicalDevice, VkImageTiling tiling[3]; uint32_t num_tiling = 0; - if (qp_map) { + tiling[num_tiling++] = VK_IMAGE_TILING_OPTIMAL; + + if ((src_dst || qp_map) && !dpb) tiling[num_tiling++] = VK_IMAGE_TILING_LINEAR; - } else { - tiling[num_tiling++] = VK_IMAGE_TILING_OPTIMAL; - if (src_dst && !dpb) - tiling[num_tiling++] = VK_IMAGE_TILING_LINEAR; - - if (src_dst && pdev->info.gfx_level >= GFX9) - tiling[num_tiling++] = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT; - } + if ((src_dst || qp_map) && pdev->info.gfx_level >= GFX9) + tiling[num_tiling++] = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT; VK_OUTARRAY_MAKE_TYPED(VkVideoFormatPropertiesKHR, out, pVideoFormatProperties, pVideoFormatPropertyCount);