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