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
49        EXTENSION_CORE,  // valid bit
50        EXTENSION_COUNT,
51        EXTENSION_UNKNOWN,
52    };
53
54    const char* name;
55    Type type;
56    Extension extension;
57
58    PFN_vkVoidFunction proc;
59    PFN_vkVoidFunction checked_proc;  // always nullptr for non-device hooks
60};
61
62struct InstanceDriverTable {
63    // clang-format off
64    PFN_vkDestroyInstance DestroyInstance;
65    PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
66    PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
67    PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
68    PFN_vkCreateDevice CreateDevice;
69    PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
70    PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
71    PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
72    PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
73    PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR;
74    // clang-format on
75};
76
77struct DeviceDriverTable {
78    // clang-format off
79    PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
80    PFN_vkDestroyDevice DestroyDevice;
81    PFN_vkGetDeviceQueue GetDeviceQueue;
82    PFN_vkCreateImage CreateImage;
83    PFN_vkDestroyImage DestroyImage;
84    PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
85    PFN_vkGetSwapchainGrallocUsageANDROID GetSwapchainGrallocUsageANDROID;
86    PFN_vkGetSwapchainGrallocUsage2ANDROID GetSwapchainGrallocUsage2ANDROID;
87    PFN_vkAcquireImageANDROID AcquireImageANDROID;
88    PFN_vkQueueSignalReleaseImageANDROID QueueSignalReleaseImageANDROID;
89    // clang-format on
90};
91
92const ProcHook* GetProcHook(const char* name);
93ProcHook::Extension GetProcHookExtension(const char* name);
94
95bool InitDriverTable(VkInstance instance,
96                     PFN_vkGetInstanceProcAddr get_proc,
97                     const std::bitset<ProcHook::EXTENSION_COUNT>& extensions);
98bool InitDriverTable(VkDevice dev,
99                     PFN_vkGetDeviceProcAddr get_proc,
100                     const std::bitset<ProcHook::EXTENSION_COUNT>& extensions);
101
102}  // namespace driver
103}  // namespace vulkan
104
105#endif  // LIBVULKAN_DRIVER_TABLE_H
106