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;