Home | History | Annotate | Download | only in libvulkan
      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 
     26 namespace vulkan {
     27 namespace driver {
     28 
     29 struct 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 
     63 struct 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 
     80 struct 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 
     96 const ProcHook* GetProcHook(const char* name);
     97 ProcHook::Extension GetProcHookExtension(const char* name);
     98 
     99 bool InitDriverTable(VkInstance instance,
    100                      PFN_vkGetInstanceProcAddr get_proc,
    101                      const std::bitset<ProcHook::EXTENSION_COUNT>& extensions);
    102 bool 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