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