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