diff options
| author | Ian Elliott <ian@LunarG.com> | 2015-04-03 09:45:49 -0600 |
|---|---|---|
| committer | Chia-I Wu <olv@lunarg.com> | 2015-04-16 17:33:28 +0800 |
| commit | 244790e35e1c25fd4f694f3ff6015df76fc1f32c (patch) | |
| tree | 396ec2c87a0a293a2f43877d1b8f2edd100fb8b4 /include | |
| parent | ff216ed71304f877fdddc48a0e262a6fcb6dee7b (diff) | |
| download | usermoji-244790e35e1c25fd4f694f3ff6015df76fc1f32c.tar.xz | |
Add WSI header file, for use in the SDK.
Diffstat (limited to 'include')
| -rw-r--r-- | include/vk_wsi_lunarg.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/include/vk_wsi_lunarg.h b/include/vk_wsi_lunarg.h new file mode 100644 index 00000000..08ea5137 --- /dev/null +++ b/include/vk_wsi_lunarg.h @@ -0,0 +1,194 @@ +// +// File: vk_wsi_display.h +// +/* +** Copyright (c) 2014 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +#ifndef __VK_WSI_LUNARG_H__ +#define __VK_WSI_LUNARG_H__ + +#include "vulkan.h" + +#define VK_WSI_LUNARG_REVISION 3 +#define VK_WSI_LUNARG_EXTENSION_NUMBER 1 + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +// ------------------------------------------------------------------------------------------------ +// Objects + +VK_DEFINE_HANDLE(VkDisplayWSI); +VK_DEFINE_HANDLE(VkSwapChainWSI); + +// ------------------------------------------------------------------------------------------------ +// Enumeration constants + +#define VK_WSI_LUNARG_ENUM(type,id) ((type)(VK_WSI_LUNARG_EXTENSION_NUMBER * -1000 + (id))) + +// Extend VkPhysicalDeviceInfoType enum with extension specific constants +#define VK_PHYSICAL_DEVICE_INFO_TYPE_DISPLAY_PROPERTIES_WSI VK_WSI_LUNARG_ENUM(VkPhysicalDeviceInfoType, 0) +#define VK_PHYSICAL_DEVICE_INFO_TYPE_QUEUE_PRESENT_PROPERTIES_WSI VK_WSI_LUNARG_ENUM(VkPhysicalDeviceInfoType, 1) + +// Extend VkStructureType enum with extension specific constants +#define VK_STRUCTURE_TYPE_SWAP_CHAIN_CREATE_INFO_WSI VK_WSI_LUNARG_ENUM(VkStructureType, 0) +#define VK_STRUCTURE_TYPE_PRESENT_INFO_WSI VK_WSI_LUNARG_ENUM(VkStructureType, 1) + +// Extend VkImageLayout enum with extension specific constants +#define VK_IMAGE_LAYOUT_PRESENT_SOURCE_WSI VK_WSI_LUNARG_ENUM(VkImageLayout, 0) + +// ------------------------------------------------------------------------------------------------ +// Enumerations + +typedef enum VkDisplayInfoTypeWSI_ +{ + // Info type for vkGetDisplayInfo() + VK_DISPLAY_INFO_TYPE_FORMAT_PROPERTIES_WSI = 0x00000003, // Return the VkFormat(s) supported for swap chains with the display + + VK_ENUM_RANGE(DISPLAY_INFO_TYPE, FORMAT_PROPERTIES_WSI, FORMAT_PROPERTIES_WSI) +} VkDisplayInfoTypeWSI; + +typedef enum VkSwapChainInfoTypeWSI_ +{ + // Info type for vkGetSwapChainInfo() + VK_SWAP_CHAIN_INFO_TYPE_PERSISTENT_IMAGES_WSI = 0x00000000, // Return information about the persistent images of the swapchain + + VK_ENUM_RANGE(SWAP_CHAIN_INFO_TYPE, PERSISTENT_IMAGES_WSI, PERSISTENT_IMAGES_WSI) +} VkSwapChainInfoTypeWSI; + +// ------------------------------------------------------------------------------------------------ +// Flags + +typedef VkFlags VkSwapModeFlagsWSI; +typedef enum VkSwapModeFlagBitsWSI_ +{ + VK_SWAP_MODE_FLIP_BIT_WSI = VK_BIT(0), + VK_SWAP_MODE_BLIT_BIT_WSI = VK_BIT(1), +} VkSwapModeFlagBitsWSI; + +// ------------------------------------------------------------------------------------------------ +// Structures + +typedef struct VkDisplayPropertiesWSI_ +{ + VkDisplayWSI display; // Handle of the display object + VkExtent2D physicalResolution; // Max resolution for CRT? +} VkDisplayPropertiesWSI; + +typedef struct VkDisplayFormatPropertiesWSI_ +{ + VkDisplayWSI display; // Handle of the display object + VkFormat swapChainFormat; // Format of the images of the swap chain +} VkDisplayFormatPropertiesWSI; + +typedef struct VkSwapChainCreateInfoWSI_ +{ + VkStructureType sType; // Must be VK_STRUCTURE_TYPE_SWAP_CHAIN_CREATE_INFO_WSI + const void* pNext; // Pointer to next structure + + // TBD: It is not yet clear what the use will be for the following two + // values. It seems to be needed for more-global window-system handles + // (e.g. X11 display). If not needed for the SDK, we will drop it from + // this extension, and from a future version of this header. + const void* pNativeWindowSystemHandle; // Pointer to native window system handle + const void* pNativeWindowHandle; // Pointer to native window handle + + uint32_t displayCount; // Number of displays the swap chain is created for + const VkDisplayWSI* pDisplays; // displayCount number of display objects the swap chain is created for + + uint32_t imageCount; // Number of images in the swap chain + + VkFormat imageFormat; // Format of the images of the swap chain + VkExtent2D imageExtent; // Width and height of the images of the swap chain + uint32_t imageArraySize; // Number of layers of the images of the swap chain (needed for multi-view rendering) + VkFlags imageUsageFlags; // Usage flags for the images of the swap chain (see VkImageUsageFlags) + + VkFlags swapModeFlags; // Allowed swap modes (see VkSwapModeFlagsWSI) +} VkSwapChainCreateInfoWSI; + +typedef struct VkSwapChainImageInfo_ +{ + VkImage image; // Persistent swap chain image handle + VkDeviceMemory memory; // Persistent swap chain image's memory handle +} VkSwapChainImageInfo; + +typedef struct VkPhysicalDeviceQueuePresentPropertiesWSI_ +{ + bool32_t supportsPresent; // Tells whether the queue supports presenting +} VkPhysicalDeviceQueuePresentPropertiesWSI; + +typedef struct VkPresentInfoWSI_ +{ + VkStructureType sType; // Must be VK_STRUCTURE_TYPE_PRESENT_INFO_WSI + const void* pNext; // Pointer to next structure + VkImage image; // Image to present + uint32_t flipInterval; // Flip interval +} VkPresentInfoWSI; + +// ------------------------------------------------------------------------------------------------ +// Function types + +typedef VkResult (VKAPI *PFN_vkGetDisplayInfoWSI)(VkDisplayWSI display, VkDisplayInfoTypeWSI infoType, size_t* pDataSize, void* pData); +typedef VkResult (VKAPI *PFN_vkCreateSwapChainWSI)(VkDevice device, const VkSwapChainCreateInfoWSI* pCreateInfo, VkSwapChainWSI* pSwapChain); +typedef VkResult (VKAPI *PFN_vkDestroySwapChainWSI)(VkSwapChainWSI swapChain); +typedef VkResult (VKAPI *PFN_vkGetSwapChainInfoWSI)(VkSwapChainWSI swapChain, VkSwapChainInfoTypeWSI infoType, size_t* pDataSize, void* pData); +typedef VkResult (VKAPI *PFN_vkQueuePresentWSI)(VkQueue queue, VkPresentInfoWSI* pPresentInfo); + +// ------------------------------------------------------------------------------------------------ +// Function prototypes + +#ifdef VK_PROTOTYPES + +VkResult VKAPI vkGetDisplayInfoWSI( + VkDisplayWSI display, + VkDisplayInfoTypeWSI infoType, + size_t* pDataSize, + void* pData); + +VkResult VKAPI vkCreateSwapChainWSI( + VkDevice device, + const VkSwapChainCreateInfoWSI* pCreateInfo, + VkSwapChainWSI* pSwapChain); + +VkResult VKAPI vkDestroySwapChainWSI( + VkSwapChainWSI swapChain); + +VkResult VKAPI vkGetSwapChainInfoWSI( + VkSwapChainWSI swapChain, + VkSwapChainInfoTypeWSI infoType, + size_t* pDataSize, + void* pData); + +VkResult VKAPI vkQueuePresentWSI( + VkQueue queue, + VkPresentInfoWSI* pPresentInfo); + +#endif // VK_PROTOTYPES + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // __VK_WSI_LUNARG_H__ |
