From cf9b0dd5896676b831f9e842555dcdd534f109ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Briano?= Date: Wed, 30 Apr 2025 15:11:32 -0700 Subject: [PATCH] anv, hasvk: ignore QFOT if both src and dst queue families are equal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: José Roberto de Souza Part-of: --- src/intel/vulkan/genX_cmd_buffer.c | 10 ++++++++++ src/intel/vulkan_hasvk/genX_cmd_buffer.c | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 81ef4cd1518..517770e97ac 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -1078,6 +1078,16 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer, ? isl_drm_modifier_get_info(image->vk.drm_format_mod) : NULL; + /** + * Vulkan 1.4.313, 7.7.4. Queue Family Ownership Transfer: + * + * If the values of srcQueueFamilyIndex and dstQueueFamilyIndex are equal, + * no ownership transfer is performed, and the barrier operates as if they + * were both set to VK_QUEUE_FAMILY_IGNORED. + */ + if (src_queue_family == dst_queue_family) + src_queue_family = dst_queue_family = VK_QUEUE_FAMILY_IGNORED; + const bool src_queue_external = queue_family_is_external(src_queue_family); const bool dst_queue_external = queue_family_is_external(dst_queue_family); diff --git a/src/intel/vulkan_hasvk/genX_cmd_buffer.c b/src/intel/vulkan_hasvk/genX_cmd_buffer.c index 7c95cd7f68b..04701da9169 100644 --- a/src/intel/vulkan_hasvk/genX_cmd_buffer.c +++ b/src/intel/vulkan_hasvk/genX_cmd_buffer.c @@ -928,6 +928,16 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer, ? isl_drm_modifier_get_info(image->vk.drm_format_mod) : NULL; + /** + * Vulkan 1.4.313, 7.7.4. Queue Family Ownership Transfer: + * + * If the values of srcQueueFamilyIndex and dstQueueFamilyIndex are equal, + * no ownership transfer is performed, and the barrier operates as if they + * were both set to VK_QUEUE_FAMILY_IGNORED. + */ + if (src_queue_family == dst_queue_family) + src_queue_family = dst_queue_family = VK_QUEUE_FAMILY_IGNORED; + const bool src_queue_external = src_queue_family == VK_QUEUE_FAMILY_FOREIGN_EXT || src_queue_family == VK_QUEUE_FAMILY_EXTERNAL;