1 #ifndef _VKWSIUTIL_HPP
2 #define _VKWSIUTIL_HPP
3 /*-------------------------------------------------------------------------
4  * Vulkan CTS Framework
5  * --------------------
6  *
7  * Copyright (c) 2016 Google Inc.
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  *//*!
22  * \file
23  * \brief Windowing System Integration (WSI) Utilities.
24  *//*--------------------------------------------------------------------*/
25 
26 #include "vkDefs.hpp"
27 #include "vkWsiPlatform.hpp"
28 #include "vkRef.hpp"
29 
30 #include <vector>
31 
32 namespace vk
33 {
34 namespace wsi
35 {
36 
37 struct PlatformProperties
38 {
39 	enum FeatureFlags
40 	{
41 		FEATURE_INITIAL_WINDOW_SIZE		= (1<<0),		//!< Platform honors initial window size request
42 		FEATURE_RESIZE_WINDOW			= (1<<1),		//!< Platform supports resizing window
43 	};
44 
45 	enum SwapchainExtent
46 	{
47 		SWAPCHAIN_EXTENT_MUST_MATCH_WINDOW_SIZE = 0,	//!< Swapchain extent must match window size
48 		SWAPCHAIN_EXTENT_SETS_WINDOW_SIZE,				//!< Window will be resized to swapchain size when first image is presented
49 		SWAPCHAIN_EXTENT_SCALED_TO_WINDOW_SIZE,			//!< Presented image contents will be scaled to window size
50 
51 		SWAPCHAIN_EXTENT_LAST
52 	};
53 
54 	deUint32		features;
55 	SwapchainExtent	swapchainExtent;
56 	deUint32		maxDisplays;
57 	deUint32		maxWindowsPerDisplay;
58 };
59 
60 const char*						getName									(Type wsiType);
61 const char*						getExtensionName						(Type wsiType);
62 
63 const PlatformProperties&		getPlatformProperties					(Type wsiType);
64 
65 VkResult						createSurface							(const InstanceInterface&		vki,
66 																		 VkInstance						instance,
67 																		 Type							wsiType,
68 																		 const Display&					nativeDisplay,
69 																		 const Window&					nativeWindow,
70 																		 const VkAllocationCallbacks*	pAllocator,
71 																		 VkSurfaceKHR*					pSurface);
72 
73 Move<VkSurfaceKHR>				createSurface							(const InstanceInterface&		vki,
74 																		 VkInstance						instance,
75 																		 Type							wsiType,
76 																		 const Display&					nativeDisplay,
77 																		 const Window&					nativeWindow,
78 																		 const VkAllocationCallbacks*	pAllocator = DE_NULL);
79 
80 VkBool32						getPhysicalDeviceSurfaceSupport			(const InstanceInterface&		vki,
81 																		 VkPhysicalDevice				physicalDevice,
82 																		 deUint32						queueFamilyIndex,
83 																		 VkSurfaceKHR					surface);
84 
85 VkSurfaceCapabilitiesKHR		getPhysicalDeviceSurfaceCapabilities	(const InstanceInterface&		vki,
86 																		 VkPhysicalDevice				physicalDevice,
87 																		 VkSurfaceKHR					surface);
88 
89 std::vector<VkSurfaceFormatKHR>	getPhysicalDeviceSurfaceFormats			(const InstanceInterface&		vki,
90 																		 VkPhysicalDevice				physicalDevice,
91 																		 VkSurfaceKHR					surface);
92 
93 std::vector<VkPresentModeKHR>	getPhysicalDeviceSurfacePresentModes	(const InstanceInterface&		vki,
94 																		 VkPhysicalDevice				physicalDevice,
95 																		 VkSurfaceKHR					surface);
96 
97 std::vector<VkImage>			getSwapchainImages						(const DeviceInterface&			vkd,
98 																		 VkDevice						device,
99 																		 VkSwapchainKHR					swapchain);
100 
101 } // wsi
102 } // vk
103 
104 #endif // _VKWSIUTIL_HPP
105