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