1/*
2 * Copyright 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// WARNING: This file is generated. See ../README.md for instructions.
18
19#ifndef LIBVULKAN_DRIVER_GEN_H
20#define LIBVULKAN_DRIVER_GEN_H
21
22#include <vulkan/vk_android_native_buffer.h>
23#include <vulkan/vulkan.h>
24#include <bitset>
25
26namespace vulkan {
27namespace driver {
28
29struct ProcHook {
30    enum Type {
31        GLOBAL,
32        INSTANCE,
33        DEVICE,
34    };
35    enum Extension {
36        ANDROID_native_buffer,
37        EXT_debug_report,
38        EXT_hdr_metadata,
39        EXT_swapchain_colorspace,
40        GOOGLE_display_timing,
41        KHR_android_surface,
42        KHR_incremental_present,
43        KHR_shared_presentable_image,
44        KHR_surface,
45        KHR_swapchain,
46        KHR_get_surface_capabilities2,
47        KHR_get_physical_device_properties2,
48        ANDROID_external_memory_android_hardware_buffer,
49
50        EXTENSION_CORE,  // valid bit
51        EXTENSION_COUNT,
52        EXTENSION_UNKNOWN,
53    };
54
55    const char* name;
56    Type type;
57    Extension extension;
58
59    PFN_vkVoidFunction proc;
60    PFN_vkVoidFunction checked_proc;  // always nullptr for non-device hooks
61};
62
63struct InstanceDriverTable {
64    // clang-format off
65    PFN_vkDestroyInstance DestroyInstance;
66    PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
67    PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
68    PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
69    PFN_vkCreateDevice CreateDevice;
70    PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
71    PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups;
72    PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2;
73    PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
74    PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
75    PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
76    PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR;
77    // clang-format on
78};
79
80struct DeviceDriverTable {
81    // clang-format off
82    PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
83    PFN_vkDestroyDevice DestroyDevice;
84    PFN_vkGetDeviceQueue GetDeviceQueue;
85    PFN_vkCreateImage CreateImage;
86    PFN_vkDestroyImage DestroyImage;
87    PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
88    PFN_vkGetDeviceQueue2 GetDeviceQueue2;
89    PFN_vkGetSwapchainGrallocUsageANDROID GetSwapchainGrallocUsageANDROID;
90    PFN_vkGetSwapchainGrallocUsage2ANDROID GetSwapchainGrallocUsage2ANDROID;
91    PFN_vkAcquireImageANDROID AcquireImageANDROID;
92    PFN_vkQueueSignalReleaseImageANDROID QueueSignalReleaseImageANDROID;
93    // clang-format on
94};
95
96const ProcHook* GetProcHook(const char* name);
97ProcHook::Extension GetProcHookExtension(const char* name);
98
99bool InitDriverTable(VkInstance instance,
100                     PFN_vkGetInstanceProcAddr get_proc,
101                     const std::bitset<ProcHook::EXTENSION_COUNT>& extensions);
102bool InitDriverTable(VkDevice dev,
103                     PFN_vkGetDeviceProcAddr get_proc,
104                     const std::bitset<ProcHook::EXTENSION_COUNT>& extensions);
105
106}  // namespace driver
107}  // namespace vulkan
108
109#endif  // LIBVULKAN_DRIVER_TABLE_H
110