From 33ab9d8320f10ced355ba3a2f78ab7fae307552d Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Wed, 6 Aug 2025 07:17:14 +0000 Subject: [PATCH] panvk: add shared image support and advertise VK_ANDROID_native_buffer Now we have: 1. baseline ANB (pre ANB spec v8) - basic vulkan wsi on Android 2. aliased ANB (ANB spec v8+) - required for swapchain maintenance1 support, and is used by ANGLE on Android for smooth swapchain recreation. 3. ANB shared image - required for KHR_shared_presentable_image support. Test: - dEQP-VK.wsi.android.* - dEQP-EGL.* via ANGLE - CtsGraphicsTestCases via ANGLE - CtsOpenGLTestCases via ANGLE - Instagram via ANGLE Acked-by: Lars-Ivar Hesselberg Simonsen Reviewed-by: Faith Ekstrand Part-of: --- docs/features.txt | 2 +- src/panfrost/vulkan/panvk_vX_physical_device.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/features.txt b/docs/features.txt index 636814652e0..1f12d7e719e 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -672,7 +672,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_ycbcr_image_arrays DONE (anv, hasvk, hk, lvp, nvk, panvk/v10+, radv, vn) VK_EXT_zero_initialize_device_memory DONE (nvk, radv) VK_ANDROID_external_memory_android_hardware_buffer DONE (anv, radv, tu, vn) - VK_ANDROID_native_buffer DONE (anv, radv, tu, v3dv, vn) + VK_ANDROID_native_buffer DONE (anv, panvk, radv, tu, v3dv, vn) VK_GOOGLE_decorate_string DONE (anv, hasvk, hk, lvp, nvk, panvk, radv, tu, vn) VK_GOOGLE_hlsl_functionality1 DONE (anv, hasvk, hk, lvp, nvk, panvk, radv, tu, vn) VK_GOOGLE_user_type DONE (anv, hasvk, hk, nvk, panvk, radv, tu, vn) diff --git a/src/panfrost/vulkan/panvk_vX_physical_device.c b/src/panfrost/vulkan/panvk_vX_physical_device.c index 26dd52073c2..34dd1ad1830 100644 --- a/src/panfrost/vulkan/panvk_vX_physical_device.c +++ b/src/panfrost/vulkan/panvk_vX_physical_device.c @@ -13,6 +13,7 @@ #include "git_sha1.h" +#include "vk_android.h" #include "vk_device.h" #include "vk_limits.h" #include "vk_shader_module.h" @@ -40,6 +41,7 @@ panvk_per_arch(get_physical_device_extensions)( { bool has_vk1_1 = PAN_ARCH >= 10; bool has_vk1_2 = PAN_ARCH >= 10; + bool has_gralloc = vk_android_get_ugralloc() != NULL; *ext = (struct vk_device_extension_table){ .KHR_8bit_storage = true, @@ -175,6 +177,7 @@ panvk_per_arch(get_physical_device_extensions)( .EXT_ycbcr_2plane_444_formats = PAN_ARCH >= 10, .EXT_ycbcr_image_arrays = PAN_ARCH >= 10, .EXT_inline_uniform_block = true, + .ANDROID_native_buffer = has_gralloc, .GOOGLE_decorate_string = true, .GOOGLE_hlsl_functionality1 = true, .GOOGLE_user_type = true, @@ -959,6 +962,9 @@ panvk_per_arch(get_physical_device_properties)( /* VK_KHR_push_descriptor */ .maxPushDescriptors = MAX_PUSH_DESCS, + /* VK_ANDROID_native_buffer */ + .sharedImage = vk_android_get_front_buffer_usage() != 0, + /* VK_ARM_shader_core_properties */ .pixelRate = device->model->rates.pixel, .texelRate = device->model->rates.texel,