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