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 <lars-ivar.simonsen@arm.com>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36603>
This commit is contained in:
Yiwei Zhang
2025-08-06 07:17:14 +00:00
committed by Marge Bot
parent 8aa2f1a94f
commit 33ab9d8320
2 changed files with 7 additions and 1 deletions
+1 -1
View File
@@ -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)
@@ -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,