From 0fb4609d944aedbfc7e4813c362410d357318672 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 15 Nov 2024 10:49:56 -0800 Subject: [PATCH] panvk: add support for VK_EXT_queue_family_foreign We can treat VK_QUEUE_FAMILY_FOREIGN_EXT as the host, This makes sure that, on release, all subqueues self-wait and all caches are flushed. On acquire, all caches are invalidated. Signed-off-by: Chia-I Wu Reviewed-by: Boris Brezillon Part-of: --- docs/features.txt | 2 +- src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c | 10 ++++++++++ src/panfrost/vulkan/panvk_physical_device.c | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/features.txt b/docs/features.txt index 7041e7afa50..b6264427042 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -628,7 +628,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_primitive_topology_list_restart DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn) VK_EXT_primitives_generated_query DONE (anv, hasvk, lvp, nvk, radv, tu, vn) VK_EXT_provoking_vertex DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn) - VK_EXT_queue_family_foreign DONE (anv, hasvk, nvk, lvp, radv, tu, v3dv, vn) + VK_EXT_queue_family_foreign DONE (anv, hasvk, nvk, lvp, panvk, radv, tu, v3dv, vn) VK_EXT_rasterization_order_attachment_access DONE (lvp, tu, vn) VK_EXT_robustness2 DONE (anv, hasvk, lvp, nvk, radv, tu, vn) VK_EXT_sample_locations DONE (anv, hasvk, nvk, radv/gfx9-, tu/a650+) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c index b896bb614b5..9fe68821c80 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c @@ -444,6 +444,11 @@ normalize_dependency(VkPipelineStageFlags2 *src_stages, *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; } @@ -455,6 +460,11 @@ normalize_dependency(VkPipelineStageFlags2 *src_stages, *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; } diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index aac0e36ac27..22d2de390d1 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -235,6 +235,7 @@ get_device_extensions(const struct panvk_physical_device *device, .EXT_pipeline_creation_cache_control = true, .EXT_pipeline_creation_feedback = true, .EXT_private_data = true, + .EXT_queue_family_foreign = true, .EXT_shader_module_identifier = true, .EXT_tooling_info = true, .EXT_vertex_attribute_divisor = true,