xref: /aosp_15_r20/external/mesa3d/src/freedreno/vulkan/tu_android.cc (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2017, Google Inc.
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #include "tu_android.h"
7*61046927SAndroid Build Coastguard Worker 
8*61046927SAndroid Build Coastguard Worker #include <android/hardware_buffer.h>
9*61046927SAndroid Build Coastguard Worker #include <hardware/hardware.h>
10*61046927SAndroid Build Coastguard Worker #include <hardware/hwvulkan.h>
11*61046927SAndroid Build Coastguard Worker #include <stdbool.h>
12*61046927SAndroid Build Coastguard Worker 
13*61046927SAndroid Build Coastguard Worker #include "util/u_gralloc/u_gralloc.h"
14*61046927SAndroid Build Coastguard Worker #include "vk_android.h"
15*61046927SAndroid Build Coastguard Worker 
16*61046927SAndroid Build Coastguard Worker #include "tu_device.h"
17*61046927SAndroid Build Coastguard Worker 
18*61046927SAndroid Build Coastguard Worker static int
19*61046927SAndroid Build Coastguard Worker tu_hal_open(const struct hw_module_t *mod,
20*61046927SAndroid Build Coastguard Worker             const char *id,
21*61046927SAndroid Build Coastguard Worker             struct hw_device_t **dev);
22*61046927SAndroid Build Coastguard Worker static int
23*61046927SAndroid Build Coastguard Worker tu_hal_close(struct hw_device_t *dev);
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker static_assert(HWVULKAN_DISPATCH_MAGIC == ICD_LOADER_MAGIC, "");
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker struct hw_module_methods_t HAL_MODULE_METHODS = {
28*61046927SAndroid Build Coastguard Worker    .open = tu_hal_open,
29*61046927SAndroid Build Coastguard Worker };
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker PUBLIC struct hwvulkan_module_t HAL_MODULE_INFO_SYM = {
32*61046927SAndroid Build Coastguard Worker    .common =
33*61046927SAndroid Build Coastguard Worker      {
34*61046927SAndroid Build Coastguard Worker        .tag = HARDWARE_MODULE_TAG,
35*61046927SAndroid Build Coastguard Worker        .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1,
36*61046927SAndroid Build Coastguard Worker        .hal_api_version = HARDWARE_MAKE_API_VERSION(1, 0),
37*61046927SAndroid Build Coastguard Worker        .id = HWVULKAN_HARDWARE_MODULE_ID,
38*61046927SAndroid Build Coastguard Worker        .name = "Turnip Vulkan HAL",
39*61046927SAndroid Build Coastguard Worker        .author = "Google",
40*61046927SAndroid Build Coastguard Worker        .methods = &HAL_MODULE_METHODS,
41*61046927SAndroid Build Coastguard Worker      },
42*61046927SAndroid Build Coastguard Worker };
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker static int
tu_hal_open(const struct hw_module_t * mod,const char * id,struct hw_device_t ** dev)45*61046927SAndroid Build Coastguard Worker tu_hal_open(const struct hw_module_t *mod,
46*61046927SAndroid Build Coastguard Worker             const char *id,
47*61046927SAndroid Build Coastguard Worker             struct hw_device_t **dev)
48*61046927SAndroid Build Coastguard Worker {
49*61046927SAndroid Build Coastguard Worker    assert(mod == &HAL_MODULE_INFO_SYM.common);
50*61046927SAndroid Build Coastguard Worker    assert(strcmp(id, HWVULKAN_DEVICE_0) == 0);
51*61046927SAndroid Build Coastguard Worker 
52*61046927SAndroid Build Coastguard Worker    hwvulkan_device_t *hal_dev = (hwvulkan_device_t *) malloc(sizeof(*hal_dev));
53*61046927SAndroid Build Coastguard Worker    if (!hal_dev)
54*61046927SAndroid Build Coastguard Worker       return -1;
55*61046927SAndroid Build Coastguard Worker 
56*61046927SAndroid Build Coastguard Worker    *hal_dev = (hwvulkan_device_t){
57*61046927SAndroid Build Coastguard Worker       .common =
58*61046927SAndroid Build Coastguard Worker         {
59*61046927SAndroid Build Coastguard Worker           .tag = HARDWARE_DEVICE_TAG,
60*61046927SAndroid Build Coastguard Worker           .version = HWVULKAN_DEVICE_API_VERSION_0_1,
61*61046927SAndroid Build Coastguard Worker           .module = &HAL_MODULE_INFO_SYM.common,
62*61046927SAndroid Build Coastguard Worker           .close = tu_hal_close,
63*61046927SAndroid Build Coastguard Worker         },
64*61046927SAndroid Build Coastguard Worker       .EnumerateInstanceExtensionProperties =
65*61046927SAndroid Build Coastguard Worker         tu_EnumerateInstanceExtensionProperties,
66*61046927SAndroid Build Coastguard Worker       .CreateInstance = tu_CreateInstance,
67*61046927SAndroid Build Coastguard Worker       .GetInstanceProcAddr = tu_GetInstanceProcAddr,
68*61046927SAndroid Build Coastguard Worker    };
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker    vk_android_init_ugralloc();
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker    *dev = &hal_dev->common;
73*61046927SAndroid Build Coastguard Worker    return 0;
74*61046927SAndroid Build Coastguard Worker }
75*61046927SAndroid Build Coastguard Worker 
76*61046927SAndroid Build Coastguard Worker static int
tu_hal_close(struct hw_device_t * dev)77*61046927SAndroid Build Coastguard Worker tu_hal_close(struct hw_device_t *dev)
78*61046927SAndroid Build Coastguard Worker {
79*61046927SAndroid Build Coastguard Worker    /* hwvulkan.h claims that hw_device_t::close() is never called. */
80*61046927SAndroid Build Coastguard Worker    vk_android_destroy_ugralloc();
81*61046927SAndroid Build Coastguard Worker    return -1;
82*61046927SAndroid Build Coastguard Worker }
83