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