From 6c7f7e495351f31565974d4f33d72de89b5bb5f8 Mon Sep 17 00:00:00 2001 From: Sergii Ushakov Date: Wed, 30 Jul 2025 08:30:45 +0000 Subject: [PATCH] android: moving HMI symbol to separate file To support "surfaceless" builds on Android it is required to still have HMI symbol exported by the library while no other android-specific code is needed. Reviewed-by: Gurchetan Singh Reviewed-by: Marcin Radomski Part-of: --- src/vulkan/runtime/meson.build | 2 +- src/vulkan/runtime/vk_android.c | 67 ------------------------ src/vulkan/runtime/vk_android_hal.c | 79 +++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 68 deletions(-) create mode 100644 src/vulkan/runtime/vk_android_hal.c diff --git a/src/vulkan/runtime/meson.build b/src/vulkan/runtime/meson.build index 9d34ae432f0..2729169d07c 100644 --- a/src/vulkan/runtime/meson.build +++ b/src/vulkan/runtime/meson.build @@ -60,7 +60,7 @@ if dep_libdrm.found() endif if with_platform_android - vulkan_lite_runtime_files += files('vk_android.c') + vulkan_lite_runtime_files += files('vk_android.c', 'vk_android_hal.c') vulkan_lite_runtime_deps += [dep_android, idep_u_gralloc] endif diff --git a/src/vulkan/runtime/vk_android.c b/src/vulkan/runtime/vk_android.c index 6ef5e8ea3e2..2a70ff23bc7 100644 --- a/src/vulkan/runtime/vk_android.c +++ b/src/vulkan/runtime/vk_android.c @@ -67,73 +67,6 @@ vk_android_get_ugralloc(void) return _gralloc; } -static int vk_android_hal_open(const struct hw_module_t *mod, const char *id, - struct hw_device_t **dev); - -static_assert(HWVULKAN_DISPATCH_MAGIC == ICD_LOADER_MAGIC, ""); - -PUBLIC struct hwvulkan_module_t HAL_MODULE_INFO_SYM = { - .common = - { - .tag = HARDWARE_MODULE_TAG, - .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1, - .hal_api_version = HARDWARE_MAKE_API_VERSION(1, 0), - .id = HWVULKAN_HARDWARE_MODULE_ID, - .name = "Mesa 3D Vulkan HAL", - .author = "Mesa 3D", - .methods = - &(hw_module_methods_t){ - .open = vk_android_hal_open, - }, - }, -}; - -static int -vk_android_hal_close(struct hw_device_t *dev) -{ - /* the hw_device_t::close() function is called upon driver unloading */ - assert(dev->version == HWVULKAN_DEVICE_API_VERSION_0_1); - assert(dev->module == &HAL_MODULE_INFO_SYM.common); - - hwvulkan_device_t *hal_dev = container_of(dev, hwvulkan_device_t, common); - free(hal_dev); - return 0; -} - -static int -vk_android_hal_open(const struct hw_module_t *mod, const char *id, - struct hw_device_t **dev) -{ - assert(mod == &HAL_MODULE_INFO_SYM.common); - assert(strcmp(id, HWVULKAN_DEVICE_0) == 0); - - hwvulkan_device_t *hal_dev = malloc(sizeof(*hal_dev)); - if (!hal_dev) - return -1; - - *hal_dev = (hwvulkan_device_t){ - .common = - { - .tag = HARDWARE_DEVICE_TAG, - .version = HWVULKAN_DEVICE_API_VERSION_0_1, - .module = &HAL_MODULE_INFO_SYM.common, - .close = vk_android_hal_close, - }, - .EnumerateInstanceExtensionProperties = - (PFN_vkEnumerateInstanceExtensionProperties)vk_icdGetInstanceProcAddr( - NULL, "vkEnumerateInstanceExtensionProperties"), - .CreateInstance = - (PFN_vkCreateInstance)vk_icdGetInstanceProcAddr( - NULL, "vkCreateInstance"), - .GetInstanceProcAddr = - (PFN_vkGetInstanceProcAddr)vk_icdGetInstanceProcAddr( - NULL, "vkGetInstanceProcAddr"), - }; - - *dev = &hal_dev->common; - return 0; -} - static VkResult vk_gralloc_to_drm_explicit_layout( struct u_gralloc_buffer_handle *in_hnd, diff --git a/src/vulkan/runtime/vk_android_hal.c b/src/vulkan/runtime/vk_android_hal.c new file mode 100644 index 00000000000..845be4347fa --- /dev/null +++ b/src/vulkan/runtime/vk_android_hal.c @@ -0,0 +1,79 @@ +/* + * Copyright 2025 Google LLC + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#include +#include + +static_assert(HWVULKAN_DISPATCH_MAGIC == ICD_LOADER_MAGIC, ""); + +static int vk_android_hal_open(const struct hw_module_t *mod, const char *id, + struct hw_device_t **dev); + +PUBLIC struct hwvulkan_module_t HAL_MODULE_INFO_SYM = { + .common = + { + .tag = HARDWARE_MODULE_TAG, + .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1, + .hal_api_version = HARDWARE_MAKE_API_VERSION(1, 0), + .id = HWVULKAN_HARDWARE_MODULE_ID, + .name = "Mesa 3D Vulkan HAL", + .author = "Mesa 3D", + .methods = + &(hw_module_methods_t){ + .open = vk_android_hal_open, + }, + }, +}; + +static int +vk_android_hal_close(struct hw_device_t *dev) +{ + /* the hw_device_t::close() function is called upon driver unloading */ + assert(dev->version == HWVULKAN_DEVICE_API_VERSION_0_1); + assert(dev->module == &HAL_MODULE_INFO_SYM.common); + + hwvulkan_device_t *hal_dev = container_of(dev, hwvulkan_device_t, common); + free(hal_dev); + return 0; +} + +static int +vk_android_hal_open(const struct hw_module_t *mod, const char *id, + struct hw_device_t **dev) +{ + assert(mod == &HAL_MODULE_INFO_SYM.common); + assert(strcmp(id, HWVULKAN_DEVICE_0) == 0); + + hwvulkan_device_t *hal_dev = malloc(sizeof(*hal_dev)); + if (!hal_dev) + return -1; + + *hal_dev = (hwvulkan_device_t){ + .common = + { + .tag = HARDWARE_DEVICE_TAG, + .version = HWVULKAN_DEVICE_API_VERSION_0_1, + .module = &HAL_MODULE_INFO_SYM.common, + .close = vk_android_hal_close, + }, + .EnumerateInstanceExtensionProperties = + (PFN_vkEnumerateInstanceExtensionProperties)vk_icdGetInstanceProcAddr( + NULL, "vkEnumerateInstanceExtensionProperties"), + .CreateInstance = + (PFN_vkCreateInstance)vk_icdGetInstanceProcAddr( + NULL, "vkCreateInstance"), + .GetInstanceProcAddr = + (PFN_vkGetInstanceProcAddr)vk_icdGetInstanceProcAddr( + NULL, "vkGetInstanceProcAddr"), + }; + + *dev = &hal_dev->common; + return 0; +}