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