xref: /aosp_15_r20/external/mesa3d/src/panfrost/vulkan/panvk_android.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Mesa 3-D graphics library
3  *
4  * Copyright © 2017, Google Inc.
5  *
6  * SPDX-License-Identifier: MIT
7  */
8 
9 #include <hardware/hardware.h>
10 #include <hardware/hwvulkan.h>
11 #include <vulkan/vk_icd.h>
12 
13 #include "util/log.h"
14 
15 static int panvk_hal_open(const struct hw_module_t *mod, const char *id,
16                           struct hw_device_t **dev);
17 static int panvk_hal_close(struct hw_device_t *dev);
18 
19 static_assert(HWVULKAN_DISPATCH_MAGIC == ICD_LOADER_MAGIC, "");
20 
21 PUBLIC struct hwvulkan_module_t HAL_MODULE_INFO_SYM = {
22    .common =
23       {
24          .tag = HARDWARE_MODULE_TAG,
25          .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1,
26          .hal_api_version = HARDWARE_MAKE_API_VERSION(1, 0),
27          .id = HWVULKAN_HARDWARE_MODULE_ID,
28          .name = "ARM Vulkan HAL",
29          .author = "Mesa3D",
30          .methods =
31             &(hw_module_methods_t){
32                .open = panvk_hal_open,
33             },
34       },
35 };
36 
37 static int
panvk_hal_open(const struct hw_module_t * mod,const char * id,struct hw_device_t ** dev)38 panvk_hal_open(const struct hw_module_t *mod, const char *id,
39                struct hw_device_t **dev)
40 {
41    assert(mod == &HAL_MODULE_INFO_SYM.common);
42    assert(strcmp(id, HWVULKAN_DEVICE_0) == 0);
43 
44    hwvulkan_device_t *hal_dev = malloc(sizeof(*hal_dev));
45    if (!hal_dev)
46       return -1;
47 
48    *hal_dev = (hwvulkan_device_t){
49       .common =
50          {
51             .tag = HARDWARE_DEVICE_TAG,
52             .version = HWVULKAN_DEVICE_API_VERSION_0_1,
53             .module = &HAL_MODULE_INFO_SYM.common,
54             .close = panvk_hal_close,
55          },
56       .EnumerateInstanceExtensionProperties =
57          panvk_EnumerateInstanceExtensionProperties,
58       .CreateInstance = panvk_CreateInstance,
59       .GetInstanceProcAddr = panvk_GetInstanceProcAddr,
60    };
61 
62    mesa_logi("panvk: Warning: Android Vulkan implementation is experimental");
63 
64    *dev = &hal_dev->common;
65    return 0;
66 }
67 
68 static int
panvk_hal_close(struct hw_device_t * dev)69 panvk_hal_close(struct hw_device_t *dev)
70 {
71    /* hwvulkan.h claims that hw_device_t::close() is never called. */
72    return -1;
73 }
74