diff --git a/.pick_status.json b/.pick_status.json index 2292e27002b..0ea0f433fd6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2854,7 +2854,7 @@ "description": "panvk: Skip barrier QFOT if src_qfi equals dst_qfi", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "715d6e740a35b2d2d46ff40179390a87b161b814", "notes": null diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c index 08db1b56469..805d3dc4194 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c @@ -444,36 +444,39 @@ normalize_dependency(VkPipelineStageFlags2 *src_stages, VkAccessFlags2 *src_access, VkAccessFlags2 *dst_access, uint32_t src_qfi, uint32_t dst_qfi) { - /* queue family acquire operation */ - switch (src_qfi) { - case VK_QUEUE_FAMILY_EXTERNAL: - /* no execution dependency and no availability operation */ - *src_stages = VK_PIPELINE_STAGE_2_NONE; - *src_access = VK_ACCESS_2_NONE; - break; - case VK_QUEUE_FAMILY_FOREIGN_EXT: - /* treat the foreign queue as the host */ - *src_stages = VK_PIPELINE_STAGE_2_HOST_BIT; - *src_access = VK_ACCESS_2_HOST_WRITE_BIT; - break; - default: - break; - } + /* Perform queue family ownership transfer if src and dst are unequal. */ + if (src_qfi != dst_qfi) { + /* queue family acquire operation */ + switch (src_qfi) { + case VK_QUEUE_FAMILY_EXTERNAL: + /* no execution dependency and no availability operation */ + *src_stages = VK_PIPELINE_STAGE_2_NONE; + *src_access = VK_ACCESS_2_NONE; + break; + case VK_QUEUE_FAMILY_FOREIGN_EXT: + /* treat the foreign queue as the host */ + *src_stages = VK_PIPELINE_STAGE_2_HOST_BIT; + *src_access = VK_ACCESS_2_HOST_WRITE_BIT; + break; + default: + break; + } - /* queue family release operation */ - switch (dst_qfi) { - case VK_QUEUE_FAMILY_EXTERNAL: - /* no execution dependency and no visibility operation */ - *dst_stages = VK_PIPELINE_STAGE_2_NONE; - *dst_access = VK_ACCESS_2_NONE; - break; - case VK_QUEUE_FAMILY_FOREIGN_EXT: - /* treat the foreign queue as the host */ - *dst_stages = VK_PIPELINE_STAGE_2_HOST_BIT; - *dst_access = VK_ACCESS_2_HOST_WRITE_BIT; - break; - default: - break; + /* queue family release operation */ + switch (dst_qfi) { + case VK_QUEUE_FAMILY_EXTERNAL: + /* no execution dependency and no visibility operation */ + *dst_stages = VK_PIPELINE_STAGE_2_NONE; + *dst_access = VK_ACCESS_2_NONE; + break; + case VK_QUEUE_FAMILY_FOREIGN_EXT: + /* treat the foreign queue as the host */ + *dst_stages = VK_PIPELINE_STAGE_2_HOST_BIT; + *dst_access = VK_ACCESS_2_HOST_WRITE_BIT; + break; + default: + break; + } } *src_stages = vk_expand_src_stage_flags2(*src_stages);