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
22eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#include <vulkan/vk_android_native_buffer.h>
23e2d3ee180a2521c8db03a9702cb2669735f239acChris Forbes#include <vulkan/vulkan.h>
24e2d3ee180a2521c8db03a9702cb2669735f239acChris Forbes#include <bitset>
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,
38d634c483bcbd564acd81dcf5d15fc5fa8ab410f4Courtney Goeltzenleuchter        EXT_hdr_metadata,
39e278daf850a664a1f15c760c64a74d3649b6f812Courtney Goeltzenleuchter        EXT_swapchain_colorspace,
40d634c483bcbd564acd81dcf5d15fc5fa8ab410f4Courtney Goeltzenleuchter        GOOGLE_display_timing,
41eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu        KHR_android_surface,
4248853713e328ee23884d2127ca763352e0681944Chris Forbes        KHR_incremental_present,
43e278daf850a664a1f15c760c64a74d3649b6f812Courtney Goeltzenleuchter        KHR_shared_presentable_image,
44eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu        KHR_surface,
45eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu        KHR_swapchain,
462452cf7e653c425191791a4fb546106d6a277654Chris Forbes        KHR_get_surface_capabilities2,
476aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes        KHR_get_physical_device_properties2,
48a8d367a34b4f48b50d97e3de57a8463f7eff1572Jesse Hall        ANDROID_external_memory_android_hardware_buffer,
49eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu
50eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu        EXTENSION_CORE,  // valid bit
51eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu        EXTENSION_COUNT,
52eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu        EXTENSION_UNKNOWN,
53eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu    };
54eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu
55eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu    const char* name;
56eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu    Type type;
57eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu    Extension extension;
58eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu
59eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu    PFN_vkVoidFunction proc;
6036cc00a1739f7d926cc20671ae9900a5460dd6aeChia-I Wu    PFN_vkVoidFunction checked_proc;  // always nullptr for non-device hooks
61eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu};
62eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu
63cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wustruct InstanceDriverTable {
64cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    // clang-format off
65cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkDestroyInstance DestroyInstance;
66cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
67cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
6885bb0c5a57be2b456079c14448127fa9bb8cff66Jesse Hall    PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
69cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkCreateDevice CreateDevice;
70cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
71f25f5bb3eb1ee3e7a3c33b5e44143ad296245f3fDaniel Koch    PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups;
72db67cc7bcfbb5cb1692ca491f8698d91c072ce70Yiwei Zhang    PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2;
73cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
74cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
75cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
766aa30db7a9bbe06b59fddd554d797c6e466ca891Chris Forbes    PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR;
77cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    // clang-format on
78cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu};
79cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu
80cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wustruct DeviceDriverTable {
81cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    // clang-format off
82cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
83cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkDestroyDevice DestroyDevice;
84cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkGetDeviceQueue GetDeviceQueue;
85cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkCreateImage CreateImage;
86cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkDestroyImage DestroyImage;
87cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
88f25f5bb3eb1ee3e7a3c33b5e44143ad296245f3fDaniel Koch    PFN_vkGetDeviceQueue2 GetDeviceQueue2;
89cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkGetSwapchainGrallocUsageANDROID GetSwapchainGrallocUsageANDROID;
908e4438b9cd82e911ed8de6aca15f11816187df3fChris Forbes    PFN_vkGetSwapchainGrallocUsage2ANDROID GetSwapchainGrallocUsage2ANDROID;
91cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkAcquireImageANDROID AcquireImageANDROID;
92cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    PFN_vkQueueSignalReleaseImageANDROID QueueSignalReleaseImageANDROID;
93cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu    // clang-format on
94cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu};
95cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu
96eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wuconst ProcHook* GetProcHook(const char* name);
97eb7db124e46da9a9210cf868353f5ea79502ffecChia-I WuProcHook::Extension GetProcHookExtension(const char* name);
98eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu
99cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkInstance instance,
100cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu                     PFN_vkGetInstanceProcAddr get_proc,
101cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu                     const std::bitset<ProcHook::EXTENSION_COUNT>& extensions);
102cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wubool InitDriverTable(VkDevice dev,
103cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu                     PFN_vkGetDeviceProcAddr get_proc,
104cbe07ef239121dc99a31a19b9593d76d76abb08bChia-I Wu                     const std::bitset<ProcHook::EXTENSION_COUNT>& extensions);
105cc5e2765a9d56b03b69d0c3f25b94721f82d034eChia-I Wu
106eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu}  // namespace driver
107eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu}  // namespace vulkan
108eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu
109eb7db124e46da9a9210cf868353f5ea79502ffecChia-I Wu#endif  // LIBVULKAN_DRIVER_TABLE_H
110