1 // Copyright 2015-2023 The Khronos Group Inc.
2 //
3 // SPDX-License-Identifier: Apache-2.0 OR MIT
4 //
5 
6 // This header is generated from the Khronos Vulkan XML API Registry.
7 
8 
9 #ifndef VULKAN_HPP_MACROS_HPP
10 #define VULKAN_HPP_MACROS_HPP
11 
12 #if defined( _MSVC_LANG )
13 #  define VULKAN_HPP_CPLUSPLUS _MSVC_LANG
14 #else
15 #  define VULKAN_HPP_CPLUSPLUS __cplusplus
16 #endif
17 
18 #if 202002L < VULKAN_HPP_CPLUSPLUS
19 #  define VULKAN_HPP_CPP_VERSION 23
20 #elif 201703L < VULKAN_HPP_CPLUSPLUS
21 #  define VULKAN_HPP_CPP_VERSION 20
22 #elif 201402L < VULKAN_HPP_CPLUSPLUS
23 #  define VULKAN_HPP_CPP_VERSION 17
24 #elif 201103L < VULKAN_HPP_CPLUSPLUS
25 #  define VULKAN_HPP_CPP_VERSION 14
26 #elif 199711L < VULKAN_HPP_CPLUSPLUS
27 #  define VULKAN_HPP_CPP_VERSION 11
28 #else
29 #  error "vulkan.hpp needs at least c++ standard version 11"
30 #endif
31 
32 #if defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
33 #  if !defined( VULKAN_HPP_NO_SMART_HANDLE )
34 #    define VULKAN_HPP_NO_SMART_HANDLE
35 #  endif
36 #endif
37 
38 #if defined( VULKAN_HPP_NO_CONSTRUCTORS )
39 #  if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
40 #    define VULKAN_HPP_NO_STRUCT_CONSTRUCTORS
41 #  endif
42 #  if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
43 #    define VULKAN_HPP_NO_UNION_CONSTRUCTORS
44 #  endif
45 #endif
46 
47 #if defined( VULKAN_HPP_NO_SETTERS )
48 #  if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
49 #    define VULKAN_HPP_NO_STRUCT_SETTERS
50 #  endif
51 #  if !defined( VULKAN_HPP_NO_UNION_SETTERS )
52 #    define VULKAN_HPP_NO_UNION_SETTERS
53 #  endif
54 #endif
55 
56 #if !defined( VULKAN_HPP_ASSERT )
57 #  define VULKAN_HPP_ASSERT assert
58 #endif
59 
60 #if !defined( VULKAN_HPP_ASSERT_ON_RESULT )
61 #  define VULKAN_HPP_ASSERT_ON_RESULT VULKAN_HPP_ASSERT
62 #endif
63 
64 #if !defined( VULKAN_HPP_STATIC_ASSERT )
65 # define VULKAN_HPP_STATIC_ASSERT static_assert
66 #endif
67 
68 #if !defined( VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL )
69 #  define VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL 1
70 #endif
71 
72 #if !defined( __has_include )
73 #  define __has_include( x ) false
74 #endif
75 
76 #if ( 201907 <= __cpp_lib_three_way_comparison ) && __has_include( <compare> ) && !defined( VULKAN_HPP_NO_SPACESHIP_OPERATOR )
77 #  define VULKAN_HPP_HAS_SPACESHIP_OPERATOR
78 #endif
79 
80 #if ( 201803 <= __cpp_lib_span )
81 #  define VULKAN_HPP_SUPPORT_SPAN
82 #endif
83 
84 // 32-bit vulkan is not typesafe for non-dispatchable handles, so don't allow copy constructors on this platform by default.
85 // To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
86 #if ( VK_USE_64_BIT_PTR_DEFINES == 1 )
87 #  if !defined( VULKAN_HPP_TYPESAFE_CONVERSION )
88 #    define VULKAN_HPP_TYPESAFE_CONVERSION
89 #  endif
90 #endif
91 
92 #if defined(__GNUC__)
93 # define GCC_VERSION ( __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ )
94 #endif
95 
96 #if !defined( VULKAN_HPP_HAS_UNRESTRICTED_UNIONS )
97 #  if defined( __clang__ )
98 #    if __has_feature( cxx_unrestricted_unions )
99 #      define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
100 #    endif
101 #  elif defined( __GNUC__ )
102 #    if 40600 <= GCC_VERSION
103 #      define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
104 #    endif
105 #  elif defined( _MSC_VER )
106 #    if 1900 <= _MSC_VER
107 #      define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
108 #    endif
109 #  endif
110 #endif
111 
112 #if !defined( VULKAN_HPP_INLINE )
113 #  if defined( __clang__ )
114 #    if __has_attribute( always_inline )
115 #      define VULKAN_HPP_INLINE __attribute__( ( always_inline ) ) __inline__
116 #    else
117 #      define VULKAN_HPP_INLINE inline
118 #    endif
119 #  elif defined( __GNUC__ )
120 #    define VULKAN_HPP_INLINE __attribute__( ( always_inline ) ) __inline__
121 #  elif defined( _MSC_VER )
122 #    define VULKAN_HPP_INLINE inline
123 #  else
124 #    define VULKAN_HPP_INLINE inline
125 #  endif
126 #endif
127 
128 #if defined( VULKAN_HPP_TYPESAFE_CONVERSION )
129 #  define VULKAN_HPP_TYPESAFE_EXPLICIT
130 #else
131 #  define VULKAN_HPP_TYPESAFE_EXPLICIT explicit
132 #endif
133 
134 #if defined( __cpp_constexpr )
135 #  define VULKAN_HPP_CONSTEXPR constexpr
136 #  if 201304 <= __cpp_constexpr
137 #    define VULKAN_HPP_CONSTEXPR_14 constexpr
138 #  else
139 #    define VULKAN_HPP_CONSTEXPR_14
140 #  endif
141 #  if ( 201907 <= __cpp_constexpr ) && ( !defined(__GNUC__) || ( 110400 < GCC_VERSION ) )
142 #    define VULKAN_HPP_CONSTEXPR_20 constexpr
143 #  else
144 #    define VULKAN_HPP_CONSTEXPR_20
145 #  endif
146 #  define VULKAN_HPP_CONST_OR_CONSTEXPR constexpr
147 #else
148 #  define VULKAN_HPP_CONSTEXPR
149 #  define VULKAN_HPP_CONSTEXPR_14
150 #  define VULKAN_HPP_CONST_OR_CONSTEXPR const
151 #endif
152 
153 #if !defined( VULKAN_HPP_CONSTEXPR_INLINE )
154 #  if 201606L <= __cpp_inline_variables
155 #    define VULKAN_HPP_CONSTEXPR_INLINE VULKAN_HPP_CONSTEXPR inline
156 #  else
157 #    define VULKAN_HPP_CONSTEXPR_INLINE VULKAN_HPP_CONSTEXPR
158 #  endif
159 #endif
160 
161 #if !defined( VULKAN_HPP_NOEXCEPT )
162 #  if defined( _MSC_VER ) && ( _MSC_VER <= 1800 )
163 #    define VULKAN_HPP_NOEXCEPT
164 #  else
165 #    define VULKAN_HPP_NOEXCEPT     noexcept
166 #    define VULKAN_HPP_HAS_NOEXCEPT 1
167 #    if defined( VULKAN_HPP_NO_EXCEPTIONS )
168 #      define VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS noexcept
169 #    else
170 #      define VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
171 #    endif
172 #  endif
173 #endif
174 
175 #if 14 <= VULKAN_HPP_CPP_VERSION
176 #  define VULKAN_HPP_DEPRECATED( msg ) [[deprecated( msg )]]
177 #else
178 #  define VULKAN_HPP_DEPRECATED( msg )
179 #endif
180 
181 #if ( 17 <= VULKAN_HPP_CPP_VERSION ) && !defined( VULKAN_HPP_NO_NODISCARD_WARNINGS )
182 #  define VULKAN_HPP_NODISCARD [[nodiscard]]
183 #  if defined( VULKAN_HPP_NO_EXCEPTIONS )
184 #    define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS [[nodiscard]]
185 #  else
186 #    define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
187 #  endif
188 #else
189 #  define VULKAN_HPP_NODISCARD
190 #  define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
191 #endif
192 
193 #if !defined( VULKAN_HPP_NAMESPACE )
194 #  define VULKAN_HPP_NAMESPACE vk
195 #endif
196 
197 #define VULKAN_HPP_STRINGIFY2( text ) #text
198 #define VULKAN_HPP_STRINGIFY( text )  VULKAN_HPP_STRINGIFY2( text )
199 #define VULKAN_HPP_NAMESPACE_STRING   VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE )
200 
201 #if !defined(VULKAN_HPP_DISPATCH_LOADER_DYNAMIC)
202 # if defined( VK_NO_PROTOTYPES )
203 #  define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
204 # else
205 #  define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 0
206 # endif
207 #endif
208 
209 #if !defined( VULKAN_HPP_STORAGE_API )
210 #  if defined( VULKAN_HPP_STORAGE_SHARED )
211 #    if defined( _MSC_VER )
212 #      if defined( VULKAN_HPP_STORAGE_SHARED_EXPORT )
213 #        define VULKAN_HPP_STORAGE_API __declspec( dllexport )
214 #      else
215 #        define VULKAN_HPP_STORAGE_API __declspec( dllimport )
216 #      endif
217 #    elif defined( __clang__ ) || defined( __GNUC__ )
218 #      if defined( VULKAN_HPP_STORAGE_SHARED_EXPORT )
219 #        define VULKAN_HPP_STORAGE_API __attribute__( ( visibility( "default" ) ) )
220 #      else
221 #        define VULKAN_HPP_STORAGE_API
222 #      endif
223 #    else
224 #      define VULKAN_HPP_STORAGE_API
225 #      pragma warning Unknown import / export semantics
226 #    endif
227 #  else
228 #    define VULKAN_HPP_STORAGE_API
229 #  endif
230 #endif
231 
232 namespace VULKAN_HPP_NAMESPACE
233 {
234   class DispatchLoaderDynamic;
235 }  // namespace VULKAN_HPP_NAMESPACE
236 
237 #if !defined( VULKAN_HPP_DEFAULT_DISPATCHER )
238 #  if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
239 #    define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::defaultDispatchLoaderDynamic
240 #    define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE                     \
241       namespace VULKAN_HPP_NAMESPACE                                               \
242       {                                                                            \
243         VULKAN_HPP_STORAGE_API ::VULKAN_HPP_NAMESPACE::DispatchLoaderDynamic defaultDispatchLoaderDynamic; \
244       }
245 namespace VULKAN_HPP_NAMESPACE
246 {
247   extern VULKAN_HPP_STORAGE_API VULKAN_HPP_NAMESPACE::DispatchLoaderDynamic defaultDispatchLoaderDynamic;
248 }  // namespace VULKAN_HPP_NAMESPACE
249 #  else
250 #    define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::getDispatchLoaderStatic()
251 #    define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
252 #  endif
253 #endif
254 
255 #if !defined( VULKAN_HPP_DEFAULT_DISPATCHER_TYPE )
256 #  if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1
257 #    define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::DispatchLoaderDynamic
258 #  else
259 #    define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::DispatchLoaderStatic
260 #  endif
261 #endif
262 
263 #if defined( VULKAN_HPP_NO_DEFAULT_DISPATCHER )
264 #  define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT
265 #  define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT
266 #  define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT
267 #else
268 #  define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT         = {}
269 #  define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT = nullptr
270 #  define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT       = VULKAN_HPP_DEFAULT_DISPATCHER
271 #endif
272 
273 
274 #endif