123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- //
- // File: vk_icd.h
- //
- /*
- * Copyright (c) 2015-2016 The Khronos Group Inc.
- * Copyright (c) 2015-2016 Valve Corporation
- * Copyright (c) 2015-2016 LunarG, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
- #ifndef VKICD_H
- #define VKICD_H
-
- #include "vulkan.h"
- #include <stdbool.h>
-
- // Loader-ICD version negotiation API. Versions add the following features:
- // Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr
- // or vk_icdNegotiateLoaderICDInterfaceVersion.
- // Version 1 - Add support for vk_icdGetInstanceProcAddr.
- // Version 2 - Add Loader/ICD Interface version negotiation
- // via vk_icdNegotiateLoaderICDInterfaceVersion.
- // Version 3 - Add ICD creation/destruction of KHR_surface objects.
- // Version 4 - Add unknown physical device extension qyering via
- // vk_icdGetPhysicalDeviceProcAddr.
- // Version 5 - Tells ICDs that the loader is now paying attention to the
- // application version of Vulkan passed into the ApplicationInfo
- // structure during vkCreateInstance. This will tell the ICD
- // that if the loader is older, it should automatically fail a
- // call for any API version > 1.0. Otherwise, the loader will
- // manually determine if it can support the expected version.
- #define CURRENT_LOADER_ICD_INTERFACE_VERSION 5
- #define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0
- #define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4
- typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion);
-
- // This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this
- // file directly, it won't be found.
- #ifndef PFN_GetPhysicalDeviceProcAddr
- typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName);
- #endif
-
- /*
- * The ICD must reserve space for a pointer for the loader's dispatch
- * table, at the start of <each object>.
- * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro.
- */
-
- #define ICD_LOADER_MAGIC 0x01CDC0DE
-
- typedef union {
- uintptr_t loaderMagic;
- void *loaderData;
- } VK_LOADER_DATA;
-
- static inline void set_loader_magic_value(void *pNewObject) {
- VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
- loader_info->loaderMagic = ICD_LOADER_MAGIC;
- }
-
- static inline bool valid_loader_magic_value(void *pNewObject) {
- const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
- return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC;
- }
-
- /*
- * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that
- * contains the platform-specific connection and surface information.
- */
- typedef enum {
- VK_ICD_WSI_PLATFORM_MIR,
- VK_ICD_WSI_PLATFORM_WAYLAND,
- VK_ICD_WSI_PLATFORM_WIN32,
- VK_ICD_WSI_PLATFORM_XCB,
- VK_ICD_WSI_PLATFORM_XLIB,
- VK_ICD_WSI_PLATFORM_ANDROID,
- VK_ICD_WSI_PLATFORM_MACOS,
- VK_ICD_WSI_PLATFORM_IOS,
- VK_ICD_WSI_PLATFORM_DISPLAY,
- VK_ICD_WSI_PLATFORM_HEADLESS
- } VkIcdWsiPlatform;
-
- typedef struct {
- VkIcdWsiPlatform platform;
- } VkIcdSurfaceBase;
-
- #ifdef VK_USE_PLATFORM_MIR_KHR
- typedef struct {
- VkIcdSurfaceBase base;
- MirConnection *connection;
- MirSurface *mirSurface;
- } VkIcdSurfaceMir;
- #endif // VK_USE_PLATFORM_MIR_KHR
-
- #ifdef VK_USE_PLATFORM_WAYLAND_KHR
- typedef struct {
- VkIcdSurfaceBase base;
- struct wl_display *display;
- struct wl_surface *surface;
- } VkIcdSurfaceWayland;
- #endif // VK_USE_PLATFORM_WAYLAND_KHR
-
- #ifdef VK_USE_PLATFORM_WIN32_KHR
- typedef struct {
- VkIcdSurfaceBase base;
- HINSTANCE hinstance;
- HWND hwnd;
- } VkIcdSurfaceWin32;
- #endif // VK_USE_PLATFORM_WIN32_KHR
-
- #ifdef VK_USE_PLATFORM_XCB_KHR
- typedef struct {
- VkIcdSurfaceBase base;
- xcb_connection_t *connection;
- xcb_window_t window;
- } VkIcdSurfaceXcb;
- #endif // VK_USE_PLATFORM_XCB_KHR
-
- #ifdef VK_USE_PLATFORM_XLIB_KHR
- typedef struct {
- VkIcdSurfaceBase base;
- Display *dpy;
- Window window;
- } VkIcdSurfaceXlib;
- #endif // VK_USE_PLATFORM_XLIB_KHR
-
- #ifdef VK_USE_PLATFORM_ANDROID_KHR
- typedef struct {
- VkIcdSurfaceBase base;
- struct ANativeWindow *window;
- } VkIcdSurfaceAndroid;
- #endif // VK_USE_PLATFORM_ANDROID_KHR
-
- #ifdef VK_USE_PLATFORM_MACOS_MVK
- typedef struct {
- VkIcdSurfaceBase base;
- const void *pView;
- } VkIcdSurfaceMacOS;
- #endif // VK_USE_PLATFORM_MACOS_MVK
-
- #ifdef VK_USE_PLATFORM_IOS_MVK
- typedef struct {
- VkIcdSurfaceBase base;
- const void *pView;
- } VkIcdSurfaceIOS;
- #endif // VK_USE_PLATFORM_IOS_MVK
-
- typedef struct {
- VkIcdSurfaceBase base;
- VkDisplayModeKHR displayMode;
- uint32_t planeIndex;
- uint32_t planeStackIndex;
- VkSurfaceTransformFlagBitsKHR transform;
- float globalAlpha;
- VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
- VkExtent2D imageExtent;
- } VkIcdSurfaceDisplay;
-
- typedef struct {
- VkIcdSurfaceBase base;
- } VkIcdSurfaceHeadless;
-
- #endif // VKICD_H
|