From 9e56c7bd8f4c5ae4fab743751db0c476302e13f4 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Sat, 11 Apr 2026 14:02:11 +0200 Subject: [PATCH] tu: Support transfer commands for R64 formats CTS tests that require transfer commands: dEQP-VK.robustness.*r64* dEQP-VK.api.image_clearing.*.r64* dEQP-VK.image.extend_operands_spirv1p4.r64_* dEQP-VK.image.nontemporal_operand.r64_* dEQP-VK.image.queue_transfer.*.r64_ Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_clear_blit.cc | 7 +++++++ src/freedreno/vulkan/tu_formats.cc | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/freedreno/vulkan/tu_clear_blit.cc b/src/freedreno/vulkan/tu_clear_blit.cc index 05b7cda3abe..81f4d21b3e9 100644 --- a/src/freedreno/vulkan/tu_clear_blit.cc +++ b/src/freedreno/vulkan/tu_clear_blit.cc @@ -2005,6 +2005,10 @@ copy_format(VkFormat vk_format, VkImageAspectFlags aspect_mask) vk_format_get_ycbcr_info(vk_format)) return tu_aspects_to_plane(vk_format, aspect_mask); + if (vk_format == VK_FORMAT_R64_SINT || vk_format == VK_FORMAT_R64_UINT) { + return PIPE_FORMAT_R32G32_UINT; + } + /* Otherwise, simply return the pipe_format */ return format; } @@ -3964,6 +3968,9 @@ clear_image_event_blit(struct tu_cmd_buffer *cmd, } enum pipe_format format = vk_format_to_pipe_format(vk_format); + if (format == PIPE_FORMAT_R64_SINT || format == PIPE_FORMAT_R64_UINT) { + format = PIPE_FORMAT_R32G32_UINT; + } if (image->layout[0].depth0 > 1) { assert(layer_count == 1); diff --git a/src/freedreno/vulkan/tu_formats.cc b/src/freedreno/vulkan/tu_formats.cc index 61b276a5312..6b92fd81866 100644 --- a/src/freedreno/vulkan/tu_formats.cc +++ b/src/freedreno/vulkan/tu_formats.cc @@ -144,12 +144,16 @@ tu_physical_device_get_format_properties( physical_device->info->props.has_64b_image_atomics) { assert(!(supported_vtx || supported_color || supported_tex)); optimal = VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT | - VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT; + VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT | + VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | + VK_FORMAT_FEATURE_TRANSFER_DST_BIT; out_properties->linearTilingFeatures = optimal; out_properties->optimalTilingFeatures = optimal; out_properties->bufferFeatures = VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT | - VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT; + VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | + VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | + VK_FORMAT_FEATURE_TRANSFER_DST_BIT; return; }