1 #ifndef _VKWSIPLATFORM_HPP 2 #define _VKWSIPLATFORM_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 WSI Platform Abstraction. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "vkDefs.hpp" 27 #include "tcuVector.hpp" 28 #include "tcuMaybe.hpp" 29 30 namespace vk 31 { 32 namespace wsi 33 { 34 35 class Window 36 { 37 public: ~Window(void)38 virtual ~Window (void) {} 39 40 virtual void resize (const tcu::UVec2& newSize); 41 42 protected: Window(void)43 Window (void) {} 44 45 private: 46 Window (const Window&); // Not allowed 47 Window& operator= (const Window&); // Not allowed 48 }; 49 50 class Display 51 { 52 public: ~Display(void)53 virtual ~Display (void) {} 54 55 virtual Window* createWindow (const tcu::Maybe<tcu::UVec2>& initialSize = tcu::nothing<tcu::UVec2>()) const = 0; 56 57 protected: Display(void)58 Display (void) {} 59 60 private: 61 Display (const Display&); // Not allowed 62 Display& operator= (const Display&); // Not allowed 63 }; 64 65 // WSI implementation-specific APIs 66 67 template<int WsiType> 68 struct TypeTraits; 69 // { 70 // typedef <NativeDisplayType> NativeDisplayType; 71 // typedef <NativeWindowType> NativeWindowType; 72 // }; 73 74 template<int WsiType> 75 struct DisplayInterface : public Display 76 { 77 public: 78 typedef typename TypeTraits<WsiType>::NativeDisplayType NativeType; 79 getNativevk::wsi::DisplayInterface80 NativeType getNative (void) const { return m_native; } 81 82 protected: DisplayInterfacevk::wsi::DisplayInterface83 DisplayInterface (NativeType nativeDisplay) 84 : m_native(nativeDisplay) 85 {} 86 87 const NativeType m_native; 88 }; 89 90 template<int WsiType> 91 struct WindowInterface : public Window 92 { 93 public: 94 typedef typename TypeTraits<WsiType>::NativeWindowType NativeType; 95 getNativevk::wsi::WindowInterface96 NativeType getNative (void) const { return m_native; } 97 98 protected: WindowInterfacevk::wsi::WindowInterface99 WindowInterface (NativeType nativeDisplay) 100 : m_native(nativeDisplay) 101 {} 102 103 const NativeType m_native; 104 }; 105 106 // VK_KHR_xlib_surface 107 108 template<> 109 struct TypeTraits<TYPE_XLIB> 110 { 111 typedef pt::XlibDisplayPtr NativeDisplayType; 112 typedef pt::XlibWindow NativeWindowType; 113 }; 114 115 typedef DisplayInterface<TYPE_XLIB> XlibDisplayInterface; 116 typedef WindowInterface<TYPE_XLIB> XlibWindowInterface; 117 118 // VK_KHR_xcb_surface 119 120 template<> 121 struct TypeTraits<TYPE_XCB> 122 { 123 typedef pt::XcbConnectionPtr NativeDisplayType; 124 typedef pt::XcbWindow NativeWindowType; 125 }; 126 127 typedef DisplayInterface<TYPE_XCB> XcbDisplayInterface; 128 typedef WindowInterface<TYPE_XCB> XcbWindowInterface; 129 130 // VK_KHR_wayland_surface 131 132 template<> 133 struct TypeTraits<TYPE_WAYLAND> 134 { 135 typedef pt::WaylandDisplayPtr NativeDisplayType; 136 typedef pt::WaylandSurfacePtr NativeWindowType; 137 }; 138 139 typedef DisplayInterface<TYPE_WAYLAND> WaylandDisplayInterface; 140 typedef WindowInterface<TYPE_WAYLAND> WaylandWindowInterface; 141 142 // VK_KHR_mir_surface 143 144 template<> 145 struct TypeTraits<TYPE_MIR> 146 { 147 typedef pt::MirConnectionPtr NativeDisplayType; 148 typedef pt::MirSurfacePtr NativeWindowType; 149 }; 150 151 typedef DisplayInterface<TYPE_MIR> MirDisplayInterface; 152 typedef WindowInterface<TYPE_MIR> MirWindowInterface; 153 154 // VK_KHR_android_surface 155 156 template<> 157 struct TypeTraits<TYPE_ANDROID> 158 { 159 typedef pt::AndroidNativeWindowPtr NativeWindowType; 160 }; 161 162 typedef WindowInterface<TYPE_ANDROID> AndroidWindowInterface; 163 164 // VK_KHR_win32_surface 165 166 template<> 167 struct TypeTraits<TYPE_WIN32> 168 { 169 typedef pt::Win32InstanceHandle NativeDisplayType; 170 typedef pt::Win32WindowHandle NativeWindowType; 171 }; 172 173 typedef DisplayInterface<TYPE_WIN32> Win32DisplayInterface; 174 typedef WindowInterface<TYPE_WIN32> Win32WindowInterface; 175 176 // VK_MVK_macos_surface 177 178 template<> 179 struct TypeTraits<TYPE_MACOS> 180 { 181 typedef void* NativeWindowType; 182 }; 183 184 typedef WindowInterface<TYPE_MACOS> MacOSWindowInterface; 185 186 } // wsi 187 } // vk 188 189 #endif // _VKWSIPLATFORM_HPP 190