blob: b0332cca40e83ab4f30a052ab926d396e657e7c6 [file] [log] [blame]
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001// Copyright (c) 2015-2016 The Khronos Group Inc.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a
4// copy of this software and/or associated documentation files (the
5// "Materials"), to deal in the Materials without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Materials, and to
8// permit persons to whom the Materials are furnished to do so, subject to
9// the following conditions:
10//
11// The above copyright notice and this permission notice shall be included
12// in all copies or substantial portions of the Materials.
13//
14// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
21
22// This header is generated from the Khronos Vulkan XML API Registry.
23
24
25#ifndef VULKAN_HPP
26#define VULKAN_HPP
27
28#include <algorithm>
29#include <array>
30#include <cassert>
31#include <cstdint>
32#include <cstring>
33#include <initializer_list>
34#include <string>
35#include <system_error>
36#include <type_traits>
37#include <vulkan/vulkan.h>
38#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
39# include <memory>
40# include <vector>
41#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
42
Lenny Komowebf33162016-08-26 14:10:08 -060043static_assert( VK_HEADER_VERSION == 24 , "Wrong VK_HEADER_VERSION!" );
Lenny Komowbed9b5c2016-08-11 11:23:15 -060044
45// 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
46// To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
Lenny Komowebf33162016-08-26 14:10:08 -060047#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
Lenny Komowbed9b5c2016-08-11 11:23:15 -060048#define VULKAN_HPP_TYPESAFE_CONVERSION 1
49#endif
50
51#if !defined(VULKAN_HPP_HAS_UNRESTRICTED_UNIONS)
52# if defined(__clang__)
53# if __has_feature(cxx_unrestricted_unions)
54# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
55# endif
56# elif defined(__GNUC__)
57# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
58# if 40600 <= GCC_VERSION
59# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
60# endif
61# elif defined(_MSC_VER)
62# if 1900 <= _MSC_VER
63# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
64# endif
65# endif
66#endif
67
68namespace vk
69{
70 template <typename BitType, typename MaskType = VkFlags>
71 class Flags
72 {
73 public:
74 Flags()
75 : m_mask(0)
76 {
77 }
78
79 Flags(BitType bit)
80 : m_mask(static_cast<MaskType>(bit))
81 {
82 }
83
84 Flags(Flags<BitType> const& rhs)
85 : m_mask(rhs.m_mask)
86 {
87 }
88
89 Flags<BitType> & operator=(Flags<BitType> const& rhs)
90 {
91 m_mask = rhs.m_mask;
92 return *this;
93 }
94
95 Flags<BitType> & operator|=(Flags<BitType> const& rhs)
96 {
97 m_mask |= rhs.m_mask;
98 return *this;
99 }
100
101 Flags<BitType> & operator&=(Flags<BitType> const& rhs)
102 {
103 m_mask &= rhs.m_mask;
104 return *this;
105 }
106
107 Flags<BitType> & operator^=(Flags<BitType> const& rhs)
108 {
109 m_mask ^= rhs.m_mask;
110 return *this;
111 }
112
113 Flags<BitType> operator|(Flags<BitType> const& rhs) const
114 {
115 Flags<BitType> result(*this);
116 result |= rhs;
117 return result;
118 }
119
120 Flags<BitType> operator&(Flags<BitType> const& rhs) const
121 {
122 Flags<BitType> result(*this);
123 result &= rhs;
124 return result;
125 }
126
127 Flags<BitType> operator^(Flags<BitType> const& rhs) const
128 {
129 Flags<BitType> result(*this);
130 result ^= rhs;
131 return result;
132 }
133
134 bool operator!() const
135 {
136 return !m_mask;
137 }
138
139 bool operator==(Flags<BitType> const& rhs) const
140 {
141 return m_mask == rhs.m_mask;
142 }
143
144 bool operator!=(Flags<BitType> const& rhs) const
145 {
146 return m_mask != rhs.m_mask;
147 }
148
149 explicit operator bool() const
150 {
151 return !!m_mask;
152 }
153
154 explicit operator MaskType() const
155 {
156 return m_mask;
157 }
158
159 private:
160 MaskType m_mask;
161 };
162
163 template <typename BitType>
164 Flags<BitType> operator|(BitType bit, Flags<BitType> const& flags)
165 {
166 return flags | bit;
167 }
168
169 template <typename BitType>
170 Flags<BitType> operator&(BitType bit, Flags<BitType> const& flags)
171 {
172 return flags & bit;
173 }
174
175 template <typename BitType>
176 Flags<BitType> operator^(BitType bit, Flags<BitType> const& flags)
177 {
178 return flags ^ bit;
179 }
180
181 template <typename RefType>
182 class Optional
183 {
184 public:
185 Optional(RefType & reference) { m_ptr = &reference; }
186 Optional(std::nullptr_t) { m_ptr = nullptr; }
187
188 operator RefType*() const { return m_ptr; }
189 RefType const* operator->() const { return m_ptr; }
190 explicit operator bool() const { return !!m_ptr; }
191
192 private:
193 RefType *m_ptr;
194 };
195
196#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
197 template <typename T>
198 class ArrayProxy
199 {
200 public:
201 ArrayProxy(std::nullptr_t)
202 : m_count(0)
203 , m_ptr(nullptr)
204 {}
205
206 ArrayProxy(T & ptr)
207 : m_count(1)
208 , m_ptr(&ptr)
209 {}
210
211 ArrayProxy(uint32_t count, T * ptr)
212 : m_count(count)
213 , m_ptr(ptr)
214 {}
215
216 template <size_t N>
217 ArrayProxy(std::array<typename std::remove_const<T>::type, N> & data)
218 : m_count(N)
219 , m_ptr(data.data())
220 {}
221
222 template <size_t N>
223 ArrayProxy(std::array<typename std::remove_const<T>::type, N> const& data)
224 : m_count(N)
225 , m_ptr(data.data())
226 {}
227
228 template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
229 ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> & data)
230 : m_count(static_cast<uint32_t>(data.size()))
231 , m_ptr(data.data())
232 {}
233
234 template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
235 ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> const& data)
236 : m_count(static_cast<uint32_t>(data.size()))
237 , m_ptr(data.data())
238 {}
239
240 ArrayProxy(std::initializer_list<T> const& data)
241 : m_count(static_cast<uint32_t>(data.end() - data.begin()))
242 , m_ptr(data.begin())
243 {}
244
245 const T * begin() const
246 {
247 return m_ptr;
248 }
249
250 const T * end() const
251 {
252 return m_ptr + m_count;
253 }
254
255 const T & front() const
256 {
257 assert(m_count && m_ptr);
258 return *m_ptr;
259 }
260
261 const T & back() const
262 {
263 assert(m_count && m_ptr);
264 return *(m_ptr + m_count - 1);
265 }
266
267 bool empty() const
268 {
269 return (m_count == 0);
270 }
271
272 uint32_t size() const
273 {
274 return m_count;
275 }
276
277 T * data() const
278 {
279 return m_ptr;
280 }
281
282 private:
283 uint32_t m_count;
284 T * m_ptr;
285 };
286#endif
287
288 enum class Result
289 {
290 eSuccess = VK_SUCCESS,
291 eNotReady = VK_NOT_READY,
292 eTimeout = VK_TIMEOUT,
293 eEventSet = VK_EVENT_SET,
294 eEventReset = VK_EVENT_RESET,
295 eIncomplete = VK_INCOMPLETE,
296 eErrorOutOfHostMemory = VK_ERROR_OUT_OF_HOST_MEMORY,
297 eErrorOutOfDeviceMemory = VK_ERROR_OUT_OF_DEVICE_MEMORY,
298 eErrorInitializationFailed = VK_ERROR_INITIALIZATION_FAILED,
299 eErrorDeviceLost = VK_ERROR_DEVICE_LOST,
300 eErrorMemoryMapFailed = VK_ERROR_MEMORY_MAP_FAILED,
301 eErrorLayerNotPresent = VK_ERROR_LAYER_NOT_PRESENT,
302 eErrorExtensionNotPresent = VK_ERROR_EXTENSION_NOT_PRESENT,
303 eErrorFeatureNotPresent = VK_ERROR_FEATURE_NOT_PRESENT,
304 eErrorIncompatibleDriver = VK_ERROR_INCOMPATIBLE_DRIVER,
305 eErrorTooManyObjects = VK_ERROR_TOO_MANY_OBJECTS,
306 eErrorFormatNotSupported = VK_ERROR_FORMAT_NOT_SUPPORTED,
Lenny Komowebf33162016-08-26 14:10:08 -0600307 eErrorFragmentedPool = VK_ERROR_FRAGMENTED_POOL,
Lenny Komowbed9b5c2016-08-11 11:23:15 -0600308 eErrorSurfaceLostKHR = VK_ERROR_SURFACE_LOST_KHR,
309 eErrorNativeWindowInUseKHR = VK_ERROR_NATIVE_WINDOW_IN_USE_KHR,
310 eSuboptimalKHR = VK_SUBOPTIMAL_KHR,
311 eErrorOutOfDateKHR = VK_ERROR_OUT_OF_DATE_KHR,
312 eErrorIncompatibleDisplayKHR = VK_ERROR_INCOMPATIBLE_DISPLAY_KHR,
313 eErrorValidationFailedEXT = VK_ERROR_VALIDATION_FAILED_EXT,
314 eErrorInvalidShaderNV = VK_ERROR_INVALID_SHADER_NV
315 };
316
317 inline std::string to_string(Result value)
318 {
319 switch (value)
320 {
321 case Result::eSuccess: return "Success";
322 case Result::eNotReady: return "NotReady";
323 case Result::eTimeout: return "Timeout";
324 case Result::eEventSet: return "EventSet";
325 case Result::eEventReset: return "EventReset";
326 case Result::eIncomplete: return "Incomplete";
327 case Result::eErrorOutOfHostMemory: return "ErrorOutOfHostMemory";
328 case Result::eErrorOutOfDeviceMemory: return "ErrorOutOfDeviceMemory";
329 case Result::eErrorInitializationFailed: return "ErrorInitializationFailed";
330 case Result::eErrorDeviceLost: return "ErrorDeviceLost";
331 case Result::eErrorMemoryMapFailed: return "ErrorMemoryMapFailed";
332 case Result::eErrorLayerNotPresent: return "ErrorLayerNotPresent";
333 case Result::eErrorExtensionNotPresent: return "ErrorExtensionNotPresent";
334 case Result::eErrorFeatureNotPresent: return "ErrorFeatureNotPresent";
335 case Result::eErrorIncompatibleDriver: return "ErrorIncompatibleDriver";
336 case Result::eErrorTooManyObjects: return "ErrorTooManyObjects";
337 case Result::eErrorFormatNotSupported: return "ErrorFormatNotSupported";
Lenny Komowebf33162016-08-26 14:10:08 -0600338 case Result::eErrorFragmentedPool: return "ErrorFragmentedPool";
Lenny Komowbed9b5c2016-08-11 11:23:15 -0600339 case Result::eErrorSurfaceLostKHR: return "ErrorSurfaceLostKHR";
340 case Result::eErrorNativeWindowInUseKHR: return "ErrorNativeWindowInUseKHR";
341 case Result::eSuboptimalKHR: return "SuboptimalKHR";
342 case Result::eErrorOutOfDateKHR: return "ErrorOutOfDateKHR";
343 case Result::eErrorIncompatibleDisplayKHR: return "ErrorIncompatibleDisplayKHR";
344 case Result::eErrorValidationFailedEXT: return "ErrorValidationFailedEXT";
345 case Result::eErrorInvalidShaderNV: return "ErrorInvalidShaderNV";
346 default: return "invalid";
347 }
348 }
349
350#if defined(_MSC_VER) && (_MSC_VER == 1800)
351# define noexcept _NOEXCEPT
352#endif
353
354 class ErrorCategoryImpl : public std::error_category
355 {
356 public:
357 virtual const char* name() const noexcept override { return "vk::Result"; }
358 virtual std::string message(int ev) const override { return to_string(static_cast<Result>(ev)); }
359 };
360
361#if defined(_MSC_VER) && (_MSC_VER == 1800)
362# undef noexcept
363#endif
364
365 inline const std::error_category& errorCategory()
366 {
367 static ErrorCategoryImpl instance;
368 return instance;
369 }
370
371 inline std::error_code make_error_code(Result e)
372 {
373 return std::error_code(static_cast<int>(e), errorCategory());
374 }
375
376 inline std::error_condition make_error_condition(Result e)
377 {
378 return std::error_condition(static_cast<int>(e), errorCategory());
379 }
380
381} // namespace vk
382
383namespace std
384{
385 template <>
386 struct is_error_code_enum<vk::Result> : public true_type
387 {};
388}
389
390namespace vk
391{
392 template <typename T>
393 struct ResultValue
394 {
395 ResultValue( Result r, T & v )
396 : result( r )
397 , value( v )
398 {}
399
400 Result result;
401 T value;
402 };
403
404 template <typename T>
405 struct ResultValueType
406 {
407#ifdef VULKAN_HPP_NO_EXCEPTIONS
408 typedef ResultValue<T> type;
409#else
410 typedef T type;
411#endif
412 };
413
414 template <> struct ResultValueType<void>
415 {
416#ifdef VULKAN_HPP_NO_EXCEPTIONS
417 typedef Result type;
418#else
419 typedef void type;
420#endif
421 };
422
423 inline ResultValueType<void>::type createResultValue( Result result, char const * message )
424 {
425#ifdef VULKAN_HPP_NO_EXCEPTIONS
426 assert( result == Result::eSuccess );
427 return result;
428#else
429 if ( result != Result::eSuccess )
430 {
431 throw std::system_error( result, message );
432 }
433#endif
434 }
435
436 template <typename T>
437 inline typename ResultValueType<T>::type createResultValue( Result result, T & data, char const * message )
438 {
439#ifdef VULKAN_HPP_NO_EXCEPTIONS
440 assert( result == Result::eSuccess );
441 return ResultValue<T>( result, data );
442#else
443 if ( result != Result::eSuccess )
444 {
445 throw std::system_error( result, message );
446 }
447 return data;
448#endif
449 }
450
451 inline Result createResultValue( Result result, char const * message, std::initializer_list<Result> successCodes )
452 {
453#ifdef VULKAN_HPP_NO_EXCEPTIONS
454 assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
455#else
456 if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
457 {
458 throw std::system_error( result, message );
459 }
460#endif
461 return result;
462 }
463
464 template <typename T>
465 inline ResultValue<T> createResultValue( Result result, T & data, char const * message, std::initializer_list<Result> successCodes )
466 {
467#ifdef VULKAN_HPP_NO_EXCEPTIONS
468 assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
469#else
470 if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
471 {
472 throw std::system_error( result, message );
473 }
474#endif
475 return ResultValue<T>( result, data );
476 }
477
478 using SampleMask = uint32_t;
479
480 using Bool32 = uint32_t;
481
482 using DeviceSize = uint64_t;
483
484 enum class FramebufferCreateFlagBits
485 {
486 };
487
488 using FramebufferCreateFlags = Flags<FramebufferCreateFlagBits, VkFramebufferCreateFlags>;
489
490 inline FramebufferCreateFlags operator|( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 )
491 {
492 return FramebufferCreateFlags( bit0 ) | bit1;
493 }
494
495 enum class QueryPoolCreateFlagBits
496 {
497 };
498
499 using QueryPoolCreateFlags = Flags<QueryPoolCreateFlagBits, VkQueryPoolCreateFlags>;
500
501 inline QueryPoolCreateFlags operator|( QueryPoolCreateFlagBits bit0, QueryPoolCreateFlagBits bit1 )
502 {
503 return QueryPoolCreateFlags( bit0 ) | bit1;
504 }
505
506 enum class RenderPassCreateFlagBits
507 {
508 };
509
510 using RenderPassCreateFlags = Flags<RenderPassCreateFlagBits, VkRenderPassCreateFlags>;
511
512 inline RenderPassCreateFlags operator|( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 )
513 {
514 return RenderPassCreateFlags( bit0 ) | bit1;
515 }
516
517 enum class SamplerCreateFlagBits
518 {
519 };
520
521 using SamplerCreateFlags = Flags<SamplerCreateFlagBits, VkSamplerCreateFlags>;
522
523 inline SamplerCreateFlags operator|( SamplerCreateFlagBits bit0, SamplerCreateFlagBits bit1 )
524 {
525 return SamplerCreateFlags( bit0 ) | bit1;
526 }
527
528 enum class PipelineLayoutCreateFlagBits
529 {
530 };
531
532 using PipelineLayoutCreateFlags = Flags<PipelineLayoutCreateFlagBits, VkPipelineLayoutCreateFlags>;
533
534 inline PipelineLayoutCreateFlags operator|( PipelineLayoutCreateFlagBits bit0, PipelineLayoutCreateFlagBits bit1 )
535 {
536 return PipelineLayoutCreateFlags( bit0 ) | bit1;
537 }
538
539 enum class PipelineCacheCreateFlagBits
540 {
541 };
542
543 using PipelineCacheCreateFlags = Flags<PipelineCacheCreateFlagBits, VkPipelineCacheCreateFlags>;
544
545 inline PipelineCacheCreateFlags operator|( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 )
546 {
547 return PipelineCacheCreateFlags( bit0 ) | bit1;
548 }
549
550 enum class PipelineDepthStencilStateCreateFlagBits
551 {
552 };
553
554 using PipelineDepthStencilStateCreateFlags = Flags<PipelineDepthStencilStateCreateFlagBits, VkPipelineDepthStencilStateCreateFlags>;
555
556 inline PipelineDepthStencilStateCreateFlags operator|( PipelineDepthStencilStateCreateFlagBits bit0, PipelineDepthStencilStateCreateFlagBits bit1 )
557 {
558 return PipelineDepthStencilStateCreateFlags( bit0 ) | bit1;
559 }
560
561 enum class PipelineDynamicStateCreateFlagBits
562 {
563 };
564
565 using PipelineDynamicStateCreateFlags = Flags<PipelineDynamicStateCreateFlagBits, VkPipelineDynamicStateCreateFlags>;
566
567 inline PipelineDynamicStateCreateFlags operator|( PipelineDynamicStateCreateFlagBits bit0, PipelineDynamicStateCreateFlagBits bit1 )
568 {
569 return PipelineDynamicStateCreateFlags( bit0 ) | bit1;
570 }
571
572 enum class PipelineColorBlendStateCreateFlagBits
573 {
574 };
575
576 using PipelineColorBlendStateCreateFlags = Flags<PipelineColorBlendStateCreateFlagBits, VkPipelineColorBlendStateCreateFlags>;
577
578 inline PipelineColorBlendStateCreateFlags operator|( PipelineColorBlendStateCreateFlagBits bit0, PipelineColorBlendStateCreateFlagBits bit1 )
579 {
580 return PipelineColorBlendStateCreateFlags( bit0 ) | bit1;
581 }
582
583 enum class PipelineMultisampleStateCreateFlagBits
584 {
585 };
586
587 using PipelineMultisampleStateCreateFlags = Flags<PipelineMultisampleStateCreateFlagBits, VkPipelineMultisampleStateCreateFlags>;
588
589 inline PipelineMultisampleStateCreateFlags operator|( PipelineMultisampleStateCreateFlagBits bit0, PipelineMultisampleStateCreateFlagBits bit1 )
590 {
591 return PipelineMultisampleStateCreateFlags( bit0 ) | bit1;
592 }
593
594 enum class PipelineRasterizationStateCreateFlagBits
595 {
596 };
597
598 using PipelineRasterizationStateCreateFlags = Flags<PipelineRasterizationStateCreateFlagBits, VkPipelineRasterizationStateCreateFlags>;
599
600 inline PipelineRasterizationStateCreateFlags operator|( PipelineRasterizationStateCreateFlagBits bit0, PipelineRasterizationStateCreateFlagBits bit1 )
601 {
602 return PipelineRasterizationStateCreateFlags( bit0 ) | bit1;
603 }
604
605 enum class PipelineViewportStateCreateFlagBits
606 {
607 };
608
609 using PipelineViewportStateCreateFlags = Flags<PipelineViewportStateCreateFlagBits, VkPipelineViewportStateCreateFlags>;
610
611 inline PipelineViewportStateCreateFlags operator|( PipelineViewportStateCreateFlagBits bit0, PipelineViewportStateCreateFlagBits bit1 )
612 {
613 return PipelineViewportStateCreateFlags( bit0 ) | bit1;
614 }
615
616 enum class PipelineTessellationStateCreateFlagBits
617 {
618 };
619
620 using PipelineTessellationStateCreateFlags = Flags<PipelineTessellationStateCreateFlagBits, VkPipelineTessellationStateCreateFlags>;
621
622 inline PipelineTessellationStateCreateFlags operator|( PipelineTessellationStateCreateFlagBits bit0, PipelineTessellationStateCreateFlagBits bit1 )
623 {
624 return PipelineTessellationStateCreateFlags( bit0 ) | bit1;
625 }
626
627 enum class PipelineInputAssemblyStateCreateFlagBits
628 {
629 };
630
631 using PipelineInputAssemblyStateCreateFlags = Flags<PipelineInputAssemblyStateCreateFlagBits, VkPipelineInputAssemblyStateCreateFlags>;
632
633 inline PipelineInputAssemblyStateCreateFlags operator|( PipelineInputAssemblyStateCreateFlagBits bit0, PipelineInputAssemblyStateCreateFlagBits bit1 )
634 {
635 return PipelineInputAssemblyStateCreateFlags( bit0 ) | bit1;
636 }
637
638 enum class PipelineVertexInputStateCreateFlagBits
639 {
640 };
641
642 using PipelineVertexInputStateCreateFlags = Flags<PipelineVertexInputStateCreateFlagBits, VkPipelineVertexInputStateCreateFlags>;
643
644 inline PipelineVertexInputStateCreateFlags operator|( PipelineVertexInputStateCreateFlagBits bit0, PipelineVertexInputStateCreateFlagBits bit1 )
645 {
646 return PipelineVertexInputStateCreateFlags( bit0 ) | bit1;
647 }
648
649 enum class PipelineShaderStageCreateFlagBits
650 {
651 };
652
653 using PipelineShaderStageCreateFlags = Flags<PipelineShaderStageCreateFlagBits, VkPipelineShaderStageCreateFlags>;
654
655 inline PipelineShaderStageCreateFlags operator|( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 )
656 {
657 return PipelineShaderStageCreateFlags( bit0 ) | bit1;
658 }
659
660 enum class DescriptorSetLayoutCreateFlagBits
661 {
662 };
663
664 using DescriptorSetLayoutCreateFlags = Flags<DescriptorSetLayoutCreateFlagBits, VkDescriptorSetLayoutCreateFlags>;
665
666 inline DescriptorSetLayoutCreateFlags operator|( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 )
667 {
668 return DescriptorSetLayoutCreateFlags( bit0 ) | bit1;
669 }
670
671 enum class BufferViewCreateFlagBits
672 {
673 };
674
675 using BufferViewCreateFlags = Flags<BufferViewCreateFlagBits, VkBufferViewCreateFlags>;
676
677 inline BufferViewCreateFlags operator|( BufferViewCreateFlagBits bit0, BufferViewCreateFlagBits bit1 )
678 {
679 return BufferViewCreateFlags( bit0 ) | bit1;
680 }
681
682 enum class InstanceCreateFlagBits
683 {
684 };
685
686 using InstanceCreateFlags = Flags<InstanceCreateFlagBits, VkInstanceCreateFlags>;
687
688 inline InstanceCreateFlags operator|( InstanceCreateFlagBits bit0, InstanceCreateFlagBits bit1 )
689 {
690 return InstanceCreateFlags( bit0 ) | bit1;
691 }
692
693 enum class DeviceCreateFlagBits
694 {
695 };
696
697 using DeviceCreateFlags = Flags<DeviceCreateFlagBits, VkDeviceCreateFlags>;
698
699 inline DeviceCreateFlags operator|( DeviceCreateFlagBits bit0, DeviceCreateFlagBits bit1 )
700 {
701 return DeviceCreateFlags( bit0 ) | bit1;
702 }
703
704 enum class DeviceQueueCreateFlagBits
705 {
706 };
707
708 using DeviceQueueCreateFlags = Flags<DeviceQueueCreateFlagBits, VkDeviceQueueCreateFlags>;
709
710 inline DeviceQueueCreateFlags operator|( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 )
711 {
712 return DeviceQueueCreateFlags( bit0 ) | bit1;
713 }
714
715 enum class ImageViewCreateFlagBits
716 {
717 };
718
719 using ImageViewCreateFlags = Flags<ImageViewCreateFlagBits, VkImageViewCreateFlags>;
720
721 inline ImageViewCreateFlags operator|( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 )
722 {
723 return ImageViewCreateFlags( bit0 ) | bit1;
724 }
725
726 enum class SemaphoreCreateFlagBits
727 {
728 };
729
730 using SemaphoreCreateFlags = Flags<SemaphoreCreateFlagBits, VkSemaphoreCreateFlags>;
731
732 inline SemaphoreCreateFlags operator|( SemaphoreCreateFlagBits bit0, SemaphoreCreateFlagBits bit1 )
733 {
734 return SemaphoreCreateFlags( bit0 ) | bit1;
735 }
736
737 enum class ShaderModuleCreateFlagBits
738 {
739 };
740
741 using ShaderModuleCreateFlags = Flags<ShaderModuleCreateFlagBits, VkShaderModuleCreateFlags>;
742
743 inline ShaderModuleCreateFlags operator|( ShaderModuleCreateFlagBits bit0, ShaderModuleCreateFlagBits bit1 )
744 {
745 return ShaderModuleCreateFlags( bit0 ) | bit1;
746 }
747
748 enum class EventCreateFlagBits
749 {
750 };
751
752 using EventCreateFlags = Flags<EventCreateFlagBits, VkEventCreateFlags>;
753
754 inline EventCreateFlags operator|( EventCreateFlagBits bit0, EventCreateFlagBits bit1 )
755 {
756 return EventCreateFlags( bit0 ) | bit1;
757 }
758
759 enum class MemoryMapFlagBits
760 {
761 };
762
763 using MemoryMapFlags = Flags<MemoryMapFlagBits, VkMemoryMapFlags>;
764
765 inline MemoryMapFlags operator|( MemoryMapFlagBits bit0, MemoryMapFlagBits bit1 )
766 {
767 return MemoryMapFlags( bit0 ) | bit1;
768 }
769
770 enum class SubpassDescriptionFlagBits
771 {
772 };
773
774 using SubpassDescriptionFlags = Flags<SubpassDescriptionFlagBits, VkSubpassDescriptionFlags>;
775
776 inline SubpassDescriptionFlags operator|( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 )
777 {
778 return SubpassDescriptionFlags( bit0 ) | bit1;
779 }
780
781 enum class DescriptorPoolResetFlagBits
782 {
783 };
784
785 using DescriptorPoolResetFlags = Flags<DescriptorPoolResetFlagBits, VkDescriptorPoolResetFlags>;
786
787 inline DescriptorPoolResetFlags operator|( DescriptorPoolResetFlagBits bit0, DescriptorPoolResetFlagBits bit1 )
788 {
789 return DescriptorPoolResetFlags( bit0 ) | bit1;
790 }
791
792 enum class SwapchainCreateFlagBitsKHR
793 {
794 };
795
796 using SwapchainCreateFlagsKHR = Flags<SwapchainCreateFlagBitsKHR, VkSwapchainCreateFlagsKHR>;
797
798 inline SwapchainCreateFlagsKHR operator|( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 )
799 {
800 return SwapchainCreateFlagsKHR( bit0 ) | bit1;
801 }
802
803 enum class DisplayModeCreateFlagBitsKHR
804 {
805 };
806
807 using DisplayModeCreateFlagsKHR = Flags<DisplayModeCreateFlagBitsKHR, VkDisplayModeCreateFlagsKHR>;
808
809 inline DisplayModeCreateFlagsKHR operator|( DisplayModeCreateFlagBitsKHR bit0, DisplayModeCreateFlagBitsKHR bit1 )
810 {
811 return DisplayModeCreateFlagsKHR( bit0 ) | bit1;
812 }
813
814 enum class DisplaySurfaceCreateFlagBitsKHR
815 {
816 };
817
818 using DisplaySurfaceCreateFlagsKHR = Flags<DisplaySurfaceCreateFlagBitsKHR, VkDisplaySurfaceCreateFlagsKHR>;
819
820 inline DisplaySurfaceCreateFlagsKHR operator|( DisplaySurfaceCreateFlagBitsKHR bit0, DisplaySurfaceCreateFlagBitsKHR bit1 )
821 {
822 return DisplaySurfaceCreateFlagsKHR( bit0 ) | bit1;
823 }
824
825#ifdef VK_USE_PLATFORM_ANDROID_KHR
826 enum class AndroidSurfaceCreateFlagBitsKHR
827 {
828 };
829#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
830
831#ifdef VK_USE_PLATFORM_ANDROID_KHR
832 using AndroidSurfaceCreateFlagsKHR = Flags<AndroidSurfaceCreateFlagBitsKHR, VkAndroidSurfaceCreateFlagsKHR>;
833
834 inline AndroidSurfaceCreateFlagsKHR operator|( AndroidSurfaceCreateFlagBitsKHR bit0, AndroidSurfaceCreateFlagBitsKHR bit1 )
835 {
836 return AndroidSurfaceCreateFlagsKHR( bit0 ) | bit1;
837 }
838#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
839
840#ifdef VK_USE_PLATFORM_MIR_KHR
841 enum class MirSurfaceCreateFlagBitsKHR
842 {
843 };
844#endif /*VK_USE_PLATFORM_MIR_KHR*/
845
846#ifdef VK_USE_PLATFORM_MIR_KHR
847 using MirSurfaceCreateFlagsKHR = Flags<MirSurfaceCreateFlagBitsKHR, VkMirSurfaceCreateFlagsKHR>;
848
849 inline MirSurfaceCreateFlagsKHR operator|( MirSurfaceCreateFlagBitsKHR bit0, MirSurfaceCreateFlagBitsKHR bit1 )
850 {
851 return MirSurfaceCreateFlagsKHR( bit0 ) | bit1;
852 }
853#endif /*VK_USE_PLATFORM_MIR_KHR*/
854
855#ifdef VK_USE_PLATFORM_WAYLAND_KHR
856 enum class WaylandSurfaceCreateFlagBitsKHR
857 {
858 };
859#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
860
861#ifdef VK_USE_PLATFORM_WAYLAND_KHR
862 using WaylandSurfaceCreateFlagsKHR = Flags<WaylandSurfaceCreateFlagBitsKHR, VkWaylandSurfaceCreateFlagsKHR>;
863
864 inline WaylandSurfaceCreateFlagsKHR operator|( WaylandSurfaceCreateFlagBitsKHR bit0, WaylandSurfaceCreateFlagBitsKHR bit1 )
865 {
866 return WaylandSurfaceCreateFlagsKHR( bit0 ) | bit1;
867 }
868#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
869
870#ifdef VK_USE_PLATFORM_WIN32_KHR
871 enum class Win32SurfaceCreateFlagBitsKHR
872 {
873 };
874#endif /*VK_USE_PLATFORM_WIN32_KHR*/
875
876#ifdef VK_USE_PLATFORM_WIN32_KHR
877 using Win32SurfaceCreateFlagsKHR = Flags<Win32SurfaceCreateFlagBitsKHR, VkWin32SurfaceCreateFlagsKHR>;
878
879 inline Win32SurfaceCreateFlagsKHR operator|( Win32SurfaceCreateFlagBitsKHR bit0, Win32SurfaceCreateFlagBitsKHR bit1 )
880 {
881 return Win32SurfaceCreateFlagsKHR( bit0 ) | bit1;
882 }
883#endif /*VK_USE_PLATFORM_WIN32_KHR*/
884
885#ifdef VK_USE_PLATFORM_XLIB_KHR
886 enum class XlibSurfaceCreateFlagBitsKHR
887 {
888 };
889#endif /*VK_USE_PLATFORM_XLIB_KHR*/
890
891#ifdef VK_USE_PLATFORM_XLIB_KHR
892 using XlibSurfaceCreateFlagsKHR = Flags<XlibSurfaceCreateFlagBitsKHR, VkXlibSurfaceCreateFlagsKHR>;
893
894 inline XlibSurfaceCreateFlagsKHR operator|( XlibSurfaceCreateFlagBitsKHR bit0, XlibSurfaceCreateFlagBitsKHR bit1 )
895 {
896 return XlibSurfaceCreateFlagsKHR( bit0 ) | bit1;
897 }
898#endif /*VK_USE_PLATFORM_XLIB_KHR*/
899
900#ifdef VK_USE_PLATFORM_XCB_KHR
901 enum class XcbSurfaceCreateFlagBitsKHR
902 {
903 };
904#endif /*VK_USE_PLATFORM_XCB_KHR*/
905
906#ifdef VK_USE_PLATFORM_XCB_KHR
907 using XcbSurfaceCreateFlagsKHR = Flags<XcbSurfaceCreateFlagBitsKHR, VkXcbSurfaceCreateFlagsKHR>;
908
909 inline XcbSurfaceCreateFlagsKHR operator|( XcbSurfaceCreateFlagBitsKHR bit0, XcbSurfaceCreateFlagBitsKHR bit1 )
910 {
911 return XcbSurfaceCreateFlagsKHR( bit0 ) | bit1;
912 }
913#endif /*VK_USE_PLATFORM_XCB_KHR*/
914
915 class DeviceMemory
916 {
917 public:
918 DeviceMemory()
919 : m_deviceMemory(VK_NULL_HANDLE)
920 {}
921
922#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
923 DeviceMemory(VkDeviceMemory deviceMemory)
924 : m_deviceMemory(deviceMemory)
925 {}
926
927 DeviceMemory& operator=(VkDeviceMemory deviceMemory)
928 {
929 m_deviceMemory = deviceMemory;
930 return *this;
931 }
932#endif
933
Lenny Komowebf33162016-08-26 14:10:08 -0600934 bool operator==(DeviceMemory const &rhs) const
935 {
936 return m_deviceMemory == rhs.m_deviceMemory;
937 }
938
939 bool operator!=(DeviceMemory const &rhs) const
940 {
941 return m_deviceMemory != rhs.m_deviceMemory;
942 }
943
944 bool operator<(DeviceMemory const &rhs) const
945 {
946 return m_deviceMemory < rhs.m_deviceMemory;
947 }
948
Lenny Komowbed9b5c2016-08-11 11:23:15 -0600949#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
950 explicit
951#endif
952 operator VkDeviceMemory() const
953 {
954 return m_deviceMemory;
955 }
956
957 explicit operator bool() const
958 {
959 return m_deviceMemory != VK_NULL_HANDLE;
960 }
961
962 bool operator!() const
963 {
964 return m_deviceMemory == VK_NULL_HANDLE;
965 }
966
967 private:
968 VkDeviceMemory m_deviceMemory;
969 };
970 static_assert( sizeof( DeviceMemory ) == sizeof( VkDeviceMemory ), "handle and wrapper have different size!" );
971
972 class CommandPool
973 {
974 public:
975 CommandPool()
976 : m_commandPool(VK_NULL_HANDLE)
977 {}
978
979#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
980 CommandPool(VkCommandPool commandPool)
981 : m_commandPool(commandPool)
982 {}
983
984 CommandPool& operator=(VkCommandPool commandPool)
985 {
986 m_commandPool = commandPool;
987 return *this;
988 }
989#endif
990
Lenny Komowebf33162016-08-26 14:10:08 -0600991 bool operator==(CommandPool const &rhs) const
992 {
993 return m_commandPool == rhs.m_commandPool;
994 }
995
996 bool operator!=(CommandPool const &rhs) const
997 {
998 return m_commandPool != rhs.m_commandPool;
999 }
1000
1001 bool operator<(CommandPool const &rhs) const
1002 {
1003 return m_commandPool < rhs.m_commandPool;
1004 }
1005
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001006#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1007 explicit
1008#endif
1009 operator VkCommandPool() const
1010 {
1011 return m_commandPool;
1012 }
1013
1014 explicit operator bool() const
1015 {
1016 return m_commandPool != VK_NULL_HANDLE;
1017 }
1018
1019 bool operator!() const
1020 {
1021 return m_commandPool == VK_NULL_HANDLE;
1022 }
1023
1024 private:
1025 VkCommandPool m_commandPool;
1026 };
1027 static_assert( sizeof( CommandPool ) == sizeof( VkCommandPool ), "handle and wrapper have different size!" );
1028
1029 class Buffer
1030 {
1031 public:
1032 Buffer()
1033 : m_buffer(VK_NULL_HANDLE)
1034 {}
1035
1036#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1037 Buffer(VkBuffer buffer)
1038 : m_buffer(buffer)
1039 {}
1040
1041 Buffer& operator=(VkBuffer buffer)
1042 {
1043 m_buffer = buffer;
1044 return *this;
1045 }
1046#endif
1047
Lenny Komowebf33162016-08-26 14:10:08 -06001048 bool operator==(Buffer const &rhs) const
1049 {
1050 return m_buffer == rhs.m_buffer;
1051 }
1052
1053 bool operator!=(Buffer const &rhs) const
1054 {
1055 return m_buffer != rhs.m_buffer;
1056 }
1057
1058 bool operator<(Buffer const &rhs) const
1059 {
1060 return m_buffer < rhs.m_buffer;
1061 }
1062
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001063#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1064 explicit
1065#endif
1066 operator VkBuffer() const
1067 {
1068 return m_buffer;
1069 }
1070
1071 explicit operator bool() const
1072 {
1073 return m_buffer != VK_NULL_HANDLE;
1074 }
1075
1076 bool operator!() const
1077 {
1078 return m_buffer == VK_NULL_HANDLE;
1079 }
1080
1081 private:
1082 VkBuffer m_buffer;
1083 };
1084 static_assert( sizeof( Buffer ) == sizeof( VkBuffer ), "handle and wrapper have different size!" );
1085
1086 class BufferView
1087 {
1088 public:
1089 BufferView()
1090 : m_bufferView(VK_NULL_HANDLE)
1091 {}
1092
1093#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1094 BufferView(VkBufferView bufferView)
1095 : m_bufferView(bufferView)
1096 {}
1097
1098 BufferView& operator=(VkBufferView bufferView)
1099 {
1100 m_bufferView = bufferView;
1101 return *this;
1102 }
1103#endif
1104
Lenny Komowebf33162016-08-26 14:10:08 -06001105 bool operator==(BufferView const &rhs) const
1106 {
1107 return m_bufferView == rhs.m_bufferView;
1108 }
1109
1110 bool operator!=(BufferView const &rhs) const
1111 {
1112 return m_bufferView != rhs.m_bufferView;
1113 }
1114
1115 bool operator<(BufferView const &rhs) const
1116 {
1117 return m_bufferView < rhs.m_bufferView;
1118 }
1119
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001120#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1121 explicit
1122#endif
1123 operator VkBufferView() const
1124 {
1125 return m_bufferView;
1126 }
1127
1128 explicit operator bool() const
1129 {
1130 return m_bufferView != VK_NULL_HANDLE;
1131 }
1132
1133 bool operator!() const
1134 {
1135 return m_bufferView == VK_NULL_HANDLE;
1136 }
1137
1138 private:
1139 VkBufferView m_bufferView;
1140 };
1141 static_assert( sizeof( BufferView ) == sizeof( VkBufferView ), "handle and wrapper have different size!" );
1142
1143 class Image
1144 {
1145 public:
1146 Image()
1147 : m_image(VK_NULL_HANDLE)
1148 {}
1149
1150#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1151 Image(VkImage image)
1152 : m_image(image)
1153 {}
1154
1155 Image& operator=(VkImage image)
1156 {
1157 m_image = image;
1158 return *this;
1159 }
1160#endif
1161
Lenny Komowebf33162016-08-26 14:10:08 -06001162 bool operator==(Image const &rhs) const
1163 {
1164 return m_image == rhs.m_image;
1165 }
1166
1167 bool operator!=(Image const &rhs) const
1168 {
1169 return m_image != rhs.m_image;
1170 }
1171
1172 bool operator<(Image const &rhs) const
1173 {
1174 return m_image < rhs.m_image;
1175 }
1176
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001177#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1178 explicit
1179#endif
1180 operator VkImage() const
1181 {
1182 return m_image;
1183 }
1184
1185 explicit operator bool() const
1186 {
1187 return m_image != VK_NULL_HANDLE;
1188 }
1189
1190 bool operator!() const
1191 {
1192 return m_image == VK_NULL_HANDLE;
1193 }
1194
1195 private:
1196 VkImage m_image;
1197 };
1198 static_assert( sizeof( Image ) == sizeof( VkImage ), "handle and wrapper have different size!" );
1199
1200 class ImageView
1201 {
1202 public:
1203 ImageView()
1204 : m_imageView(VK_NULL_HANDLE)
1205 {}
1206
1207#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1208 ImageView(VkImageView imageView)
1209 : m_imageView(imageView)
1210 {}
1211
1212 ImageView& operator=(VkImageView imageView)
1213 {
1214 m_imageView = imageView;
1215 return *this;
1216 }
1217#endif
1218
Lenny Komowebf33162016-08-26 14:10:08 -06001219 bool operator==(ImageView const &rhs) const
1220 {
1221 return m_imageView == rhs.m_imageView;
1222 }
1223
1224 bool operator!=(ImageView const &rhs) const
1225 {
1226 return m_imageView != rhs.m_imageView;
1227 }
1228
1229 bool operator<(ImageView const &rhs) const
1230 {
1231 return m_imageView < rhs.m_imageView;
1232 }
1233
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001234#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1235 explicit
1236#endif
1237 operator VkImageView() const
1238 {
1239 return m_imageView;
1240 }
1241
1242 explicit operator bool() const
1243 {
1244 return m_imageView != VK_NULL_HANDLE;
1245 }
1246
1247 bool operator!() const
1248 {
1249 return m_imageView == VK_NULL_HANDLE;
1250 }
1251
1252 private:
1253 VkImageView m_imageView;
1254 };
1255 static_assert( sizeof( ImageView ) == sizeof( VkImageView ), "handle and wrapper have different size!" );
1256
1257 class ShaderModule
1258 {
1259 public:
1260 ShaderModule()
1261 : m_shaderModule(VK_NULL_HANDLE)
1262 {}
1263
1264#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1265 ShaderModule(VkShaderModule shaderModule)
1266 : m_shaderModule(shaderModule)
1267 {}
1268
1269 ShaderModule& operator=(VkShaderModule shaderModule)
1270 {
1271 m_shaderModule = shaderModule;
1272 return *this;
1273 }
1274#endif
1275
Lenny Komowebf33162016-08-26 14:10:08 -06001276 bool operator==(ShaderModule const &rhs) const
1277 {
1278 return m_shaderModule == rhs.m_shaderModule;
1279 }
1280
1281 bool operator!=(ShaderModule const &rhs) const
1282 {
1283 return m_shaderModule != rhs.m_shaderModule;
1284 }
1285
1286 bool operator<(ShaderModule const &rhs) const
1287 {
1288 return m_shaderModule < rhs.m_shaderModule;
1289 }
1290
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001291#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1292 explicit
1293#endif
1294 operator VkShaderModule() const
1295 {
1296 return m_shaderModule;
1297 }
1298
1299 explicit operator bool() const
1300 {
1301 return m_shaderModule != VK_NULL_HANDLE;
1302 }
1303
1304 bool operator!() const
1305 {
1306 return m_shaderModule == VK_NULL_HANDLE;
1307 }
1308
1309 private:
1310 VkShaderModule m_shaderModule;
1311 };
1312 static_assert( sizeof( ShaderModule ) == sizeof( VkShaderModule ), "handle and wrapper have different size!" );
1313
1314 class Pipeline
1315 {
1316 public:
1317 Pipeline()
1318 : m_pipeline(VK_NULL_HANDLE)
1319 {}
1320
1321#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1322 Pipeline(VkPipeline pipeline)
1323 : m_pipeline(pipeline)
1324 {}
1325
1326 Pipeline& operator=(VkPipeline pipeline)
1327 {
1328 m_pipeline = pipeline;
1329 return *this;
1330 }
1331#endif
1332
Lenny Komowebf33162016-08-26 14:10:08 -06001333 bool operator==(Pipeline const &rhs) const
1334 {
1335 return m_pipeline == rhs.m_pipeline;
1336 }
1337
1338 bool operator!=(Pipeline const &rhs) const
1339 {
1340 return m_pipeline != rhs.m_pipeline;
1341 }
1342
1343 bool operator<(Pipeline const &rhs) const
1344 {
1345 return m_pipeline < rhs.m_pipeline;
1346 }
1347
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001348#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1349 explicit
1350#endif
1351 operator VkPipeline() const
1352 {
1353 return m_pipeline;
1354 }
1355
1356 explicit operator bool() const
1357 {
1358 return m_pipeline != VK_NULL_HANDLE;
1359 }
1360
1361 bool operator!() const
1362 {
1363 return m_pipeline == VK_NULL_HANDLE;
1364 }
1365
1366 private:
1367 VkPipeline m_pipeline;
1368 };
1369 static_assert( sizeof( Pipeline ) == sizeof( VkPipeline ), "handle and wrapper have different size!" );
1370
1371 class PipelineLayout
1372 {
1373 public:
1374 PipelineLayout()
1375 : m_pipelineLayout(VK_NULL_HANDLE)
1376 {}
1377
1378#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1379 PipelineLayout(VkPipelineLayout pipelineLayout)
1380 : m_pipelineLayout(pipelineLayout)
1381 {}
1382
1383 PipelineLayout& operator=(VkPipelineLayout pipelineLayout)
1384 {
1385 m_pipelineLayout = pipelineLayout;
1386 return *this;
1387 }
1388#endif
1389
Lenny Komowebf33162016-08-26 14:10:08 -06001390 bool operator==(PipelineLayout const &rhs) const
1391 {
1392 return m_pipelineLayout == rhs.m_pipelineLayout;
1393 }
1394
1395 bool operator!=(PipelineLayout const &rhs) const
1396 {
1397 return m_pipelineLayout != rhs.m_pipelineLayout;
1398 }
1399
1400 bool operator<(PipelineLayout const &rhs) const
1401 {
1402 return m_pipelineLayout < rhs.m_pipelineLayout;
1403 }
1404
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001405#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1406 explicit
1407#endif
1408 operator VkPipelineLayout() const
1409 {
1410 return m_pipelineLayout;
1411 }
1412
1413 explicit operator bool() const
1414 {
1415 return m_pipelineLayout != VK_NULL_HANDLE;
1416 }
1417
1418 bool operator!() const
1419 {
1420 return m_pipelineLayout == VK_NULL_HANDLE;
1421 }
1422
1423 private:
1424 VkPipelineLayout m_pipelineLayout;
1425 };
1426 static_assert( sizeof( PipelineLayout ) == sizeof( VkPipelineLayout ), "handle and wrapper have different size!" );
1427
1428 class Sampler
1429 {
1430 public:
1431 Sampler()
1432 : m_sampler(VK_NULL_HANDLE)
1433 {}
1434
1435#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1436 Sampler(VkSampler sampler)
1437 : m_sampler(sampler)
1438 {}
1439
1440 Sampler& operator=(VkSampler sampler)
1441 {
1442 m_sampler = sampler;
1443 return *this;
1444 }
1445#endif
1446
Lenny Komowebf33162016-08-26 14:10:08 -06001447 bool operator==(Sampler const &rhs) const
1448 {
1449 return m_sampler == rhs.m_sampler;
1450 }
1451
1452 bool operator!=(Sampler const &rhs) const
1453 {
1454 return m_sampler != rhs.m_sampler;
1455 }
1456
1457 bool operator<(Sampler const &rhs) const
1458 {
1459 return m_sampler < rhs.m_sampler;
1460 }
1461
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001462#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1463 explicit
1464#endif
1465 operator VkSampler() const
1466 {
1467 return m_sampler;
1468 }
1469
1470 explicit operator bool() const
1471 {
1472 return m_sampler != VK_NULL_HANDLE;
1473 }
1474
1475 bool operator!() const
1476 {
1477 return m_sampler == VK_NULL_HANDLE;
1478 }
1479
1480 private:
1481 VkSampler m_sampler;
1482 };
1483 static_assert( sizeof( Sampler ) == sizeof( VkSampler ), "handle and wrapper have different size!" );
1484
1485 class DescriptorSet
1486 {
1487 public:
1488 DescriptorSet()
1489 : m_descriptorSet(VK_NULL_HANDLE)
1490 {}
1491
1492#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1493 DescriptorSet(VkDescriptorSet descriptorSet)
1494 : m_descriptorSet(descriptorSet)
1495 {}
1496
1497 DescriptorSet& operator=(VkDescriptorSet descriptorSet)
1498 {
1499 m_descriptorSet = descriptorSet;
1500 return *this;
1501 }
1502#endif
1503
Lenny Komowebf33162016-08-26 14:10:08 -06001504 bool operator==(DescriptorSet const &rhs) const
1505 {
1506 return m_descriptorSet == rhs.m_descriptorSet;
1507 }
1508
1509 bool operator!=(DescriptorSet const &rhs) const
1510 {
1511 return m_descriptorSet != rhs.m_descriptorSet;
1512 }
1513
1514 bool operator<(DescriptorSet const &rhs) const
1515 {
1516 return m_descriptorSet < rhs.m_descriptorSet;
1517 }
1518
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001519#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1520 explicit
1521#endif
1522 operator VkDescriptorSet() const
1523 {
1524 return m_descriptorSet;
1525 }
1526
1527 explicit operator bool() const
1528 {
1529 return m_descriptorSet != VK_NULL_HANDLE;
1530 }
1531
1532 bool operator!() const
1533 {
1534 return m_descriptorSet == VK_NULL_HANDLE;
1535 }
1536
1537 private:
1538 VkDescriptorSet m_descriptorSet;
1539 };
1540 static_assert( sizeof( DescriptorSet ) == sizeof( VkDescriptorSet ), "handle and wrapper have different size!" );
1541
1542 class DescriptorSetLayout
1543 {
1544 public:
1545 DescriptorSetLayout()
1546 : m_descriptorSetLayout(VK_NULL_HANDLE)
1547 {}
1548
1549#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1550 DescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout)
1551 : m_descriptorSetLayout(descriptorSetLayout)
1552 {}
1553
1554 DescriptorSetLayout& operator=(VkDescriptorSetLayout descriptorSetLayout)
1555 {
1556 m_descriptorSetLayout = descriptorSetLayout;
1557 return *this;
1558 }
1559#endif
1560
Lenny Komowebf33162016-08-26 14:10:08 -06001561 bool operator==(DescriptorSetLayout const &rhs) const
1562 {
1563 return m_descriptorSetLayout == rhs.m_descriptorSetLayout;
1564 }
1565
1566 bool operator!=(DescriptorSetLayout const &rhs) const
1567 {
1568 return m_descriptorSetLayout != rhs.m_descriptorSetLayout;
1569 }
1570
1571 bool operator<(DescriptorSetLayout const &rhs) const
1572 {
1573 return m_descriptorSetLayout < rhs.m_descriptorSetLayout;
1574 }
1575
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001576#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1577 explicit
1578#endif
1579 operator VkDescriptorSetLayout() const
1580 {
1581 return m_descriptorSetLayout;
1582 }
1583
1584 explicit operator bool() const
1585 {
1586 return m_descriptorSetLayout != VK_NULL_HANDLE;
1587 }
1588
1589 bool operator!() const
1590 {
1591 return m_descriptorSetLayout == VK_NULL_HANDLE;
1592 }
1593
1594 private:
1595 VkDescriptorSetLayout m_descriptorSetLayout;
1596 };
1597 static_assert( sizeof( DescriptorSetLayout ) == sizeof( VkDescriptorSetLayout ), "handle and wrapper have different size!" );
1598
1599 class DescriptorPool
1600 {
1601 public:
1602 DescriptorPool()
1603 : m_descriptorPool(VK_NULL_HANDLE)
1604 {}
1605
1606#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1607 DescriptorPool(VkDescriptorPool descriptorPool)
1608 : m_descriptorPool(descriptorPool)
1609 {}
1610
1611 DescriptorPool& operator=(VkDescriptorPool descriptorPool)
1612 {
1613 m_descriptorPool = descriptorPool;
1614 return *this;
1615 }
1616#endif
1617
Lenny Komowebf33162016-08-26 14:10:08 -06001618 bool operator==(DescriptorPool const &rhs) const
1619 {
1620 return m_descriptorPool == rhs.m_descriptorPool;
1621 }
1622
1623 bool operator!=(DescriptorPool const &rhs) const
1624 {
1625 return m_descriptorPool != rhs.m_descriptorPool;
1626 }
1627
1628 bool operator<(DescriptorPool const &rhs) const
1629 {
1630 return m_descriptorPool < rhs.m_descriptorPool;
1631 }
1632
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001633#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1634 explicit
1635#endif
1636 operator VkDescriptorPool() const
1637 {
1638 return m_descriptorPool;
1639 }
1640
1641 explicit operator bool() const
1642 {
1643 return m_descriptorPool != VK_NULL_HANDLE;
1644 }
1645
1646 bool operator!() const
1647 {
1648 return m_descriptorPool == VK_NULL_HANDLE;
1649 }
1650
1651 private:
1652 VkDescriptorPool m_descriptorPool;
1653 };
1654 static_assert( sizeof( DescriptorPool ) == sizeof( VkDescriptorPool ), "handle and wrapper have different size!" );
1655
1656 class Fence
1657 {
1658 public:
1659 Fence()
1660 : m_fence(VK_NULL_HANDLE)
1661 {}
1662
1663#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1664 Fence(VkFence fence)
1665 : m_fence(fence)
1666 {}
1667
1668 Fence& operator=(VkFence fence)
1669 {
1670 m_fence = fence;
1671 return *this;
1672 }
1673#endif
1674
Lenny Komowebf33162016-08-26 14:10:08 -06001675 bool operator==(Fence const &rhs) const
1676 {
1677 return m_fence == rhs.m_fence;
1678 }
1679
1680 bool operator!=(Fence const &rhs) const
1681 {
1682 return m_fence != rhs.m_fence;
1683 }
1684
1685 bool operator<(Fence const &rhs) const
1686 {
1687 return m_fence < rhs.m_fence;
1688 }
1689
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001690#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1691 explicit
1692#endif
1693 operator VkFence() const
1694 {
1695 return m_fence;
1696 }
1697
1698 explicit operator bool() const
1699 {
1700 return m_fence != VK_NULL_HANDLE;
1701 }
1702
1703 bool operator!() const
1704 {
1705 return m_fence == VK_NULL_HANDLE;
1706 }
1707
1708 private:
1709 VkFence m_fence;
1710 };
1711 static_assert( sizeof( Fence ) == sizeof( VkFence ), "handle and wrapper have different size!" );
1712
1713 class Semaphore
1714 {
1715 public:
1716 Semaphore()
1717 : m_semaphore(VK_NULL_HANDLE)
1718 {}
1719
1720#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1721 Semaphore(VkSemaphore semaphore)
1722 : m_semaphore(semaphore)
1723 {}
1724
1725 Semaphore& operator=(VkSemaphore semaphore)
1726 {
1727 m_semaphore = semaphore;
1728 return *this;
1729 }
1730#endif
1731
Lenny Komowebf33162016-08-26 14:10:08 -06001732 bool operator==(Semaphore const &rhs) const
1733 {
1734 return m_semaphore == rhs.m_semaphore;
1735 }
1736
1737 bool operator!=(Semaphore const &rhs) const
1738 {
1739 return m_semaphore != rhs.m_semaphore;
1740 }
1741
1742 bool operator<(Semaphore const &rhs) const
1743 {
1744 return m_semaphore < rhs.m_semaphore;
1745 }
1746
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001747#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1748 explicit
1749#endif
1750 operator VkSemaphore() const
1751 {
1752 return m_semaphore;
1753 }
1754
1755 explicit operator bool() const
1756 {
1757 return m_semaphore != VK_NULL_HANDLE;
1758 }
1759
1760 bool operator!() const
1761 {
1762 return m_semaphore == VK_NULL_HANDLE;
1763 }
1764
1765 private:
1766 VkSemaphore m_semaphore;
1767 };
1768 static_assert( sizeof( Semaphore ) == sizeof( VkSemaphore ), "handle and wrapper have different size!" );
1769
1770 class Event
1771 {
1772 public:
1773 Event()
1774 : m_event(VK_NULL_HANDLE)
1775 {}
1776
1777#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1778 Event(VkEvent event)
1779 : m_event(event)
1780 {}
1781
1782 Event& operator=(VkEvent event)
1783 {
1784 m_event = event;
1785 return *this;
1786 }
1787#endif
1788
Lenny Komowebf33162016-08-26 14:10:08 -06001789 bool operator==(Event const &rhs) const
1790 {
1791 return m_event == rhs.m_event;
1792 }
1793
1794 bool operator!=(Event const &rhs) const
1795 {
1796 return m_event != rhs.m_event;
1797 }
1798
1799 bool operator<(Event const &rhs) const
1800 {
1801 return m_event < rhs.m_event;
1802 }
1803
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001804#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1805 explicit
1806#endif
1807 operator VkEvent() const
1808 {
1809 return m_event;
1810 }
1811
1812 explicit operator bool() const
1813 {
1814 return m_event != VK_NULL_HANDLE;
1815 }
1816
1817 bool operator!() const
1818 {
1819 return m_event == VK_NULL_HANDLE;
1820 }
1821
1822 private:
1823 VkEvent m_event;
1824 };
1825 static_assert( sizeof( Event ) == sizeof( VkEvent ), "handle and wrapper have different size!" );
1826
1827 class QueryPool
1828 {
1829 public:
1830 QueryPool()
1831 : m_queryPool(VK_NULL_HANDLE)
1832 {}
1833
1834#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1835 QueryPool(VkQueryPool queryPool)
1836 : m_queryPool(queryPool)
1837 {}
1838
1839 QueryPool& operator=(VkQueryPool queryPool)
1840 {
1841 m_queryPool = queryPool;
1842 return *this;
1843 }
1844#endif
1845
Lenny Komowebf33162016-08-26 14:10:08 -06001846 bool operator==(QueryPool const &rhs) const
1847 {
1848 return m_queryPool == rhs.m_queryPool;
1849 }
1850
1851 bool operator!=(QueryPool const &rhs) const
1852 {
1853 return m_queryPool != rhs.m_queryPool;
1854 }
1855
1856 bool operator<(QueryPool const &rhs) const
1857 {
1858 return m_queryPool < rhs.m_queryPool;
1859 }
1860
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001861#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1862 explicit
1863#endif
1864 operator VkQueryPool() const
1865 {
1866 return m_queryPool;
1867 }
1868
1869 explicit operator bool() const
1870 {
1871 return m_queryPool != VK_NULL_HANDLE;
1872 }
1873
1874 bool operator!() const
1875 {
1876 return m_queryPool == VK_NULL_HANDLE;
1877 }
1878
1879 private:
1880 VkQueryPool m_queryPool;
1881 };
1882 static_assert( sizeof( QueryPool ) == sizeof( VkQueryPool ), "handle and wrapper have different size!" );
1883
1884 class Framebuffer
1885 {
1886 public:
1887 Framebuffer()
1888 : m_framebuffer(VK_NULL_HANDLE)
1889 {}
1890
1891#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1892 Framebuffer(VkFramebuffer framebuffer)
1893 : m_framebuffer(framebuffer)
1894 {}
1895
1896 Framebuffer& operator=(VkFramebuffer framebuffer)
1897 {
1898 m_framebuffer = framebuffer;
1899 return *this;
1900 }
1901#endif
1902
Lenny Komowebf33162016-08-26 14:10:08 -06001903 bool operator==(Framebuffer const &rhs) const
1904 {
1905 return m_framebuffer == rhs.m_framebuffer;
1906 }
1907
1908 bool operator!=(Framebuffer const &rhs) const
1909 {
1910 return m_framebuffer != rhs.m_framebuffer;
1911 }
1912
1913 bool operator<(Framebuffer const &rhs) const
1914 {
1915 return m_framebuffer < rhs.m_framebuffer;
1916 }
1917
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001918#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1919 explicit
1920#endif
1921 operator VkFramebuffer() const
1922 {
1923 return m_framebuffer;
1924 }
1925
1926 explicit operator bool() const
1927 {
1928 return m_framebuffer != VK_NULL_HANDLE;
1929 }
1930
1931 bool operator!() const
1932 {
1933 return m_framebuffer == VK_NULL_HANDLE;
1934 }
1935
1936 private:
1937 VkFramebuffer m_framebuffer;
1938 };
1939 static_assert( sizeof( Framebuffer ) == sizeof( VkFramebuffer ), "handle and wrapper have different size!" );
1940
1941 class RenderPass
1942 {
1943 public:
1944 RenderPass()
1945 : m_renderPass(VK_NULL_HANDLE)
1946 {}
1947
1948#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1949 RenderPass(VkRenderPass renderPass)
1950 : m_renderPass(renderPass)
1951 {}
1952
1953 RenderPass& operator=(VkRenderPass renderPass)
1954 {
1955 m_renderPass = renderPass;
1956 return *this;
1957 }
1958#endif
1959
Lenny Komowebf33162016-08-26 14:10:08 -06001960 bool operator==(RenderPass const &rhs) const
1961 {
1962 return m_renderPass == rhs.m_renderPass;
1963 }
1964
1965 bool operator!=(RenderPass const &rhs) const
1966 {
1967 return m_renderPass != rhs.m_renderPass;
1968 }
1969
1970 bool operator<(RenderPass const &rhs) const
1971 {
1972 return m_renderPass < rhs.m_renderPass;
1973 }
1974
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001975#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1976 explicit
1977#endif
1978 operator VkRenderPass() const
1979 {
1980 return m_renderPass;
1981 }
1982
1983 explicit operator bool() const
1984 {
1985 return m_renderPass != VK_NULL_HANDLE;
1986 }
1987
1988 bool operator!() const
1989 {
1990 return m_renderPass == VK_NULL_HANDLE;
1991 }
1992
1993 private:
1994 VkRenderPass m_renderPass;
1995 };
1996 static_assert( sizeof( RenderPass ) == sizeof( VkRenderPass ), "handle and wrapper have different size!" );
1997
1998 class PipelineCache
1999 {
2000 public:
2001 PipelineCache()
2002 : m_pipelineCache(VK_NULL_HANDLE)
2003 {}
2004
2005#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2006 PipelineCache(VkPipelineCache pipelineCache)
2007 : m_pipelineCache(pipelineCache)
2008 {}
2009
2010 PipelineCache& operator=(VkPipelineCache pipelineCache)
2011 {
2012 m_pipelineCache = pipelineCache;
2013 return *this;
2014 }
2015#endif
2016
Lenny Komowebf33162016-08-26 14:10:08 -06002017 bool operator==(PipelineCache const &rhs) const
2018 {
2019 return m_pipelineCache == rhs.m_pipelineCache;
2020 }
2021
2022 bool operator!=(PipelineCache const &rhs) const
2023 {
2024 return m_pipelineCache != rhs.m_pipelineCache;
2025 }
2026
2027 bool operator<(PipelineCache const &rhs) const
2028 {
2029 return m_pipelineCache < rhs.m_pipelineCache;
2030 }
2031
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002032#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2033 explicit
2034#endif
2035 operator VkPipelineCache() const
2036 {
2037 return m_pipelineCache;
2038 }
2039
2040 explicit operator bool() const
2041 {
2042 return m_pipelineCache != VK_NULL_HANDLE;
2043 }
2044
2045 bool operator!() const
2046 {
2047 return m_pipelineCache == VK_NULL_HANDLE;
2048 }
2049
2050 private:
2051 VkPipelineCache m_pipelineCache;
2052 };
2053 static_assert( sizeof( PipelineCache ) == sizeof( VkPipelineCache ), "handle and wrapper have different size!" );
2054
2055 class DisplayKHR
2056 {
2057 public:
2058 DisplayKHR()
2059 : m_displayKHR(VK_NULL_HANDLE)
2060 {}
2061
2062#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2063 DisplayKHR(VkDisplayKHR displayKHR)
2064 : m_displayKHR(displayKHR)
2065 {}
2066
2067 DisplayKHR& operator=(VkDisplayKHR displayKHR)
2068 {
2069 m_displayKHR = displayKHR;
2070 return *this;
2071 }
2072#endif
2073
Lenny Komowebf33162016-08-26 14:10:08 -06002074 bool operator==(DisplayKHR const &rhs) const
2075 {
2076 return m_displayKHR == rhs.m_displayKHR;
2077 }
2078
2079 bool operator!=(DisplayKHR const &rhs) const
2080 {
2081 return m_displayKHR != rhs.m_displayKHR;
2082 }
2083
2084 bool operator<(DisplayKHR const &rhs) const
2085 {
2086 return m_displayKHR < rhs.m_displayKHR;
2087 }
2088
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002089#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2090 explicit
2091#endif
2092 operator VkDisplayKHR() const
2093 {
2094 return m_displayKHR;
2095 }
2096
2097 explicit operator bool() const
2098 {
2099 return m_displayKHR != VK_NULL_HANDLE;
2100 }
2101
2102 bool operator!() const
2103 {
2104 return m_displayKHR == VK_NULL_HANDLE;
2105 }
2106
2107 private:
2108 VkDisplayKHR m_displayKHR;
2109 };
2110 static_assert( sizeof( DisplayKHR ) == sizeof( VkDisplayKHR ), "handle and wrapper have different size!" );
2111
2112 class DisplayModeKHR
2113 {
2114 public:
2115 DisplayModeKHR()
2116 : m_displayModeKHR(VK_NULL_HANDLE)
2117 {}
2118
2119#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2120 DisplayModeKHR(VkDisplayModeKHR displayModeKHR)
2121 : m_displayModeKHR(displayModeKHR)
2122 {}
2123
2124 DisplayModeKHR& operator=(VkDisplayModeKHR displayModeKHR)
2125 {
2126 m_displayModeKHR = displayModeKHR;
2127 return *this;
2128 }
2129#endif
2130
Lenny Komowebf33162016-08-26 14:10:08 -06002131 bool operator==(DisplayModeKHR const &rhs) const
2132 {
2133 return m_displayModeKHR == rhs.m_displayModeKHR;
2134 }
2135
2136 bool operator!=(DisplayModeKHR const &rhs) const
2137 {
2138 return m_displayModeKHR != rhs.m_displayModeKHR;
2139 }
2140
2141 bool operator<(DisplayModeKHR const &rhs) const
2142 {
2143 return m_displayModeKHR < rhs.m_displayModeKHR;
2144 }
2145
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002146#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2147 explicit
2148#endif
2149 operator VkDisplayModeKHR() const
2150 {
2151 return m_displayModeKHR;
2152 }
2153
2154 explicit operator bool() const
2155 {
2156 return m_displayModeKHR != VK_NULL_HANDLE;
2157 }
2158
2159 bool operator!() const
2160 {
2161 return m_displayModeKHR == VK_NULL_HANDLE;
2162 }
2163
2164 private:
2165 VkDisplayModeKHR m_displayModeKHR;
2166 };
2167 static_assert( sizeof( DisplayModeKHR ) == sizeof( VkDisplayModeKHR ), "handle and wrapper have different size!" );
2168
2169 class SurfaceKHR
2170 {
2171 public:
2172 SurfaceKHR()
2173 : m_surfaceKHR(VK_NULL_HANDLE)
2174 {}
2175
2176#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2177 SurfaceKHR(VkSurfaceKHR surfaceKHR)
2178 : m_surfaceKHR(surfaceKHR)
2179 {}
2180
2181 SurfaceKHR& operator=(VkSurfaceKHR surfaceKHR)
2182 {
2183 m_surfaceKHR = surfaceKHR;
2184 return *this;
2185 }
2186#endif
2187
Lenny Komowebf33162016-08-26 14:10:08 -06002188 bool operator==(SurfaceKHR const &rhs) const
2189 {
2190 return m_surfaceKHR == rhs.m_surfaceKHR;
2191 }
2192
2193 bool operator!=(SurfaceKHR const &rhs) const
2194 {
2195 return m_surfaceKHR != rhs.m_surfaceKHR;
2196 }
2197
2198 bool operator<(SurfaceKHR const &rhs) const
2199 {
2200 return m_surfaceKHR < rhs.m_surfaceKHR;
2201 }
2202
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002203#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2204 explicit
2205#endif
2206 operator VkSurfaceKHR() const
2207 {
2208 return m_surfaceKHR;
2209 }
2210
2211 explicit operator bool() const
2212 {
2213 return m_surfaceKHR != VK_NULL_HANDLE;
2214 }
2215
2216 bool operator!() const
2217 {
2218 return m_surfaceKHR == VK_NULL_HANDLE;
2219 }
2220
2221 private:
2222 VkSurfaceKHR m_surfaceKHR;
2223 };
2224 static_assert( sizeof( SurfaceKHR ) == sizeof( VkSurfaceKHR ), "handle and wrapper have different size!" );
2225
2226 class SwapchainKHR
2227 {
2228 public:
2229 SwapchainKHR()
2230 : m_swapchainKHR(VK_NULL_HANDLE)
2231 {}
2232
2233#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2234 SwapchainKHR(VkSwapchainKHR swapchainKHR)
2235 : m_swapchainKHR(swapchainKHR)
2236 {}
2237
2238 SwapchainKHR& operator=(VkSwapchainKHR swapchainKHR)
2239 {
2240 m_swapchainKHR = swapchainKHR;
2241 return *this;
2242 }
2243#endif
2244
Lenny Komowebf33162016-08-26 14:10:08 -06002245 bool operator==(SwapchainKHR const &rhs) const
2246 {
2247 return m_swapchainKHR == rhs.m_swapchainKHR;
2248 }
2249
2250 bool operator!=(SwapchainKHR const &rhs) const
2251 {
2252 return m_swapchainKHR != rhs.m_swapchainKHR;
2253 }
2254
2255 bool operator<(SwapchainKHR const &rhs) const
2256 {
2257 return m_swapchainKHR < rhs.m_swapchainKHR;
2258 }
2259
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002260#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2261 explicit
2262#endif
2263 operator VkSwapchainKHR() const
2264 {
2265 return m_swapchainKHR;
2266 }
2267
2268 explicit operator bool() const
2269 {
2270 return m_swapchainKHR != VK_NULL_HANDLE;
2271 }
2272
2273 bool operator!() const
2274 {
2275 return m_swapchainKHR == VK_NULL_HANDLE;
2276 }
2277
2278 private:
2279 VkSwapchainKHR m_swapchainKHR;
2280 };
2281 static_assert( sizeof( SwapchainKHR ) == sizeof( VkSwapchainKHR ), "handle and wrapper have different size!" );
2282
2283 class DebugReportCallbackEXT
2284 {
2285 public:
2286 DebugReportCallbackEXT()
2287 : m_debugReportCallbackEXT(VK_NULL_HANDLE)
2288 {}
2289
2290#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2291 DebugReportCallbackEXT(VkDebugReportCallbackEXT debugReportCallbackEXT)
2292 : m_debugReportCallbackEXT(debugReportCallbackEXT)
2293 {}
2294
2295 DebugReportCallbackEXT& operator=(VkDebugReportCallbackEXT debugReportCallbackEXT)
2296 {
2297 m_debugReportCallbackEXT = debugReportCallbackEXT;
2298 return *this;
2299 }
2300#endif
2301
Lenny Komowebf33162016-08-26 14:10:08 -06002302 bool operator==(DebugReportCallbackEXT const &rhs) const
2303 {
2304 return m_debugReportCallbackEXT == rhs.m_debugReportCallbackEXT;
2305 }
2306
2307 bool operator!=(DebugReportCallbackEXT const &rhs) const
2308 {
2309 return m_debugReportCallbackEXT != rhs.m_debugReportCallbackEXT;
2310 }
2311
2312 bool operator<(DebugReportCallbackEXT const &rhs) const
2313 {
2314 return m_debugReportCallbackEXT < rhs.m_debugReportCallbackEXT;
2315 }
2316
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002317#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2318 explicit
2319#endif
2320 operator VkDebugReportCallbackEXT() const
2321 {
2322 return m_debugReportCallbackEXT;
2323 }
2324
2325 explicit operator bool() const
2326 {
2327 return m_debugReportCallbackEXT != VK_NULL_HANDLE;
2328 }
2329
2330 bool operator!() const
2331 {
2332 return m_debugReportCallbackEXT == VK_NULL_HANDLE;
2333 }
2334
2335 private:
2336 VkDebugReportCallbackEXT m_debugReportCallbackEXT;
2337 };
2338 static_assert( sizeof( DebugReportCallbackEXT ) == sizeof( VkDebugReportCallbackEXT ), "handle and wrapper have different size!" );
2339
2340 struct Offset2D
2341 {
2342 Offset2D( int32_t x_ = 0, int32_t y_ = 0 )
2343 : x( x_ )
2344 , y( y_ )
2345 {
2346 }
2347
2348 Offset2D( VkOffset2D const & rhs )
2349 {
2350 memcpy( this, &rhs, sizeof(Offset2D) );
2351 }
2352
2353 Offset2D& operator=( VkOffset2D const & rhs )
2354 {
2355 memcpy( this, &rhs, sizeof(Offset2D) );
2356 return *this;
2357 }
2358
2359 Offset2D& setX( int32_t x_ )
2360 {
2361 x = x_;
2362 return *this;
2363 }
2364
2365 Offset2D& setY( int32_t y_ )
2366 {
2367 y = y_;
2368 return *this;
2369 }
2370
2371 operator const VkOffset2D&() const
2372 {
2373 return *reinterpret_cast<const VkOffset2D*>(this);
2374 }
2375
2376 bool operator==( Offset2D const& rhs ) const
2377 {
2378 return ( x == rhs.x )
2379 && ( y == rhs.y );
2380 }
2381
2382 bool operator!=( Offset2D const& rhs ) const
2383 {
2384 return !operator==( rhs );
2385 }
2386
2387 int32_t x;
2388 int32_t y;
2389 };
2390 static_assert( sizeof( Offset2D ) == sizeof( VkOffset2D ), "struct and wrapper have different size!" );
2391
2392 struct Offset3D
2393 {
2394 Offset3D( int32_t x_ = 0, int32_t y_ = 0, int32_t z_ = 0 )
2395 : x( x_ )
2396 , y( y_ )
2397 , z( z_ )
2398 {
2399 }
2400
2401 Offset3D( VkOffset3D const & rhs )
2402 {
2403 memcpy( this, &rhs, sizeof(Offset3D) );
2404 }
2405
2406 Offset3D& operator=( VkOffset3D const & rhs )
2407 {
2408 memcpy( this, &rhs, sizeof(Offset3D) );
2409 return *this;
2410 }
2411
2412 Offset3D& setX( int32_t x_ )
2413 {
2414 x = x_;
2415 return *this;
2416 }
2417
2418 Offset3D& setY( int32_t y_ )
2419 {
2420 y = y_;
2421 return *this;
2422 }
2423
2424 Offset3D& setZ( int32_t z_ )
2425 {
2426 z = z_;
2427 return *this;
2428 }
2429
2430 operator const VkOffset3D&() const
2431 {
2432 return *reinterpret_cast<const VkOffset3D*>(this);
2433 }
2434
2435 bool operator==( Offset3D const& rhs ) const
2436 {
2437 return ( x == rhs.x )
2438 && ( y == rhs.y )
2439 && ( z == rhs.z );
2440 }
2441
2442 bool operator!=( Offset3D const& rhs ) const
2443 {
2444 return !operator==( rhs );
2445 }
2446
2447 int32_t x;
2448 int32_t y;
2449 int32_t z;
2450 };
2451 static_assert( sizeof( Offset3D ) == sizeof( VkOffset3D ), "struct and wrapper have different size!" );
2452
2453 struct Extent2D
2454 {
2455 Extent2D( uint32_t width_ = 0, uint32_t height_ = 0 )
2456 : width( width_ )
2457 , height( height_ )
2458 {
2459 }
2460
2461 Extent2D( VkExtent2D const & rhs )
2462 {
2463 memcpy( this, &rhs, sizeof(Extent2D) );
2464 }
2465
2466 Extent2D& operator=( VkExtent2D const & rhs )
2467 {
2468 memcpy( this, &rhs, sizeof(Extent2D) );
2469 return *this;
2470 }
2471
2472 Extent2D& setWidth( uint32_t width_ )
2473 {
2474 width = width_;
2475 return *this;
2476 }
2477
2478 Extent2D& setHeight( uint32_t height_ )
2479 {
2480 height = height_;
2481 return *this;
2482 }
2483
2484 operator const VkExtent2D&() const
2485 {
2486 return *reinterpret_cast<const VkExtent2D*>(this);
2487 }
2488
2489 bool operator==( Extent2D const& rhs ) const
2490 {
2491 return ( width == rhs.width )
2492 && ( height == rhs.height );
2493 }
2494
2495 bool operator!=( Extent2D const& rhs ) const
2496 {
2497 return !operator==( rhs );
2498 }
2499
2500 uint32_t width;
2501 uint32_t height;
2502 };
2503 static_assert( sizeof( Extent2D ) == sizeof( VkExtent2D ), "struct and wrapper have different size!" );
2504
2505 struct Extent3D
2506 {
2507 Extent3D( uint32_t width_ = 0, uint32_t height_ = 0, uint32_t depth_ = 0 )
2508 : width( width_ )
2509 , height( height_ )
2510 , depth( depth_ )
2511 {
2512 }
2513
2514 Extent3D( VkExtent3D const & rhs )
2515 {
2516 memcpy( this, &rhs, sizeof(Extent3D) );
2517 }
2518
2519 Extent3D& operator=( VkExtent3D const & rhs )
2520 {
2521 memcpy( this, &rhs, sizeof(Extent3D) );
2522 return *this;
2523 }
2524
2525 Extent3D& setWidth( uint32_t width_ )
2526 {
2527 width = width_;
2528 return *this;
2529 }
2530
2531 Extent3D& setHeight( uint32_t height_ )
2532 {
2533 height = height_;
2534 return *this;
2535 }
2536
2537 Extent3D& setDepth( uint32_t depth_ )
2538 {
2539 depth = depth_;
2540 return *this;
2541 }
2542
2543 operator const VkExtent3D&() const
2544 {
2545 return *reinterpret_cast<const VkExtent3D*>(this);
2546 }
2547
2548 bool operator==( Extent3D const& rhs ) const
2549 {
2550 return ( width == rhs.width )
2551 && ( height == rhs.height )
2552 && ( depth == rhs.depth );
2553 }
2554
2555 bool operator!=( Extent3D const& rhs ) const
2556 {
2557 return !operator==( rhs );
2558 }
2559
2560 uint32_t width;
2561 uint32_t height;
2562 uint32_t depth;
2563 };
2564 static_assert( sizeof( Extent3D ) == sizeof( VkExtent3D ), "struct and wrapper have different size!" );
2565
2566 struct Viewport
2567 {
2568 Viewport( float x_ = 0, float y_ = 0, float width_ = 0, float height_ = 0, float minDepth_ = 0, float maxDepth_ = 0 )
2569 : x( x_ )
2570 , y( y_ )
2571 , width( width_ )
2572 , height( height_ )
2573 , minDepth( minDepth_ )
2574 , maxDepth( maxDepth_ )
2575 {
2576 }
2577
2578 Viewport( VkViewport const & rhs )
2579 {
2580 memcpy( this, &rhs, sizeof(Viewport) );
2581 }
2582
2583 Viewport& operator=( VkViewport const & rhs )
2584 {
2585 memcpy( this, &rhs, sizeof(Viewport) );
2586 return *this;
2587 }
2588
2589 Viewport& setX( float x_ )
2590 {
2591 x = x_;
2592 return *this;
2593 }
2594
2595 Viewport& setY( float y_ )
2596 {
2597 y = y_;
2598 return *this;
2599 }
2600
2601 Viewport& setWidth( float width_ )
2602 {
2603 width = width_;
2604 return *this;
2605 }
2606
2607 Viewport& setHeight( float height_ )
2608 {
2609 height = height_;
2610 return *this;
2611 }
2612
2613 Viewport& setMinDepth( float minDepth_ )
2614 {
2615 minDepth = minDepth_;
2616 return *this;
2617 }
2618
2619 Viewport& setMaxDepth( float maxDepth_ )
2620 {
2621 maxDepth = maxDepth_;
2622 return *this;
2623 }
2624
2625 operator const VkViewport&() const
2626 {
2627 return *reinterpret_cast<const VkViewport*>(this);
2628 }
2629
2630 bool operator==( Viewport const& rhs ) const
2631 {
2632 return ( x == rhs.x )
2633 && ( y == rhs.y )
2634 && ( width == rhs.width )
2635 && ( height == rhs.height )
2636 && ( minDepth == rhs.minDepth )
2637 && ( maxDepth == rhs.maxDepth );
2638 }
2639
2640 bool operator!=( Viewport const& rhs ) const
2641 {
2642 return !operator==( rhs );
2643 }
2644
2645 float x;
2646 float y;
2647 float width;
2648 float height;
2649 float minDepth;
2650 float maxDepth;
2651 };
2652 static_assert( sizeof( Viewport ) == sizeof( VkViewport ), "struct and wrapper have different size!" );
2653
2654 struct Rect2D
2655 {
2656 Rect2D( Offset2D offset_ = Offset2D(), Extent2D extent_ = Extent2D() )
2657 : offset( offset_ )
2658 , extent( extent_ )
2659 {
2660 }
2661
2662 Rect2D( VkRect2D const & rhs )
2663 {
2664 memcpy( this, &rhs, sizeof(Rect2D) );
2665 }
2666
2667 Rect2D& operator=( VkRect2D const & rhs )
2668 {
2669 memcpy( this, &rhs, sizeof(Rect2D) );
2670 return *this;
2671 }
2672
2673 Rect2D& setOffset( Offset2D offset_ )
2674 {
2675 offset = offset_;
2676 return *this;
2677 }
2678
2679 Rect2D& setExtent( Extent2D extent_ )
2680 {
2681 extent = extent_;
2682 return *this;
2683 }
2684
2685 operator const VkRect2D&() const
2686 {
2687 return *reinterpret_cast<const VkRect2D*>(this);
2688 }
2689
2690 bool operator==( Rect2D const& rhs ) const
2691 {
2692 return ( offset == rhs.offset )
2693 && ( extent == rhs.extent );
2694 }
2695
2696 bool operator!=( Rect2D const& rhs ) const
2697 {
2698 return !operator==( rhs );
2699 }
2700
2701 Offset2D offset;
2702 Extent2D extent;
2703 };
2704 static_assert( sizeof( Rect2D ) == sizeof( VkRect2D ), "struct and wrapper have different size!" );
2705
2706 struct ClearRect
2707 {
2708 ClearRect( Rect2D rect_ = Rect2D(), uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
2709 : rect( rect_ )
2710 , baseArrayLayer( baseArrayLayer_ )
2711 , layerCount( layerCount_ )
2712 {
2713 }
2714
2715 ClearRect( VkClearRect const & rhs )
2716 {
2717 memcpy( this, &rhs, sizeof(ClearRect) );
2718 }
2719
2720 ClearRect& operator=( VkClearRect const & rhs )
2721 {
2722 memcpy( this, &rhs, sizeof(ClearRect) );
2723 return *this;
2724 }
2725
2726 ClearRect& setRect( Rect2D rect_ )
2727 {
2728 rect = rect_;
2729 return *this;
2730 }
2731
2732 ClearRect& setBaseArrayLayer( uint32_t baseArrayLayer_ )
2733 {
2734 baseArrayLayer = baseArrayLayer_;
2735 return *this;
2736 }
2737
2738 ClearRect& setLayerCount( uint32_t layerCount_ )
2739 {
2740 layerCount = layerCount_;
2741 return *this;
2742 }
2743
2744 operator const VkClearRect&() const
2745 {
2746 return *reinterpret_cast<const VkClearRect*>(this);
2747 }
2748
2749 bool operator==( ClearRect const& rhs ) const
2750 {
2751 return ( rect == rhs.rect )
2752 && ( baseArrayLayer == rhs.baseArrayLayer )
2753 && ( layerCount == rhs.layerCount );
2754 }
2755
2756 bool operator!=( ClearRect const& rhs ) const
2757 {
2758 return !operator==( rhs );
2759 }
2760
2761 Rect2D rect;
2762 uint32_t baseArrayLayer;
2763 uint32_t layerCount;
2764 };
2765 static_assert( sizeof( ClearRect ) == sizeof( VkClearRect ), "struct and wrapper have different size!" );
2766
2767 struct ExtensionProperties
2768 {
2769 operator const VkExtensionProperties&() const
2770 {
2771 return *reinterpret_cast<const VkExtensionProperties*>(this);
2772 }
2773
2774 bool operator==( ExtensionProperties const& rhs ) const
2775 {
2776 return ( memcmp( extensionName, rhs.extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
2777 && ( specVersion == rhs.specVersion );
2778 }
2779
2780 bool operator!=( ExtensionProperties const& rhs ) const
2781 {
2782 return !operator==( rhs );
2783 }
2784
2785 char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
2786 uint32_t specVersion;
2787 };
2788 static_assert( sizeof( ExtensionProperties ) == sizeof( VkExtensionProperties ), "struct and wrapper have different size!" );
2789
2790 struct LayerProperties
2791 {
2792 operator const VkLayerProperties&() const
2793 {
2794 return *reinterpret_cast<const VkLayerProperties*>(this);
2795 }
2796
2797 bool operator==( LayerProperties const& rhs ) const
2798 {
2799 return ( memcmp( layerName, rhs.layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
2800 && ( specVersion == rhs.specVersion )
2801 && ( implementationVersion == rhs.implementationVersion )
2802 && ( memcmp( description, rhs.description, VK_MAX_DESCRIPTION_SIZE * sizeof( char ) ) == 0 );
2803 }
2804
2805 bool operator!=( LayerProperties const& rhs ) const
2806 {
2807 return !operator==( rhs );
2808 }
2809
2810 char layerName[VK_MAX_EXTENSION_NAME_SIZE];
2811 uint32_t specVersion;
2812 uint32_t implementationVersion;
2813 char description[VK_MAX_DESCRIPTION_SIZE];
2814 };
2815 static_assert( sizeof( LayerProperties ) == sizeof( VkLayerProperties ), "struct and wrapper have different size!" );
2816
2817 struct AllocationCallbacks
2818 {
2819 AllocationCallbacks( void* pUserData_ = nullptr, PFN_vkAllocationFunction pfnAllocation_ = nullptr, PFN_vkReallocationFunction pfnReallocation_ = nullptr, PFN_vkFreeFunction pfnFree_ = nullptr, PFN_vkInternalAllocationNotification pfnInternalAllocation_ = nullptr, PFN_vkInternalFreeNotification pfnInternalFree_ = nullptr )
2820 : pUserData( pUserData_ )
2821 , pfnAllocation( pfnAllocation_ )
2822 , pfnReallocation( pfnReallocation_ )
2823 , pfnFree( pfnFree_ )
2824 , pfnInternalAllocation( pfnInternalAllocation_ )
2825 , pfnInternalFree( pfnInternalFree_ )
2826 {
2827 }
2828
2829 AllocationCallbacks( VkAllocationCallbacks const & rhs )
2830 {
2831 memcpy( this, &rhs, sizeof(AllocationCallbacks) );
2832 }
2833
2834 AllocationCallbacks& operator=( VkAllocationCallbacks const & rhs )
2835 {
2836 memcpy( this, &rhs, sizeof(AllocationCallbacks) );
2837 return *this;
2838 }
2839
2840 AllocationCallbacks& setPUserData( void* pUserData_ )
2841 {
2842 pUserData = pUserData_;
2843 return *this;
2844 }
2845
2846 AllocationCallbacks& setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ )
2847 {
2848 pfnAllocation = pfnAllocation_;
2849 return *this;
2850 }
2851
2852 AllocationCallbacks& setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ )
2853 {
2854 pfnReallocation = pfnReallocation_;
2855 return *this;
2856 }
2857
2858 AllocationCallbacks& setPfnFree( PFN_vkFreeFunction pfnFree_ )
2859 {
2860 pfnFree = pfnFree_;
2861 return *this;
2862 }
2863
2864 AllocationCallbacks& setPfnInternalAllocation( PFN_vkInternalAllocationNotification pfnInternalAllocation_ )
2865 {
2866 pfnInternalAllocation = pfnInternalAllocation_;
2867 return *this;
2868 }
2869
2870 AllocationCallbacks& setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ )
2871 {
2872 pfnInternalFree = pfnInternalFree_;
2873 return *this;
2874 }
2875
2876 operator const VkAllocationCallbacks&() const
2877 {
2878 return *reinterpret_cast<const VkAllocationCallbacks*>(this);
2879 }
2880
2881 bool operator==( AllocationCallbacks const& rhs ) const
2882 {
2883 return ( pUserData == rhs.pUserData )
2884 && ( pfnAllocation == rhs.pfnAllocation )
2885 && ( pfnReallocation == rhs.pfnReallocation )
2886 && ( pfnFree == rhs.pfnFree )
2887 && ( pfnInternalAllocation == rhs.pfnInternalAllocation )
2888 && ( pfnInternalFree == rhs.pfnInternalFree );
2889 }
2890
2891 bool operator!=( AllocationCallbacks const& rhs ) const
2892 {
2893 return !operator==( rhs );
2894 }
2895
2896 void* pUserData;
2897 PFN_vkAllocationFunction pfnAllocation;
2898 PFN_vkReallocationFunction pfnReallocation;
2899 PFN_vkFreeFunction pfnFree;
2900 PFN_vkInternalAllocationNotification pfnInternalAllocation;
2901 PFN_vkInternalFreeNotification pfnInternalFree;
2902 };
2903 static_assert( sizeof( AllocationCallbacks ) == sizeof( VkAllocationCallbacks ), "struct and wrapper have different size!" );
2904
2905 struct MemoryRequirements
2906 {
2907 operator const VkMemoryRequirements&() const
2908 {
2909 return *reinterpret_cast<const VkMemoryRequirements*>(this);
2910 }
2911
2912 bool operator==( MemoryRequirements const& rhs ) const
2913 {
2914 return ( size == rhs.size )
2915 && ( alignment == rhs.alignment )
2916 && ( memoryTypeBits == rhs.memoryTypeBits );
2917 }
2918
2919 bool operator!=( MemoryRequirements const& rhs ) const
2920 {
2921 return !operator==( rhs );
2922 }
2923
2924 DeviceSize size;
2925 DeviceSize alignment;
2926 uint32_t memoryTypeBits;
2927 };
2928 static_assert( sizeof( MemoryRequirements ) == sizeof( VkMemoryRequirements ), "struct and wrapper have different size!" );
2929
2930 struct DescriptorBufferInfo
2931 {
2932 DescriptorBufferInfo( Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize range_ = 0 )
2933 : buffer( buffer_ )
2934 , offset( offset_ )
2935 , range( range_ )
2936 {
2937 }
2938
2939 DescriptorBufferInfo( VkDescriptorBufferInfo const & rhs )
2940 {
2941 memcpy( this, &rhs, sizeof(DescriptorBufferInfo) );
2942 }
2943
2944 DescriptorBufferInfo& operator=( VkDescriptorBufferInfo const & rhs )
2945 {
2946 memcpy( this, &rhs, sizeof(DescriptorBufferInfo) );
2947 return *this;
2948 }
2949
2950 DescriptorBufferInfo& setBuffer( Buffer buffer_ )
2951 {
2952 buffer = buffer_;
2953 return *this;
2954 }
2955
2956 DescriptorBufferInfo& setOffset( DeviceSize offset_ )
2957 {
2958 offset = offset_;
2959 return *this;
2960 }
2961
2962 DescriptorBufferInfo& setRange( DeviceSize range_ )
2963 {
2964 range = range_;
2965 return *this;
2966 }
2967
2968 operator const VkDescriptorBufferInfo&() const
2969 {
2970 return *reinterpret_cast<const VkDescriptorBufferInfo*>(this);
2971 }
2972
2973 bool operator==( DescriptorBufferInfo const& rhs ) const
2974 {
2975 return ( buffer == rhs.buffer )
2976 && ( offset == rhs.offset )
2977 && ( range == rhs.range );
2978 }
2979
2980 bool operator!=( DescriptorBufferInfo const& rhs ) const
2981 {
2982 return !operator==( rhs );
2983 }
2984
2985 Buffer buffer;
2986 DeviceSize offset;
2987 DeviceSize range;
2988 };
2989 static_assert( sizeof( DescriptorBufferInfo ) == sizeof( VkDescriptorBufferInfo ), "struct and wrapper have different size!" );
2990
2991 struct SubresourceLayout
2992 {
2993 operator const VkSubresourceLayout&() const
2994 {
2995 return *reinterpret_cast<const VkSubresourceLayout*>(this);
2996 }
2997
2998 bool operator==( SubresourceLayout const& rhs ) const
2999 {
3000 return ( offset == rhs.offset )
3001 && ( size == rhs.size )
3002 && ( rowPitch == rhs.rowPitch )
3003 && ( arrayPitch == rhs.arrayPitch )
3004 && ( depthPitch == rhs.depthPitch );
3005 }
3006
3007 bool operator!=( SubresourceLayout const& rhs ) const
3008 {
3009 return !operator==( rhs );
3010 }
3011
3012 DeviceSize offset;
3013 DeviceSize size;
3014 DeviceSize rowPitch;
3015 DeviceSize arrayPitch;
3016 DeviceSize depthPitch;
3017 };
3018 static_assert( sizeof( SubresourceLayout ) == sizeof( VkSubresourceLayout ), "struct and wrapper have different size!" );
3019
3020 struct BufferCopy
3021 {
3022 BufferCopy( DeviceSize srcOffset_ = 0, DeviceSize dstOffset_ = 0, DeviceSize size_ = 0 )
3023 : srcOffset( srcOffset_ )
3024 , dstOffset( dstOffset_ )
3025 , size( size_ )
3026 {
3027 }
3028
3029 BufferCopy( VkBufferCopy const & rhs )
3030 {
3031 memcpy( this, &rhs, sizeof(BufferCopy) );
3032 }
3033
3034 BufferCopy& operator=( VkBufferCopy const & rhs )
3035 {
3036 memcpy( this, &rhs, sizeof(BufferCopy) );
3037 return *this;
3038 }
3039
3040 BufferCopy& setSrcOffset( DeviceSize srcOffset_ )
3041 {
3042 srcOffset = srcOffset_;
3043 return *this;
3044 }
3045
3046 BufferCopy& setDstOffset( DeviceSize dstOffset_ )
3047 {
3048 dstOffset = dstOffset_;
3049 return *this;
3050 }
3051
3052 BufferCopy& setSize( DeviceSize size_ )
3053 {
3054 size = size_;
3055 return *this;
3056 }
3057
3058 operator const VkBufferCopy&() const
3059 {
3060 return *reinterpret_cast<const VkBufferCopy*>(this);
3061 }
3062
3063 bool operator==( BufferCopy const& rhs ) const
3064 {
3065 return ( srcOffset == rhs.srcOffset )
3066 && ( dstOffset == rhs.dstOffset )
3067 && ( size == rhs.size );
3068 }
3069
3070 bool operator!=( BufferCopy const& rhs ) const
3071 {
3072 return !operator==( rhs );
3073 }
3074
3075 DeviceSize srcOffset;
3076 DeviceSize dstOffset;
3077 DeviceSize size;
3078 };
3079 static_assert( sizeof( BufferCopy ) == sizeof( VkBufferCopy ), "struct and wrapper have different size!" );
3080
3081 struct SpecializationMapEntry
3082 {
3083 SpecializationMapEntry( uint32_t constantID_ = 0, uint32_t offset_ = 0, size_t size_ = 0 )
3084 : constantID( constantID_ )
3085 , offset( offset_ )
3086 , size( size_ )
3087 {
3088 }
3089
3090 SpecializationMapEntry( VkSpecializationMapEntry const & rhs )
3091 {
3092 memcpy( this, &rhs, sizeof(SpecializationMapEntry) );
3093 }
3094
3095 SpecializationMapEntry& operator=( VkSpecializationMapEntry const & rhs )
3096 {
3097 memcpy( this, &rhs, sizeof(SpecializationMapEntry) );
3098 return *this;
3099 }
3100
3101 SpecializationMapEntry& setConstantID( uint32_t constantID_ )
3102 {
3103 constantID = constantID_;
3104 return *this;
3105 }
3106
3107 SpecializationMapEntry& setOffset( uint32_t offset_ )
3108 {
3109 offset = offset_;
3110 return *this;
3111 }
3112
3113 SpecializationMapEntry& setSize( size_t size_ )
3114 {
3115 size = size_;
3116 return *this;
3117 }
3118
3119 operator const VkSpecializationMapEntry&() const
3120 {
3121 return *reinterpret_cast<const VkSpecializationMapEntry*>(this);
3122 }
3123
3124 bool operator==( SpecializationMapEntry const& rhs ) const
3125 {
3126 return ( constantID == rhs.constantID )
3127 && ( offset == rhs.offset )
3128 && ( size == rhs.size );
3129 }
3130
3131 bool operator!=( SpecializationMapEntry const& rhs ) const
3132 {
3133 return !operator==( rhs );
3134 }
3135
3136 uint32_t constantID;
3137 uint32_t offset;
3138 size_t size;
3139 };
3140 static_assert( sizeof( SpecializationMapEntry ) == sizeof( VkSpecializationMapEntry ), "struct and wrapper have different size!" );
3141
3142 struct SpecializationInfo
3143 {
3144 SpecializationInfo( uint32_t mapEntryCount_ = 0, const SpecializationMapEntry* pMapEntries_ = nullptr, size_t dataSize_ = 0, const void* pData_ = nullptr )
3145 : mapEntryCount( mapEntryCount_ )
3146 , pMapEntries( pMapEntries_ )
3147 , dataSize( dataSize_ )
3148 , pData( pData_ )
3149 {
3150 }
3151
3152 SpecializationInfo( VkSpecializationInfo const & rhs )
3153 {
3154 memcpy( this, &rhs, sizeof(SpecializationInfo) );
3155 }
3156
3157 SpecializationInfo& operator=( VkSpecializationInfo const & rhs )
3158 {
3159 memcpy( this, &rhs, sizeof(SpecializationInfo) );
3160 return *this;
3161 }
3162
3163 SpecializationInfo& setMapEntryCount( uint32_t mapEntryCount_ )
3164 {
3165 mapEntryCount = mapEntryCount_;
3166 return *this;
3167 }
3168
3169 SpecializationInfo& setPMapEntries( const SpecializationMapEntry* pMapEntries_ )
3170 {
3171 pMapEntries = pMapEntries_;
3172 return *this;
3173 }
3174
3175 SpecializationInfo& setDataSize( size_t dataSize_ )
3176 {
3177 dataSize = dataSize_;
3178 return *this;
3179 }
3180
3181 SpecializationInfo& setPData( const void* pData_ )
3182 {
3183 pData = pData_;
3184 return *this;
3185 }
3186
3187 operator const VkSpecializationInfo&() const
3188 {
3189 return *reinterpret_cast<const VkSpecializationInfo*>(this);
3190 }
3191
3192 bool operator==( SpecializationInfo const& rhs ) const
3193 {
3194 return ( mapEntryCount == rhs.mapEntryCount )
3195 && ( pMapEntries == rhs.pMapEntries )
3196 && ( dataSize == rhs.dataSize )
3197 && ( pData == rhs.pData );
3198 }
3199
3200 bool operator!=( SpecializationInfo const& rhs ) const
3201 {
3202 return !operator==( rhs );
3203 }
3204
3205 uint32_t mapEntryCount;
3206 const SpecializationMapEntry* pMapEntries;
3207 size_t dataSize;
3208 const void* pData;
3209 };
3210 static_assert( sizeof( SpecializationInfo ) == sizeof( VkSpecializationInfo ), "struct and wrapper have different size!" );
3211
3212 union ClearColorValue
3213 {
3214 ClearColorValue( const std::array<float,4>& float32_ = { {0} } )
3215 {
3216 memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
3217 }
3218
3219 ClearColorValue( const std::array<int32_t,4>& int32_ )
3220 {
3221 memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
3222 }
3223
3224 ClearColorValue( const std::array<uint32_t,4>& uint32_ )
3225 {
3226 memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
3227 }
3228
3229 ClearColorValue& setFloat32( std::array<float,4> float32_ )
3230 {
3231 memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
3232 return *this;
3233 }
3234
3235 ClearColorValue& setInt32( std::array<int32_t,4> int32_ )
3236 {
3237 memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
3238 return *this;
3239 }
3240
3241 ClearColorValue& setUint32( std::array<uint32_t,4> uint32_ )
3242 {
3243 memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
3244 return *this;
3245 }
3246
3247 operator VkClearColorValue const& () const
3248 {
3249 return *reinterpret_cast<const VkClearColorValue*>(this);
3250 }
3251
3252 float float32[4];
3253 int32_t int32[4];
3254 uint32_t uint32[4];
3255 };
3256
3257 struct ClearDepthStencilValue
3258 {
3259 ClearDepthStencilValue( float depth_ = 0, uint32_t stencil_ = 0 )
3260 : depth( depth_ )
3261 , stencil( stencil_ )
3262 {
3263 }
3264
3265 ClearDepthStencilValue( VkClearDepthStencilValue const & rhs )
3266 {
3267 memcpy( this, &rhs, sizeof(ClearDepthStencilValue) );
3268 }
3269
3270 ClearDepthStencilValue& operator=( VkClearDepthStencilValue const & rhs )
3271 {
3272 memcpy( this, &rhs, sizeof(ClearDepthStencilValue) );
3273 return *this;
3274 }
3275
3276 ClearDepthStencilValue& setDepth( float depth_ )
3277 {
3278 depth = depth_;
3279 return *this;
3280 }
3281
3282 ClearDepthStencilValue& setStencil( uint32_t stencil_ )
3283 {
3284 stencil = stencil_;
3285 return *this;
3286 }
3287
3288 operator const VkClearDepthStencilValue&() const
3289 {
3290 return *reinterpret_cast<const VkClearDepthStencilValue*>(this);
3291 }
3292
3293 bool operator==( ClearDepthStencilValue const& rhs ) const
3294 {
3295 return ( depth == rhs.depth )
3296 && ( stencil == rhs.stencil );
3297 }
3298
3299 bool operator!=( ClearDepthStencilValue const& rhs ) const
3300 {
3301 return !operator==( rhs );
3302 }
3303
3304 float depth;
3305 uint32_t stencil;
3306 };
3307 static_assert( sizeof( ClearDepthStencilValue ) == sizeof( VkClearDepthStencilValue ), "struct and wrapper have different size!" );
3308
3309 union ClearValue
3310 {
3311 ClearValue( ClearColorValue color_ = ClearColorValue() )
3312 {
3313 color = color_;
3314 }
3315
3316 ClearValue( ClearDepthStencilValue depthStencil_ )
3317 {
3318 depthStencil = depthStencil_;
3319 }
3320
3321 ClearValue& setColor( ClearColorValue color_ )
3322 {
3323 color = color_;
3324 return *this;
3325 }
3326
3327 ClearValue& setDepthStencil( ClearDepthStencilValue depthStencil_ )
3328 {
3329 depthStencil = depthStencil_;
3330 return *this;
3331 }
3332
3333 operator VkClearValue const& () const
3334 {
3335 return *reinterpret_cast<const VkClearValue*>(this);
3336 }
3337
3338#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
3339 ClearColorValue color;
3340 ClearDepthStencilValue depthStencil;
3341#else
3342 VkClearColorValue color;
3343 VkClearDepthStencilValue depthStencil;
3344#endif // VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
3345 };
3346
3347 struct PhysicalDeviceFeatures
3348 {
3349 PhysicalDeviceFeatures( Bool32 robustBufferAccess_ = 0, Bool32 fullDrawIndexUint32_ = 0, Bool32 imageCubeArray_ = 0, Bool32 independentBlend_ = 0, Bool32 geometryShader_ = 0, Bool32 tessellationShader_ = 0, Bool32 sampleRateShading_ = 0, Bool32 dualSrcBlend_ = 0, Bool32 logicOp_ = 0, Bool32 multiDrawIndirect_ = 0, Bool32 drawIndirectFirstInstance_ = 0, Bool32 depthClamp_ = 0, Bool32 depthBiasClamp_ = 0, Bool32 fillModeNonSolid_ = 0, Bool32 depthBounds_ = 0, Bool32 wideLines_ = 0, Bool32 largePoints_ = 0, Bool32 alphaToOne_ = 0, Bool32 multiViewport_ = 0, Bool32 samplerAnisotropy_ = 0, Bool32 textureCompressionETC2_ = 0, Bool32 textureCompressionASTC_LDR_ = 0, Bool32 textureCompressionBC_ = 0, Bool32 occlusionQueryPrecise_ = 0, Bool32 pipelineStatisticsQuery_ = 0, Bool32 vertexPipelineStoresAndAtomics_ = 0, Bool32 fragmentStoresAndAtomics_ = 0, Bool32 shaderTessellationAndGeometryPointSize_ = 0, Bool32 shaderImageGatherExtended_ = 0, Bool32 shaderStorageImageExtendedFormats_ = 0, Bool32 shaderStorageImageMultisample_ = 0, Bool32 shaderStorageImageReadWithoutFormat_ = 0, Bool32 shaderStorageImageWriteWithoutFormat_ = 0, Bool32 shaderUniformBufferArrayDynamicIndexing_ = 0, Bool32 shaderSampledImageArrayDynamicIndexing_ = 0, Bool32 shaderStorageBufferArrayDynamicIndexing_ = 0, Bool32 shaderStorageImageArrayDynamicIndexing_ = 0, Bool32 shaderClipDistance_ = 0, Bool32 shaderCullDistance_ = 0, Bool32 shaderFloat64_ = 0, Bool32 shaderInt64_ = 0, Bool32 shaderInt16_ = 0, Bool32 shaderResourceResidency_ = 0, Bool32 shaderResourceMinLod_ = 0, Bool32 sparseBinding_ = 0, Bool32 sparseResidencyBuffer_ = 0, Bool32 sparseResidencyImage2D_ = 0, Bool32 sparseResidencyImage3D_ = 0, Bool32 sparseResidency2Samples_ = 0, Bool32 sparseResidency4Samples_ = 0, Bool32 sparseResidency8Samples_ = 0, Bool32 sparseResidency16Samples_ = 0, Bool32 sparseResidencyAliased_ = 0, Bool32 variableMultisampleRate_ = 0, Bool32 inheritedQueries_ = 0 )
3350 : robustBufferAccess( robustBufferAccess_ )
3351 , fullDrawIndexUint32( fullDrawIndexUint32_ )
3352 , imageCubeArray( imageCubeArray_ )
3353 , independentBlend( independentBlend_ )
3354 , geometryShader( geometryShader_ )
3355 , tessellationShader( tessellationShader_ )
3356 , sampleRateShading( sampleRateShading_ )
3357 , dualSrcBlend( dualSrcBlend_ )
3358 , logicOp( logicOp_ )
3359 , multiDrawIndirect( multiDrawIndirect_ )
3360 , drawIndirectFirstInstance( drawIndirectFirstInstance_ )
3361 , depthClamp( depthClamp_ )
3362 , depthBiasClamp( depthBiasClamp_ )
3363 , fillModeNonSolid( fillModeNonSolid_ )
3364 , depthBounds( depthBounds_ )
3365 , wideLines( wideLines_ )
3366 , largePoints( largePoints_ )
3367 , alphaToOne( alphaToOne_ )
3368 , multiViewport( multiViewport_ )
3369 , samplerAnisotropy( samplerAnisotropy_ )
3370 , textureCompressionETC2( textureCompressionETC2_ )
3371 , textureCompressionASTC_LDR( textureCompressionASTC_LDR_ )
3372 , textureCompressionBC( textureCompressionBC_ )
3373 , occlusionQueryPrecise( occlusionQueryPrecise_ )
3374 , pipelineStatisticsQuery( pipelineStatisticsQuery_ )
3375 , vertexPipelineStoresAndAtomics( vertexPipelineStoresAndAtomics_ )
3376 , fragmentStoresAndAtomics( fragmentStoresAndAtomics_ )
3377 , shaderTessellationAndGeometryPointSize( shaderTessellationAndGeometryPointSize_ )
3378 , shaderImageGatherExtended( shaderImageGatherExtended_ )
3379 , shaderStorageImageExtendedFormats( shaderStorageImageExtendedFormats_ )
3380 , shaderStorageImageMultisample( shaderStorageImageMultisample_ )
3381 , shaderStorageImageReadWithoutFormat( shaderStorageImageReadWithoutFormat_ )
3382 , shaderStorageImageWriteWithoutFormat( shaderStorageImageWriteWithoutFormat_ )
3383 , shaderUniformBufferArrayDynamicIndexing( shaderUniformBufferArrayDynamicIndexing_ )
3384 , shaderSampledImageArrayDynamicIndexing( shaderSampledImageArrayDynamicIndexing_ )
3385 , shaderStorageBufferArrayDynamicIndexing( shaderStorageBufferArrayDynamicIndexing_ )
3386 , shaderStorageImageArrayDynamicIndexing( shaderStorageImageArrayDynamicIndexing_ )
3387 , shaderClipDistance( shaderClipDistance_ )
3388 , shaderCullDistance( shaderCullDistance_ )
3389 , shaderFloat64( shaderFloat64_ )
3390 , shaderInt64( shaderInt64_ )
3391 , shaderInt16( shaderInt16_ )
3392 , shaderResourceResidency( shaderResourceResidency_ )
3393 , shaderResourceMinLod( shaderResourceMinLod_ )
3394 , sparseBinding( sparseBinding_ )
3395 , sparseResidencyBuffer( sparseResidencyBuffer_ )
3396 , sparseResidencyImage2D( sparseResidencyImage2D_ )
3397 , sparseResidencyImage3D( sparseResidencyImage3D_ )
3398 , sparseResidency2Samples( sparseResidency2Samples_ )
3399 , sparseResidency4Samples( sparseResidency4Samples_ )
3400 , sparseResidency8Samples( sparseResidency8Samples_ )
3401 , sparseResidency16Samples( sparseResidency16Samples_ )
3402 , sparseResidencyAliased( sparseResidencyAliased_ )
3403 , variableMultisampleRate( variableMultisampleRate_ )
3404 , inheritedQueries( inheritedQueries_ )
3405 {
3406 }
3407
3408 PhysicalDeviceFeatures( VkPhysicalDeviceFeatures const & rhs )
3409 {
3410 memcpy( this, &rhs, sizeof(PhysicalDeviceFeatures) );
3411 }
3412
3413 PhysicalDeviceFeatures& operator=( VkPhysicalDeviceFeatures const & rhs )
3414 {
3415 memcpy( this, &rhs, sizeof(PhysicalDeviceFeatures) );
3416 return *this;
3417 }
3418
3419 PhysicalDeviceFeatures& setRobustBufferAccess( Bool32 robustBufferAccess_ )
3420 {
3421 robustBufferAccess = robustBufferAccess_;
3422 return *this;
3423 }
3424
3425 PhysicalDeviceFeatures& setFullDrawIndexUint32( Bool32 fullDrawIndexUint32_ )
3426 {
3427 fullDrawIndexUint32 = fullDrawIndexUint32_;
3428 return *this;
3429 }
3430
3431 PhysicalDeviceFeatures& setImageCubeArray( Bool32 imageCubeArray_ )
3432 {
3433 imageCubeArray = imageCubeArray_;
3434 return *this;
3435 }
3436
3437 PhysicalDeviceFeatures& setIndependentBlend( Bool32 independentBlend_ )
3438 {
3439 independentBlend = independentBlend_;
3440 return *this;
3441 }
3442
3443 PhysicalDeviceFeatures& setGeometryShader( Bool32 geometryShader_ )
3444 {
3445 geometryShader = geometryShader_;
3446 return *this;
3447 }
3448
3449 PhysicalDeviceFeatures& setTessellationShader( Bool32 tessellationShader_ )
3450 {
3451 tessellationShader = tessellationShader_;
3452 return *this;
3453 }
3454
3455 PhysicalDeviceFeatures& setSampleRateShading( Bool32 sampleRateShading_ )
3456 {
3457 sampleRateShading = sampleRateShading_;
3458 return *this;
3459 }
3460
3461 PhysicalDeviceFeatures& setDualSrcBlend( Bool32 dualSrcBlend_ )
3462 {
3463 dualSrcBlend = dualSrcBlend_;
3464 return *this;
3465 }
3466
3467 PhysicalDeviceFeatures& setLogicOp( Bool32 logicOp_ )
3468 {
3469 logicOp = logicOp_;
3470 return *this;
3471 }
3472
3473 PhysicalDeviceFeatures& setMultiDrawIndirect( Bool32 multiDrawIndirect_ )
3474 {
3475 multiDrawIndirect = multiDrawIndirect_;
3476 return *this;
3477 }
3478
3479 PhysicalDeviceFeatures& setDrawIndirectFirstInstance( Bool32 drawIndirectFirstInstance_ )
3480 {
3481 drawIndirectFirstInstance = drawIndirectFirstInstance_;
3482 return *this;
3483 }
3484
3485 PhysicalDeviceFeatures& setDepthClamp( Bool32 depthClamp_ )
3486 {
3487 depthClamp = depthClamp_;
3488 return *this;
3489 }
3490
3491 PhysicalDeviceFeatures& setDepthBiasClamp( Bool32 depthBiasClamp_ )
3492 {
3493 depthBiasClamp = depthBiasClamp_;
3494 return *this;
3495 }
3496
3497 PhysicalDeviceFeatures& setFillModeNonSolid( Bool32 fillModeNonSolid_ )
3498 {
3499 fillModeNonSolid = fillModeNonSolid_;
3500 return *this;
3501 }
3502
3503 PhysicalDeviceFeatures& setDepthBounds( Bool32 depthBounds_ )
3504 {
3505 depthBounds = depthBounds_;
3506 return *this;
3507 }
3508
3509 PhysicalDeviceFeatures& setWideLines( Bool32 wideLines_ )
3510 {
3511 wideLines = wideLines_;
3512 return *this;
3513 }
3514
3515 PhysicalDeviceFeatures& setLargePoints( Bool32 largePoints_ )
3516 {
3517 largePoints = largePoints_;
3518 return *this;
3519 }
3520
3521 PhysicalDeviceFeatures& setAlphaToOne( Bool32 alphaToOne_ )
3522 {
3523 alphaToOne = alphaToOne_;
3524 return *this;
3525 }
3526
3527 PhysicalDeviceFeatures& setMultiViewport( Bool32 multiViewport_ )
3528 {
3529 multiViewport = multiViewport_;
3530 return *this;
3531 }
3532
3533 PhysicalDeviceFeatures& setSamplerAnisotropy( Bool32 samplerAnisotropy_ )
3534 {
3535 samplerAnisotropy = samplerAnisotropy_;
3536 return *this;
3537 }
3538
3539 PhysicalDeviceFeatures& setTextureCompressionETC2( Bool32 textureCompressionETC2_ )
3540 {
3541 textureCompressionETC2 = textureCompressionETC2_;
3542 return *this;
3543 }
3544
3545 PhysicalDeviceFeatures& setTextureCompressionASTC_LDR( Bool32 textureCompressionASTC_LDR_ )
3546 {
3547 textureCompressionASTC_LDR = textureCompressionASTC_LDR_;
3548 return *this;
3549 }
3550
3551 PhysicalDeviceFeatures& setTextureCompressionBC( Bool32 textureCompressionBC_ )
3552 {
3553 textureCompressionBC = textureCompressionBC_;
3554 return *this;
3555 }
3556
3557 PhysicalDeviceFeatures& setOcclusionQueryPrecise( Bool32 occlusionQueryPrecise_ )
3558 {
3559 occlusionQueryPrecise = occlusionQueryPrecise_;
3560 return *this;
3561 }
3562
3563 PhysicalDeviceFeatures& setPipelineStatisticsQuery( Bool32 pipelineStatisticsQuery_ )
3564 {
3565 pipelineStatisticsQuery = pipelineStatisticsQuery_;
3566 return *this;
3567 }
3568
3569 PhysicalDeviceFeatures& setVertexPipelineStoresAndAtomics( Bool32 vertexPipelineStoresAndAtomics_ )
3570 {
3571 vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics_;
3572 return *this;
3573 }
3574
3575 PhysicalDeviceFeatures& setFragmentStoresAndAtomics( Bool32 fragmentStoresAndAtomics_ )
3576 {
3577 fragmentStoresAndAtomics = fragmentStoresAndAtomics_;
3578 return *this;
3579 }
3580
3581 PhysicalDeviceFeatures& setShaderTessellationAndGeometryPointSize( Bool32 shaderTessellationAndGeometryPointSize_ )
3582 {
3583 shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize_;
3584 return *this;
3585 }
3586
3587 PhysicalDeviceFeatures& setShaderImageGatherExtended( Bool32 shaderImageGatherExtended_ )
3588 {
3589 shaderImageGatherExtended = shaderImageGatherExtended_;
3590 return *this;
3591 }
3592
3593 PhysicalDeviceFeatures& setShaderStorageImageExtendedFormats( Bool32 shaderStorageImageExtendedFormats_ )
3594 {
3595 shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats_;
3596 return *this;
3597 }
3598
3599 PhysicalDeviceFeatures& setShaderStorageImageMultisample( Bool32 shaderStorageImageMultisample_ )
3600 {
3601 shaderStorageImageMultisample = shaderStorageImageMultisample_;
3602 return *this;
3603 }
3604
3605 PhysicalDeviceFeatures& setShaderStorageImageReadWithoutFormat( Bool32 shaderStorageImageReadWithoutFormat_ )
3606 {
3607 shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat_;
3608 return *this;
3609 }
3610
3611 PhysicalDeviceFeatures& setShaderStorageImageWriteWithoutFormat( Bool32 shaderStorageImageWriteWithoutFormat_ )
3612 {
3613 shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat_;
3614 return *this;
3615 }
3616
3617 PhysicalDeviceFeatures& setShaderUniformBufferArrayDynamicIndexing( Bool32 shaderUniformBufferArrayDynamicIndexing_ )
3618 {
3619 shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing_;
3620 return *this;
3621 }
3622
3623 PhysicalDeviceFeatures& setShaderSampledImageArrayDynamicIndexing( Bool32 shaderSampledImageArrayDynamicIndexing_ )
3624 {
3625 shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing_;
3626 return *this;
3627 }
3628
3629 PhysicalDeviceFeatures& setShaderStorageBufferArrayDynamicIndexing( Bool32 shaderStorageBufferArrayDynamicIndexing_ )
3630 {
3631 shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing_;
3632 return *this;
3633 }
3634
3635 PhysicalDeviceFeatures& setShaderStorageImageArrayDynamicIndexing( Bool32 shaderStorageImageArrayDynamicIndexing_ )
3636 {
3637 shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing_;
3638 return *this;
3639 }
3640
3641 PhysicalDeviceFeatures& setShaderClipDistance( Bool32 shaderClipDistance_ )
3642 {
3643 shaderClipDistance = shaderClipDistance_;
3644 return *this;
3645 }
3646
3647 PhysicalDeviceFeatures& setShaderCullDistance( Bool32 shaderCullDistance_ )
3648 {
3649 shaderCullDistance = shaderCullDistance_;
3650 return *this;
3651 }
3652
3653 PhysicalDeviceFeatures& setShaderFloat64( Bool32 shaderFloat64_ )
3654 {
3655 shaderFloat64 = shaderFloat64_;
3656 return *this;
3657 }
3658
3659 PhysicalDeviceFeatures& setShaderInt64( Bool32 shaderInt64_ )
3660 {
3661 shaderInt64 = shaderInt64_;
3662 return *this;
3663 }
3664
3665 PhysicalDeviceFeatures& setShaderInt16( Bool32 shaderInt16_ )
3666 {
3667 shaderInt16 = shaderInt16_;
3668 return *this;
3669 }
3670
3671 PhysicalDeviceFeatures& setShaderResourceResidency( Bool32 shaderResourceResidency_ )
3672 {
3673 shaderResourceResidency = shaderResourceResidency_;
3674 return *this;
3675 }
3676
3677 PhysicalDeviceFeatures& setShaderResourceMinLod( Bool32 shaderResourceMinLod_ )
3678 {
3679 shaderResourceMinLod = shaderResourceMinLod_;
3680 return *this;
3681 }
3682
3683 PhysicalDeviceFeatures& setSparseBinding( Bool32 sparseBinding_ )
3684 {
3685 sparseBinding = sparseBinding_;
3686 return *this;
3687 }
3688
3689 PhysicalDeviceFeatures& setSparseResidencyBuffer( Bool32 sparseResidencyBuffer_ )
3690 {
3691 sparseResidencyBuffer = sparseResidencyBuffer_;
3692 return *this;
3693 }
3694
3695 PhysicalDeviceFeatures& setSparseResidencyImage2D( Bool32 sparseResidencyImage2D_ )
3696 {
3697 sparseResidencyImage2D = sparseResidencyImage2D_;
3698 return *this;
3699 }
3700
3701 PhysicalDeviceFeatures& setSparseResidencyImage3D( Bool32 sparseResidencyImage3D_ )
3702 {
3703 sparseResidencyImage3D = sparseResidencyImage3D_;
3704 return *this;
3705 }
3706
3707 PhysicalDeviceFeatures& setSparseResidency2Samples( Bool32 sparseResidency2Samples_ )
3708 {
3709 sparseResidency2Samples = sparseResidency2Samples_;
3710 return *this;
3711 }
3712
3713 PhysicalDeviceFeatures& setSparseResidency4Samples( Bool32 sparseResidency4Samples_ )
3714 {
3715 sparseResidency4Samples = sparseResidency4Samples_;
3716 return *this;
3717 }
3718
3719 PhysicalDeviceFeatures& setSparseResidency8Samples( Bool32 sparseResidency8Samples_ )
3720 {
3721 sparseResidency8Samples = sparseResidency8Samples_;
3722 return *this;
3723 }
3724
3725 PhysicalDeviceFeatures& setSparseResidency16Samples( Bool32 sparseResidency16Samples_ )
3726 {
3727 sparseResidency16Samples = sparseResidency16Samples_;
3728 return *this;
3729 }
3730
3731 PhysicalDeviceFeatures& setSparseResidencyAliased( Bool32 sparseResidencyAliased_ )
3732 {
3733 sparseResidencyAliased = sparseResidencyAliased_;
3734 return *this;
3735 }
3736
3737 PhysicalDeviceFeatures& setVariableMultisampleRate( Bool32 variableMultisampleRate_ )
3738 {
3739 variableMultisampleRate = variableMultisampleRate_;
3740 return *this;
3741 }
3742
3743 PhysicalDeviceFeatures& setInheritedQueries( Bool32 inheritedQueries_ )
3744 {
3745 inheritedQueries = inheritedQueries_;
3746 return *this;
3747 }
3748
3749 operator const VkPhysicalDeviceFeatures&() const
3750 {
3751 return *reinterpret_cast<const VkPhysicalDeviceFeatures*>(this);
3752 }
3753
3754 bool operator==( PhysicalDeviceFeatures const& rhs ) const
3755 {
3756 return ( robustBufferAccess == rhs.robustBufferAccess )
3757 && ( fullDrawIndexUint32 == rhs.fullDrawIndexUint32 )
3758 && ( imageCubeArray == rhs.imageCubeArray )
3759 && ( independentBlend == rhs.independentBlend )
3760 && ( geometryShader == rhs.geometryShader )
3761 && ( tessellationShader == rhs.tessellationShader )
3762 && ( sampleRateShading == rhs.sampleRateShading )
3763 && ( dualSrcBlend == rhs.dualSrcBlend )
3764 && ( logicOp == rhs.logicOp )
3765 && ( multiDrawIndirect == rhs.multiDrawIndirect )
3766 && ( drawIndirectFirstInstance == rhs.drawIndirectFirstInstance )
3767 && ( depthClamp == rhs.depthClamp )
3768 && ( depthBiasClamp == rhs.depthBiasClamp )
3769 && ( fillModeNonSolid == rhs.fillModeNonSolid )
3770 && ( depthBounds == rhs.depthBounds )
3771 && ( wideLines == rhs.wideLines )
3772 && ( largePoints == rhs.largePoints )
3773 && ( alphaToOne == rhs.alphaToOne )
3774 && ( multiViewport == rhs.multiViewport )
3775 && ( samplerAnisotropy == rhs.samplerAnisotropy )
3776 && ( textureCompressionETC2 == rhs.textureCompressionETC2 )
3777 && ( textureCompressionASTC_LDR == rhs.textureCompressionASTC_LDR )
3778 && ( textureCompressionBC == rhs.textureCompressionBC )
3779 && ( occlusionQueryPrecise == rhs.occlusionQueryPrecise )
3780 && ( pipelineStatisticsQuery == rhs.pipelineStatisticsQuery )
3781 && ( vertexPipelineStoresAndAtomics == rhs.vertexPipelineStoresAndAtomics )
3782 && ( fragmentStoresAndAtomics == rhs.fragmentStoresAndAtomics )
3783 && ( shaderTessellationAndGeometryPointSize == rhs.shaderTessellationAndGeometryPointSize )
3784 && ( shaderImageGatherExtended == rhs.shaderImageGatherExtended )
3785 && ( shaderStorageImageExtendedFormats == rhs.shaderStorageImageExtendedFormats )
3786 && ( shaderStorageImageMultisample == rhs.shaderStorageImageMultisample )
3787 && ( shaderStorageImageReadWithoutFormat == rhs.shaderStorageImageReadWithoutFormat )
3788 && ( shaderStorageImageWriteWithoutFormat == rhs.shaderStorageImageWriteWithoutFormat )
3789 && ( shaderUniformBufferArrayDynamicIndexing == rhs.shaderUniformBufferArrayDynamicIndexing )
3790 && ( shaderSampledImageArrayDynamicIndexing == rhs.shaderSampledImageArrayDynamicIndexing )
3791 && ( shaderStorageBufferArrayDynamicIndexing == rhs.shaderStorageBufferArrayDynamicIndexing )
3792 && ( shaderStorageImageArrayDynamicIndexing == rhs.shaderStorageImageArrayDynamicIndexing )
3793 && ( shaderClipDistance == rhs.shaderClipDistance )
3794 && ( shaderCullDistance == rhs.shaderCullDistance )
3795 && ( shaderFloat64 == rhs.shaderFloat64 )
3796 && ( shaderInt64 == rhs.shaderInt64 )
3797 && ( shaderInt16 == rhs.shaderInt16 )
3798 && ( shaderResourceResidency == rhs.shaderResourceResidency )
3799 && ( shaderResourceMinLod == rhs.shaderResourceMinLod )
3800 && ( sparseBinding == rhs.sparseBinding )
3801 && ( sparseResidencyBuffer == rhs.sparseResidencyBuffer )
3802 && ( sparseResidencyImage2D == rhs.sparseResidencyImage2D )
3803 && ( sparseResidencyImage3D == rhs.sparseResidencyImage3D )
3804 && ( sparseResidency2Samples == rhs.sparseResidency2Samples )
3805 && ( sparseResidency4Samples == rhs.sparseResidency4Samples )
3806 && ( sparseResidency8Samples == rhs.sparseResidency8Samples )
3807 && ( sparseResidency16Samples == rhs.sparseResidency16Samples )
3808 && ( sparseResidencyAliased == rhs.sparseResidencyAliased )
3809 && ( variableMultisampleRate == rhs.variableMultisampleRate )
3810 && ( inheritedQueries == rhs.inheritedQueries );
3811 }
3812
3813 bool operator!=( PhysicalDeviceFeatures const& rhs ) const
3814 {
3815 return !operator==( rhs );
3816 }
3817
3818 Bool32 robustBufferAccess;
3819 Bool32 fullDrawIndexUint32;
3820 Bool32 imageCubeArray;
3821 Bool32 independentBlend;
3822 Bool32 geometryShader;
3823 Bool32 tessellationShader;
3824 Bool32 sampleRateShading;
3825 Bool32 dualSrcBlend;
3826 Bool32 logicOp;
3827 Bool32 multiDrawIndirect;
3828 Bool32 drawIndirectFirstInstance;
3829 Bool32 depthClamp;
3830 Bool32 depthBiasClamp;
3831 Bool32 fillModeNonSolid;
3832 Bool32 depthBounds;
3833 Bool32 wideLines;
3834 Bool32 largePoints;
3835 Bool32 alphaToOne;
3836 Bool32 multiViewport;
3837 Bool32 samplerAnisotropy;
3838 Bool32 textureCompressionETC2;
3839 Bool32 textureCompressionASTC_LDR;
3840 Bool32 textureCompressionBC;
3841 Bool32 occlusionQueryPrecise;
3842 Bool32 pipelineStatisticsQuery;
3843 Bool32 vertexPipelineStoresAndAtomics;
3844 Bool32 fragmentStoresAndAtomics;
3845 Bool32 shaderTessellationAndGeometryPointSize;
3846 Bool32 shaderImageGatherExtended;
3847 Bool32 shaderStorageImageExtendedFormats;
3848 Bool32 shaderStorageImageMultisample;
3849 Bool32 shaderStorageImageReadWithoutFormat;
3850 Bool32 shaderStorageImageWriteWithoutFormat;
3851 Bool32 shaderUniformBufferArrayDynamicIndexing;
3852 Bool32 shaderSampledImageArrayDynamicIndexing;
3853 Bool32 shaderStorageBufferArrayDynamicIndexing;
3854 Bool32 shaderStorageImageArrayDynamicIndexing;
3855 Bool32 shaderClipDistance;
3856 Bool32 shaderCullDistance;
3857 Bool32 shaderFloat64;
3858 Bool32 shaderInt64;
3859 Bool32 shaderInt16;
3860 Bool32 shaderResourceResidency;
3861 Bool32 shaderResourceMinLod;
3862 Bool32 sparseBinding;
3863 Bool32 sparseResidencyBuffer;
3864 Bool32 sparseResidencyImage2D;
3865 Bool32 sparseResidencyImage3D;
3866 Bool32 sparseResidency2Samples;
3867 Bool32 sparseResidency4Samples;
3868 Bool32 sparseResidency8Samples;
3869 Bool32 sparseResidency16Samples;
3870 Bool32 sparseResidencyAliased;
3871 Bool32 variableMultisampleRate;
3872 Bool32 inheritedQueries;
3873 };
3874 static_assert( sizeof( PhysicalDeviceFeatures ) == sizeof( VkPhysicalDeviceFeatures ), "struct and wrapper have different size!" );
3875
3876 struct PhysicalDeviceSparseProperties
3877 {
3878 operator const VkPhysicalDeviceSparseProperties&() const
3879 {
3880 return *reinterpret_cast<const VkPhysicalDeviceSparseProperties*>(this);
3881 }
3882
3883 bool operator==( PhysicalDeviceSparseProperties const& rhs ) const
3884 {
3885 return ( residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape )
3886 && ( residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape )
3887 && ( residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape )
3888 && ( residencyAlignedMipSize == rhs.residencyAlignedMipSize )
3889 && ( residencyNonResidentStrict == rhs.residencyNonResidentStrict );
3890 }
3891
3892 bool operator!=( PhysicalDeviceSparseProperties const& rhs ) const
3893 {
3894 return !operator==( rhs );
3895 }
3896
3897 Bool32 residencyStandard2DBlockShape;
3898 Bool32 residencyStandard2DMultisampleBlockShape;
3899 Bool32 residencyStandard3DBlockShape;
3900 Bool32 residencyAlignedMipSize;
3901 Bool32 residencyNonResidentStrict;
3902 };
3903 static_assert( sizeof( PhysicalDeviceSparseProperties ) == sizeof( VkPhysicalDeviceSparseProperties ), "struct and wrapper have different size!" );
3904
3905 struct DrawIndirectCommand
3906 {
3907 DrawIndirectCommand( uint32_t vertexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstVertex_ = 0, uint32_t firstInstance_ = 0 )
3908 : vertexCount( vertexCount_ )
3909 , instanceCount( instanceCount_ )
3910 , firstVertex( firstVertex_ )
3911 , firstInstance( firstInstance_ )
3912 {
3913 }
3914
3915 DrawIndirectCommand( VkDrawIndirectCommand const & rhs )
3916 {
3917 memcpy( this, &rhs, sizeof(DrawIndirectCommand) );
3918 }
3919
3920 DrawIndirectCommand& operator=( VkDrawIndirectCommand const & rhs )
3921 {
3922 memcpy( this, &rhs, sizeof(DrawIndirectCommand) );
3923 return *this;
3924 }
3925
3926 DrawIndirectCommand& setVertexCount( uint32_t vertexCount_ )
3927 {
3928 vertexCount = vertexCount_;
3929 return *this;
3930 }
3931
3932 DrawIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
3933 {
3934 instanceCount = instanceCount_;
3935 return *this;
3936 }
3937
3938 DrawIndirectCommand& setFirstVertex( uint32_t firstVertex_ )
3939 {
3940 firstVertex = firstVertex_;
3941 return *this;
3942 }
3943
3944 DrawIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
3945 {
3946 firstInstance = firstInstance_;
3947 return *this;
3948 }
3949
3950 operator const VkDrawIndirectCommand&() const
3951 {
3952 return *reinterpret_cast<const VkDrawIndirectCommand*>(this);
3953 }
3954
3955 bool operator==( DrawIndirectCommand const& rhs ) const
3956 {
3957 return ( vertexCount == rhs.vertexCount )
3958 && ( instanceCount == rhs.instanceCount )
3959 && ( firstVertex == rhs.firstVertex )
3960 && ( firstInstance == rhs.firstInstance );
3961 }
3962
3963 bool operator!=( DrawIndirectCommand const& rhs ) const
3964 {
3965 return !operator==( rhs );
3966 }
3967
3968 uint32_t vertexCount;
3969 uint32_t instanceCount;
3970 uint32_t firstVertex;
3971 uint32_t firstInstance;
3972 };
3973 static_assert( sizeof( DrawIndirectCommand ) == sizeof( VkDrawIndirectCommand ), "struct and wrapper have different size!" );
3974
3975 struct DrawIndexedIndirectCommand
3976 {
3977 DrawIndexedIndirectCommand( uint32_t indexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstIndex_ = 0, int32_t vertexOffset_ = 0, uint32_t firstInstance_ = 0 )
3978 : indexCount( indexCount_ )
3979 , instanceCount( instanceCount_ )
3980 , firstIndex( firstIndex_ )
3981 , vertexOffset( vertexOffset_ )
3982 , firstInstance( firstInstance_ )
3983 {
3984 }
3985
3986 DrawIndexedIndirectCommand( VkDrawIndexedIndirectCommand const & rhs )
3987 {
3988 memcpy( this, &rhs, sizeof(DrawIndexedIndirectCommand) );
3989 }
3990
3991 DrawIndexedIndirectCommand& operator=( VkDrawIndexedIndirectCommand const & rhs )
3992 {
3993 memcpy( this, &rhs, sizeof(DrawIndexedIndirectCommand) );
3994 return *this;
3995 }
3996
3997 DrawIndexedIndirectCommand& setIndexCount( uint32_t indexCount_ )
3998 {
3999 indexCount = indexCount_;
4000 return *this;
4001 }
4002
4003 DrawIndexedIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
4004 {
4005 instanceCount = instanceCount_;
4006 return *this;
4007 }
4008
4009 DrawIndexedIndirectCommand& setFirstIndex( uint32_t firstIndex_ )
4010 {
4011 firstIndex = firstIndex_;
4012 return *this;
4013 }
4014
4015 DrawIndexedIndirectCommand& setVertexOffset( int32_t vertexOffset_ )
4016 {
4017 vertexOffset = vertexOffset_;
4018 return *this;
4019 }
4020
4021 DrawIndexedIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
4022 {
4023 firstInstance = firstInstance_;
4024 return *this;
4025 }
4026
4027 operator const VkDrawIndexedIndirectCommand&() const
4028 {
4029 return *reinterpret_cast<const VkDrawIndexedIndirectCommand*>(this);
4030 }
4031
4032 bool operator==( DrawIndexedIndirectCommand const& rhs ) const
4033 {
4034 return ( indexCount == rhs.indexCount )
4035 && ( instanceCount == rhs.instanceCount )
4036 && ( firstIndex == rhs.firstIndex )
4037 && ( vertexOffset == rhs.vertexOffset )
4038 && ( firstInstance == rhs.firstInstance );
4039 }
4040
4041 bool operator!=( DrawIndexedIndirectCommand const& rhs ) const
4042 {
4043 return !operator==( rhs );
4044 }
4045
4046 uint32_t indexCount;
4047 uint32_t instanceCount;
4048 uint32_t firstIndex;
4049 int32_t vertexOffset;
4050 uint32_t firstInstance;
4051 };
4052 static_assert( sizeof( DrawIndexedIndirectCommand ) == sizeof( VkDrawIndexedIndirectCommand ), "struct and wrapper have different size!" );
4053
4054 struct DispatchIndirectCommand
4055 {
4056 DispatchIndirectCommand( uint32_t x_ = 0, uint32_t y_ = 0, uint32_t z_ = 0 )
4057 : x( x_ )
4058 , y( y_ )
4059 , z( z_ )
4060 {
4061 }
4062
4063 DispatchIndirectCommand( VkDispatchIndirectCommand const & rhs )
4064 {
4065 memcpy( this, &rhs, sizeof(DispatchIndirectCommand) );
4066 }
4067
4068 DispatchIndirectCommand& operator=( VkDispatchIndirectCommand const & rhs )
4069 {
4070 memcpy( this, &rhs, sizeof(DispatchIndirectCommand) );
4071 return *this;
4072 }
4073
4074 DispatchIndirectCommand& setX( uint32_t x_ )
4075 {
4076 x = x_;
4077 return *this;
4078 }
4079
4080 DispatchIndirectCommand& setY( uint32_t y_ )
4081 {
4082 y = y_;
4083 return *this;
4084 }
4085
4086 DispatchIndirectCommand& setZ( uint32_t z_ )
4087 {
4088 z = z_;
4089 return *this;
4090 }
4091
4092 operator const VkDispatchIndirectCommand&() const
4093 {
4094 return *reinterpret_cast<const VkDispatchIndirectCommand*>(this);
4095 }
4096
4097 bool operator==( DispatchIndirectCommand const& rhs ) const
4098 {
4099 return ( x == rhs.x )
4100 && ( y == rhs.y )
4101 && ( z == rhs.z );
4102 }
4103
4104 bool operator!=( DispatchIndirectCommand const& rhs ) const
4105 {
4106 return !operator==( rhs );
4107 }
4108
4109 uint32_t x;
4110 uint32_t y;
4111 uint32_t z;
4112 };
4113 static_assert( sizeof( DispatchIndirectCommand ) == sizeof( VkDispatchIndirectCommand ), "struct and wrapper have different size!" );
4114
4115 struct DisplayPlanePropertiesKHR
4116 {
4117 DisplayPlanePropertiesKHR( DisplayKHR currentDisplay_ = DisplayKHR(), uint32_t currentStackIndex_ = 0 )
4118 : currentDisplay( currentDisplay_ )
4119 , currentStackIndex( currentStackIndex_ )
4120 {
4121 }
4122
4123 DisplayPlanePropertiesKHR( VkDisplayPlanePropertiesKHR const & rhs )
4124 {
4125 memcpy( this, &rhs, sizeof(DisplayPlanePropertiesKHR) );
4126 }
4127
4128 DisplayPlanePropertiesKHR& operator=( VkDisplayPlanePropertiesKHR const & rhs )
4129 {
4130 memcpy( this, &rhs, sizeof(DisplayPlanePropertiesKHR) );
4131 return *this;
4132 }
4133
4134 DisplayPlanePropertiesKHR& setCurrentDisplay( DisplayKHR currentDisplay_ )
4135 {
4136 currentDisplay = currentDisplay_;
4137 return *this;
4138 }
4139
4140 DisplayPlanePropertiesKHR& setCurrentStackIndex( uint32_t currentStackIndex_ )
4141 {
4142 currentStackIndex = currentStackIndex_;
4143 return *this;
4144 }
4145
4146 operator const VkDisplayPlanePropertiesKHR&() const
4147 {
4148 return *reinterpret_cast<const VkDisplayPlanePropertiesKHR*>(this);
4149 }
4150
4151 bool operator==( DisplayPlanePropertiesKHR const& rhs ) const
4152 {
4153 return ( currentDisplay == rhs.currentDisplay )
4154 && ( currentStackIndex == rhs.currentStackIndex );
4155 }
4156
4157 bool operator!=( DisplayPlanePropertiesKHR const& rhs ) const
4158 {
4159 return !operator==( rhs );
4160 }
4161
4162 DisplayKHR currentDisplay;
4163 uint32_t currentStackIndex;
4164 };
4165 static_assert( sizeof( DisplayPlanePropertiesKHR ) == sizeof( VkDisplayPlanePropertiesKHR ), "struct and wrapper have different size!" );
4166
4167 struct DisplayModeParametersKHR
4168 {
4169 DisplayModeParametersKHR( Extent2D visibleRegion_ = Extent2D(), uint32_t refreshRate_ = 0 )
4170 : visibleRegion( visibleRegion_ )
4171 , refreshRate( refreshRate_ )
4172 {
4173 }
4174
4175 DisplayModeParametersKHR( VkDisplayModeParametersKHR const & rhs )
4176 {
4177 memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
4178 }
4179
4180 DisplayModeParametersKHR& operator=( VkDisplayModeParametersKHR const & rhs )
4181 {
4182 memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
4183 return *this;
4184 }
4185
4186 DisplayModeParametersKHR& setVisibleRegion( Extent2D visibleRegion_ )
4187 {
4188 visibleRegion = visibleRegion_;
4189 return *this;
4190 }
4191
4192 DisplayModeParametersKHR& setRefreshRate( uint32_t refreshRate_ )
4193 {
4194 refreshRate = refreshRate_;
4195 return *this;
4196 }
4197
4198 operator const VkDisplayModeParametersKHR&() const
4199 {
4200 return *reinterpret_cast<const VkDisplayModeParametersKHR*>(this);
4201 }
4202
4203 bool operator==( DisplayModeParametersKHR const& rhs ) const
4204 {
4205 return ( visibleRegion == rhs.visibleRegion )
4206 && ( refreshRate == rhs.refreshRate );
4207 }
4208
4209 bool operator!=( DisplayModeParametersKHR const& rhs ) const
4210 {
4211 return !operator==( rhs );
4212 }
4213
4214 Extent2D visibleRegion;
4215 uint32_t refreshRate;
4216 };
4217 static_assert( sizeof( DisplayModeParametersKHR ) == sizeof( VkDisplayModeParametersKHR ), "struct and wrapper have different size!" );
4218
4219 struct DisplayModePropertiesKHR
4220 {
4221 DisplayModePropertiesKHR( DisplayModeKHR displayMode_ = DisplayModeKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
4222 : displayMode( displayMode_ )
4223 , parameters( parameters_ )
4224 {
4225 }
4226
4227 DisplayModePropertiesKHR( VkDisplayModePropertiesKHR const & rhs )
4228 {
4229 memcpy( this, &rhs, sizeof(DisplayModePropertiesKHR) );
4230 }
4231
4232 DisplayModePropertiesKHR& operator=( VkDisplayModePropertiesKHR const & rhs )
4233 {
4234 memcpy( this, &rhs, sizeof(DisplayModePropertiesKHR) );
4235 return *this;
4236 }
4237
4238 DisplayModePropertiesKHR& setDisplayMode( DisplayModeKHR displayMode_ )
4239 {
4240 displayMode = displayMode_;
4241 return *this;
4242 }
4243
4244 DisplayModePropertiesKHR& setParameters( DisplayModeParametersKHR parameters_ )
4245 {
4246 parameters = parameters_;
4247 return *this;
4248 }
4249
4250 operator const VkDisplayModePropertiesKHR&() const
4251 {
4252 return *reinterpret_cast<const VkDisplayModePropertiesKHR*>(this);
4253 }
4254
4255 bool operator==( DisplayModePropertiesKHR const& rhs ) const
4256 {
4257 return ( displayMode == rhs.displayMode )
4258 && ( parameters == rhs.parameters );
4259 }
4260
4261 bool operator!=( DisplayModePropertiesKHR const& rhs ) const
4262 {
4263 return !operator==( rhs );
4264 }
4265
4266 DisplayModeKHR displayMode;
4267 DisplayModeParametersKHR parameters;
4268 };
4269 static_assert( sizeof( DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ), "struct and wrapper have different size!" );
4270
4271 enum class ImageLayout
4272 {
4273 eUndefined = VK_IMAGE_LAYOUT_UNDEFINED,
4274 eGeneral = VK_IMAGE_LAYOUT_GENERAL,
4275 eColorAttachmentOptimal = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
4276 eDepthStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
4277 eDepthStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
4278 eShaderReadOnlyOptimal = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
4279 eTransferSrcOptimal = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
4280 eTransferDstOptimal = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
4281 ePreinitialized = VK_IMAGE_LAYOUT_PREINITIALIZED,
4282 ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
4283 };
4284
4285 struct DescriptorImageInfo
4286 {
4287 DescriptorImageInfo( Sampler sampler_ = Sampler(), ImageView imageView_ = ImageView(), ImageLayout imageLayout_ = ImageLayout::eUndefined )
4288 : sampler( sampler_ )
4289 , imageView( imageView_ )
4290 , imageLayout( imageLayout_ )
4291 {
4292 }
4293
4294 DescriptorImageInfo( VkDescriptorImageInfo const & rhs )
4295 {
4296 memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
4297 }
4298
4299 DescriptorImageInfo& operator=( VkDescriptorImageInfo const & rhs )
4300 {
4301 memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
4302 return *this;
4303 }
4304
4305 DescriptorImageInfo& setSampler( Sampler sampler_ )
4306 {
4307 sampler = sampler_;
4308 return *this;
4309 }
4310
4311 DescriptorImageInfo& setImageView( ImageView imageView_ )
4312 {
4313 imageView = imageView_;
4314 return *this;
4315 }
4316
4317 DescriptorImageInfo& setImageLayout( ImageLayout imageLayout_ )
4318 {
4319 imageLayout = imageLayout_;
4320 return *this;
4321 }
4322
4323 operator const VkDescriptorImageInfo&() const
4324 {
4325 return *reinterpret_cast<const VkDescriptorImageInfo*>(this);
4326 }
4327
4328 bool operator==( DescriptorImageInfo const& rhs ) const
4329 {
4330 return ( sampler == rhs.sampler )
4331 && ( imageView == rhs.imageView )
4332 && ( imageLayout == rhs.imageLayout );
4333 }
4334
4335 bool operator!=( DescriptorImageInfo const& rhs ) const
4336 {
4337 return !operator==( rhs );
4338 }
4339
4340 Sampler sampler;
4341 ImageView imageView;
4342 ImageLayout imageLayout;
4343 };
4344 static_assert( sizeof( DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ), "struct and wrapper have different size!" );
4345
4346 struct AttachmentReference
4347 {
4348 AttachmentReference( uint32_t attachment_ = 0, ImageLayout layout_ = ImageLayout::eUndefined )
4349 : attachment( attachment_ )
4350 , layout( layout_ )
4351 {
4352 }
4353
4354 AttachmentReference( VkAttachmentReference const & rhs )
4355 {
4356 memcpy( this, &rhs, sizeof(AttachmentReference) );
4357 }
4358
4359 AttachmentReference& operator=( VkAttachmentReference const & rhs )
4360 {
4361 memcpy( this, &rhs, sizeof(AttachmentReference) );
4362 return *this;
4363 }
4364
4365 AttachmentReference& setAttachment( uint32_t attachment_ )
4366 {
4367 attachment = attachment_;
4368 return *this;
4369 }
4370
4371 AttachmentReference& setLayout( ImageLayout layout_ )
4372 {
4373 layout = layout_;
4374 return *this;
4375 }
4376
4377 operator const VkAttachmentReference&() const
4378 {
4379 return *reinterpret_cast<const VkAttachmentReference*>(this);
4380 }
4381
4382 bool operator==( AttachmentReference const& rhs ) const
4383 {
4384 return ( attachment == rhs.attachment )
4385 && ( layout == rhs.layout );
4386 }
4387
4388 bool operator!=( AttachmentReference const& rhs ) const
4389 {
4390 return !operator==( rhs );
4391 }
4392
4393 uint32_t attachment;
4394 ImageLayout layout;
4395 };
4396 static_assert( sizeof( AttachmentReference ) == sizeof( VkAttachmentReference ), "struct and wrapper have different size!" );
4397
4398 enum class AttachmentLoadOp
4399 {
4400 eLoad = VK_ATTACHMENT_LOAD_OP_LOAD,
4401 eClear = VK_ATTACHMENT_LOAD_OP_CLEAR,
4402 eDontCare = VK_ATTACHMENT_LOAD_OP_DONT_CARE
4403 };
4404
4405 enum class AttachmentStoreOp
4406 {
4407 eStore = VK_ATTACHMENT_STORE_OP_STORE,
4408 eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE
4409 };
4410
4411 enum class ImageType
4412 {
4413 e1D = VK_IMAGE_TYPE_1D,
4414 e2D = VK_IMAGE_TYPE_2D,
4415 e3D = VK_IMAGE_TYPE_3D
4416 };
4417
4418 enum class ImageTiling
4419 {
4420 eOptimal = VK_IMAGE_TILING_OPTIMAL,
4421 eLinear = VK_IMAGE_TILING_LINEAR
4422 };
4423
4424 enum class ImageViewType
4425 {
4426 e1D = VK_IMAGE_VIEW_TYPE_1D,
4427 e2D = VK_IMAGE_VIEW_TYPE_2D,
4428 e3D = VK_IMAGE_VIEW_TYPE_3D,
4429 eCube = VK_IMAGE_VIEW_TYPE_CUBE,
4430 e1DArray = VK_IMAGE_VIEW_TYPE_1D_ARRAY,
4431 e2DArray = VK_IMAGE_VIEW_TYPE_2D_ARRAY,
4432 eCubeArray = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
4433 };
4434
4435 enum class CommandBufferLevel
4436 {
4437 ePrimary = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
4438 eSecondary = VK_COMMAND_BUFFER_LEVEL_SECONDARY
4439 };
4440
4441 enum class ComponentSwizzle
4442 {
4443 eIdentity = VK_COMPONENT_SWIZZLE_IDENTITY,
4444 eZero = VK_COMPONENT_SWIZZLE_ZERO,
4445 eOne = VK_COMPONENT_SWIZZLE_ONE,
4446 eR = VK_COMPONENT_SWIZZLE_R,
4447 eG = VK_COMPONENT_SWIZZLE_G,
4448 eB = VK_COMPONENT_SWIZZLE_B,
4449 eA = VK_COMPONENT_SWIZZLE_A
4450 };
4451
4452 struct ComponentMapping
4453 {
4454 ComponentMapping( ComponentSwizzle r_ = ComponentSwizzle::eIdentity, ComponentSwizzle g_ = ComponentSwizzle::eIdentity, ComponentSwizzle b_ = ComponentSwizzle::eIdentity, ComponentSwizzle a_ = ComponentSwizzle::eIdentity )
4455 : r( r_ )
4456 , g( g_ )
4457 , b( b_ )
4458 , a( a_ )
4459 {
4460 }
4461
4462 ComponentMapping( VkComponentMapping const & rhs )
4463 {
4464 memcpy( this, &rhs, sizeof(ComponentMapping) );
4465 }
4466
4467 ComponentMapping& operator=( VkComponentMapping const & rhs )
4468 {
4469 memcpy( this, &rhs, sizeof(ComponentMapping) );
4470 return *this;
4471 }
4472
4473 ComponentMapping& setR( ComponentSwizzle r_ )
4474 {
4475 r = r_;
4476 return *this;
4477 }
4478
4479 ComponentMapping& setG( ComponentSwizzle g_ )
4480 {
4481 g = g_;
4482 return *this;
4483 }
4484
4485 ComponentMapping& setB( ComponentSwizzle b_ )
4486 {
4487 b = b_;
4488 return *this;
4489 }
4490
4491 ComponentMapping& setA( ComponentSwizzle a_ )
4492 {
4493 a = a_;
4494 return *this;
4495 }
4496
4497 operator const VkComponentMapping&() const
4498 {
4499 return *reinterpret_cast<const VkComponentMapping*>(this);
4500 }
4501
4502 bool operator==( ComponentMapping const& rhs ) const
4503 {
4504 return ( r == rhs.r )
4505 && ( g == rhs.g )
4506 && ( b == rhs.b )
4507 && ( a == rhs.a );
4508 }
4509
4510 bool operator!=( ComponentMapping const& rhs ) const
4511 {
4512 return !operator==( rhs );
4513 }
4514
4515 ComponentSwizzle r;
4516 ComponentSwizzle g;
4517 ComponentSwizzle b;
4518 ComponentSwizzle a;
4519 };
4520 static_assert( sizeof( ComponentMapping ) == sizeof( VkComponentMapping ), "struct and wrapper have different size!" );
4521
4522 enum class DescriptorType
4523 {
4524 eSampler = VK_DESCRIPTOR_TYPE_SAMPLER,
4525 eCombinedImageSampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
4526 eSampledImage = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
4527 eStorageImage = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
4528 eUniformTexelBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
4529 eStorageTexelBuffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
4530 eUniformBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
4531 eStorageBuffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
4532 eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
4533 eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
4534 eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
4535 };
4536
4537 struct DescriptorPoolSize
4538 {
4539 DescriptorPoolSize( DescriptorType type_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0 )
4540 : type( type_ )
4541 , descriptorCount( descriptorCount_ )
4542 {
4543 }
4544
4545 DescriptorPoolSize( VkDescriptorPoolSize const & rhs )
4546 {
4547 memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4548 }
4549
4550 DescriptorPoolSize& operator=( VkDescriptorPoolSize const & rhs )
4551 {
4552 memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4553 return *this;
4554 }
4555
4556 DescriptorPoolSize& setType( DescriptorType type_ )
4557 {
4558 type = type_;
4559 return *this;
4560 }
4561
4562 DescriptorPoolSize& setDescriptorCount( uint32_t descriptorCount_ )
4563 {
4564 descriptorCount = descriptorCount_;
4565 return *this;
4566 }
4567
4568 operator const VkDescriptorPoolSize&() const
4569 {
4570 return *reinterpret_cast<const VkDescriptorPoolSize*>(this);
4571 }
4572
4573 bool operator==( DescriptorPoolSize const& rhs ) const
4574 {
4575 return ( type == rhs.type )
4576 && ( descriptorCount == rhs.descriptorCount );
4577 }
4578
4579 bool operator!=( DescriptorPoolSize const& rhs ) const
4580 {
4581 return !operator==( rhs );
4582 }
4583
4584 DescriptorType type;
4585 uint32_t descriptorCount;
4586 };
4587 static_assert( sizeof( DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ), "struct and wrapper have different size!" );
4588
4589 enum class QueryType
4590 {
4591 eOcclusion = VK_QUERY_TYPE_OCCLUSION,
4592 ePipelineStatistics = VK_QUERY_TYPE_PIPELINE_STATISTICS,
4593 eTimestamp = VK_QUERY_TYPE_TIMESTAMP
4594 };
4595
4596 enum class BorderColor
4597 {
4598 eFloatTransparentBlack = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
4599 eIntTransparentBlack = VK_BORDER_COLOR_INT_TRANSPARENT_BLACK,
4600 eFloatOpaqueBlack = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
4601 eIntOpaqueBlack = VK_BORDER_COLOR_INT_OPAQUE_BLACK,
4602 eFloatOpaqueWhite = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE,
4603 eIntOpaqueWhite = VK_BORDER_COLOR_INT_OPAQUE_WHITE
4604 };
4605
4606 enum class PipelineBindPoint
4607 {
4608 eGraphics = VK_PIPELINE_BIND_POINT_GRAPHICS,
4609 eCompute = VK_PIPELINE_BIND_POINT_COMPUTE
4610 };
4611
4612 struct SubpassDescription
4613 {
4614 SubpassDescription( SubpassDescriptionFlags flags_ = SubpassDescriptionFlags(), PipelineBindPoint pipelineBindPoint_ = PipelineBindPoint::eGraphics, uint32_t inputAttachmentCount_ = 0, const AttachmentReference* pInputAttachments_ = nullptr, uint32_t colorAttachmentCount_ = 0, const AttachmentReference* pColorAttachments_ = nullptr, const AttachmentReference* pResolveAttachments_ = nullptr, const AttachmentReference* pDepthStencilAttachment_ = nullptr, uint32_t preserveAttachmentCount_ = 0, const uint32_t* pPreserveAttachments_ = nullptr )
4615 : flags( flags_ )
4616 , pipelineBindPoint( pipelineBindPoint_ )
4617 , inputAttachmentCount( inputAttachmentCount_ )
4618 , pInputAttachments( pInputAttachments_ )
4619 , colorAttachmentCount( colorAttachmentCount_ )
4620 , pColorAttachments( pColorAttachments_ )
4621 , pResolveAttachments( pResolveAttachments_ )
4622 , pDepthStencilAttachment( pDepthStencilAttachment_ )
4623 , preserveAttachmentCount( preserveAttachmentCount_ )
4624 , pPreserveAttachments( pPreserveAttachments_ )
4625 {
4626 }
4627
4628 SubpassDescription( VkSubpassDescription const & rhs )
4629 {
4630 memcpy( this, &rhs, sizeof(SubpassDescription) );
4631 }
4632
4633 SubpassDescription& operator=( VkSubpassDescription const & rhs )
4634 {
4635 memcpy( this, &rhs, sizeof(SubpassDescription) );
4636 return *this;
4637 }
4638
4639 SubpassDescription& setFlags( SubpassDescriptionFlags flags_ )
4640 {
4641 flags = flags_;
4642 return *this;
4643 }
4644
4645 SubpassDescription& setPipelineBindPoint( PipelineBindPoint pipelineBindPoint_ )
4646 {
4647 pipelineBindPoint = pipelineBindPoint_;
4648 return *this;
4649 }
4650
4651 SubpassDescription& setInputAttachmentCount( uint32_t inputAttachmentCount_ )
4652 {
4653 inputAttachmentCount = inputAttachmentCount_;
4654 return *this;
4655 }
4656
4657 SubpassDescription& setPInputAttachments( const AttachmentReference* pInputAttachments_ )
4658 {
4659 pInputAttachments = pInputAttachments_;
4660 return *this;
4661 }
4662
4663 SubpassDescription& setColorAttachmentCount( uint32_t colorAttachmentCount_ )
4664 {
4665 colorAttachmentCount = colorAttachmentCount_;
4666 return *this;
4667 }
4668
4669 SubpassDescription& setPColorAttachments( const AttachmentReference* pColorAttachments_ )
4670 {
4671 pColorAttachments = pColorAttachments_;
4672 return *this;
4673 }
4674
4675 SubpassDescription& setPResolveAttachments( const AttachmentReference* pResolveAttachments_ )
4676 {
4677 pResolveAttachments = pResolveAttachments_;
4678 return *this;
4679 }
4680
4681 SubpassDescription& setPDepthStencilAttachment( const AttachmentReference* pDepthStencilAttachment_ )
4682 {
4683 pDepthStencilAttachment = pDepthStencilAttachment_;
4684 return *this;
4685 }
4686
4687 SubpassDescription& setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ )
4688 {
4689 preserveAttachmentCount = preserveAttachmentCount_;
4690 return *this;
4691 }
4692
4693 SubpassDescription& setPPreserveAttachments( const uint32_t* pPreserveAttachments_ )
4694 {
4695 pPreserveAttachments = pPreserveAttachments_;
4696 return *this;
4697 }
4698
4699 operator const VkSubpassDescription&() const
4700 {
4701 return *reinterpret_cast<const VkSubpassDescription*>(this);
4702 }
4703
4704 bool operator==( SubpassDescription const& rhs ) const
4705 {
4706 return ( flags == rhs.flags )
4707 && ( pipelineBindPoint == rhs.pipelineBindPoint )
4708 && ( inputAttachmentCount == rhs.inputAttachmentCount )
4709 && ( pInputAttachments == rhs.pInputAttachments )
4710 && ( colorAttachmentCount == rhs.colorAttachmentCount )
4711 && ( pColorAttachments == rhs.pColorAttachments )
4712 && ( pResolveAttachments == rhs.pResolveAttachments )
4713 && ( pDepthStencilAttachment == rhs.pDepthStencilAttachment )
4714 && ( preserveAttachmentCount == rhs.preserveAttachmentCount )
4715 && ( pPreserveAttachments == rhs.pPreserveAttachments );
4716 }
4717
4718 bool operator!=( SubpassDescription const& rhs ) const
4719 {
4720 return !operator==( rhs );
4721 }
4722
4723 SubpassDescriptionFlags flags;
4724 PipelineBindPoint pipelineBindPoint;
4725 uint32_t inputAttachmentCount;
4726 const AttachmentReference* pInputAttachments;
4727 uint32_t colorAttachmentCount;
4728 const AttachmentReference* pColorAttachments;
4729 const AttachmentReference* pResolveAttachments;
4730 const AttachmentReference* pDepthStencilAttachment;
4731 uint32_t preserveAttachmentCount;
4732 const uint32_t* pPreserveAttachments;
4733 };
4734 static_assert( sizeof( SubpassDescription ) == sizeof( VkSubpassDescription ), "struct and wrapper have different size!" );
4735
4736 enum class PipelineCacheHeaderVersion
4737 {
4738 eOne = VK_PIPELINE_CACHE_HEADER_VERSION_ONE
4739 };
4740
4741 enum class PrimitiveTopology
4742 {
4743 ePointList = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
4744 eLineList = VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
4745 eLineStrip = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
4746 eTriangleList = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
4747 eTriangleStrip = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
4748 eTriangleFan = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
4749 eLineListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
4750 eLineStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
4751 eTriangleListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
4752 eTriangleStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY,
4753 ePatchList = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
4754 };
4755
4756 enum class SharingMode
4757 {
4758 eExclusive = VK_SHARING_MODE_EXCLUSIVE,
4759 eConcurrent = VK_SHARING_MODE_CONCURRENT
4760 };
4761
4762 enum class IndexType
4763 {
4764 eUint16 = VK_INDEX_TYPE_UINT16,
4765 eUint32 = VK_INDEX_TYPE_UINT32
4766 };
4767
4768 enum class Filter
4769 {
4770 eNearest = VK_FILTER_NEAREST,
4771 eLinear = VK_FILTER_LINEAR,
4772 eCubicIMG = VK_FILTER_CUBIC_IMG
4773 };
4774
4775 enum class SamplerMipmapMode
4776 {
4777 eNearest = VK_SAMPLER_MIPMAP_MODE_NEAREST,
4778 eLinear = VK_SAMPLER_MIPMAP_MODE_LINEAR
4779 };
4780
4781 enum class SamplerAddressMode
4782 {
4783 eRepeat = VK_SAMPLER_ADDRESS_MODE_REPEAT,
4784 eMirroredRepeat = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
4785 eClampToEdge = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
4786 eClampToBorder = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
4787 eMirrorClampToEdge = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
4788 };
4789
4790 enum class CompareOp
4791 {
4792 eNever = VK_COMPARE_OP_NEVER,
4793 eLess = VK_COMPARE_OP_LESS,
4794 eEqual = VK_COMPARE_OP_EQUAL,
4795 eLessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL,
4796 eGreater = VK_COMPARE_OP_GREATER,
4797 eNotEqual = VK_COMPARE_OP_NOT_EQUAL,
4798 eGreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL,
4799 eAlways = VK_COMPARE_OP_ALWAYS
4800 };
4801
4802 enum class PolygonMode
4803 {
4804 eFill = VK_POLYGON_MODE_FILL,
4805 eLine = VK_POLYGON_MODE_LINE,
4806 ePoint = VK_POLYGON_MODE_POINT
4807 };
4808
4809 enum class CullModeFlagBits
4810 {
4811 eNone = VK_CULL_MODE_NONE,
4812 eFront = VK_CULL_MODE_FRONT_BIT,
4813 eBack = VK_CULL_MODE_BACK_BIT,
4814 eFrontAndBack = VK_CULL_MODE_FRONT_AND_BACK
4815 };
4816
4817 using CullModeFlags = Flags<CullModeFlagBits, VkCullModeFlags>;
4818
4819 inline CullModeFlags operator|( CullModeFlagBits bit0, CullModeFlagBits bit1 )
4820 {
4821 return CullModeFlags( bit0 ) | bit1;
4822 }
4823
4824 enum class FrontFace
4825 {
4826 eCounterClockwise = VK_FRONT_FACE_COUNTER_CLOCKWISE,
4827 eClockwise = VK_FRONT_FACE_CLOCKWISE
4828 };
4829
4830 enum class BlendFactor
4831 {
4832 eZero = VK_BLEND_FACTOR_ZERO,
4833 eOne = VK_BLEND_FACTOR_ONE,
4834 eSrcColor = VK_BLEND_FACTOR_SRC_COLOR,
4835 eOneMinusSrcColor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
4836 eDstColor = VK_BLEND_FACTOR_DST_COLOR,
4837 eOneMinusDstColor = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR,
4838 eSrcAlpha = VK_BLEND_FACTOR_SRC_ALPHA,
4839 eOneMinusSrcAlpha = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
4840 eDstAlpha = VK_BLEND_FACTOR_DST_ALPHA,
4841 eOneMinusDstAlpha = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA,
4842 eConstantColor = VK_BLEND_FACTOR_CONSTANT_COLOR,
4843 eOneMinusConstantColor = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
4844 eConstantAlpha = VK_BLEND_FACTOR_CONSTANT_ALPHA,
4845 eOneMinusConstantAlpha = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
4846 eSrcAlphaSaturate = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE,
4847 eSrc1Color = VK_BLEND_FACTOR_SRC1_COLOR,
4848 eOneMinusSrc1Color = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
4849 eSrc1Alpha = VK_BLEND_FACTOR_SRC1_ALPHA,
4850 eOneMinusSrc1Alpha = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
4851 };
4852
4853 enum class BlendOp
4854 {
4855 eAdd = VK_BLEND_OP_ADD,
4856 eSubtract = VK_BLEND_OP_SUBTRACT,
4857 eReverseSubtract = VK_BLEND_OP_REVERSE_SUBTRACT,
4858 eMin = VK_BLEND_OP_MIN,
4859 eMax = VK_BLEND_OP_MAX
4860 };
4861
4862 enum class StencilOp
4863 {
4864 eKeep = VK_STENCIL_OP_KEEP,
4865 eZero = VK_STENCIL_OP_ZERO,
4866 eReplace = VK_STENCIL_OP_REPLACE,
4867 eIncrementAndClamp = VK_STENCIL_OP_INCREMENT_AND_CLAMP,
4868 eDecrementAndClamp = VK_STENCIL_OP_DECREMENT_AND_CLAMP,
4869 eInvert = VK_STENCIL_OP_INVERT,
4870 eIncrementAndWrap = VK_STENCIL_OP_INCREMENT_AND_WRAP,
4871 eDecrementAndWrap = VK_STENCIL_OP_DECREMENT_AND_WRAP
4872 };
4873
4874 struct StencilOpState
4875 {
4876 StencilOpState( StencilOp failOp_ = StencilOp::eKeep, StencilOp passOp_ = StencilOp::eKeep, StencilOp depthFailOp_ = StencilOp::eKeep, CompareOp compareOp_ = CompareOp::eNever, uint32_t compareMask_ = 0, uint32_t writeMask_ = 0, uint32_t reference_ = 0 )
4877 : failOp( failOp_ )
4878 , passOp( passOp_ )
4879 , depthFailOp( depthFailOp_ )
4880 , compareOp( compareOp_ )
4881 , compareMask( compareMask_ )
4882 , writeMask( writeMask_ )
4883 , reference( reference_ )
4884 {
4885 }
4886
4887 StencilOpState( VkStencilOpState const & rhs )
4888 {
4889 memcpy( this, &rhs, sizeof(StencilOpState) );
4890 }
4891
4892 StencilOpState& operator=( VkStencilOpState const & rhs )
4893 {
4894 memcpy( this, &rhs, sizeof(StencilOpState) );
4895 return *this;
4896 }
4897
4898 StencilOpState& setFailOp( StencilOp failOp_ )
4899 {
4900 failOp = failOp_;
4901 return *this;
4902 }
4903
4904 StencilOpState& setPassOp( StencilOp passOp_ )
4905 {
4906 passOp = passOp_;
4907 return *this;
4908 }
4909
4910 StencilOpState& setDepthFailOp( StencilOp depthFailOp_ )
4911 {
4912 depthFailOp = depthFailOp_;
4913 return *this;
4914 }
4915
4916 StencilOpState& setCompareOp( CompareOp compareOp_ )
4917 {
4918 compareOp = compareOp_;
4919 return *this;
4920 }
4921
4922 StencilOpState& setCompareMask( uint32_t compareMask_ )
4923 {
4924 compareMask = compareMask_;
4925 return *this;
4926 }
4927
4928 StencilOpState& setWriteMask( uint32_t writeMask_ )
4929 {
4930 writeMask = writeMask_;
4931 return *this;
4932 }
4933
4934 StencilOpState& setReference( uint32_t reference_ )
4935 {
4936 reference = reference_;
4937 return *this;
4938 }
4939
4940 operator const VkStencilOpState&() const
4941 {
4942 return *reinterpret_cast<const VkStencilOpState*>(this);
4943 }
4944
4945 bool operator==( StencilOpState const& rhs ) const
4946 {
4947 return ( failOp == rhs.failOp )
4948 && ( passOp == rhs.passOp )
4949 && ( depthFailOp == rhs.depthFailOp )
4950 && ( compareOp == rhs.compareOp )
4951 && ( compareMask == rhs.compareMask )
4952 && ( writeMask == rhs.writeMask )
4953 && ( reference == rhs.reference );
4954 }
4955
4956 bool operator!=( StencilOpState const& rhs ) const
4957 {
4958 return !operator==( rhs );
4959 }
4960
4961 StencilOp failOp;
4962 StencilOp passOp;
4963 StencilOp depthFailOp;
4964 CompareOp compareOp;
4965 uint32_t compareMask;
4966 uint32_t writeMask;
4967 uint32_t reference;
4968 };
4969 static_assert( sizeof( StencilOpState ) == sizeof( VkStencilOpState ), "struct and wrapper have different size!" );
4970
4971 enum class LogicOp
4972 {
4973 eClear = VK_LOGIC_OP_CLEAR,
4974 eAnd = VK_LOGIC_OP_AND,
4975 eAndReverse = VK_LOGIC_OP_AND_REVERSE,
4976 eCopy = VK_LOGIC_OP_COPY,
4977 eAndInverted = VK_LOGIC_OP_AND_INVERTED,
4978 eNoOp = VK_LOGIC_OP_NO_OP,
4979 eXor = VK_LOGIC_OP_XOR,
4980 eOr = VK_LOGIC_OP_OR,
4981 eNor = VK_LOGIC_OP_NOR,
4982 eEquivalent = VK_LOGIC_OP_EQUIVALENT,
4983 eInvert = VK_LOGIC_OP_INVERT,
4984 eOrReverse = VK_LOGIC_OP_OR_REVERSE,
4985 eCopyInverted = VK_LOGIC_OP_COPY_INVERTED,
4986 eOrInverted = VK_LOGIC_OP_OR_INVERTED,
4987 eNand = VK_LOGIC_OP_NAND,
4988 eSet = VK_LOGIC_OP_SET
4989 };
4990
4991 enum class InternalAllocationType
4992 {
4993 eExecutable = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE
4994 };
4995
4996 enum class SystemAllocationScope
4997 {
4998 eCommand = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
4999 eObject = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT,
5000 eCache = VK_SYSTEM_ALLOCATION_SCOPE_CACHE,
5001 eDevice = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE,
5002 eInstance = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE
5003 };
5004
5005 enum class PhysicalDeviceType
5006 {
5007 eOther = VK_PHYSICAL_DEVICE_TYPE_OTHER,
5008 eIntegratedGpu = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
5009 eDiscreteGpu = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
5010 eVirtualGpu = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU,
5011 eCpu = VK_PHYSICAL_DEVICE_TYPE_CPU
5012 };
5013
5014 enum class VertexInputRate
5015 {
5016 eVertex = VK_VERTEX_INPUT_RATE_VERTEX,
5017 eInstance = VK_VERTEX_INPUT_RATE_INSTANCE
5018 };
5019
5020 struct VertexInputBindingDescription
5021 {
5022 VertexInputBindingDescription( uint32_t binding_ = 0, uint32_t stride_ = 0, VertexInputRate inputRate_ = VertexInputRate::eVertex )
5023 : binding( binding_ )
5024 , stride( stride_ )
5025 , inputRate( inputRate_ )
5026 {
5027 }
5028
5029 VertexInputBindingDescription( VkVertexInputBindingDescription const & rhs )
5030 {
5031 memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
5032 }
5033
5034 VertexInputBindingDescription& operator=( VkVertexInputBindingDescription const & rhs )
5035 {
5036 memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
5037 return *this;
5038 }
5039
5040 VertexInputBindingDescription& setBinding( uint32_t binding_ )
5041 {
5042 binding = binding_;
5043 return *this;
5044 }
5045
5046 VertexInputBindingDescription& setStride( uint32_t stride_ )
5047 {
5048 stride = stride_;
5049 return *this;
5050 }
5051
5052 VertexInputBindingDescription& setInputRate( VertexInputRate inputRate_ )
5053 {
5054 inputRate = inputRate_;
5055 return *this;
5056 }
5057
5058 operator const VkVertexInputBindingDescription&() const
5059 {
5060 return *reinterpret_cast<const VkVertexInputBindingDescription*>(this);
5061 }
5062
5063 bool operator==( VertexInputBindingDescription const& rhs ) const
5064 {
5065 return ( binding == rhs.binding )
5066 && ( stride == rhs.stride )
5067 && ( inputRate == rhs.inputRate );
5068 }
5069
5070 bool operator!=( VertexInputBindingDescription const& rhs ) const
5071 {
5072 return !operator==( rhs );
5073 }
5074
5075 uint32_t binding;
5076 uint32_t stride;
5077 VertexInputRate inputRate;
5078 };
5079 static_assert( sizeof( VertexInputBindingDescription ) == sizeof( VkVertexInputBindingDescription ), "struct and wrapper have different size!" );
5080
5081 enum class Format
5082 {
5083 eUndefined = VK_FORMAT_UNDEFINED,
5084 eR4G4UnormPack8 = VK_FORMAT_R4G4_UNORM_PACK8,
5085 eR4G4B4A4UnormPack16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16,
5086 eB4G4R4A4UnormPack16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16,
5087 eR5G6B5UnormPack16 = VK_FORMAT_R5G6B5_UNORM_PACK16,
5088 eB5G6R5UnormPack16 = VK_FORMAT_B5G6R5_UNORM_PACK16,
5089 eR5G5B5A1UnormPack16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16,
5090 eB5G5R5A1UnormPack16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16,
5091 eA1R5G5B5UnormPack16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16,
5092 eR8Unorm = VK_FORMAT_R8_UNORM,
5093 eR8Snorm = VK_FORMAT_R8_SNORM,
5094 eR8Uscaled = VK_FORMAT_R8_USCALED,
5095 eR8Sscaled = VK_FORMAT_R8_SSCALED,
5096 eR8Uint = VK_FORMAT_R8_UINT,
5097 eR8Sint = VK_FORMAT_R8_SINT,
5098 eR8Srgb = VK_FORMAT_R8_SRGB,
5099 eR8G8Unorm = VK_FORMAT_R8G8_UNORM,
5100 eR8G8Snorm = VK_FORMAT_R8G8_SNORM,
5101 eR8G8Uscaled = VK_FORMAT_R8G8_USCALED,
5102 eR8G8Sscaled = VK_FORMAT_R8G8_SSCALED,
5103 eR8G8Uint = VK_FORMAT_R8G8_UINT,
5104 eR8G8Sint = VK_FORMAT_R8G8_SINT,
5105 eR8G8Srgb = VK_FORMAT_R8G8_SRGB,
5106 eR8G8B8Unorm = VK_FORMAT_R8G8B8_UNORM,
5107 eR8G8B8Snorm = VK_FORMAT_R8G8B8_SNORM,
5108 eR8G8B8Uscaled = VK_FORMAT_R8G8B8_USCALED,
5109 eR8G8B8Sscaled = VK_FORMAT_R8G8B8_SSCALED,
5110 eR8G8B8Uint = VK_FORMAT_R8G8B8_UINT,
5111 eR8G8B8Sint = VK_FORMAT_R8G8B8_SINT,
5112 eR8G8B8Srgb = VK_FORMAT_R8G8B8_SRGB,
5113 eB8G8R8Unorm = VK_FORMAT_B8G8R8_UNORM,
5114 eB8G8R8Snorm = VK_FORMAT_B8G8R8_SNORM,
5115 eB8G8R8Uscaled = VK_FORMAT_B8G8R8_USCALED,
5116 eB8G8R8Sscaled = VK_FORMAT_B8G8R8_SSCALED,
5117 eB8G8R8Uint = VK_FORMAT_B8G8R8_UINT,
5118 eB8G8R8Sint = VK_FORMAT_B8G8R8_SINT,
5119 eB8G8R8Srgb = VK_FORMAT_B8G8R8_SRGB,
5120 eR8G8B8A8Unorm = VK_FORMAT_R8G8B8A8_UNORM,
5121 eR8G8B8A8Snorm = VK_FORMAT_R8G8B8A8_SNORM,
5122 eR8G8B8A8Uscaled = VK_FORMAT_R8G8B8A8_USCALED,
5123 eR8G8B8A8Sscaled = VK_FORMAT_R8G8B8A8_SSCALED,
5124 eR8G8B8A8Uint = VK_FORMAT_R8G8B8A8_UINT,
5125 eR8G8B8A8Sint = VK_FORMAT_R8G8B8A8_SINT,
5126 eR8G8B8A8Srgb = VK_FORMAT_R8G8B8A8_SRGB,
5127 eB8G8R8A8Unorm = VK_FORMAT_B8G8R8A8_UNORM,
5128 eB8G8R8A8Snorm = VK_FORMAT_B8G8R8A8_SNORM,
5129 eB8G8R8A8Uscaled = VK_FORMAT_B8G8R8A8_USCALED,
5130 eB8G8R8A8Sscaled = VK_FORMAT_B8G8R8A8_SSCALED,
5131 eB8G8R8A8Uint = VK_FORMAT_B8G8R8A8_UINT,
5132 eB8G8R8A8Sint = VK_FORMAT_B8G8R8A8_SINT,
5133 eB8G8R8A8Srgb = VK_FORMAT_B8G8R8A8_SRGB,
5134 eA8B8G8R8UnormPack32 = VK_FORMAT_A8B8G8R8_UNORM_PACK32,
5135 eA8B8G8R8SnormPack32 = VK_FORMAT_A8B8G8R8_SNORM_PACK32,
5136 eA8B8G8R8UscaledPack32 = VK_FORMAT_A8B8G8R8_USCALED_PACK32,
5137 eA8B8G8R8SscaledPack32 = VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
5138 eA8B8G8R8UintPack32 = VK_FORMAT_A8B8G8R8_UINT_PACK32,
5139 eA8B8G8R8SintPack32 = VK_FORMAT_A8B8G8R8_SINT_PACK32,
5140 eA8B8G8R8SrgbPack32 = VK_FORMAT_A8B8G8R8_SRGB_PACK32,
5141 eA2R10G10B10UnormPack32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32,
5142 eA2R10G10B10SnormPack32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32,
5143 eA2R10G10B10UscaledPack32 = VK_FORMAT_A2R10G10B10_USCALED_PACK32,
5144 eA2R10G10B10SscaledPack32 = VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
5145 eA2R10G10B10UintPack32 = VK_FORMAT_A2R10G10B10_UINT_PACK32,
5146 eA2R10G10B10SintPack32 = VK_FORMAT_A2R10G10B10_SINT_PACK32,
5147 eA2B10G10R10UnormPack32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32,
5148 eA2B10G10R10SnormPack32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32,
5149 eA2B10G10R10UscaledPack32 = VK_FORMAT_A2B10G10R10_USCALED_PACK32,
5150 eA2B10G10R10SscaledPack32 = VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
5151 eA2B10G10R10UintPack32 = VK_FORMAT_A2B10G10R10_UINT_PACK32,
5152 eA2B10G10R10SintPack32 = VK_FORMAT_A2B10G10R10_SINT_PACK32,
5153 eR16Unorm = VK_FORMAT_R16_UNORM,
5154 eR16Snorm = VK_FORMAT_R16_SNORM,
5155 eR16Uscaled = VK_FORMAT_R16_USCALED,
5156 eR16Sscaled = VK_FORMAT_R16_SSCALED,
5157 eR16Uint = VK_FORMAT_R16_UINT,
5158 eR16Sint = VK_FORMAT_R16_SINT,
5159 eR16Sfloat = VK_FORMAT_R16_SFLOAT,
5160 eR16G16Unorm = VK_FORMAT_R16G16_UNORM,
5161 eR16G16Snorm = VK_FORMAT_R16G16_SNORM,
5162 eR16G16Uscaled = VK_FORMAT_R16G16_USCALED,
5163 eR16G16Sscaled = VK_FORMAT_R16G16_SSCALED,
5164 eR16G16Uint = VK_FORMAT_R16G16_UINT,
5165 eR16G16Sint = VK_FORMAT_R16G16_SINT,
5166 eR16G16Sfloat = VK_FORMAT_R16G16_SFLOAT,
5167 eR16G16B16Unorm = VK_FORMAT_R16G16B16_UNORM,
5168 eR16G16B16Snorm = VK_FORMAT_R16G16B16_SNORM,
5169 eR16G16B16Uscaled = VK_FORMAT_R16G16B16_USCALED,
5170 eR16G16B16Sscaled = VK_FORMAT_R16G16B16_SSCALED,
5171 eR16G16B16Uint = VK_FORMAT_R16G16B16_UINT,
5172 eR16G16B16Sint = VK_FORMAT_R16G16B16_SINT,
5173 eR16G16B16Sfloat = VK_FORMAT_R16G16B16_SFLOAT,
5174 eR16G16B16A16Unorm = VK_FORMAT_R16G16B16A16_UNORM,
5175 eR16G16B16A16Snorm = VK_FORMAT_R16G16B16A16_SNORM,
5176 eR16G16B16A16Uscaled = VK_FORMAT_R16G16B16A16_USCALED,
5177 eR16G16B16A16Sscaled = VK_FORMAT_R16G16B16A16_SSCALED,
5178 eR16G16B16A16Uint = VK_FORMAT_R16G16B16A16_UINT,
5179 eR16G16B16A16Sint = VK_FORMAT_R16G16B16A16_SINT,
5180 eR16G16B16A16Sfloat = VK_FORMAT_R16G16B16A16_SFLOAT,
5181 eR32Uint = VK_FORMAT_R32_UINT,
5182 eR32Sint = VK_FORMAT_R32_SINT,
5183 eR32Sfloat = VK_FORMAT_R32_SFLOAT,
5184 eR32G32Uint = VK_FORMAT_R32G32_UINT,
5185 eR32G32Sint = VK_FORMAT_R32G32_SINT,
5186 eR32G32Sfloat = VK_FORMAT_R32G32_SFLOAT,
5187 eR32G32B32Uint = VK_FORMAT_R32G32B32_UINT,
5188 eR32G32B32Sint = VK_FORMAT_R32G32B32_SINT,
5189 eR32G32B32Sfloat = VK_FORMAT_R32G32B32_SFLOAT,
5190 eR32G32B32A32Uint = VK_FORMAT_R32G32B32A32_UINT,
5191 eR32G32B32A32Sint = VK_FORMAT_R32G32B32A32_SINT,
5192 eR32G32B32A32Sfloat = VK_FORMAT_R32G32B32A32_SFLOAT,
5193 eR64Uint = VK_FORMAT_R64_UINT,
5194 eR64Sint = VK_FORMAT_R64_SINT,
5195 eR64Sfloat = VK_FORMAT_R64_SFLOAT,
5196 eR64G64Uint = VK_FORMAT_R64G64_UINT,
5197 eR64G64Sint = VK_FORMAT_R64G64_SINT,
5198 eR64G64Sfloat = VK_FORMAT_R64G64_SFLOAT,
5199 eR64G64B64Uint = VK_FORMAT_R64G64B64_UINT,
5200 eR64G64B64Sint = VK_FORMAT_R64G64B64_SINT,
5201 eR64G64B64Sfloat = VK_FORMAT_R64G64B64_SFLOAT,
5202 eR64G64B64A64Uint = VK_FORMAT_R64G64B64A64_UINT,
5203 eR64G64B64A64Sint = VK_FORMAT_R64G64B64A64_SINT,
5204 eR64G64B64A64Sfloat = VK_FORMAT_R64G64B64A64_SFLOAT,
5205 eB10G11R11UfloatPack32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32,
5206 eE5B9G9R9UfloatPack32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
5207 eD16Unorm = VK_FORMAT_D16_UNORM,
5208 eX8D24UnormPack32 = VK_FORMAT_X8_D24_UNORM_PACK32,
5209 eD32Sfloat = VK_FORMAT_D32_SFLOAT,
5210 eS8Uint = VK_FORMAT_S8_UINT,
5211 eD16UnormS8Uint = VK_FORMAT_D16_UNORM_S8_UINT,
5212 eD24UnormS8Uint = VK_FORMAT_D24_UNORM_S8_UINT,
5213 eD32SfloatS8Uint = VK_FORMAT_D32_SFLOAT_S8_UINT,
5214 eBc1RgbUnormBlock = VK_FORMAT_BC1_RGB_UNORM_BLOCK,
5215 eBc1RgbSrgbBlock = VK_FORMAT_BC1_RGB_SRGB_BLOCK,
5216 eBc1RgbaUnormBlock = VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
5217 eBc1RgbaSrgbBlock = VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
5218 eBc2UnormBlock = VK_FORMAT_BC2_UNORM_BLOCK,
5219 eBc2SrgbBlock = VK_FORMAT_BC2_SRGB_BLOCK,
5220 eBc3UnormBlock = VK_FORMAT_BC3_UNORM_BLOCK,
5221 eBc3SrgbBlock = VK_FORMAT_BC3_SRGB_BLOCK,
5222 eBc4UnormBlock = VK_FORMAT_BC4_UNORM_BLOCK,
5223 eBc4SnormBlock = VK_FORMAT_BC4_SNORM_BLOCK,
5224 eBc5UnormBlock = VK_FORMAT_BC5_UNORM_BLOCK,
5225 eBc5SnormBlock = VK_FORMAT_BC5_SNORM_BLOCK,
5226 eBc6HUfloatBlock = VK_FORMAT_BC6H_UFLOAT_BLOCK,
5227 eBc6HSfloatBlock = VK_FORMAT_BC6H_SFLOAT_BLOCK,
5228 eBc7UnormBlock = VK_FORMAT_BC7_UNORM_BLOCK,
5229 eBc7SrgbBlock = VK_FORMAT_BC7_SRGB_BLOCK,
5230 eEtc2R8G8B8UnormBlock = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
5231 eEtc2R8G8B8SrgbBlock = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
5232 eEtc2R8G8B8A1UnormBlock = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
5233 eEtc2R8G8B8A1SrgbBlock = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
5234 eEtc2R8G8B8A8UnormBlock = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
5235 eEtc2R8G8B8A8SrgbBlock = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
5236 eEacR11UnormBlock = VK_FORMAT_EAC_R11_UNORM_BLOCK,
5237 eEacR11SnormBlock = VK_FORMAT_EAC_R11_SNORM_BLOCK,
5238 eEacR11G11UnormBlock = VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
5239 eEacR11G11SnormBlock = VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
5240 eAstc4x4UnormBlock = VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
5241 eAstc4x4SrgbBlock = VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
5242 eAstc5x4UnormBlock = VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
5243 eAstc5x4SrgbBlock = VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
5244 eAstc5x5UnormBlock = VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
5245 eAstc5x5SrgbBlock = VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
5246 eAstc6x5UnormBlock = VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
5247 eAstc6x5SrgbBlock = VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
5248 eAstc6x6UnormBlock = VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
5249 eAstc6x6SrgbBlock = VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
5250 eAstc8x5UnormBlock = VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
5251 eAstc8x5SrgbBlock = VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
5252 eAstc8x6UnormBlock = VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
5253 eAstc8x6SrgbBlock = VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
5254 eAstc8x8UnormBlock = VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
5255 eAstc8x8SrgbBlock = VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
5256 eAstc10x5UnormBlock = VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
5257 eAstc10x5SrgbBlock = VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
5258 eAstc10x6UnormBlock = VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
5259 eAstc10x6SrgbBlock = VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
5260 eAstc10x8UnormBlock = VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
5261 eAstc10x8SrgbBlock = VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
5262 eAstc10x10UnormBlock = VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
5263 eAstc10x10SrgbBlock = VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
5264 eAstc12x10UnormBlock = VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
5265 eAstc12x10SrgbBlock = VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
5266 eAstc12x12UnormBlock = VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
Lenny Komowebf33162016-08-26 14:10:08 -06005267 eAstc12x12SrgbBlock = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
5268 ePvrtc12BppUnormBlockIMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
5269 ePvrtc14BppUnormBlockIMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
5270 ePvrtc22BppUnormBlockIMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
5271 ePvrtc24BppUnormBlockIMG = VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
5272 ePvrtc12BppSrgbBlockIMG = VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
5273 ePvrtc14BppSrgbBlockIMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
5274 ePvrtc22BppSrgbBlockIMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
5275 ePvrtc24BppSrgbBlockIMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG
Lenny Komowbed9b5c2016-08-11 11:23:15 -06005276 };
5277
5278 struct VertexInputAttributeDescription
5279 {
5280 VertexInputAttributeDescription( uint32_t location_ = 0, uint32_t binding_ = 0, Format format_ = Format::eUndefined, uint32_t offset_ = 0 )
5281 : location( location_ )
5282 , binding( binding_ )
5283 , format( format_ )
5284 , offset( offset_ )
5285 {
5286 }
5287
5288 VertexInputAttributeDescription( VkVertexInputAttributeDescription const & rhs )
5289 {
5290 memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
5291 }
5292
5293 VertexInputAttributeDescription& operator=( VkVertexInputAttributeDescription const & rhs )
5294 {
5295 memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
5296 return *this;
5297 }
5298
5299 VertexInputAttributeDescription& setLocation( uint32_t location_ )
5300 {
5301 location = location_;
5302 return *this;
5303 }
5304
5305 VertexInputAttributeDescription& setBinding( uint32_t binding_ )
5306 {
5307 binding = binding_;
5308 return *this;
5309 }
5310
5311 VertexInputAttributeDescription& setFormat( Format format_ )
5312 {
5313 format = format_;
5314 return *this;
5315 }
5316
5317 VertexInputAttributeDescription& setOffset( uint32_t offset_ )
5318 {
5319 offset = offset_;
5320 return *this;
5321 }
5322
5323 operator const VkVertexInputAttributeDescription&() const
5324 {
5325 return *reinterpret_cast<const VkVertexInputAttributeDescription*>(this);
5326 }
5327
5328 bool operator==( VertexInputAttributeDescription const& rhs ) const
5329 {
5330 return ( location == rhs.location )
5331 && ( binding == rhs.binding )
5332 && ( format == rhs.format )
5333 && ( offset == rhs.offset );
5334 }
5335
5336 bool operator!=( VertexInputAttributeDescription const& rhs ) const
5337 {
5338 return !operator==( rhs );
5339 }
5340
5341 uint32_t location;
5342 uint32_t binding;
5343 Format format;
5344 uint32_t offset;
5345 };
5346 static_assert( sizeof( VertexInputAttributeDescription ) == sizeof( VkVertexInputAttributeDescription ), "struct and wrapper have different size!" );
5347
5348 enum class StructureType
5349 {
5350 eApplicationInfo = VK_STRUCTURE_TYPE_APPLICATION_INFO,
5351 eInstanceCreateInfo = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
5352 eDeviceQueueCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
5353 eDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
5354 eSubmitInfo = VK_STRUCTURE_TYPE_SUBMIT_INFO,
5355 eMemoryAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
5356 eMappedMemoryRange = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
5357 eBindSparseInfo = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
5358 eFenceCreateInfo = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
5359 eSemaphoreCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
5360 eEventCreateInfo = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO,
5361 eQueryPoolCreateInfo = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
5362 eBufferCreateInfo = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
5363 eBufferViewCreateInfo = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO,
5364 eImageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
5365 eImageViewCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
5366 eShaderModuleCreateInfo = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
5367 ePipelineCacheCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,
5368 ePipelineShaderStageCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
5369 ePipelineVertexInputStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
5370 ePipelineInputAssemblyStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
5371 ePipelineTessellationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
5372 ePipelineViewportStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
5373 ePipelineRasterizationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
5374 ePipelineMultisampleStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
5375 ePipelineDepthStencilStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
5376 ePipelineColorBlendStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
5377 ePipelineDynamicStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
5378 eGraphicsPipelineCreateInfo = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
5379 eComputePipelineCreateInfo = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
5380 ePipelineLayoutCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
5381 eSamplerCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
5382 eDescriptorSetLayoutCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
5383 eDescriptorPoolCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
5384 eDescriptorSetAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
5385 eWriteDescriptorSet = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
5386 eCopyDescriptorSet = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
5387 eFramebufferCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
5388 eRenderPassCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
5389 eCommandPoolCreateInfo = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
5390 eCommandBufferAllocateInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
5391 eCommandBufferInheritanceInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
5392 eCommandBufferBeginInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
5393 eRenderPassBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
5394 eBufferMemoryBarrier = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
5395 eImageMemoryBarrier = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
5396 eMemoryBarrier = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
5397 eLoaderInstanceCreateInfo = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
5398 eLoaderDeviceCreateInfo = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
5399 eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
5400 ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
5401 eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
5402 eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
5403 eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
5404 eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
5405 eXcbSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
5406 eWaylandSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
5407 eMirSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR,
5408 eAndroidSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
5409 eWin32SurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
5410 eDebugReportCallbackCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
5411 ePipelineRasterizationStateRasterizationOrderAMD = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD,
5412 eDebugMarkerObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
5413 eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
5414 eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
5415 eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
5416 eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
5417 eDedicatedAllocationMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV
5418 };
5419
5420 struct ApplicationInfo
5421 {
5422 ApplicationInfo( const char* pApplicationName_ = nullptr, uint32_t applicationVersion_ = 0, const char* pEngineName_ = nullptr, uint32_t engineVersion_ = 0, uint32_t apiVersion_ = 0 )
5423 : sType( StructureType::eApplicationInfo )
5424 , pNext( nullptr )
5425 , pApplicationName( pApplicationName_ )
5426 , applicationVersion( applicationVersion_ )
5427 , pEngineName( pEngineName_ )
5428 , engineVersion( engineVersion_ )
5429 , apiVersion( apiVersion_ )
5430 {
5431 }
5432
5433 ApplicationInfo( VkApplicationInfo const & rhs )
5434 {
5435 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5436 }
5437
5438 ApplicationInfo& operator=( VkApplicationInfo const & rhs )
5439 {
5440 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5441 return *this;
5442 }
5443
5444 ApplicationInfo& setSType( StructureType sType_ )
5445 {
5446 sType = sType_;
5447 return *this;
5448 }
5449
5450 ApplicationInfo& setPNext( const void* pNext_ )
5451 {
5452 pNext = pNext_;
5453 return *this;
5454 }
5455
5456 ApplicationInfo& setPApplicationName( const char* pApplicationName_ )
5457 {
5458 pApplicationName = pApplicationName_;
5459 return *this;
5460 }
5461
5462 ApplicationInfo& setApplicationVersion( uint32_t applicationVersion_ )
5463 {
5464 applicationVersion = applicationVersion_;
5465 return *this;
5466 }
5467
5468 ApplicationInfo& setPEngineName( const char* pEngineName_ )
5469 {
5470 pEngineName = pEngineName_;
5471 return *this;
5472 }
5473
5474 ApplicationInfo& setEngineVersion( uint32_t engineVersion_ )
5475 {
5476 engineVersion = engineVersion_;
5477 return *this;
5478 }
5479
5480 ApplicationInfo& setApiVersion( uint32_t apiVersion_ )
5481 {
5482 apiVersion = apiVersion_;
5483 return *this;
5484 }
5485
5486 operator const VkApplicationInfo&() const
5487 {
5488 return *reinterpret_cast<const VkApplicationInfo*>(this);
5489 }
5490
5491 bool operator==( ApplicationInfo const& rhs ) const
5492 {
5493 return ( sType == rhs.sType )
5494 && ( pNext == rhs.pNext )
5495 && ( pApplicationName == rhs.pApplicationName )
5496 && ( applicationVersion == rhs.applicationVersion )
5497 && ( pEngineName == rhs.pEngineName )
5498 && ( engineVersion == rhs.engineVersion )
5499 && ( apiVersion == rhs.apiVersion );
5500 }
5501
5502 bool operator!=( ApplicationInfo const& rhs ) const
5503 {
5504 return !operator==( rhs );
5505 }
5506
5507 private:
5508 StructureType sType;
5509
5510 public:
5511 const void* pNext;
5512 const char* pApplicationName;
5513 uint32_t applicationVersion;
5514 const char* pEngineName;
5515 uint32_t engineVersion;
5516 uint32_t apiVersion;
5517 };
5518 static_assert( sizeof( ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" );
5519
5520 struct DeviceQueueCreateInfo
5521 {
5522 DeviceQueueCreateInfo( DeviceQueueCreateFlags flags_ = DeviceQueueCreateFlags(), uint32_t queueFamilyIndex_ = 0, uint32_t queueCount_ = 0, const float* pQueuePriorities_ = nullptr )
5523 : sType( StructureType::eDeviceQueueCreateInfo )
5524 , pNext( nullptr )
5525 , flags( flags_ )
5526 , queueFamilyIndex( queueFamilyIndex_ )
5527 , queueCount( queueCount_ )
5528 , pQueuePriorities( pQueuePriorities_ )
5529 {
5530 }
5531
5532 DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs )
5533 {
5534 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5535 }
5536
5537 DeviceQueueCreateInfo& operator=( VkDeviceQueueCreateInfo const & rhs )
5538 {
5539 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5540 return *this;
5541 }
5542
5543 DeviceQueueCreateInfo& setSType( StructureType sType_ )
5544 {
5545 sType = sType_;
5546 return *this;
5547 }
5548
5549 DeviceQueueCreateInfo& setPNext( const void* pNext_ )
5550 {
5551 pNext = pNext_;
5552 return *this;
5553 }
5554
5555 DeviceQueueCreateInfo& setFlags( DeviceQueueCreateFlags flags_ )
5556 {
5557 flags = flags_;
5558 return *this;
5559 }
5560
5561 DeviceQueueCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
5562 {
5563 queueFamilyIndex = queueFamilyIndex_;
5564 return *this;
5565 }
5566
5567 DeviceQueueCreateInfo& setQueueCount( uint32_t queueCount_ )
5568 {
5569 queueCount = queueCount_;
5570 return *this;
5571 }
5572
5573 DeviceQueueCreateInfo& setPQueuePriorities( const float* pQueuePriorities_ )
5574 {
5575 pQueuePriorities = pQueuePriorities_;
5576 return *this;
5577 }
5578
5579 operator const VkDeviceQueueCreateInfo&() const
5580 {
5581 return *reinterpret_cast<const VkDeviceQueueCreateInfo*>(this);
5582 }
5583
5584 bool operator==( DeviceQueueCreateInfo const& rhs ) const
5585 {
5586 return ( sType == rhs.sType )
5587 && ( pNext == rhs.pNext )
5588 && ( flags == rhs.flags )
5589 && ( queueFamilyIndex == rhs.queueFamilyIndex )
5590 && ( queueCount == rhs.queueCount )
5591 && ( pQueuePriorities == rhs.pQueuePriorities );
5592 }
5593
5594 bool operator!=( DeviceQueueCreateInfo const& rhs ) const
5595 {
5596 return !operator==( rhs );
5597 }
5598
5599 private:
5600 StructureType sType;
5601
5602 public:
5603 const void* pNext;
5604 DeviceQueueCreateFlags flags;
5605 uint32_t queueFamilyIndex;
5606 uint32_t queueCount;
5607 const float* pQueuePriorities;
5608 };
5609 static_assert( sizeof( DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ), "struct and wrapper have different size!" );
5610
5611 struct DeviceCreateInfo
5612 {
5613 DeviceCreateInfo( DeviceCreateFlags flags_ = DeviceCreateFlags(), uint32_t queueCreateInfoCount_ = 0, const DeviceQueueCreateInfo* pQueueCreateInfos_ = nullptr, uint32_t enabledLayerCount_ = 0, const char* const* ppEnabledLayerNames_ = nullptr, uint32_t enabledExtensionCount_ = 0, const char* const* ppEnabledExtensionNames_ = nullptr, const PhysicalDeviceFeatures* pEnabledFeatures_ = nullptr )
5614 : sType( StructureType::eDeviceCreateInfo )
5615 , pNext( nullptr )
5616 , flags( flags_ )
5617 , queueCreateInfoCount( queueCreateInfoCount_ )
5618 , pQueueCreateInfos( pQueueCreateInfos_ )
5619 , enabledLayerCount( enabledLayerCount_ )
5620 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5621 , enabledExtensionCount( enabledExtensionCount_ )
5622 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5623 , pEnabledFeatures( pEnabledFeatures_ )
5624 {
5625 }
5626
5627 DeviceCreateInfo( VkDeviceCreateInfo const & rhs )
5628 {
5629 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5630 }
5631
5632 DeviceCreateInfo& operator=( VkDeviceCreateInfo const & rhs )
5633 {
5634 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5635 return *this;
5636 }
5637
5638 DeviceCreateInfo& setSType( StructureType sType_ )
5639 {
5640 sType = sType_;
5641 return *this;
5642 }
5643
5644 DeviceCreateInfo& setPNext( const void* pNext_ )
5645 {
5646 pNext = pNext_;
5647 return *this;
5648 }
5649
5650 DeviceCreateInfo& setFlags( DeviceCreateFlags flags_ )
5651 {
5652 flags = flags_;
5653 return *this;
5654 }
5655
5656 DeviceCreateInfo& setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ )
5657 {
5658 queueCreateInfoCount = queueCreateInfoCount_;
5659 return *this;
5660 }
5661
5662 DeviceCreateInfo& setPQueueCreateInfos( const DeviceQueueCreateInfo* pQueueCreateInfos_ )
5663 {
5664 pQueueCreateInfos = pQueueCreateInfos_;
5665 return *this;
5666 }
5667
5668 DeviceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5669 {
5670 enabledLayerCount = enabledLayerCount_;
5671 return *this;
5672 }
5673
5674 DeviceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5675 {
5676 ppEnabledLayerNames = ppEnabledLayerNames_;
5677 return *this;
5678 }
5679
5680 DeviceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5681 {
5682 enabledExtensionCount = enabledExtensionCount_;
5683 return *this;
5684 }
5685
5686 DeviceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5687 {
5688 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5689 return *this;
5690 }
5691
5692 DeviceCreateInfo& setPEnabledFeatures( const PhysicalDeviceFeatures* pEnabledFeatures_ )
5693 {
5694 pEnabledFeatures = pEnabledFeatures_;
5695 return *this;
5696 }
5697
5698 operator const VkDeviceCreateInfo&() const
5699 {
5700 return *reinterpret_cast<const VkDeviceCreateInfo*>(this);
5701 }
5702
5703 bool operator==( DeviceCreateInfo const& rhs ) const
5704 {
5705 return ( sType == rhs.sType )
5706 && ( pNext == rhs.pNext )
5707 && ( flags == rhs.flags )
5708 && ( queueCreateInfoCount == rhs.queueCreateInfoCount )
5709 && ( pQueueCreateInfos == rhs.pQueueCreateInfos )
5710 && ( enabledLayerCount == rhs.enabledLayerCount )
5711 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5712 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5713 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames )
5714 && ( pEnabledFeatures == rhs.pEnabledFeatures );
5715 }
5716
5717 bool operator!=( DeviceCreateInfo const& rhs ) const
5718 {
5719 return !operator==( rhs );
5720 }
5721
5722 private:
5723 StructureType sType;
5724
5725 public:
5726 const void* pNext;
5727 DeviceCreateFlags flags;
5728 uint32_t queueCreateInfoCount;
5729 const DeviceQueueCreateInfo* pQueueCreateInfos;
5730 uint32_t enabledLayerCount;
5731 const char* const* ppEnabledLayerNames;
5732 uint32_t enabledExtensionCount;
5733 const char* const* ppEnabledExtensionNames;
5734 const PhysicalDeviceFeatures* pEnabledFeatures;
5735 };
5736 static_assert( sizeof( DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ), "struct and wrapper have different size!" );
5737
5738 struct InstanceCreateInfo
5739 {
5740 InstanceCreateInfo( InstanceCreateFlags flags_ = InstanceCreateFlags(), const ApplicationInfo* pApplicationInfo_ = nullptr, uint32_t enabledLayerCount_ = 0, const char* const* ppEnabledLayerNames_ = nullptr, uint32_t enabledExtensionCount_ = 0, const char* const* ppEnabledExtensionNames_ = nullptr )
5741 : sType( StructureType::eInstanceCreateInfo )
5742 , pNext( nullptr )
5743 , flags( flags_ )
5744 , pApplicationInfo( pApplicationInfo_ )
5745 , enabledLayerCount( enabledLayerCount_ )
5746 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5747 , enabledExtensionCount( enabledExtensionCount_ )
5748 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5749 {
5750 }
5751
5752 InstanceCreateInfo( VkInstanceCreateInfo const & rhs )
5753 {
5754 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5755 }
5756
5757 InstanceCreateInfo& operator=( VkInstanceCreateInfo const & rhs )
5758 {
5759 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5760 return *this;
5761 }
5762
5763 InstanceCreateInfo& setSType( StructureType sType_ )
5764 {
5765 sType = sType_;
5766 return *this;
5767 }
5768
5769 InstanceCreateInfo& setPNext( const void* pNext_ )
5770 {
5771 pNext = pNext_;
5772 return *this;
5773 }
5774
5775 InstanceCreateInfo& setFlags( InstanceCreateFlags flags_ )
5776 {
5777 flags = flags_;
5778 return *this;
5779 }
5780
5781 InstanceCreateInfo& setPApplicationInfo( const ApplicationInfo* pApplicationInfo_ )
5782 {
5783 pApplicationInfo = pApplicationInfo_;
5784 return *this;
5785 }
5786
5787 InstanceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5788 {
5789 enabledLayerCount = enabledLayerCount_;
5790 return *this;
5791 }
5792
5793 InstanceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5794 {
5795 ppEnabledLayerNames = ppEnabledLayerNames_;
5796 return *this;
5797 }
5798
5799 InstanceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5800 {
5801 enabledExtensionCount = enabledExtensionCount_;
5802 return *this;
5803 }
5804
5805 InstanceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5806 {
5807 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5808 return *this;
5809 }
5810
5811 operator const VkInstanceCreateInfo&() const
5812 {
5813 return *reinterpret_cast<const VkInstanceCreateInfo*>(this);
5814 }
5815
5816 bool operator==( InstanceCreateInfo const& rhs ) const
5817 {
5818 return ( sType == rhs.sType )
5819 && ( pNext == rhs.pNext )
5820 && ( flags == rhs.flags )
5821 && ( pApplicationInfo == rhs.pApplicationInfo )
5822 && ( enabledLayerCount == rhs.enabledLayerCount )
5823 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5824 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5825 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames );
5826 }
5827
5828 bool operator!=( InstanceCreateInfo const& rhs ) const
5829 {
5830 return !operator==( rhs );
5831 }
5832
5833 private:
5834 StructureType sType;
5835
5836 public:
5837 const void* pNext;
5838 InstanceCreateFlags flags;
5839 const ApplicationInfo* pApplicationInfo;
5840 uint32_t enabledLayerCount;
5841 const char* const* ppEnabledLayerNames;
5842 uint32_t enabledExtensionCount;
5843 const char* const* ppEnabledExtensionNames;
5844 };
5845 static_assert( sizeof( InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ), "struct and wrapper have different size!" );
5846
5847 struct MemoryAllocateInfo
5848 {
5849 MemoryAllocateInfo( DeviceSize allocationSize_ = 0, uint32_t memoryTypeIndex_ = 0 )
5850 : sType( StructureType::eMemoryAllocateInfo )
5851 , pNext( nullptr )
5852 , allocationSize( allocationSize_ )
5853 , memoryTypeIndex( memoryTypeIndex_ )
5854 {
5855 }
5856
5857 MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs )
5858 {
5859 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5860 }
5861
5862 MemoryAllocateInfo& operator=( VkMemoryAllocateInfo const & rhs )
5863 {
5864 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5865 return *this;
5866 }
5867
5868 MemoryAllocateInfo& setSType( StructureType sType_ )
5869 {
5870 sType = sType_;
5871 return *this;
5872 }
5873
5874 MemoryAllocateInfo& setPNext( const void* pNext_ )
5875 {
5876 pNext = pNext_;
5877 return *this;
5878 }
5879
5880 MemoryAllocateInfo& setAllocationSize( DeviceSize allocationSize_ )
5881 {
5882 allocationSize = allocationSize_;
5883 return *this;
5884 }
5885
5886 MemoryAllocateInfo& setMemoryTypeIndex( uint32_t memoryTypeIndex_ )
5887 {
5888 memoryTypeIndex = memoryTypeIndex_;
5889 return *this;
5890 }
5891
5892 operator const VkMemoryAllocateInfo&() const
5893 {
5894 return *reinterpret_cast<const VkMemoryAllocateInfo*>(this);
5895 }
5896
5897 bool operator==( MemoryAllocateInfo const& rhs ) const
5898 {
5899 return ( sType == rhs.sType )
5900 && ( pNext == rhs.pNext )
5901 && ( allocationSize == rhs.allocationSize )
5902 && ( memoryTypeIndex == rhs.memoryTypeIndex );
5903 }
5904
5905 bool operator!=( MemoryAllocateInfo const& rhs ) const
5906 {
5907 return !operator==( rhs );
5908 }
5909
5910 private:
5911 StructureType sType;
5912
5913 public:
5914 const void* pNext;
5915 DeviceSize allocationSize;
5916 uint32_t memoryTypeIndex;
5917 };
5918 static_assert( sizeof( MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ), "struct and wrapper have different size!" );
5919
5920 struct MappedMemoryRange
5921 {
5922 MappedMemoryRange( DeviceMemory memory_ = DeviceMemory(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
5923 : sType( StructureType::eMappedMemoryRange )
5924 , pNext( nullptr )
5925 , memory( memory_ )
5926 , offset( offset_ )
5927 , size( size_ )
5928 {
5929 }
5930
5931 MappedMemoryRange( VkMappedMemoryRange const & rhs )
5932 {
5933 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5934 }
5935
5936 MappedMemoryRange& operator=( VkMappedMemoryRange const & rhs )
5937 {
5938 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5939 return *this;
5940 }
5941
5942 MappedMemoryRange& setSType( StructureType sType_ )
5943 {
5944 sType = sType_;
5945 return *this;
5946 }
5947
5948 MappedMemoryRange& setPNext( const void* pNext_ )
5949 {
5950 pNext = pNext_;
5951 return *this;
5952 }
5953
5954 MappedMemoryRange& setMemory( DeviceMemory memory_ )
5955 {
5956 memory = memory_;
5957 return *this;
5958 }
5959
5960 MappedMemoryRange& setOffset( DeviceSize offset_ )
5961 {
5962 offset = offset_;
5963 return *this;
5964 }
5965
5966 MappedMemoryRange& setSize( DeviceSize size_ )
5967 {
5968 size = size_;
5969 return *this;
5970 }
5971
5972 operator const VkMappedMemoryRange&() const
5973 {
5974 return *reinterpret_cast<const VkMappedMemoryRange*>(this);
5975 }
5976
5977 bool operator==( MappedMemoryRange const& rhs ) const
5978 {
5979 return ( sType == rhs.sType )
5980 && ( pNext == rhs.pNext )
5981 && ( memory == rhs.memory )
5982 && ( offset == rhs.offset )
5983 && ( size == rhs.size );
5984 }
5985
5986 bool operator!=( MappedMemoryRange const& rhs ) const
5987 {
5988 return !operator==( rhs );
5989 }
5990
5991 private:
5992 StructureType sType;
5993
5994 public:
5995 const void* pNext;
5996 DeviceMemory memory;
5997 DeviceSize offset;
5998 DeviceSize size;
5999 };
6000 static_assert( sizeof( MappedMemoryRange ) == sizeof( VkMappedMemoryRange ), "struct and wrapper have different size!" );
6001
6002 struct WriteDescriptorSet
6003 {
6004 WriteDescriptorSet( DescriptorSet dstSet_ = DescriptorSet(), uint32_t dstBinding_ = 0, uint32_t dstArrayElement_ = 0, uint32_t descriptorCount_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, const DescriptorImageInfo* pImageInfo_ = nullptr, const DescriptorBufferInfo* pBufferInfo_ = nullptr, const BufferView* pTexelBufferView_ = nullptr )
6005 : sType( StructureType::eWriteDescriptorSet )
6006 , pNext( nullptr )
6007 , dstSet( dstSet_ )
6008 , dstBinding( dstBinding_ )
6009 , dstArrayElement( dstArrayElement_ )
6010 , descriptorCount( descriptorCount_ )
6011 , descriptorType( descriptorType_ )
6012 , pImageInfo( pImageInfo_ )
6013 , pBufferInfo( pBufferInfo_ )
6014 , pTexelBufferView( pTexelBufferView_ )
6015 {
6016 }
6017
6018 WriteDescriptorSet( VkWriteDescriptorSet const & rhs )
6019 {
6020 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
6021 }
6022
6023 WriteDescriptorSet& operator=( VkWriteDescriptorSet const & rhs )
6024 {
6025 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
6026 return *this;
6027 }
6028
6029 WriteDescriptorSet& setSType( StructureType sType_ )
6030 {
6031 sType = sType_;
6032 return *this;
6033 }
6034
6035 WriteDescriptorSet& setPNext( const void* pNext_ )
6036 {
6037 pNext = pNext_;
6038 return *this;
6039 }
6040
6041 WriteDescriptorSet& setDstSet( DescriptorSet dstSet_ )
6042 {
6043 dstSet = dstSet_;
6044 return *this;
6045 }
6046
6047 WriteDescriptorSet& setDstBinding( uint32_t dstBinding_ )
6048 {
6049 dstBinding = dstBinding_;
6050 return *this;
6051 }
6052
6053 WriteDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6054 {
6055 dstArrayElement = dstArrayElement_;
6056 return *this;
6057 }
6058
6059 WriteDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6060 {
6061 descriptorCount = descriptorCount_;
6062 return *this;
6063 }
6064
6065 WriteDescriptorSet& setDescriptorType( DescriptorType descriptorType_ )
6066 {
6067 descriptorType = descriptorType_;
6068 return *this;
6069 }
6070
6071 WriteDescriptorSet& setPImageInfo( const DescriptorImageInfo* pImageInfo_ )
6072 {
6073 pImageInfo = pImageInfo_;
6074 return *this;
6075 }
6076
6077 WriteDescriptorSet& setPBufferInfo( const DescriptorBufferInfo* pBufferInfo_ )
6078 {
6079 pBufferInfo = pBufferInfo_;
6080 return *this;
6081 }
6082
6083 WriteDescriptorSet& setPTexelBufferView( const BufferView* pTexelBufferView_ )
6084 {
6085 pTexelBufferView = pTexelBufferView_;
6086 return *this;
6087 }
6088
6089 operator const VkWriteDescriptorSet&() const
6090 {
6091 return *reinterpret_cast<const VkWriteDescriptorSet*>(this);
6092 }
6093
6094 bool operator==( WriteDescriptorSet const& rhs ) const
6095 {
6096 return ( sType == rhs.sType )
6097 && ( pNext == rhs.pNext )
6098 && ( dstSet == rhs.dstSet )
6099 && ( dstBinding == rhs.dstBinding )
6100 && ( dstArrayElement == rhs.dstArrayElement )
6101 && ( descriptorCount == rhs.descriptorCount )
6102 && ( descriptorType == rhs.descriptorType )
6103 && ( pImageInfo == rhs.pImageInfo )
6104 && ( pBufferInfo == rhs.pBufferInfo )
6105 && ( pTexelBufferView == rhs.pTexelBufferView );
6106 }
6107
6108 bool operator!=( WriteDescriptorSet const& rhs ) const
6109 {
6110 return !operator==( rhs );
6111 }
6112
6113 private:
6114 StructureType sType;
6115
6116 public:
6117 const void* pNext;
6118 DescriptorSet dstSet;
6119 uint32_t dstBinding;
6120 uint32_t dstArrayElement;
6121 uint32_t descriptorCount;
6122 DescriptorType descriptorType;
6123 const DescriptorImageInfo* pImageInfo;
6124 const DescriptorBufferInfo* pBufferInfo;
6125 const BufferView* pTexelBufferView;
6126 };
6127 static_assert( sizeof( WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ), "struct and wrapper have different size!" );
6128
6129 struct CopyDescriptorSet
6130 {
6131 CopyDescriptorSet( DescriptorSet srcSet_ = DescriptorSet(), uint32_t srcBinding_ = 0, uint32_t srcArrayElement_ = 0, DescriptorSet dstSet_ = DescriptorSet(), uint32_t dstBinding_ = 0, uint32_t dstArrayElement_ = 0, uint32_t descriptorCount_ = 0 )
6132 : sType( StructureType::eCopyDescriptorSet )
6133 , pNext( nullptr )
6134 , srcSet( srcSet_ )
6135 , srcBinding( srcBinding_ )
6136 , srcArrayElement( srcArrayElement_ )
6137 , dstSet( dstSet_ )
6138 , dstBinding( dstBinding_ )
6139 , dstArrayElement( dstArrayElement_ )
6140 , descriptorCount( descriptorCount_ )
6141 {
6142 }
6143
6144 CopyDescriptorSet( VkCopyDescriptorSet const & rhs )
6145 {
6146 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6147 }
6148
6149 CopyDescriptorSet& operator=( VkCopyDescriptorSet const & rhs )
6150 {
6151 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6152 return *this;
6153 }
6154
6155 CopyDescriptorSet& setSType( StructureType sType_ )
6156 {
6157 sType = sType_;
6158 return *this;
6159 }
6160
6161 CopyDescriptorSet& setPNext( const void* pNext_ )
6162 {
6163 pNext = pNext_;
6164 return *this;
6165 }
6166
6167 CopyDescriptorSet& setSrcSet( DescriptorSet srcSet_ )
6168 {
6169 srcSet = srcSet_;
6170 return *this;
6171 }
6172
6173 CopyDescriptorSet& setSrcBinding( uint32_t srcBinding_ )
6174 {
6175 srcBinding = srcBinding_;
6176 return *this;
6177 }
6178
6179 CopyDescriptorSet& setSrcArrayElement( uint32_t srcArrayElement_ )
6180 {
6181 srcArrayElement = srcArrayElement_;
6182 return *this;
6183 }
6184
6185 CopyDescriptorSet& setDstSet( DescriptorSet dstSet_ )
6186 {
6187 dstSet = dstSet_;
6188 return *this;
6189 }
6190
6191 CopyDescriptorSet& setDstBinding( uint32_t dstBinding_ )
6192 {
6193 dstBinding = dstBinding_;
6194 return *this;
6195 }
6196
6197 CopyDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6198 {
6199 dstArrayElement = dstArrayElement_;
6200 return *this;
6201 }
6202
6203 CopyDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6204 {
6205 descriptorCount = descriptorCount_;
6206 return *this;
6207 }
6208
6209 operator const VkCopyDescriptorSet&() const
6210 {
6211 return *reinterpret_cast<const VkCopyDescriptorSet*>(this);
6212 }
6213
6214 bool operator==( CopyDescriptorSet const& rhs ) const
6215 {
6216 return ( sType == rhs.sType )
6217 && ( pNext == rhs.pNext )
6218 && ( srcSet == rhs.srcSet )
6219 && ( srcBinding == rhs.srcBinding )
6220 && ( srcArrayElement == rhs.srcArrayElement )
6221 && ( dstSet == rhs.dstSet )
6222 && ( dstBinding == rhs.dstBinding )
6223 && ( dstArrayElement == rhs.dstArrayElement )
6224 && ( descriptorCount == rhs.descriptorCount );
6225 }
6226
6227 bool operator!=( CopyDescriptorSet const& rhs ) const
6228 {
6229 return !operator==( rhs );
6230 }
6231
6232 private:
6233 StructureType sType;
6234
6235 public:
6236 const void* pNext;
6237 DescriptorSet srcSet;
6238 uint32_t srcBinding;
6239 uint32_t srcArrayElement;
6240 DescriptorSet dstSet;
6241 uint32_t dstBinding;
6242 uint32_t dstArrayElement;
6243 uint32_t descriptorCount;
6244 };
6245 static_assert( sizeof( CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ), "struct and wrapper have different size!" );
6246
6247 struct BufferViewCreateInfo
6248 {
6249 BufferViewCreateInfo( BufferViewCreateFlags flags_ = BufferViewCreateFlags(), Buffer buffer_ = Buffer(), Format format_ = Format::eUndefined, DeviceSize offset_ = 0, DeviceSize range_ = 0 )
6250 : sType( StructureType::eBufferViewCreateInfo )
6251 , pNext( nullptr )
6252 , flags( flags_ )
6253 , buffer( buffer_ )
6254 , format( format_ )
6255 , offset( offset_ )
6256 , range( range_ )
6257 {
6258 }
6259
6260 BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs )
6261 {
6262 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6263 }
6264
6265 BufferViewCreateInfo& operator=( VkBufferViewCreateInfo const & rhs )
6266 {
6267 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6268 return *this;
6269 }
6270
6271 BufferViewCreateInfo& setSType( StructureType sType_ )
6272 {
6273 sType = sType_;
6274 return *this;
6275 }
6276
6277 BufferViewCreateInfo& setPNext( const void* pNext_ )
6278 {
6279 pNext = pNext_;
6280 return *this;
6281 }
6282
6283 BufferViewCreateInfo& setFlags( BufferViewCreateFlags flags_ )
6284 {
6285 flags = flags_;
6286 return *this;
6287 }
6288
6289 BufferViewCreateInfo& setBuffer( Buffer buffer_ )
6290 {
6291 buffer = buffer_;
6292 return *this;
6293 }
6294
6295 BufferViewCreateInfo& setFormat( Format format_ )
6296 {
6297 format = format_;
6298 return *this;
6299 }
6300
6301 BufferViewCreateInfo& setOffset( DeviceSize offset_ )
6302 {
6303 offset = offset_;
6304 return *this;
6305 }
6306
6307 BufferViewCreateInfo& setRange( DeviceSize range_ )
6308 {
6309 range = range_;
6310 return *this;
6311 }
6312
6313 operator const VkBufferViewCreateInfo&() const
6314 {
6315 return *reinterpret_cast<const VkBufferViewCreateInfo*>(this);
6316 }
6317
6318 bool operator==( BufferViewCreateInfo const& rhs ) const
6319 {
6320 return ( sType == rhs.sType )
6321 && ( pNext == rhs.pNext )
6322 && ( flags == rhs.flags )
6323 && ( buffer == rhs.buffer )
6324 && ( format == rhs.format )
6325 && ( offset == rhs.offset )
6326 && ( range == rhs.range );
6327 }
6328
6329 bool operator!=( BufferViewCreateInfo const& rhs ) const
6330 {
6331 return !operator==( rhs );
6332 }
6333
6334 private:
6335 StructureType sType;
6336
6337 public:
6338 const void* pNext;
6339 BufferViewCreateFlags flags;
6340 Buffer buffer;
6341 Format format;
6342 DeviceSize offset;
6343 DeviceSize range;
6344 };
6345 static_assert( sizeof( BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ), "struct and wrapper have different size!" );
6346
6347 struct ShaderModuleCreateInfo
6348 {
6349 ShaderModuleCreateInfo( ShaderModuleCreateFlags flags_ = ShaderModuleCreateFlags(), size_t codeSize_ = 0, const uint32_t* pCode_ = nullptr )
6350 : sType( StructureType::eShaderModuleCreateInfo )
6351 , pNext( nullptr )
6352 , flags( flags_ )
6353 , codeSize( codeSize_ )
6354 , pCode( pCode_ )
6355 {
6356 }
6357
6358 ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs )
6359 {
6360 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6361 }
6362
6363 ShaderModuleCreateInfo& operator=( VkShaderModuleCreateInfo const & rhs )
6364 {
6365 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6366 return *this;
6367 }
6368
6369 ShaderModuleCreateInfo& setSType( StructureType sType_ )
6370 {
6371 sType = sType_;
6372 return *this;
6373 }
6374
6375 ShaderModuleCreateInfo& setPNext( const void* pNext_ )
6376 {
6377 pNext = pNext_;
6378 return *this;
6379 }
6380
6381 ShaderModuleCreateInfo& setFlags( ShaderModuleCreateFlags flags_ )
6382 {
6383 flags = flags_;
6384 return *this;
6385 }
6386
6387 ShaderModuleCreateInfo& setCodeSize( size_t codeSize_ )
6388 {
6389 codeSize = codeSize_;
6390 return *this;
6391 }
6392
6393 ShaderModuleCreateInfo& setPCode( const uint32_t* pCode_ )
6394 {
6395 pCode = pCode_;
6396 return *this;
6397 }
6398
6399 operator const VkShaderModuleCreateInfo&() const
6400 {
6401 return *reinterpret_cast<const VkShaderModuleCreateInfo*>(this);
6402 }
6403
6404 bool operator==( ShaderModuleCreateInfo const& rhs ) const
6405 {
6406 return ( sType == rhs.sType )
6407 && ( pNext == rhs.pNext )
6408 && ( flags == rhs.flags )
6409 && ( codeSize == rhs.codeSize )
6410 && ( pCode == rhs.pCode );
6411 }
6412
6413 bool operator!=( ShaderModuleCreateInfo const& rhs ) const
6414 {
6415 return !operator==( rhs );
6416 }
6417
6418 private:
6419 StructureType sType;
6420
6421 public:
6422 const void* pNext;
6423 ShaderModuleCreateFlags flags;
6424 size_t codeSize;
6425 const uint32_t* pCode;
6426 };
6427 static_assert( sizeof( ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ), "struct and wrapper have different size!" );
6428
6429 struct DescriptorSetAllocateInfo
6430 {
6431 DescriptorSetAllocateInfo( DescriptorPool descriptorPool_ = DescriptorPool(), uint32_t descriptorSetCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr )
6432 : sType( StructureType::eDescriptorSetAllocateInfo )
6433 , pNext( nullptr )
6434 , descriptorPool( descriptorPool_ )
6435 , descriptorSetCount( descriptorSetCount_ )
6436 , pSetLayouts( pSetLayouts_ )
6437 {
6438 }
6439
6440 DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs )
6441 {
6442 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6443 }
6444
6445 DescriptorSetAllocateInfo& operator=( VkDescriptorSetAllocateInfo const & rhs )
6446 {
6447 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6448 return *this;
6449 }
6450
6451 DescriptorSetAllocateInfo& setSType( StructureType sType_ )
6452 {
6453 sType = sType_;
6454 return *this;
6455 }
6456
6457 DescriptorSetAllocateInfo& setPNext( const void* pNext_ )
6458 {
6459 pNext = pNext_;
6460 return *this;
6461 }
6462
6463 DescriptorSetAllocateInfo& setDescriptorPool( DescriptorPool descriptorPool_ )
6464 {
6465 descriptorPool = descriptorPool_;
6466 return *this;
6467 }
6468
6469 DescriptorSetAllocateInfo& setDescriptorSetCount( uint32_t descriptorSetCount_ )
6470 {
6471 descriptorSetCount = descriptorSetCount_;
6472 return *this;
6473 }
6474
6475 DescriptorSetAllocateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
6476 {
6477 pSetLayouts = pSetLayouts_;
6478 return *this;
6479 }
6480
6481 operator const VkDescriptorSetAllocateInfo&() const
6482 {
6483 return *reinterpret_cast<const VkDescriptorSetAllocateInfo*>(this);
6484 }
6485
6486 bool operator==( DescriptorSetAllocateInfo const& rhs ) const
6487 {
6488 return ( sType == rhs.sType )
6489 && ( pNext == rhs.pNext )
6490 && ( descriptorPool == rhs.descriptorPool )
6491 && ( descriptorSetCount == rhs.descriptorSetCount )
6492 && ( pSetLayouts == rhs.pSetLayouts );
6493 }
6494
6495 bool operator!=( DescriptorSetAllocateInfo const& rhs ) const
6496 {
6497 return !operator==( rhs );
6498 }
6499
6500 private:
6501 StructureType sType;
6502
6503 public:
6504 const void* pNext;
6505 DescriptorPool descriptorPool;
6506 uint32_t descriptorSetCount;
6507 const DescriptorSetLayout* pSetLayouts;
6508 };
6509 static_assert( sizeof( DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ), "struct and wrapper have different size!" );
6510
6511 struct PipelineVertexInputStateCreateInfo
6512 {
6513 PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateFlags flags_ = PipelineVertexInputStateCreateFlags(), uint32_t vertexBindingDescriptionCount_ = 0, const VertexInputBindingDescription* pVertexBindingDescriptions_ = nullptr, uint32_t vertexAttributeDescriptionCount_ = 0, const VertexInputAttributeDescription* pVertexAttributeDescriptions_ = nullptr )
6514 : sType( StructureType::ePipelineVertexInputStateCreateInfo )
6515 , pNext( nullptr )
6516 , flags( flags_ )
6517 , vertexBindingDescriptionCount( vertexBindingDescriptionCount_ )
6518 , pVertexBindingDescriptions( pVertexBindingDescriptions_ )
6519 , vertexAttributeDescriptionCount( vertexAttributeDescriptionCount_ )
6520 , pVertexAttributeDescriptions( pVertexAttributeDescriptions_ )
6521 {
6522 }
6523
6524 PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs )
6525 {
6526 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6527 }
6528
6529 PipelineVertexInputStateCreateInfo& operator=( VkPipelineVertexInputStateCreateInfo const & rhs )
6530 {
6531 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6532 return *this;
6533 }
6534
6535 PipelineVertexInputStateCreateInfo& setSType( StructureType sType_ )
6536 {
6537 sType = sType_;
6538 return *this;
6539 }
6540
6541 PipelineVertexInputStateCreateInfo& setPNext( const void* pNext_ )
6542 {
6543 pNext = pNext_;
6544 return *this;
6545 }
6546
6547 PipelineVertexInputStateCreateInfo& setFlags( PipelineVertexInputStateCreateFlags flags_ )
6548 {
6549 flags = flags_;
6550 return *this;
6551 }
6552
6553 PipelineVertexInputStateCreateInfo& setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ )
6554 {
6555 vertexBindingDescriptionCount = vertexBindingDescriptionCount_;
6556 return *this;
6557 }
6558
6559 PipelineVertexInputStateCreateInfo& setPVertexBindingDescriptions( const VertexInputBindingDescription* pVertexBindingDescriptions_ )
6560 {
6561 pVertexBindingDescriptions = pVertexBindingDescriptions_;
6562 return *this;
6563 }
6564
6565 PipelineVertexInputStateCreateInfo& setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ )
6566 {
6567 vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_;
6568 return *this;
6569 }
6570
6571 PipelineVertexInputStateCreateInfo& setPVertexAttributeDescriptions( const VertexInputAttributeDescription* pVertexAttributeDescriptions_ )
6572 {
6573 pVertexAttributeDescriptions = pVertexAttributeDescriptions_;
6574 return *this;
6575 }
6576
6577 operator const VkPipelineVertexInputStateCreateInfo&() const
6578 {
6579 return *reinterpret_cast<const VkPipelineVertexInputStateCreateInfo*>(this);
6580 }
6581
6582 bool operator==( PipelineVertexInputStateCreateInfo const& rhs ) const
6583 {
6584 return ( sType == rhs.sType )
6585 && ( pNext == rhs.pNext )
6586 && ( flags == rhs.flags )
6587 && ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount )
6588 && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions )
6589 && ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount )
6590 && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions );
6591 }
6592
6593 bool operator!=( PipelineVertexInputStateCreateInfo const& rhs ) const
6594 {
6595 return !operator==( rhs );
6596 }
6597
6598 private:
6599 StructureType sType;
6600
6601 public:
6602 const void* pNext;
6603 PipelineVertexInputStateCreateFlags flags;
6604 uint32_t vertexBindingDescriptionCount;
6605 const VertexInputBindingDescription* pVertexBindingDescriptions;
6606 uint32_t vertexAttributeDescriptionCount;
6607 const VertexInputAttributeDescription* pVertexAttributeDescriptions;
6608 };
6609 static_assert( sizeof( PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ), "struct and wrapper have different size!" );
6610
6611 struct PipelineInputAssemblyStateCreateInfo
6612 {
6613 PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateFlags flags_ = PipelineInputAssemblyStateCreateFlags(), PrimitiveTopology topology_ = PrimitiveTopology::ePointList, Bool32 primitiveRestartEnable_ = 0 )
6614 : sType( StructureType::ePipelineInputAssemblyStateCreateInfo )
6615 , pNext( nullptr )
6616 , flags( flags_ )
6617 , topology( topology_ )
6618 , primitiveRestartEnable( primitiveRestartEnable_ )
6619 {
6620 }
6621
6622 PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6623 {
6624 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6625 }
6626
6627 PipelineInputAssemblyStateCreateInfo& operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6628 {
6629 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6630 return *this;
6631 }
6632
6633 PipelineInputAssemblyStateCreateInfo& setSType( StructureType sType_ )
6634 {
6635 sType = sType_;
6636 return *this;
6637 }
6638
6639 PipelineInputAssemblyStateCreateInfo& setPNext( const void* pNext_ )
6640 {
6641 pNext = pNext_;
6642 return *this;
6643 }
6644
6645 PipelineInputAssemblyStateCreateInfo& setFlags( PipelineInputAssemblyStateCreateFlags flags_ )
6646 {
6647 flags = flags_;
6648 return *this;
6649 }
6650
6651 PipelineInputAssemblyStateCreateInfo& setTopology( PrimitiveTopology topology_ )
6652 {
6653 topology = topology_;
6654 return *this;
6655 }
6656
6657 PipelineInputAssemblyStateCreateInfo& setPrimitiveRestartEnable( Bool32 primitiveRestartEnable_ )
6658 {
6659 primitiveRestartEnable = primitiveRestartEnable_;
6660 return *this;
6661 }
6662
6663 operator const VkPipelineInputAssemblyStateCreateInfo&() const
6664 {
6665 return *reinterpret_cast<const VkPipelineInputAssemblyStateCreateInfo*>(this);
6666 }
6667
6668 bool operator==( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6669 {
6670 return ( sType == rhs.sType )
6671 && ( pNext == rhs.pNext )
6672 && ( flags == rhs.flags )
6673 && ( topology == rhs.topology )
6674 && ( primitiveRestartEnable == rhs.primitiveRestartEnable );
6675 }
6676
6677 bool operator!=( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6678 {
6679 return !operator==( rhs );
6680 }
6681
6682 private:
6683 StructureType sType;
6684
6685 public:
6686 const void* pNext;
6687 PipelineInputAssemblyStateCreateFlags flags;
6688 PrimitiveTopology topology;
6689 Bool32 primitiveRestartEnable;
6690 };
6691 static_assert( sizeof( PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ), "struct and wrapper have different size!" );
6692
6693 struct PipelineTessellationStateCreateInfo
6694 {
6695 PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateFlags flags_ = PipelineTessellationStateCreateFlags(), uint32_t patchControlPoints_ = 0 )
6696 : sType( StructureType::ePipelineTessellationStateCreateInfo )
6697 , pNext( nullptr )
6698 , flags( flags_ )
6699 , patchControlPoints( patchControlPoints_ )
6700 {
6701 }
6702
6703 PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs )
6704 {
6705 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6706 }
6707
6708 PipelineTessellationStateCreateInfo& operator=( VkPipelineTessellationStateCreateInfo const & rhs )
6709 {
6710 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6711 return *this;
6712 }
6713
6714 PipelineTessellationStateCreateInfo& setSType( StructureType sType_ )
6715 {
6716 sType = sType_;
6717 return *this;
6718 }
6719
6720 PipelineTessellationStateCreateInfo& setPNext( const void* pNext_ )
6721 {
6722 pNext = pNext_;
6723 return *this;
6724 }
6725
6726 PipelineTessellationStateCreateInfo& setFlags( PipelineTessellationStateCreateFlags flags_ )
6727 {
6728 flags = flags_;
6729 return *this;
6730 }
6731
6732 PipelineTessellationStateCreateInfo& setPatchControlPoints( uint32_t patchControlPoints_ )
6733 {
6734 patchControlPoints = patchControlPoints_;
6735 return *this;
6736 }
6737
6738 operator const VkPipelineTessellationStateCreateInfo&() const
6739 {
6740 return *reinterpret_cast<const VkPipelineTessellationStateCreateInfo*>(this);
6741 }
6742
6743 bool operator==( PipelineTessellationStateCreateInfo const& rhs ) const
6744 {
6745 return ( sType == rhs.sType )
6746 && ( pNext == rhs.pNext )
6747 && ( flags == rhs.flags )
6748 && ( patchControlPoints == rhs.patchControlPoints );
6749 }
6750
6751 bool operator!=( PipelineTessellationStateCreateInfo const& rhs ) const
6752 {
6753 return !operator==( rhs );
6754 }
6755
6756 private:
6757 StructureType sType;
6758
6759 public:
6760 const void* pNext;
6761 PipelineTessellationStateCreateFlags flags;
6762 uint32_t patchControlPoints;
6763 };
6764 static_assert( sizeof( PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ), "struct and wrapper have different size!" );
6765
6766 struct PipelineViewportStateCreateInfo
6767 {
6768 PipelineViewportStateCreateInfo( PipelineViewportStateCreateFlags flags_ = PipelineViewportStateCreateFlags(), uint32_t viewportCount_ = 0, const Viewport* pViewports_ = nullptr, uint32_t scissorCount_ = 0, const Rect2D* pScissors_ = nullptr )
6769 : sType( StructureType::ePipelineViewportStateCreateInfo )
6770 , pNext( nullptr )
6771 , flags( flags_ )
6772 , viewportCount( viewportCount_ )
6773 , pViewports( pViewports_ )
6774 , scissorCount( scissorCount_ )
6775 , pScissors( pScissors_ )
6776 {
6777 }
6778
6779 PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs )
6780 {
6781 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6782 }
6783
6784 PipelineViewportStateCreateInfo& operator=( VkPipelineViewportStateCreateInfo const & rhs )
6785 {
6786 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6787 return *this;
6788 }
6789
6790 PipelineViewportStateCreateInfo& setSType( StructureType sType_ )
6791 {
6792 sType = sType_;
6793 return *this;
6794 }
6795
6796 PipelineViewportStateCreateInfo& setPNext( const void* pNext_ )
6797 {
6798 pNext = pNext_;
6799 return *this;
6800 }
6801
6802 PipelineViewportStateCreateInfo& setFlags( PipelineViewportStateCreateFlags flags_ )
6803 {
6804 flags = flags_;
6805 return *this;
6806 }
6807
6808 PipelineViewportStateCreateInfo& setViewportCount( uint32_t viewportCount_ )
6809 {
6810 viewportCount = viewportCount_;
6811 return *this;
6812 }
6813
6814 PipelineViewportStateCreateInfo& setPViewports( const Viewport* pViewports_ )
6815 {
6816 pViewports = pViewports_;
6817 return *this;
6818 }
6819
6820 PipelineViewportStateCreateInfo& setScissorCount( uint32_t scissorCount_ )
6821 {
6822 scissorCount = scissorCount_;
6823 return *this;
6824 }
6825
6826 PipelineViewportStateCreateInfo& setPScissors( const Rect2D* pScissors_ )
6827 {
6828 pScissors = pScissors_;
6829 return *this;
6830 }
6831
6832 operator const VkPipelineViewportStateCreateInfo&() const
6833 {
6834 return *reinterpret_cast<const VkPipelineViewportStateCreateInfo*>(this);
6835 }
6836
6837 bool operator==( PipelineViewportStateCreateInfo const& rhs ) const
6838 {
6839 return ( sType == rhs.sType )
6840 && ( pNext == rhs.pNext )
6841 && ( flags == rhs.flags )
6842 && ( viewportCount == rhs.viewportCount )
6843 && ( pViewports == rhs.pViewports )
6844 && ( scissorCount == rhs.scissorCount )
6845 && ( pScissors == rhs.pScissors );
6846 }
6847
6848 bool operator!=( PipelineViewportStateCreateInfo const& rhs ) const
6849 {
6850 return !operator==( rhs );
6851 }
6852
6853 private:
6854 StructureType sType;
6855
6856 public:
6857 const void* pNext;
6858 PipelineViewportStateCreateFlags flags;
6859 uint32_t viewportCount;
6860 const Viewport* pViewports;
6861 uint32_t scissorCount;
6862 const Rect2D* pScissors;
6863 };
6864 static_assert( sizeof( PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ), "struct and wrapper have different size!" );
6865
6866 struct PipelineRasterizationStateCreateInfo
6867 {
6868 PipelineRasterizationStateCreateInfo( PipelineRasterizationStateCreateFlags flags_ = PipelineRasterizationStateCreateFlags(), Bool32 depthClampEnable_ = 0, Bool32 rasterizerDiscardEnable_ = 0, PolygonMode polygonMode_ = PolygonMode::eFill, CullModeFlags cullMode_ = CullModeFlags(), FrontFace frontFace_ = FrontFace::eCounterClockwise, Bool32 depthBiasEnable_ = 0, float depthBiasConstantFactor_ = 0, float depthBiasClamp_ = 0, float depthBiasSlopeFactor_ = 0, float lineWidth_ = 0 )
6869 : sType( StructureType::ePipelineRasterizationStateCreateInfo )
6870 , pNext( nullptr )
6871 , flags( flags_ )
6872 , depthClampEnable( depthClampEnable_ )
6873 , rasterizerDiscardEnable( rasterizerDiscardEnable_ )
6874 , polygonMode( polygonMode_ )
6875 , cullMode( cullMode_ )
6876 , frontFace( frontFace_ )
6877 , depthBiasEnable( depthBiasEnable_ )
6878 , depthBiasConstantFactor( depthBiasConstantFactor_ )
6879 , depthBiasClamp( depthBiasClamp_ )
6880 , depthBiasSlopeFactor( depthBiasSlopeFactor_ )
6881 , lineWidth( lineWidth_ )
6882 {
6883 }
6884
6885 PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs )
6886 {
6887 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6888 }
6889
6890 PipelineRasterizationStateCreateInfo& operator=( VkPipelineRasterizationStateCreateInfo const & rhs )
6891 {
6892 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6893 return *this;
6894 }
6895
6896 PipelineRasterizationStateCreateInfo& setSType( StructureType sType_ )
6897 {
6898 sType = sType_;
6899 return *this;
6900 }
6901
6902 PipelineRasterizationStateCreateInfo& setPNext( const void* pNext_ )
6903 {
6904 pNext = pNext_;
6905 return *this;
6906 }
6907
6908 PipelineRasterizationStateCreateInfo& setFlags( PipelineRasterizationStateCreateFlags flags_ )
6909 {
6910 flags = flags_;
6911 return *this;
6912 }
6913
6914 PipelineRasterizationStateCreateInfo& setDepthClampEnable( Bool32 depthClampEnable_ )
6915 {
6916 depthClampEnable = depthClampEnable_;
6917 return *this;
6918 }
6919
6920 PipelineRasterizationStateCreateInfo& setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable_ )
6921 {
6922 rasterizerDiscardEnable = rasterizerDiscardEnable_;
6923 return *this;
6924 }
6925
6926 PipelineRasterizationStateCreateInfo& setPolygonMode( PolygonMode polygonMode_ )
6927 {
6928 polygonMode = polygonMode_;
6929 return *this;
6930 }
6931
6932 PipelineRasterizationStateCreateInfo& setCullMode( CullModeFlags cullMode_ )
6933 {
6934 cullMode = cullMode_;
6935 return *this;
6936 }
6937
6938 PipelineRasterizationStateCreateInfo& setFrontFace( FrontFace frontFace_ )
6939 {
6940 frontFace = frontFace_;
6941 return *this;
6942 }
6943
6944 PipelineRasterizationStateCreateInfo& setDepthBiasEnable( Bool32 depthBiasEnable_ )
6945 {
6946 depthBiasEnable = depthBiasEnable_;
6947 return *this;
6948 }
6949
6950 PipelineRasterizationStateCreateInfo& setDepthBiasConstantFactor( float depthBiasConstantFactor_ )
6951 {
6952 depthBiasConstantFactor = depthBiasConstantFactor_;
6953 return *this;
6954 }
6955
6956 PipelineRasterizationStateCreateInfo& setDepthBiasClamp( float depthBiasClamp_ )
6957 {
6958 depthBiasClamp = depthBiasClamp_;
6959 return *this;
6960 }
6961
6962 PipelineRasterizationStateCreateInfo& setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ )
6963 {
6964 depthBiasSlopeFactor = depthBiasSlopeFactor_;
6965 return *this;
6966 }
6967
6968 PipelineRasterizationStateCreateInfo& setLineWidth( float lineWidth_ )
6969 {
6970 lineWidth = lineWidth_;
6971 return *this;
6972 }
6973
6974 operator const VkPipelineRasterizationStateCreateInfo&() const
6975 {
6976 return *reinterpret_cast<const VkPipelineRasterizationStateCreateInfo*>(this);
6977 }
6978
6979 bool operator==( PipelineRasterizationStateCreateInfo const& rhs ) const
6980 {
6981 return ( sType == rhs.sType )
6982 && ( pNext == rhs.pNext )
6983 && ( flags == rhs.flags )
6984 && ( depthClampEnable == rhs.depthClampEnable )
6985 && ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable )
6986 && ( polygonMode == rhs.polygonMode )
6987 && ( cullMode == rhs.cullMode )
6988 && ( frontFace == rhs.frontFace )
6989 && ( depthBiasEnable == rhs.depthBiasEnable )
6990 && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor )
6991 && ( depthBiasClamp == rhs.depthBiasClamp )
6992 && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor )
6993 && ( lineWidth == rhs.lineWidth );
6994 }
6995
6996 bool operator!=( PipelineRasterizationStateCreateInfo const& rhs ) const
6997 {
6998 return !operator==( rhs );
6999 }
7000
7001 private:
7002 StructureType sType;
7003
7004 public:
7005 const void* pNext;
7006 PipelineRasterizationStateCreateFlags flags;
7007 Bool32 depthClampEnable;
7008 Bool32 rasterizerDiscardEnable;
7009 PolygonMode polygonMode;
7010 CullModeFlags cullMode;
7011 FrontFace frontFace;
7012 Bool32 depthBiasEnable;
7013 float depthBiasConstantFactor;
7014 float depthBiasClamp;
7015 float depthBiasSlopeFactor;
7016 float lineWidth;
7017 };
7018 static_assert( sizeof( PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ), "struct and wrapper have different size!" );
7019
7020 struct PipelineDepthStencilStateCreateInfo
7021 {
7022 PipelineDepthStencilStateCreateInfo( PipelineDepthStencilStateCreateFlags flags_ = PipelineDepthStencilStateCreateFlags(), Bool32 depthTestEnable_ = 0, Bool32 depthWriteEnable_ = 0, CompareOp depthCompareOp_ = CompareOp::eNever, Bool32 depthBoundsTestEnable_ = 0, Bool32 stencilTestEnable_ = 0, StencilOpState front_ = StencilOpState(), StencilOpState back_ = StencilOpState(), float minDepthBounds_ = 0, float maxDepthBounds_ = 0 )
7023 : sType( StructureType::ePipelineDepthStencilStateCreateInfo )
7024 , pNext( nullptr )
7025 , flags( flags_ )
7026 , depthTestEnable( depthTestEnable_ )
7027 , depthWriteEnable( depthWriteEnable_ )
7028 , depthCompareOp( depthCompareOp_ )
7029 , depthBoundsTestEnable( depthBoundsTestEnable_ )
7030 , stencilTestEnable( stencilTestEnable_ )
7031 , front( front_ )
7032 , back( back_ )
7033 , minDepthBounds( minDepthBounds_ )
7034 , maxDepthBounds( maxDepthBounds_ )
7035 {
7036 }
7037
7038 PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs )
7039 {
7040 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
7041 }
7042
7043 PipelineDepthStencilStateCreateInfo& operator=( VkPipelineDepthStencilStateCreateInfo const & rhs )
7044 {
7045 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
7046 return *this;
7047 }
7048
7049 PipelineDepthStencilStateCreateInfo& setSType( StructureType sType_ )
7050 {
7051 sType = sType_;
7052 return *this;
7053 }
7054
7055 PipelineDepthStencilStateCreateInfo& setPNext( const void* pNext_ )
7056 {
7057 pNext = pNext_;
7058 return *this;
7059 }
7060
7061 PipelineDepthStencilStateCreateInfo& setFlags( PipelineDepthStencilStateCreateFlags flags_ )
7062 {
7063 flags = flags_;
7064 return *this;
7065 }
7066
7067 PipelineDepthStencilStateCreateInfo& setDepthTestEnable( Bool32 depthTestEnable_ )
7068 {
7069 depthTestEnable = depthTestEnable_;
7070 return *this;
7071 }
7072
7073 PipelineDepthStencilStateCreateInfo& setDepthWriteEnable( Bool32 depthWriteEnable_ )
7074 {
7075 depthWriteEnable = depthWriteEnable_;
7076 return *this;
7077 }
7078
7079 PipelineDepthStencilStateCreateInfo& setDepthCompareOp( CompareOp depthCompareOp_ )
7080 {
7081 depthCompareOp = depthCompareOp_;
7082 return *this;
7083 }
7084
7085 PipelineDepthStencilStateCreateInfo& setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable_ )
7086 {
7087 depthBoundsTestEnable = depthBoundsTestEnable_;
7088 return *this;
7089 }
7090
7091 PipelineDepthStencilStateCreateInfo& setStencilTestEnable( Bool32 stencilTestEnable_ )
7092 {
7093 stencilTestEnable = stencilTestEnable_;
7094 return *this;
7095 }
7096
7097 PipelineDepthStencilStateCreateInfo& setFront( StencilOpState front_ )
7098 {
7099 front = front_;
7100 return *this;
7101 }
7102
7103 PipelineDepthStencilStateCreateInfo& setBack( StencilOpState back_ )
7104 {
7105 back = back_;
7106 return *this;
7107 }
7108
7109 PipelineDepthStencilStateCreateInfo& setMinDepthBounds( float minDepthBounds_ )
7110 {
7111 minDepthBounds = minDepthBounds_;
7112 return *this;
7113 }
7114
7115 PipelineDepthStencilStateCreateInfo& setMaxDepthBounds( float maxDepthBounds_ )
7116 {
7117 maxDepthBounds = maxDepthBounds_;
7118 return *this;
7119 }
7120
7121 operator const VkPipelineDepthStencilStateCreateInfo&() const
7122 {
7123 return *reinterpret_cast<const VkPipelineDepthStencilStateCreateInfo*>(this);
7124 }
7125
7126 bool operator==( PipelineDepthStencilStateCreateInfo const& rhs ) const
7127 {
7128 return ( sType == rhs.sType )
7129 && ( pNext == rhs.pNext )
7130 && ( flags == rhs.flags )
7131 && ( depthTestEnable == rhs.depthTestEnable )
7132 && ( depthWriteEnable == rhs.depthWriteEnable )
7133 && ( depthCompareOp == rhs.depthCompareOp )
7134 && ( depthBoundsTestEnable == rhs.depthBoundsTestEnable )
7135 && ( stencilTestEnable == rhs.stencilTestEnable )
7136 && ( front == rhs.front )
7137 && ( back == rhs.back )
7138 && ( minDepthBounds == rhs.minDepthBounds )
7139 && ( maxDepthBounds == rhs.maxDepthBounds );
7140 }
7141
7142 bool operator!=( PipelineDepthStencilStateCreateInfo const& rhs ) const
7143 {
7144 return !operator==( rhs );
7145 }
7146
7147 private:
7148 StructureType sType;
7149
7150 public:
7151 const void* pNext;
7152 PipelineDepthStencilStateCreateFlags flags;
7153 Bool32 depthTestEnable;
7154 Bool32 depthWriteEnable;
7155 CompareOp depthCompareOp;
7156 Bool32 depthBoundsTestEnable;
7157 Bool32 stencilTestEnable;
7158 StencilOpState front;
7159 StencilOpState back;
7160 float minDepthBounds;
7161 float maxDepthBounds;
7162 };
7163 static_assert( sizeof( PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ), "struct and wrapper have different size!" );
7164
7165 struct PipelineCacheCreateInfo
7166 {
7167 PipelineCacheCreateInfo( PipelineCacheCreateFlags flags_ = PipelineCacheCreateFlags(), size_t initialDataSize_ = 0, const void* pInitialData_ = nullptr )
7168 : sType( StructureType::ePipelineCacheCreateInfo )
7169 , pNext( nullptr )
7170 , flags( flags_ )
7171 , initialDataSize( initialDataSize_ )
7172 , pInitialData( pInitialData_ )
7173 {
7174 }
7175
7176 PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs )
7177 {
7178 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7179 }
7180
7181 PipelineCacheCreateInfo& operator=( VkPipelineCacheCreateInfo const & rhs )
7182 {
7183 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7184 return *this;
7185 }
7186
7187 PipelineCacheCreateInfo& setSType( StructureType sType_ )
7188 {
7189 sType = sType_;
7190 return *this;
7191 }
7192
7193 PipelineCacheCreateInfo& setPNext( const void* pNext_ )
7194 {
7195 pNext = pNext_;
7196 return *this;
7197 }
7198
7199 PipelineCacheCreateInfo& setFlags( PipelineCacheCreateFlags flags_ )
7200 {
7201 flags = flags_;
7202 return *this;
7203 }
7204
7205 PipelineCacheCreateInfo& setInitialDataSize( size_t initialDataSize_ )
7206 {
7207 initialDataSize = initialDataSize_;
7208 return *this;
7209 }
7210
7211 PipelineCacheCreateInfo& setPInitialData( const void* pInitialData_ )
7212 {
7213 pInitialData = pInitialData_;
7214 return *this;
7215 }
7216
7217 operator const VkPipelineCacheCreateInfo&() const
7218 {
7219 return *reinterpret_cast<const VkPipelineCacheCreateInfo*>(this);
7220 }
7221
7222 bool operator==( PipelineCacheCreateInfo const& rhs ) const
7223 {
7224 return ( sType == rhs.sType )
7225 && ( pNext == rhs.pNext )
7226 && ( flags == rhs.flags )
7227 && ( initialDataSize == rhs.initialDataSize )
7228 && ( pInitialData == rhs.pInitialData );
7229 }
7230
7231 bool operator!=( PipelineCacheCreateInfo const& rhs ) const
7232 {
7233 return !operator==( rhs );
7234 }
7235
7236 private:
7237 StructureType sType;
7238
7239 public:
7240 const void* pNext;
7241 PipelineCacheCreateFlags flags;
7242 size_t initialDataSize;
7243 const void* pInitialData;
7244 };
7245 static_assert( sizeof( PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ), "struct and wrapper have different size!" );
7246
7247 struct SamplerCreateInfo
7248 {
7249 SamplerCreateInfo( SamplerCreateFlags flags_ = SamplerCreateFlags(), Filter magFilter_ = Filter::eNearest, Filter minFilter_ = Filter::eNearest, SamplerMipmapMode mipmapMode_ = SamplerMipmapMode::eNearest, SamplerAddressMode addressModeU_ = SamplerAddressMode::eRepeat, SamplerAddressMode addressModeV_ = SamplerAddressMode::eRepeat, SamplerAddressMode addressModeW_ = SamplerAddressMode::eRepeat, float mipLodBias_ = 0, Bool32 anisotropyEnable_ = 0, float maxAnisotropy_ = 0, Bool32 compareEnable_ = 0, CompareOp compareOp_ = CompareOp::eNever, float minLod_ = 0, float maxLod_ = 0, BorderColor borderColor_ = BorderColor::eFloatTransparentBlack, Bool32 unnormalizedCoordinates_ = 0 )
7250 : sType( StructureType::eSamplerCreateInfo )
7251 , pNext( nullptr )
7252 , flags( flags_ )
7253 , magFilter( magFilter_ )
7254 , minFilter( minFilter_ )
7255 , mipmapMode( mipmapMode_ )
7256 , addressModeU( addressModeU_ )
7257 , addressModeV( addressModeV_ )
7258 , addressModeW( addressModeW_ )
7259 , mipLodBias( mipLodBias_ )
7260 , anisotropyEnable( anisotropyEnable_ )
7261 , maxAnisotropy( maxAnisotropy_ )
7262 , compareEnable( compareEnable_ )
7263 , compareOp( compareOp_ )
7264 , minLod( minLod_ )
7265 , maxLod( maxLod_ )
7266 , borderColor( borderColor_ )
7267 , unnormalizedCoordinates( unnormalizedCoordinates_ )
7268 {
7269 }
7270
7271 SamplerCreateInfo( VkSamplerCreateInfo const & rhs )
7272 {
7273 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7274 }
7275
7276 SamplerCreateInfo& operator=( VkSamplerCreateInfo const & rhs )
7277 {
7278 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7279 return *this;
7280 }
7281
7282 SamplerCreateInfo& setSType( StructureType sType_ )
7283 {
7284 sType = sType_;
7285 return *this;
7286 }
7287
7288 SamplerCreateInfo& setPNext( const void* pNext_ )
7289 {
7290 pNext = pNext_;
7291 return *this;
7292 }
7293
7294 SamplerCreateInfo& setFlags( SamplerCreateFlags flags_ )
7295 {
7296 flags = flags_;
7297 return *this;
7298 }
7299
7300 SamplerCreateInfo& setMagFilter( Filter magFilter_ )
7301 {
7302 magFilter = magFilter_;
7303 return *this;
7304 }
7305
7306 SamplerCreateInfo& setMinFilter( Filter minFilter_ )
7307 {
7308 minFilter = minFilter_;
7309 return *this;
7310 }
7311
7312 SamplerCreateInfo& setMipmapMode( SamplerMipmapMode mipmapMode_ )
7313 {
7314 mipmapMode = mipmapMode_;
7315 return *this;
7316 }
7317
7318 SamplerCreateInfo& setAddressModeU( SamplerAddressMode addressModeU_ )
7319 {
7320 addressModeU = addressModeU_;
7321 return *this;
7322 }
7323
7324 SamplerCreateInfo& setAddressModeV( SamplerAddressMode addressModeV_ )
7325 {
7326 addressModeV = addressModeV_;
7327 return *this;
7328 }
7329
7330 SamplerCreateInfo& setAddressModeW( SamplerAddressMode addressModeW_ )
7331 {
7332 addressModeW = addressModeW_;
7333 return *this;
7334 }
7335
7336 SamplerCreateInfo& setMipLodBias( float mipLodBias_ )
7337 {
7338 mipLodBias = mipLodBias_;
7339 return *this;
7340 }
7341
7342 SamplerCreateInfo& setAnisotropyEnable( Bool32 anisotropyEnable_ )
7343 {
7344 anisotropyEnable = anisotropyEnable_;
7345 return *this;
7346 }
7347
7348 SamplerCreateInfo& setMaxAnisotropy( float maxAnisotropy_ )
7349 {
7350 maxAnisotropy = maxAnisotropy_;
7351 return *this;
7352 }
7353
7354 SamplerCreateInfo& setCompareEnable( Bool32 compareEnable_ )
7355 {
7356 compareEnable = compareEnable_;
7357 return *this;
7358 }
7359
7360 SamplerCreateInfo& setCompareOp( CompareOp compareOp_ )
7361 {
7362 compareOp = compareOp_;
7363 return *this;
7364 }
7365
7366 SamplerCreateInfo& setMinLod( float minLod_ )
7367 {
7368 minLod = minLod_;
7369 return *this;
7370 }
7371
7372 SamplerCreateInfo& setMaxLod( float maxLod_ )
7373 {
7374 maxLod = maxLod_;
7375 return *this;
7376 }
7377
7378 SamplerCreateInfo& setBorderColor( BorderColor borderColor_ )
7379 {
7380 borderColor = borderColor_;
7381 return *this;
7382 }
7383
7384 SamplerCreateInfo& setUnnormalizedCoordinates( Bool32 unnormalizedCoordinates_ )
7385 {
7386 unnormalizedCoordinates = unnormalizedCoordinates_;
7387 return *this;
7388 }
7389
7390 operator const VkSamplerCreateInfo&() const
7391 {
7392 return *reinterpret_cast<const VkSamplerCreateInfo*>(this);
7393 }
7394
7395 bool operator==( SamplerCreateInfo const& rhs ) const
7396 {
7397 return ( sType == rhs.sType )
7398 && ( pNext == rhs.pNext )
7399 && ( flags == rhs.flags )
7400 && ( magFilter == rhs.magFilter )
7401 && ( minFilter == rhs.minFilter )
7402 && ( mipmapMode == rhs.mipmapMode )
7403 && ( addressModeU == rhs.addressModeU )
7404 && ( addressModeV == rhs.addressModeV )
7405 && ( addressModeW == rhs.addressModeW )
7406 && ( mipLodBias == rhs.mipLodBias )
7407 && ( anisotropyEnable == rhs.anisotropyEnable )
7408 && ( maxAnisotropy == rhs.maxAnisotropy )
7409 && ( compareEnable == rhs.compareEnable )
7410 && ( compareOp == rhs.compareOp )
7411 && ( minLod == rhs.minLod )
7412 && ( maxLod == rhs.maxLod )
7413 && ( borderColor == rhs.borderColor )
7414 && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates );
7415 }
7416
7417 bool operator!=( SamplerCreateInfo const& rhs ) const
7418 {
7419 return !operator==( rhs );
7420 }
7421
7422 private:
7423 StructureType sType;
7424
7425 public:
7426 const void* pNext;
7427 SamplerCreateFlags flags;
7428 Filter magFilter;
7429 Filter minFilter;
7430 SamplerMipmapMode mipmapMode;
7431 SamplerAddressMode addressModeU;
7432 SamplerAddressMode addressModeV;
7433 SamplerAddressMode addressModeW;
7434 float mipLodBias;
7435 Bool32 anisotropyEnable;
7436 float maxAnisotropy;
7437 Bool32 compareEnable;
7438 CompareOp compareOp;
7439 float minLod;
7440 float maxLod;
7441 BorderColor borderColor;
7442 Bool32 unnormalizedCoordinates;
7443 };
7444 static_assert( sizeof( SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ), "struct and wrapper have different size!" );
7445
7446 struct CommandBufferAllocateInfo
7447 {
7448 CommandBufferAllocateInfo( CommandPool commandPool_ = CommandPool(), CommandBufferLevel level_ = CommandBufferLevel::ePrimary, uint32_t commandBufferCount_ = 0 )
7449 : sType( StructureType::eCommandBufferAllocateInfo )
7450 , pNext( nullptr )
7451 , commandPool( commandPool_ )
7452 , level( level_ )
7453 , commandBufferCount( commandBufferCount_ )
7454 {
7455 }
7456
7457 CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs )
7458 {
7459 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7460 }
7461
7462 CommandBufferAllocateInfo& operator=( VkCommandBufferAllocateInfo const & rhs )
7463 {
7464 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7465 return *this;
7466 }
7467
7468 CommandBufferAllocateInfo& setSType( StructureType sType_ )
7469 {
7470 sType = sType_;
7471 return *this;
7472 }
7473
7474 CommandBufferAllocateInfo& setPNext( const void* pNext_ )
7475 {
7476 pNext = pNext_;
7477 return *this;
7478 }
7479
7480 CommandBufferAllocateInfo& setCommandPool( CommandPool commandPool_ )
7481 {
7482 commandPool = commandPool_;
7483 return *this;
7484 }
7485
7486 CommandBufferAllocateInfo& setLevel( CommandBufferLevel level_ )
7487 {
7488 level = level_;
7489 return *this;
7490 }
7491
7492 CommandBufferAllocateInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
7493 {
7494 commandBufferCount = commandBufferCount_;
7495 return *this;
7496 }
7497
7498 operator const VkCommandBufferAllocateInfo&() const
7499 {
7500 return *reinterpret_cast<const VkCommandBufferAllocateInfo*>(this);
7501 }
7502
7503 bool operator==( CommandBufferAllocateInfo const& rhs ) const
7504 {
7505 return ( sType == rhs.sType )
7506 && ( pNext == rhs.pNext )
7507 && ( commandPool == rhs.commandPool )
7508 && ( level == rhs.level )
7509 && ( commandBufferCount == rhs.commandBufferCount );
7510 }
7511
7512 bool operator!=( CommandBufferAllocateInfo const& rhs ) const
7513 {
7514 return !operator==( rhs );
7515 }
7516
7517 private:
7518 StructureType sType;
7519
7520 public:
7521 const void* pNext;
7522 CommandPool commandPool;
7523 CommandBufferLevel level;
7524 uint32_t commandBufferCount;
7525 };
7526 static_assert( sizeof( CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ), "struct and wrapper have different size!" );
7527
7528 struct RenderPassBeginInfo
7529 {
7530 RenderPassBeginInfo( RenderPass renderPass_ = RenderPass(), Framebuffer framebuffer_ = Framebuffer(), Rect2D renderArea_ = Rect2D(), uint32_t clearValueCount_ = 0, const ClearValue* pClearValues_ = nullptr )
7531 : sType( StructureType::eRenderPassBeginInfo )
7532 , pNext( nullptr )
7533 , renderPass( renderPass_ )
7534 , framebuffer( framebuffer_ )
7535 , renderArea( renderArea_ )
7536 , clearValueCount( clearValueCount_ )
7537 , pClearValues( pClearValues_ )
7538 {
7539 }
7540
7541 RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs )
7542 {
7543 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7544 }
7545
7546 RenderPassBeginInfo& operator=( VkRenderPassBeginInfo const & rhs )
7547 {
7548 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7549 return *this;
7550 }
7551
7552 RenderPassBeginInfo& setSType( StructureType sType_ )
7553 {
7554 sType = sType_;
7555 return *this;
7556 }
7557
7558 RenderPassBeginInfo& setPNext( const void* pNext_ )
7559 {
7560 pNext = pNext_;
7561 return *this;
7562 }
7563
7564 RenderPassBeginInfo& setRenderPass( RenderPass renderPass_ )
7565 {
7566 renderPass = renderPass_;
7567 return *this;
7568 }
7569
7570 RenderPassBeginInfo& setFramebuffer( Framebuffer framebuffer_ )
7571 {
7572 framebuffer = framebuffer_;
7573 return *this;
7574 }
7575
7576 RenderPassBeginInfo& setRenderArea( Rect2D renderArea_ )
7577 {
7578 renderArea = renderArea_;
7579 return *this;
7580 }
7581
7582 RenderPassBeginInfo& setClearValueCount( uint32_t clearValueCount_ )
7583 {
7584 clearValueCount = clearValueCount_;
7585 return *this;
7586 }
7587
7588 RenderPassBeginInfo& setPClearValues( const ClearValue* pClearValues_ )
7589 {
7590 pClearValues = pClearValues_;
7591 return *this;
7592 }
7593
7594 operator const VkRenderPassBeginInfo&() const
7595 {
7596 return *reinterpret_cast<const VkRenderPassBeginInfo*>(this);
7597 }
7598
7599 bool operator==( RenderPassBeginInfo const& rhs ) const
7600 {
7601 return ( sType == rhs.sType )
7602 && ( pNext == rhs.pNext )
7603 && ( renderPass == rhs.renderPass )
7604 && ( framebuffer == rhs.framebuffer )
7605 && ( renderArea == rhs.renderArea )
7606 && ( clearValueCount == rhs.clearValueCount )
7607 && ( pClearValues == rhs.pClearValues );
7608 }
7609
7610 bool operator!=( RenderPassBeginInfo const& rhs ) const
7611 {
7612 return !operator==( rhs );
7613 }
7614
7615 private:
7616 StructureType sType;
7617
7618 public:
7619 const void* pNext;
7620 RenderPass renderPass;
7621 Framebuffer framebuffer;
7622 Rect2D renderArea;
7623 uint32_t clearValueCount;
7624 const ClearValue* pClearValues;
7625 };
7626 static_assert( sizeof( RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ), "struct and wrapper have different size!" );
7627
7628 struct EventCreateInfo
7629 {
7630 EventCreateInfo( EventCreateFlags flags_ = EventCreateFlags() )
7631 : sType( StructureType::eEventCreateInfo )
7632 , pNext( nullptr )
7633 , flags( flags_ )
7634 {
7635 }
7636
7637 EventCreateInfo( VkEventCreateInfo const & rhs )
7638 {
7639 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7640 }
7641
7642 EventCreateInfo& operator=( VkEventCreateInfo const & rhs )
7643 {
7644 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7645 return *this;
7646 }
7647
7648 EventCreateInfo& setSType( StructureType sType_ )
7649 {
7650 sType = sType_;
7651 return *this;
7652 }
7653
7654 EventCreateInfo& setPNext( const void* pNext_ )
7655 {
7656 pNext = pNext_;
7657 return *this;
7658 }
7659
7660 EventCreateInfo& setFlags( EventCreateFlags flags_ )
7661 {
7662 flags = flags_;
7663 return *this;
7664 }
7665
7666 operator const VkEventCreateInfo&() const
7667 {
7668 return *reinterpret_cast<const VkEventCreateInfo*>(this);
7669 }
7670
7671 bool operator==( EventCreateInfo const& rhs ) const
7672 {
7673 return ( sType == rhs.sType )
7674 && ( pNext == rhs.pNext )
7675 && ( flags == rhs.flags );
7676 }
7677
7678 bool operator!=( EventCreateInfo const& rhs ) const
7679 {
7680 return !operator==( rhs );
7681 }
7682
7683 private:
7684 StructureType sType;
7685
7686 public:
7687 const void* pNext;
7688 EventCreateFlags flags;
7689 };
7690 static_assert( sizeof( EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" );
7691
7692 struct SemaphoreCreateInfo
7693 {
7694 SemaphoreCreateInfo( SemaphoreCreateFlags flags_ = SemaphoreCreateFlags() )
7695 : sType( StructureType::eSemaphoreCreateInfo )
7696 , pNext( nullptr )
7697 , flags( flags_ )
7698 {
7699 }
7700
7701 SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs )
7702 {
7703 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7704 }
7705
7706 SemaphoreCreateInfo& operator=( VkSemaphoreCreateInfo const & rhs )
7707 {
7708 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7709 return *this;
7710 }
7711
7712 SemaphoreCreateInfo& setSType( StructureType sType_ )
7713 {
7714 sType = sType_;
7715 return *this;
7716 }
7717
7718 SemaphoreCreateInfo& setPNext( const void* pNext_ )
7719 {
7720 pNext = pNext_;
7721 return *this;
7722 }
7723
7724 SemaphoreCreateInfo& setFlags( SemaphoreCreateFlags flags_ )
7725 {
7726 flags = flags_;
7727 return *this;
7728 }
7729
7730 operator const VkSemaphoreCreateInfo&() const
7731 {
7732 return *reinterpret_cast<const VkSemaphoreCreateInfo*>(this);
7733 }
7734
7735 bool operator==( SemaphoreCreateInfo const& rhs ) const
7736 {
7737 return ( sType == rhs.sType )
7738 && ( pNext == rhs.pNext )
7739 && ( flags == rhs.flags );
7740 }
7741
7742 bool operator!=( SemaphoreCreateInfo const& rhs ) const
7743 {
7744 return !operator==( rhs );
7745 }
7746
7747 private:
7748 StructureType sType;
7749
7750 public:
7751 const void* pNext;
7752 SemaphoreCreateFlags flags;
7753 };
7754 static_assert( sizeof( SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ), "struct and wrapper have different size!" );
7755
7756 struct FramebufferCreateInfo
7757 {
7758 FramebufferCreateInfo( FramebufferCreateFlags flags_ = FramebufferCreateFlags(), RenderPass renderPass_ = RenderPass(), uint32_t attachmentCount_ = 0, const ImageView* pAttachments_ = nullptr, uint32_t width_ = 0, uint32_t height_ = 0, uint32_t layers_ = 0 )
7759 : sType( StructureType::eFramebufferCreateInfo )
7760 , pNext( nullptr )
7761 , flags( flags_ )
7762 , renderPass( renderPass_ )
7763 , attachmentCount( attachmentCount_ )
7764 , pAttachments( pAttachments_ )
7765 , width( width_ )
7766 , height( height_ )
7767 , layers( layers_ )
7768 {
7769 }
7770
7771 FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs )
7772 {
7773 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7774 }
7775
7776 FramebufferCreateInfo& operator=( VkFramebufferCreateInfo const & rhs )
7777 {
7778 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7779 return *this;
7780 }
7781
7782 FramebufferCreateInfo& setSType( StructureType sType_ )
7783 {
7784 sType = sType_;
7785 return *this;
7786 }
7787
7788 FramebufferCreateInfo& setPNext( const void* pNext_ )
7789 {
7790 pNext = pNext_;
7791 return *this;
7792 }
7793
7794 FramebufferCreateInfo& setFlags( FramebufferCreateFlags flags_ )
7795 {
7796 flags = flags_;
7797 return *this;
7798 }
7799
7800 FramebufferCreateInfo& setRenderPass( RenderPass renderPass_ )
7801 {
7802 renderPass = renderPass_;
7803 return *this;
7804 }
7805
7806 FramebufferCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
7807 {
7808 attachmentCount = attachmentCount_;
7809 return *this;
7810 }
7811
7812 FramebufferCreateInfo& setPAttachments( const ImageView* pAttachments_ )
7813 {
7814 pAttachments = pAttachments_;
7815 return *this;
7816 }
7817
7818 FramebufferCreateInfo& setWidth( uint32_t width_ )
7819 {
7820 width = width_;
7821 return *this;
7822 }
7823
7824 FramebufferCreateInfo& setHeight( uint32_t height_ )
7825 {
7826 height = height_;
7827 return *this;
7828 }
7829
7830 FramebufferCreateInfo& setLayers( uint32_t layers_ )
7831 {
7832 layers = layers_;
7833 return *this;
7834 }
7835
7836 operator const VkFramebufferCreateInfo&() const
7837 {
7838 return *reinterpret_cast<const VkFramebufferCreateInfo*>(this);
7839 }
7840
7841 bool operator==( FramebufferCreateInfo const& rhs ) const
7842 {
7843 return ( sType == rhs.sType )
7844 && ( pNext == rhs.pNext )
7845 && ( flags == rhs.flags )
7846 && ( renderPass == rhs.renderPass )
7847 && ( attachmentCount == rhs.attachmentCount )
7848 && ( pAttachments == rhs.pAttachments )
7849 && ( width == rhs.width )
7850 && ( height == rhs.height )
7851 && ( layers == rhs.layers );
7852 }
7853
7854 bool operator!=( FramebufferCreateInfo const& rhs ) const
7855 {
7856 return !operator==( rhs );
7857 }
7858
7859 private:
7860 StructureType sType;
7861
7862 public:
7863 const void* pNext;
7864 FramebufferCreateFlags flags;
7865 RenderPass renderPass;
7866 uint32_t attachmentCount;
7867 const ImageView* pAttachments;
7868 uint32_t width;
7869 uint32_t height;
7870 uint32_t layers;
7871 };
7872 static_assert( sizeof( FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ), "struct and wrapper have different size!" );
7873
7874 struct DisplayModeCreateInfoKHR
7875 {
7876 DisplayModeCreateInfoKHR( DisplayModeCreateFlagsKHR flags_ = DisplayModeCreateFlagsKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
7877 : sType( StructureType::eDisplayModeCreateInfoKHR )
7878 , pNext( nullptr )
7879 , flags( flags_ )
7880 , parameters( parameters_ )
7881 {
7882 }
7883
7884 DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs )
7885 {
7886 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7887 }
7888
7889 DisplayModeCreateInfoKHR& operator=( VkDisplayModeCreateInfoKHR const & rhs )
7890 {
7891 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7892 return *this;
7893 }
7894
7895 DisplayModeCreateInfoKHR& setSType( StructureType sType_ )
7896 {
7897 sType = sType_;
7898 return *this;
7899 }
7900
7901 DisplayModeCreateInfoKHR& setPNext( const void* pNext_ )
7902 {
7903 pNext = pNext_;
7904 return *this;
7905 }
7906
7907 DisplayModeCreateInfoKHR& setFlags( DisplayModeCreateFlagsKHR flags_ )
7908 {
7909 flags = flags_;
7910 return *this;
7911 }
7912
7913 DisplayModeCreateInfoKHR& setParameters( DisplayModeParametersKHR parameters_ )
7914 {
7915 parameters = parameters_;
7916 return *this;
7917 }
7918
7919 operator const VkDisplayModeCreateInfoKHR&() const
7920 {
7921 return *reinterpret_cast<const VkDisplayModeCreateInfoKHR*>(this);
7922 }
7923
7924 bool operator==( DisplayModeCreateInfoKHR const& rhs ) const
7925 {
7926 return ( sType == rhs.sType )
7927 && ( pNext == rhs.pNext )
7928 && ( flags == rhs.flags )
7929 && ( parameters == rhs.parameters );
7930 }
7931
7932 bool operator!=( DisplayModeCreateInfoKHR const& rhs ) const
7933 {
7934 return !operator==( rhs );
7935 }
7936
7937 private:
7938 StructureType sType;
7939
7940 public:
7941 const void* pNext;
7942 DisplayModeCreateFlagsKHR flags;
7943 DisplayModeParametersKHR parameters;
7944 };
7945 static_assert( sizeof( DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ), "struct and wrapper have different size!" );
7946
7947 struct DisplayPresentInfoKHR
7948 {
7949 DisplayPresentInfoKHR( Rect2D srcRect_ = Rect2D(), Rect2D dstRect_ = Rect2D(), Bool32 persistent_ = 0 )
7950 : sType( StructureType::eDisplayPresentInfoKHR )
7951 , pNext( nullptr )
7952 , srcRect( srcRect_ )
7953 , dstRect( dstRect_ )
7954 , persistent( persistent_ )
7955 {
7956 }
7957
7958 DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs )
7959 {
7960 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7961 }
7962
7963 DisplayPresentInfoKHR& operator=( VkDisplayPresentInfoKHR const & rhs )
7964 {
7965 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7966 return *this;
7967 }
7968
7969 DisplayPresentInfoKHR& setSType( StructureType sType_ )
7970 {
7971 sType = sType_;
7972 return *this;
7973 }
7974
7975 DisplayPresentInfoKHR& setPNext( const void* pNext_ )
7976 {
7977 pNext = pNext_;
7978 return *this;
7979 }
7980
7981 DisplayPresentInfoKHR& setSrcRect( Rect2D srcRect_ )
7982 {
7983 srcRect = srcRect_;
7984 return *this;
7985 }
7986
7987 DisplayPresentInfoKHR& setDstRect( Rect2D dstRect_ )
7988 {
7989 dstRect = dstRect_;
7990 return *this;
7991 }
7992
7993 DisplayPresentInfoKHR& setPersistent( Bool32 persistent_ )
7994 {
7995 persistent = persistent_;
7996 return *this;
7997 }
7998
7999 operator const VkDisplayPresentInfoKHR&() const
8000 {
8001 return *reinterpret_cast<const VkDisplayPresentInfoKHR*>(this);
8002 }
8003
8004 bool operator==( DisplayPresentInfoKHR const& rhs ) const
8005 {
8006 return ( sType == rhs.sType )
8007 && ( pNext == rhs.pNext )
8008 && ( srcRect == rhs.srcRect )
8009 && ( dstRect == rhs.dstRect )
8010 && ( persistent == rhs.persistent );
8011 }
8012
8013 bool operator!=( DisplayPresentInfoKHR const& rhs ) const
8014 {
8015 return !operator==( rhs );
8016 }
8017
8018 private:
8019 StructureType sType;
8020
8021 public:
8022 const void* pNext;
8023 Rect2D srcRect;
8024 Rect2D dstRect;
8025 Bool32 persistent;
8026 };
8027 static_assert( sizeof( DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ), "struct and wrapper have different size!" );
8028
8029#ifdef VK_USE_PLATFORM_ANDROID_KHR
8030 struct AndroidSurfaceCreateInfoKHR
8031 {
8032 AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateFlagsKHR flags_ = AndroidSurfaceCreateFlagsKHR(), ANativeWindow* window_ = nullptr )
8033 : sType( StructureType::eAndroidSurfaceCreateInfoKHR )
8034 , pNext( nullptr )
8035 , flags( flags_ )
8036 , window( window_ )
8037 {
8038 }
8039
8040 AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs )
8041 {
8042 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
8043 }
8044
8045 AndroidSurfaceCreateInfoKHR& operator=( VkAndroidSurfaceCreateInfoKHR const & rhs )
8046 {
8047 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
8048 return *this;
8049 }
8050
8051 AndroidSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8052 {
8053 sType = sType_;
8054 return *this;
8055 }
8056
8057 AndroidSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8058 {
8059 pNext = pNext_;
8060 return *this;
8061 }
8062
8063 AndroidSurfaceCreateInfoKHR& setFlags( AndroidSurfaceCreateFlagsKHR flags_ )
8064 {
8065 flags = flags_;
8066 return *this;
8067 }
8068
8069 AndroidSurfaceCreateInfoKHR& setWindow( ANativeWindow* window_ )
8070 {
8071 window = window_;
8072 return *this;
8073 }
8074
8075 operator const VkAndroidSurfaceCreateInfoKHR&() const
8076 {
8077 return *reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>(this);
8078 }
8079
8080 bool operator==( AndroidSurfaceCreateInfoKHR const& rhs ) const
8081 {
8082 return ( sType == rhs.sType )
8083 && ( pNext == rhs.pNext )
8084 && ( flags == rhs.flags )
8085 && ( window == rhs.window );
8086 }
8087
8088 bool operator!=( AndroidSurfaceCreateInfoKHR const& rhs ) const
8089 {
8090 return !operator==( rhs );
8091 }
8092
8093 private:
8094 StructureType sType;
8095
8096 public:
8097 const void* pNext;
8098 AndroidSurfaceCreateFlagsKHR flags;
8099 ANativeWindow* window;
8100 };
8101 static_assert( sizeof( AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8102#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
8103
8104#ifdef VK_USE_PLATFORM_MIR_KHR
8105 struct MirSurfaceCreateInfoKHR
8106 {
8107 MirSurfaceCreateInfoKHR( MirSurfaceCreateFlagsKHR flags_ = MirSurfaceCreateFlagsKHR(), MirConnection* connection_ = nullptr, MirSurface* mirSurface_ = nullptr )
8108 : sType( StructureType::eMirSurfaceCreateInfoKHR )
8109 , pNext( nullptr )
8110 , flags( flags_ )
8111 , connection( connection_ )
8112 , mirSurface( mirSurface_ )
8113 {
8114 }
8115
8116 MirSurfaceCreateInfoKHR( VkMirSurfaceCreateInfoKHR const & rhs )
8117 {
8118 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8119 }
8120
8121 MirSurfaceCreateInfoKHR& operator=( VkMirSurfaceCreateInfoKHR const & rhs )
8122 {
8123 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8124 return *this;
8125 }
8126
8127 MirSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8128 {
8129 sType = sType_;
8130 return *this;
8131 }
8132
8133 MirSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8134 {
8135 pNext = pNext_;
8136 return *this;
8137 }
8138
8139 MirSurfaceCreateInfoKHR& setFlags( MirSurfaceCreateFlagsKHR flags_ )
8140 {
8141 flags = flags_;
8142 return *this;
8143 }
8144
8145 MirSurfaceCreateInfoKHR& setConnection( MirConnection* connection_ )
8146 {
8147 connection = connection_;
8148 return *this;
8149 }
8150
8151 MirSurfaceCreateInfoKHR& setMirSurface( MirSurface* mirSurface_ )
8152 {
8153 mirSurface = mirSurface_;
8154 return *this;
8155 }
8156
8157 operator const VkMirSurfaceCreateInfoKHR&() const
8158 {
8159 return *reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>(this);
8160 }
8161
8162 bool operator==( MirSurfaceCreateInfoKHR const& rhs ) const
8163 {
8164 return ( sType == rhs.sType )
8165 && ( pNext == rhs.pNext )
8166 && ( flags == rhs.flags )
8167 && ( connection == rhs.connection )
8168 && ( mirSurface == rhs.mirSurface );
8169 }
8170
8171 bool operator!=( MirSurfaceCreateInfoKHR const& rhs ) const
8172 {
8173 return !operator==( rhs );
8174 }
8175
8176 private:
8177 StructureType sType;
8178
8179 public:
8180 const void* pNext;
8181 MirSurfaceCreateFlagsKHR flags;
8182 MirConnection* connection;
8183 MirSurface* mirSurface;
8184 };
8185 static_assert( sizeof( MirSurfaceCreateInfoKHR ) == sizeof( VkMirSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8186#endif /*VK_USE_PLATFORM_MIR_KHR*/
8187
8188#ifdef VK_USE_PLATFORM_WAYLAND_KHR
8189 struct WaylandSurfaceCreateInfoKHR
8190 {
8191 WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateFlagsKHR flags_ = WaylandSurfaceCreateFlagsKHR(), struct wl_display* display_ = nullptr, struct wl_surface* surface_ = nullptr )
8192 : sType( StructureType::eWaylandSurfaceCreateInfoKHR )
8193 , pNext( nullptr )
8194 , flags( flags_ )
8195 , display( display_ )
8196 , surface( surface_ )
8197 {
8198 }
8199
8200 WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs )
8201 {
8202 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8203 }
8204
8205 WaylandSurfaceCreateInfoKHR& operator=( VkWaylandSurfaceCreateInfoKHR const & rhs )
8206 {
8207 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8208 return *this;
8209 }
8210
8211 WaylandSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8212 {
8213 sType = sType_;
8214 return *this;
8215 }
8216
8217 WaylandSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8218 {
8219 pNext = pNext_;
8220 return *this;
8221 }
8222
8223 WaylandSurfaceCreateInfoKHR& setFlags( WaylandSurfaceCreateFlagsKHR flags_ )
8224 {
8225 flags = flags_;
8226 return *this;
8227 }
8228
8229 WaylandSurfaceCreateInfoKHR& setDisplay( struct wl_display* display_ )
8230 {
8231 display = display_;
8232 return *this;
8233 }
8234
8235 WaylandSurfaceCreateInfoKHR& setSurface( struct wl_surface* surface_ )
8236 {
8237 surface = surface_;
8238 return *this;
8239 }
8240
8241 operator const VkWaylandSurfaceCreateInfoKHR&() const
8242 {
8243 return *reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>(this);
8244 }
8245
8246 bool operator==( WaylandSurfaceCreateInfoKHR const& rhs ) const
8247 {
8248 return ( sType == rhs.sType )
8249 && ( pNext == rhs.pNext )
8250 && ( flags == rhs.flags )
8251 && ( display == rhs.display )
8252 && ( surface == rhs.surface );
8253 }
8254
8255 bool operator!=( WaylandSurfaceCreateInfoKHR const& rhs ) const
8256 {
8257 return !operator==( rhs );
8258 }
8259
8260 private:
8261 StructureType sType;
8262
8263 public:
8264 const void* pNext;
8265 WaylandSurfaceCreateFlagsKHR flags;
8266 struct wl_display* display;
8267 struct wl_surface* surface;
8268 };
8269 static_assert( sizeof( WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8270#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
8271
8272#ifdef VK_USE_PLATFORM_WIN32_KHR
8273 struct Win32SurfaceCreateInfoKHR
8274 {
8275 Win32SurfaceCreateInfoKHR( Win32SurfaceCreateFlagsKHR flags_ = Win32SurfaceCreateFlagsKHR(), HINSTANCE hinstance_ = 0, HWND hwnd_ = 0 )
8276 : sType( StructureType::eWin32SurfaceCreateInfoKHR )
8277 , pNext( nullptr )
8278 , flags( flags_ )
8279 , hinstance( hinstance_ )
8280 , hwnd( hwnd_ )
8281 {
8282 }
8283
8284 Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs )
8285 {
8286 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8287 }
8288
8289 Win32SurfaceCreateInfoKHR& operator=( VkWin32SurfaceCreateInfoKHR const & rhs )
8290 {
8291 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8292 return *this;
8293 }
8294
8295 Win32SurfaceCreateInfoKHR& setSType( StructureType sType_ )
8296 {
8297 sType = sType_;
8298 return *this;
8299 }
8300
8301 Win32SurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8302 {
8303 pNext = pNext_;
8304 return *this;
8305 }
8306
8307 Win32SurfaceCreateInfoKHR& setFlags( Win32SurfaceCreateFlagsKHR flags_ )
8308 {
8309 flags = flags_;
8310 return *this;
8311 }
8312
8313 Win32SurfaceCreateInfoKHR& setHinstance( HINSTANCE hinstance_ )
8314 {
8315 hinstance = hinstance_;
8316 return *this;
8317 }
8318
8319 Win32SurfaceCreateInfoKHR& setHwnd( HWND hwnd_ )
8320 {
8321 hwnd = hwnd_;
8322 return *this;
8323 }
8324
8325 operator const VkWin32SurfaceCreateInfoKHR&() const
8326 {
8327 return *reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>(this);
8328 }
8329
8330 bool operator==( Win32SurfaceCreateInfoKHR const& rhs ) const
8331 {
8332 return ( sType == rhs.sType )
8333 && ( pNext == rhs.pNext )
8334 && ( flags == rhs.flags )
8335 && ( hinstance == rhs.hinstance )
8336 && ( hwnd == rhs.hwnd );
8337 }
8338
8339 bool operator!=( Win32SurfaceCreateInfoKHR const& rhs ) const
8340 {
8341 return !operator==( rhs );
8342 }
8343
8344 private:
8345 StructureType sType;
8346
8347 public:
8348 const void* pNext;
8349 Win32SurfaceCreateFlagsKHR flags;
8350 HINSTANCE hinstance;
8351 HWND hwnd;
8352 };
8353 static_assert( sizeof( Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8354#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8355
8356#ifdef VK_USE_PLATFORM_XLIB_KHR
8357 struct XlibSurfaceCreateInfoKHR
8358 {
8359 XlibSurfaceCreateInfoKHR( XlibSurfaceCreateFlagsKHR flags_ = XlibSurfaceCreateFlagsKHR(), Display* dpy_ = nullptr, Window window_ = 0 )
8360 : sType( StructureType::eXlibSurfaceCreateInfoKHR )
8361 , pNext( nullptr )
8362 , flags( flags_ )
8363 , dpy( dpy_ )
8364 , window( window_ )
8365 {
8366 }
8367
8368 XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs )
8369 {
8370 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8371 }
8372
8373 XlibSurfaceCreateInfoKHR& operator=( VkXlibSurfaceCreateInfoKHR const & rhs )
8374 {
8375 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8376 return *this;
8377 }
8378
8379 XlibSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8380 {
8381 sType = sType_;
8382 return *this;
8383 }
8384
8385 XlibSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8386 {
8387 pNext = pNext_;
8388 return *this;
8389 }
8390
8391 XlibSurfaceCreateInfoKHR& setFlags( XlibSurfaceCreateFlagsKHR flags_ )
8392 {
8393 flags = flags_;
8394 return *this;
8395 }
8396
8397 XlibSurfaceCreateInfoKHR& setDpy( Display* dpy_ )
8398 {
8399 dpy = dpy_;
8400 return *this;
8401 }
8402
8403 XlibSurfaceCreateInfoKHR& setWindow( Window window_ )
8404 {
8405 window = window_;
8406 return *this;
8407 }
8408
8409 operator const VkXlibSurfaceCreateInfoKHR&() const
8410 {
8411 return *reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>(this);
8412 }
8413
8414 bool operator==( XlibSurfaceCreateInfoKHR const& rhs ) const
8415 {
8416 return ( sType == rhs.sType )
8417 && ( pNext == rhs.pNext )
8418 && ( flags == rhs.flags )
8419 && ( dpy == rhs.dpy )
8420 && ( window == rhs.window );
8421 }
8422
8423 bool operator!=( XlibSurfaceCreateInfoKHR const& rhs ) const
8424 {
8425 return !operator==( rhs );
8426 }
8427
8428 private:
8429 StructureType sType;
8430
8431 public:
8432 const void* pNext;
8433 XlibSurfaceCreateFlagsKHR flags;
8434 Display* dpy;
8435 Window window;
8436 };
8437 static_assert( sizeof( XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8438#endif /*VK_USE_PLATFORM_XLIB_KHR*/
8439
8440#ifdef VK_USE_PLATFORM_XCB_KHR
8441 struct XcbSurfaceCreateInfoKHR
8442 {
8443 XcbSurfaceCreateInfoKHR( XcbSurfaceCreateFlagsKHR flags_ = XcbSurfaceCreateFlagsKHR(), xcb_connection_t* connection_ = nullptr, xcb_window_t window_ = 0 )
8444 : sType( StructureType::eXcbSurfaceCreateInfoKHR )
8445 , pNext( nullptr )
8446 , flags( flags_ )
8447 , connection( connection_ )
8448 , window( window_ )
8449 {
8450 }
8451
8452 XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs )
8453 {
8454 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8455 }
8456
8457 XcbSurfaceCreateInfoKHR& operator=( VkXcbSurfaceCreateInfoKHR const & rhs )
8458 {
8459 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8460 return *this;
8461 }
8462
8463 XcbSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8464 {
8465 sType = sType_;
8466 return *this;
8467 }
8468
8469 XcbSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8470 {
8471 pNext = pNext_;
8472 return *this;
8473 }
8474
8475 XcbSurfaceCreateInfoKHR& setFlags( XcbSurfaceCreateFlagsKHR flags_ )
8476 {
8477 flags = flags_;
8478 return *this;
8479 }
8480
8481 XcbSurfaceCreateInfoKHR& setConnection( xcb_connection_t* connection_ )
8482 {
8483 connection = connection_;
8484 return *this;
8485 }
8486
8487 XcbSurfaceCreateInfoKHR& setWindow( xcb_window_t window_ )
8488 {
8489 window = window_;
8490 return *this;
8491 }
8492
8493 operator const VkXcbSurfaceCreateInfoKHR&() const
8494 {
8495 return *reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>(this);
8496 }
8497
8498 bool operator==( XcbSurfaceCreateInfoKHR const& rhs ) const
8499 {
8500 return ( sType == rhs.sType )
8501 && ( pNext == rhs.pNext )
8502 && ( flags == rhs.flags )
8503 && ( connection == rhs.connection )
8504 && ( window == rhs.window );
8505 }
8506
8507 bool operator!=( XcbSurfaceCreateInfoKHR const& rhs ) const
8508 {
8509 return !operator==( rhs );
8510 }
8511
8512 private:
8513 StructureType sType;
8514
8515 public:
8516 const void* pNext;
8517 XcbSurfaceCreateFlagsKHR flags;
8518 xcb_connection_t* connection;
8519 xcb_window_t window;
8520 };
8521 static_assert( sizeof( XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8522#endif /*VK_USE_PLATFORM_XCB_KHR*/
8523
8524 struct DebugMarkerMarkerInfoEXT
8525 {
8526 DebugMarkerMarkerInfoEXT( const char* pMarkerName_ = nullptr, std::array<float,4> const& color_ = { { 0, 0, 0, 0 } } )
8527 : sType( StructureType::eDebugMarkerMarkerInfoEXT )
8528 , pNext( nullptr )
8529 , pMarkerName( pMarkerName_ )
8530 {
8531 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8532 }
8533
8534 DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs )
8535 {
8536 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8537 }
8538
8539 DebugMarkerMarkerInfoEXT& operator=( VkDebugMarkerMarkerInfoEXT const & rhs )
8540 {
8541 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8542 return *this;
8543 }
8544
8545 DebugMarkerMarkerInfoEXT& setSType( StructureType sType_ )
8546 {
8547 sType = sType_;
8548 return *this;
8549 }
8550
8551 DebugMarkerMarkerInfoEXT& setPNext( const void* pNext_ )
8552 {
8553 pNext = pNext_;
8554 return *this;
8555 }
8556
8557 DebugMarkerMarkerInfoEXT& setPMarkerName( const char* pMarkerName_ )
8558 {
8559 pMarkerName = pMarkerName_;
8560 return *this;
8561 }
8562
8563 DebugMarkerMarkerInfoEXT& setColor( std::array<float,4> color_ )
8564 {
8565 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8566 return *this;
8567 }
8568
8569 operator const VkDebugMarkerMarkerInfoEXT&() const
8570 {
8571 return *reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>(this);
8572 }
8573
8574 bool operator==( DebugMarkerMarkerInfoEXT const& rhs ) const
8575 {
8576 return ( sType == rhs.sType )
8577 && ( pNext == rhs.pNext )
8578 && ( pMarkerName == rhs.pMarkerName )
8579 && ( memcmp( color, rhs.color, 4 * sizeof( float ) ) == 0 );
8580 }
8581
8582 bool operator!=( DebugMarkerMarkerInfoEXT const& rhs ) const
8583 {
8584 return !operator==( rhs );
8585 }
8586
8587 private:
8588 StructureType sType;
8589
8590 public:
8591 const void* pNext;
8592 const char* pMarkerName;
8593 float color[4];
8594 };
8595 static_assert( sizeof( DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ), "struct and wrapper have different size!" );
8596
8597 struct DedicatedAllocationImageCreateInfoNV
8598 {
8599 DedicatedAllocationImageCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8600 : sType( StructureType::eDedicatedAllocationImageCreateInfoNV )
8601 , pNext( nullptr )
8602 , dedicatedAllocation( dedicatedAllocation_ )
8603 {
8604 }
8605
8606 DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8607 {
8608 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8609 }
8610
8611 DedicatedAllocationImageCreateInfoNV& operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8612 {
8613 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8614 return *this;
8615 }
8616
8617 DedicatedAllocationImageCreateInfoNV& setSType( StructureType sType_ )
8618 {
8619 sType = sType_;
8620 return *this;
8621 }
8622
8623 DedicatedAllocationImageCreateInfoNV& setPNext( const void* pNext_ )
8624 {
8625 pNext = pNext_;
8626 return *this;
8627 }
8628
8629 DedicatedAllocationImageCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8630 {
8631 dedicatedAllocation = dedicatedAllocation_;
8632 return *this;
8633 }
8634
8635 operator const VkDedicatedAllocationImageCreateInfoNV&() const
8636 {
8637 return *reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(this);
8638 }
8639
8640 bool operator==( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8641 {
8642 return ( sType == rhs.sType )
8643 && ( pNext == rhs.pNext )
8644 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8645 }
8646
8647 bool operator!=( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8648 {
8649 return !operator==( rhs );
8650 }
8651
8652 private:
8653 StructureType sType;
8654
8655 public:
8656 const void* pNext;
8657 Bool32 dedicatedAllocation;
8658 };
8659 static_assert( sizeof( DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ), "struct and wrapper have different size!" );
8660
8661 struct DedicatedAllocationBufferCreateInfoNV
8662 {
8663 DedicatedAllocationBufferCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8664 : sType( StructureType::eDedicatedAllocationBufferCreateInfoNV )
8665 , pNext( nullptr )
8666 , dedicatedAllocation( dedicatedAllocation_ )
8667 {
8668 }
8669
8670 DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8671 {
8672 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8673 }
8674
8675 DedicatedAllocationBufferCreateInfoNV& operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8676 {
8677 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8678 return *this;
8679 }
8680
8681 DedicatedAllocationBufferCreateInfoNV& setSType( StructureType sType_ )
8682 {
8683 sType = sType_;
8684 return *this;
8685 }
8686
8687 DedicatedAllocationBufferCreateInfoNV& setPNext( const void* pNext_ )
8688 {
8689 pNext = pNext_;
8690 return *this;
8691 }
8692
8693 DedicatedAllocationBufferCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8694 {
8695 dedicatedAllocation = dedicatedAllocation_;
8696 return *this;
8697 }
8698
8699 operator const VkDedicatedAllocationBufferCreateInfoNV&() const
8700 {
8701 return *reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(this);
8702 }
8703
8704 bool operator==( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8705 {
8706 return ( sType == rhs.sType )
8707 && ( pNext == rhs.pNext )
8708 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8709 }
8710
8711 bool operator!=( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8712 {
8713 return !operator==( rhs );
8714 }
8715
8716 private:
8717 StructureType sType;
8718
8719 public:
8720 const void* pNext;
8721 Bool32 dedicatedAllocation;
8722 };
8723 static_assert( sizeof( DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ), "struct and wrapper have different size!" );
8724
8725 struct DedicatedAllocationMemoryAllocateInfoNV
8726 {
8727 DedicatedAllocationMemoryAllocateInfoNV( Image image_ = Image(), Buffer buffer_ = Buffer() )
8728 : sType( StructureType::eDedicatedAllocationMemoryAllocateInfoNV )
8729 , pNext( nullptr )
8730 , image( image_ )
8731 , buffer( buffer_ )
8732 {
8733 }
8734
8735 DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8736 {
8737 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8738 }
8739
8740 DedicatedAllocationMemoryAllocateInfoNV& operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8741 {
8742 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8743 return *this;
8744 }
8745
8746 DedicatedAllocationMemoryAllocateInfoNV& setSType( StructureType sType_ )
8747 {
8748 sType = sType_;
8749 return *this;
8750 }
8751
8752 DedicatedAllocationMemoryAllocateInfoNV& setPNext( const void* pNext_ )
8753 {
8754 pNext = pNext_;
8755 return *this;
8756 }
8757
8758 DedicatedAllocationMemoryAllocateInfoNV& setImage( Image image_ )
8759 {
8760 image = image_;
8761 return *this;
8762 }
8763
8764 DedicatedAllocationMemoryAllocateInfoNV& setBuffer( Buffer buffer_ )
8765 {
8766 buffer = buffer_;
8767 return *this;
8768 }
8769
8770 operator const VkDedicatedAllocationMemoryAllocateInfoNV&() const
8771 {
8772 return *reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(this);
8773 }
8774
8775 bool operator==( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8776 {
8777 return ( sType == rhs.sType )
8778 && ( pNext == rhs.pNext )
8779 && ( image == rhs.image )
8780 && ( buffer == rhs.buffer );
8781 }
8782
8783 bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8784 {
8785 return !operator==( rhs );
8786 }
8787
8788 private:
8789 StructureType sType;
8790
8791 public:
8792 const void* pNext;
8793 Image image;
8794 Buffer buffer;
8795 };
8796 static_assert( sizeof( DedicatedAllocationMemoryAllocateInfoNV ) == sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
8797
8798 enum class SubpassContents
8799 {
8800 eInline = VK_SUBPASS_CONTENTS_INLINE,
8801 eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
8802 };
8803
8804 struct PresentInfoKHR
8805 {
8806 PresentInfoKHR( uint32_t waitSemaphoreCount_ = 0, const Semaphore* pWaitSemaphores_ = nullptr, uint32_t swapchainCount_ = 0, const SwapchainKHR* pSwapchains_ = nullptr, const uint32_t* pImageIndices_ = nullptr, Result* pResults_ = nullptr )
8807 : sType( StructureType::ePresentInfoKHR )
8808 , pNext( nullptr )
8809 , waitSemaphoreCount( waitSemaphoreCount_ )
8810 , pWaitSemaphores( pWaitSemaphores_ )
8811 , swapchainCount( swapchainCount_ )
8812 , pSwapchains( pSwapchains_ )
8813 , pImageIndices( pImageIndices_ )
8814 , pResults( pResults_ )
8815 {
8816 }
8817
8818 PresentInfoKHR( VkPresentInfoKHR const & rhs )
8819 {
8820 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
8821 }
8822
8823 PresentInfoKHR& operator=( VkPresentInfoKHR const & rhs )
8824 {
8825 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
8826 return *this;
8827 }
8828
8829 PresentInfoKHR& setSType( StructureType sType_ )
8830 {
8831 sType = sType_;
8832 return *this;
8833 }
8834
8835 PresentInfoKHR& setPNext( const void* pNext_ )
8836 {
8837 pNext = pNext_;
8838 return *this;
8839 }
8840
8841 PresentInfoKHR& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
8842 {
8843 waitSemaphoreCount = waitSemaphoreCount_;
8844 return *this;
8845 }
8846
8847 PresentInfoKHR& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
8848 {
8849 pWaitSemaphores = pWaitSemaphores_;
8850 return *this;
8851 }
8852
8853 PresentInfoKHR& setSwapchainCount( uint32_t swapchainCount_ )
8854 {
8855 swapchainCount = swapchainCount_;
8856 return *this;
8857 }
8858
8859 PresentInfoKHR& setPSwapchains( const SwapchainKHR* pSwapchains_ )
8860 {
8861 pSwapchains = pSwapchains_;
8862 return *this;
8863 }
8864
8865 PresentInfoKHR& setPImageIndices( const uint32_t* pImageIndices_ )
8866 {
8867 pImageIndices = pImageIndices_;
8868 return *this;
8869 }
8870
8871 PresentInfoKHR& setPResults( Result* pResults_ )
8872 {
8873 pResults = pResults_;
8874 return *this;
8875 }
8876
8877 operator const VkPresentInfoKHR&() const
8878 {
8879 return *reinterpret_cast<const VkPresentInfoKHR*>(this);
8880 }
8881
8882 bool operator==( PresentInfoKHR const& rhs ) const
8883 {
8884 return ( sType == rhs.sType )
8885 && ( pNext == rhs.pNext )
8886 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
8887 && ( pWaitSemaphores == rhs.pWaitSemaphores )
8888 && ( swapchainCount == rhs.swapchainCount )
8889 && ( pSwapchains == rhs.pSwapchains )
8890 && ( pImageIndices == rhs.pImageIndices )
8891 && ( pResults == rhs.pResults );
8892 }
8893
8894 bool operator!=( PresentInfoKHR const& rhs ) const
8895 {
8896 return !operator==( rhs );
8897 }
8898
8899 private:
8900 StructureType sType;
8901
8902 public:
8903 const void* pNext;
8904 uint32_t waitSemaphoreCount;
8905 const Semaphore* pWaitSemaphores;
8906 uint32_t swapchainCount;
8907 const SwapchainKHR* pSwapchains;
8908 const uint32_t* pImageIndices;
8909 Result* pResults;
8910 };
8911 static_assert( sizeof( PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" );
8912
8913 enum class DynamicState
8914 {
8915 eViewport = VK_DYNAMIC_STATE_VIEWPORT,
8916 eScissor = VK_DYNAMIC_STATE_SCISSOR,
8917 eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH,
8918 eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS,
8919 eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS,
8920 eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS,
8921 eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
8922 eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
8923 eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE
8924 };
8925
8926 struct PipelineDynamicStateCreateInfo
8927 {
8928 PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateFlags flags_ = PipelineDynamicStateCreateFlags(), uint32_t dynamicStateCount_ = 0, const DynamicState* pDynamicStates_ = nullptr )
8929 : sType( StructureType::ePipelineDynamicStateCreateInfo )
8930 , pNext( nullptr )
8931 , flags( flags_ )
8932 , dynamicStateCount( dynamicStateCount_ )
8933 , pDynamicStates( pDynamicStates_ )
8934 {
8935 }
8936
8937 PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs )
8938 {
8939 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
8940 }
8941
8942 PipelineDynamicStateCreateInfo& operator=( VkPipelineDynamicStateCreateInfo const & rhs )
8943 {
8944 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
8945 return *this;
8946 }
8947
8948 PipelineDynamicStateCreateInfo& setSType( StructureType sType_ )
8949 {
8950 sType = sType_;
8951 return *this;
8952 }
8953
8954 PipelineDynamicStateCreateInfo& setPNext( const void* pNext_ )
8955 {
8956 pNext = pNext_;
8957 return *this;
8958 }
8959
8960 PipelineDynamicStateCreateInfo& setFlags( PipelineDynamicStateCreateFlags flags_ )
8961 {
8962 flags = flags_;
8963 return *this;
8964 }
8965
8966 PipelineDynamicStateCreateInfo& setDynamicStateCount( uint32_t dynamicStateCount_ )
8967 {
8968 dynamicStateCount = dynamicStateCount_;
8969 return *this;
8970 }
8971
8972 PipelineDynamicStateCreateInfo& setPDynamicStates( const DynamicState* pDynamicStates_ )
8973 {
8974 pDynamicStates = pDynamicStates_;
8975 return *this;
8976 }
8977
8978 operator const VkPipelineDynamicStateCreateInfo&() const
8979 {
8980 return *reinterpret_cast<const VkPipelineDynamicStateCreateInfo*>(this);
8981 }
8982
8983 bool operator==( PipelineDynamicStateCreateInfo const& rhs ) const
8984 {
8985 return ( sType == rhs.sType )
8986 && ( pNext == rhs.pNext )
8987 && ( flags == rhs.flags )
8988 && ( dynamicStateCount == rhs.dynamicStateCount )
8989 && ( pDynamicStates == rhs.pDynamicStates );
8990 }
8991
8992 bool operator!=( PipelineDynamicStateCreateInfo const& rhs ) const
8993 {
8994 return !operator==( rhs );
8995 }
8996
8997 private:
8998 StructureType sType;
8999
9000 public:
9001 const void* pNext;
9002 PipelineDynamicStateCreateFlags flags;
9003 uint32_t dynamicStateCount;
9004 const DynamicState* pDynamicStates;
9005 };
9006 static_assert( sizeof( PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ), "struct and wrapper have different size!" );
9007
9008 enum class QueueFlagBits
9009 {
9010 eGraphics = VK_QUEUE_GRAPHICS_BIT,
9011 eCompute = VK_QUEUE_COMPUTE_BIT,
9012 eTransfer = VK_QUEUE_TRANSFER_BIT,
9013 eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT
9014 };
9015
9016 using QueueFlags = Flags<QueueFlagBits, VkQueueFlags>;
9017
9018 inline QueueFlags operator|( QueueFlagBits bit0, QueueFlagBits bit1 )
9019 {
9020 return QueueFlags( bit0 ) | bit1;
9021 }
9022
9023 struct QueueFamilyProperties
9024 {
9025 operator const VkQueueFamilyProperties&() const
9026 {
9027 return *reinterpret_cast<const VkQueueFamilyProperties*>(this);
9028 }
9029
9030 bool operator==( QueueFamilyProperties const& rhs ) const
9031 {
9032 return ( queueFlags == rhs.queueFlags )
9033 && ( queueCount == rhs.queueCount )
9034 && ( timestampValidBits == rhs.timestampValidBits )
9035 && ( minImageTransferGranularity == rhs.minImageTransferGranularity );
9036 }
9037
9038 bool operator!=( QueueFamilyProperties const& rhs ) const
9039 {
9040 return !operator==( rhs );
9041 }
9042
9043 QueueFlags queueFlags;
9044 uint32_t queueCount;
9045 uint32_t timestampValidBits;
9046 Extent3D minImageTransferGranularity;
9047 };
9048 static_assert( sizeof( QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ), "struct and wrapper have different size!" );
9049
9050 enum class MemoryPropertyFlagBits
9051 {
9052 eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
9053 eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
9054 eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
9055 eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
9056 eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
9057 };
9058
9059 using MemoryPropertyFlags = Flags<MemoryPropertyFlagBits, VkMemoryPropertyFlags>;
9060
9061 inline MemoryPropertyFlags operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 )
9062 {
9063 return MemoryPropertyFlags( bit0 ) | bit1;
9064 }
9065
9066 struct MemoryType
9067 {
9068 operator const VkMemoryType&() const
9069 {
9070 return *reinterpret_cast<const VkMemoryType*>(this);
9071 }
9072
9073 bool operator==( MemoryType const& rhs ) const
9074 {
9075 return ( propertyFlags == rhs.propertyFlags )
9076 && ( heapIndex == rhs.heapIndex );
9077 }
9078
9079 bool operator!=( MemoryType const& rhs ) const
9080 {
9081 return !operator==( rhs );
9082 }
9083
9084 MemoryPropertyFlags propertyFlags;
9085 uint32_t heapIndex;
9086 };
9087 static_assert( sizeof( MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" );
9088
9089 enum class MemoryHeapFlagBits
9090 {
9091 eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
9092 };
9093
9094 using MemoryHeapFlags = Flags<MemoryHeapFlagBits, VkMemoryHeapFlags>;
9095
9096 inline MemoryHeapFlags operator|( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 )
9097 {
9098 return MemoryHeapFlags( bit0 ) | bit1;
9099 }
9100
9101 struct MemoryHeap
9102 {
9103 operator const VkMemoryHeap&() const
9104 {
9105 return *reinterpret_cast<const VkMemoryHeap*>(this);
9106 }
9107
9108 bool operator==( MemoryHeap const& rhs ) const
9109 {
9110 return ( size == rhs.size )
9111 && ( flags == rhs.flags );
9112 }
9113
9114 bool operator!=( MemoryHeap const& rhs ) const
9115 {
9116 return !operator==( rhs );
9117 }
9118
9119 DeviceSize size;
9120 MemoryHeapFlags flags;
9121 };
9122 static_assert( sizeof( MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" );
9123
9124 struct PhysicalDeviceMemoryProperties
9125 {
9126 operator const VkPhysicalDeviceMemoryProperties&() const
9127 {
9128 return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties*>(this);
9129 }
9130
9131 bool operator==( PhysicalDeviceMemoryProperties const& rhs ) const
9132 {
9133 return ( memoryTypeCount == rhs.memoryTypeCount )
9134 && ( memcmp( memoryTypes, rhs.memoryTypes, VK_MAX_MEMORY_TYPES * sizeof( MemoryType ) ) == 0 )
9135 && ( memoryHeapCount == rhs.memoryHeapCount )
9136 && ( memcmp( memoryHeaps, rhs.memoryHeaps, VK_MAX_MEMORY_HEAPS * sizeof( MemoryHeap ) ) == 0 );
9137 }
9138
9139 bool operator!=( PhysicalDeviceMemoryProperties const& rhs ) const
9140 {
9141 return !operator==( rhs );
9142 }
9143
9144 uint32_t memoryTypeCount;
9145 MemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
9146 uint32_t memoryHeapCount;
9147 MemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
9148 };
9149 static_assert( sizeof( PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ), "struct and wrapper have different size!" );
9150
9151 enum class AccessFlagBits
9152 {
9153 eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
9154 eIndexRead = VK_ACCESS_INDEX_READ_BIT,
9155 eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
9156 eUniformRead = VK_ACCESS_UNIFORM_READ_BIT,
9157 eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
9158 eShaderRead = VK_ACCESS_SHADER_READ_BIT,
9159 eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT,
9160 eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
9161 eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
9162 eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
9163 eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
9164 eTransferRead = VK_ACCESS_TRANSFER_READ_BIT,
9165 eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT,
9166 eHostRead = VK_ACCESS_HOST_READ_BIT,
9167 eHostWrite = VK_ACCESS_HOST_WRITE_BIT,
9168 eMemoryRead = VK_ACCESS_MEMORY_READ_BIT,
9169 eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT
9170 };
9171
9172 using AccessFlags = Flags<AccessFlagBits, VkAccessFlags>;
9173
9174 inline AccessFlags operator|( AccessFlagBits bit0, AccessFlagBits bit1 )
9175 {
9176 return AccessFlags( bit0 ) | bit1;
9177 }
9178
9179 struct MemoryBarrier
9180 {
9181 MemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags() )
9182 : sType( StructureType::eMemoryBarrier )
9183 , pNext( nullptr )
9184 , srcAccessMask( srcAccessMask_ )
9185 , dstAccessMask( dstAccessMask_ )
9186 {
9187 }
9188
9189 MemoryBarrier( VkMemoryBarrier const & rhs )
9190 {
9191 memcpy( this, &rhs, sizeof(MemoryBarrier) );
9192 }
9193
9194 MemoryBarrier& operator=( VkMemoryBarrier const & rhs )
9195 {
9196 memcpy( this, &rhs, sizeof(MemoryBarrier) );
9197 return *this;
9198 }
9199
9200 MemoryBarrier& setSType( StructureType sType_ )
9201 {
9202 sType = sType_;
9203 return *this;
9204 }
9205
9206 MemoryBarrier& setPNext( const void* pNext_ )
9207 {
9208 pNext = pNext_;
9209 return *this;
9210 }
9211
9212 MemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9213 {
9214 srcAccessMask = srcAccessMask_;
9215 return *this;
9216 }
9217
9218 MemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9219 {
9220 dstAccessMask = dstAccessMask_;
9221 return *this;
9222 }
9223
9224 operator const VkMemoryBarrier&() const
9225 {
9226 return *reinterpret_cast<const VkMemoryBarrier*>(this);
9227 }
9228
9229 bool operator==( MemoryBarrier const& rhs ) const
9230 {
9231 return ( sType == rhs.sType )
9232 && ( pNext == rhs.pNext )
9233 && ( srcAccessMask == rhs.srcAccessMask )
9234 && ( dstAccessMask == rhs.dstAccessMask );
9235 }
9236
9237 bool operator!=( MemoryBarrier const& rhs ) const
9238 {
9239 return !operator==( rhs );
9240 }
9241
9242 private:
9243 StructureType sType;
9244
9245 public:
9246 const void* pNext;
9247 AccessFlags srcAccessMask;
9248 AccessFlags dstAccessMask;
9249 };
9250 static_assert( sizeof( MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" );
9251
9252 struct BufferMemoryBarrier
9253 {
9254 BufferMemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), uint32_t srcQueueFamilyIndex_ = 0, uint32_t dstQueueFamilyIndex_ = 0, Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
9255 : sType( StructureType::eBufferMemoryBarrier )
9256 , pNext( nullptr )
9257 , srcAccessMask( srcAccessMask_ )
9258 , dstAccessMask( dstAccessMask_ )
9259 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
9260 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
9261 , buffer( buffer_ )
9262 , offset( offset_ )
9263 , size( size_ )
9264 {
9265 }
9266
9267 BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs )
9268 {
9269 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9270 }
9271
9272 BufferMemoryBarrier& operator=( VkBufferMemoryBarrier const & rhs )
9273 {
9274 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9275 return *this;
9276 }
9277
9278 BufferMemoryBarrier& setSType( StructureType sType_ )
9279 {
9280 sType = sType_;
9281 return *this;
9282 }
9283
9284 BufferMemoryBarrier& setPNext( const void* pNext_ )
9285 {
9286 pNext = pNext_;
9287 return *this;
9288 }
9289
9290 BufferMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9291 {
9292 srcAccessMask = srcAccessMask_;
9293 return *this;
9294 }
9295
9296 BufferMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9297 {
9298 dstAccessMask = dstAccessMask_;
9299 return *this;
9300 }
9301
9302 BufferMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
9303 {
9304 srcQueueFamilyIndex = srcQueueFamilyIndex_;
9305 return *this;
9306 }
9307
9308 BufferMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
9309 {
9310 dstQueueFamilyIndex = dstQueueFamilyIndex_;
9311 return *this;
9312 }
9313
9314 BufferMemoryBarrier& setBuffer( Buffer buffer_ )
9315 {
9316 buffer = buffer_;
9317 return *this;
9318 }
9319
9320 BufferMemoryBarrier& setOffset( DeviceSize offset_ )
9321 {
9322 offset = offset_;
9323 return *this;
9324 }
9325
9326 BufferMemoryBarrier& setSize( DeviceSize size_ )
9327 {
9328 size = size_;
9329 return *this;
9330 }
9331
9332 operator const VkBufferMemoryBarrier&() const
9333 {
9334 return *reinterpret_cast<const VkBufferMemoryBarrier*>(this);
9335 }
9336
9337 bool operator==( BufferMemoryBarrier const& rhs ) const
9338 {
9339 return ( sType == rhs.sType )
9340 && ( pNext == rhs.pNext )
9341 && ( srcAccessMask == rhs.srcAccessMask )
9342 && ( dstAccessMask == rhs.dstAccessMask )
9343 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
9344 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
9345 && ( buffer == rhs.buffer )
9346 && ( offset == rhs.offset )
9347 && ( size == rhs.size );
9348 }
9349
9350 bool operator!=( BufferMemoryBarrier const& rhs ) const
9351 {
9352 return !operator==( rhs );
9353 }
9354
9355 private:
9356 StructureType sType;
9357
9358 public:
9359 const void* pNext;
9360 AccessFlags srcAccessMask;
9361 AccessFlags dstAccessMask;
9362 uint32_t srcQueueFamilyIndex;
9363 uint32_t dstQueueFamilyIndex;
9364 Buffer buffer;
9365 DeviceSize offset;
9366 DeviceSize size;
9367 };
9368 static_assert( sizeof( BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ), "struct and wrapper have different size!" );
9369
9370 enum class BufferUsageFlagBits
9371 {
9372 eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
9373 eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
9374 eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,
9375 eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,
9376 eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
9377 eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
9378 eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
9379 eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
9380 eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
9381 };
9382
9383 using BufferUsageFlags = Flags<BufferUsageFlagBits, VkBufferUsageFlags>;
9384
9385 inline BufferUsageFlags operator|( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 )
9386 {
9387 return BufferUsageFlags( bit0 ) | bit1;
9388 }
9389
9390 enum class BufferCreateFlagBits
9391 {
9392 eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
9393 eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
9394 eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
9395 };
9396
9397 using BufferCreateFlags = Flags<BufferCreateFlagBits, VkBufferCreateFlags>;
9398
9399 inline BufferCreateFlags operator|( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 )
9400 {
9401 return BufferCreateFlags( bit0 ) | bit1;
9402 }
9403
9404 struct BufferCreateInfo
9405 {
9406 BufferCreateInfo( BufferCreateFlags flags_ = BufferCreateFlags(), DeviceSize size_ = 0, BufferUsageFlags usage_ = BufferUsageFlags(), SharingMode sharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr )
9407 : sType( StructureType::eBufferCreateInfo )
9408 , pNext( nullptr )
9409 , flags( flags_ )
9410 , size( size_ )
9411 , usage( usage_ )
9412 , sharingMode( sharingMode_ )
9413 , queueFamilyIndexCount( queueFamilyIndexCount_ )
9414 , pQueueFamilyIndices( pQueueFamilyIndices_ )
9415 {
9416 }
9417
9418 BufferCreateInfo( VkBufferCreateInfo const & rhs )
9419 {
9420 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9421 }
9422
9423 BufferCreateInfo& operator=( VkBufferCreateInfo const & rhs )
9424 {
9425 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9426 return *this;
9427 }
9428
9429 BufferCreateInfo& setSType( StructureType sType_ )
9430 {
9431 sType = sType_;
9432 return *this;
9433 }
9434
9435 BufferCreateInfo& setPNext( const void* pNext_ )
9436 {
9437 pNext = pNext_;
9438 return *this;
9439 }
9440
9441 BufferCreateInfo& setFlags( BufferCreateFlags flags_ )
9442 {
9443 flags = flags_;
9444 return *this;
9445 }
9446
9447 BufferCreateInfo& setSize( DeviceSize size_ )
9448 {
9449 size = size_;
9450 return *this;
9451 }
9452
9453 BufferCreateInfo& setUsage( BufferUsageFlags usage_ )
9454 {
9455 usage = usage_;
9456 return *this;
9457 }
9458
9459 BufferCreateInfo& setSharingMode( SharingMode sharingMode_ )
9460 {
9461 sharingMode = sharingMode_;
9462 return *this;
9463 }
9464
9465 BufferCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
9466 {
9467 queueFamilyIndexCount = queueFamilyIndexCount_;
9468 return *this;
9469 }
9470
9471 BufferCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
9472 {
9473 pQueueFamilyIndices = pQueueFamilyIndices_;
9474 return *this;
9475 }
9476
9477 operator const VkBufferCreateInfo&() const
9478 {
9479 return *reinterpret_cast<const VkBufferCreateInfo*>(this);
9480 }
9481
9482 bool operator==( BufferCreateInfo const& rhs ) const
9483 {
9484 return ( sType == rhs.sType )
9485 && ( pNext == rhs.pNext )
9486 && ( flags == rhs.flags )
9487 && ( size == rhs.size )
9488 && ( usage == rhs.usage )
9489 && ( sharingMode == rhs.sharingMode )
9490 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
9491 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
9492 }
9493
9494 bool operator!=( BufferCreateInfo const& rhs ) const
9495 {
9496 return !operator==( rhs );
9497 }
9498
9499 private:
9500 StructureType sType;
9501
9502 public:
9503 const void* pNext;
9504 BufferCreateFlags flags;
9505 DeviceSize size;
9506 BufferUsageFlags usage;
9507 SharingMode sharingMode;
9508 uint32_t queueFamilyIndexCount;
9509 const uint32_t* pQueueFamilyIndices;
9510 };
9511 static_assert( sizeof( BufferCreateInfo ) == sizeof( VkBufferCreateInfo ), "struct and wrapper have different size!" );
9512
9513 enum class ShaderStageFlagBits
9514 {
9515 eVertex = VK_SHADER_STAGE_VERTEX_BIT,
9516 eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
9517 eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
9518 eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT,
9519 eFragment = VK_SHADER_STAGE_FRAGMENT_BIT,
9520 eCompute = VK_SHADER_STAGE_COMPUTE_BIT,
9521 eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS,
9522 eAll = VK_SHADER_STAGE_ALL
9523 };
9524
9525 using ShaderStageFlags = Flags<ShaderStageFlagBits, VkShaderStageFlags>;
9526
9527 inline ShaderStageFlags operator|( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 )
9528 {
9529 return ShaderStageFlags( bit0 ) | bit1;
9530 }
9531
9532 struct DescriptorSetLayoutBinding
9533 {
9534 DescriptorSetLayoutBinding( uint32_t binding_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0, ShaderStageFlags stageFlags_ = ShaderStageFlags(), const Sampler* pImmutableSamplers_ = nullptr )
9535 : binding( binding_ )
9536 , descriptorType( descriptorType_ )
9537 , descriptorCount( descriptorCount_ )
9538 , stageFlags( stageFlags_ )
9539 , pImmutableSamplers( pImmutableSamplers_ )
9540 {
9541 }
9542
9543 DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs )
9544 {
9545 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9546 }
9547
9548 DescriptorSetLayoutBinding& operator=( VkDescriptorSetLayoutBinding const & rhs )
9549 {
9550 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9551 return *this;
9552 }
9553
9554 DescriptorSetLayoutBinding& setBinding( uint32_t binding_ )
9555 {
9556 binding = binding_;
9557 return *this;
9558 }
9559
9560 DescriptorSetLayoutBinding& setDescriptorType( DescriptorType descriptorType_ )
9561 {
9562 descriptorType = descriptorType_;
9563 return *this;
9564 }
9565
9566 DescriptorSetLayoutBinding& setDescriptorCount( uint32_t descriptorCount_ )
9567 {
9568 descriptorCount = descriptorCount_;
9569 return *this;
9570 }
9571
9572 DescriptorSetLayoutBinding& setStageFlags( ShaderStageFlags stageFlags_ )
9573 {
9574 stageFlags = stageFlags_;
9575 return *this;
9576 }
9577
9578 DescriptorSetLayoutBinding& setPImmutableSamplers( const Sampler* pImmutableSamplers_ )
9579 {
9580 pImmutableSamplers = pImmutableSamplers_;
9581 return *this;
9582 }
9583
9584 operator const VkDescriptorSetLayoutBinding&() const
9585 {
9586 return *reinterpret_cast<const VkDescriptorSetLayoutBinding*>(this);
9587 }
9588
9589 bool operator==( DescriptorSetLayoutBinding const& rhs ) const
9590 {
9591 return ( binding == rhs.binding )
9592 && ( descriptorType == rhs.descriptorType )
9593 && ( descriptorCount == rhs.descriptorCount )
9594 && ( stageFlags == rhs.stageFlags )
9595 && ( pImmutableSamplers == rhs.pImmutableSamplers );
9596 }
9597
9598 bool operator!=( DescriptorSetLayoutBinding const& rhs ) const
9599 {
9600 return !operator==( rhs );
9601 }
9602
9603 uint32_t binding;
9604 DescriptorType descriptorType;
9605 uint32_t descriptorCount;
9606 ShaderStageFlags stageFlags;
9607 const Sampler* pImmutableSamplers;
9608 };
9609 static_assert( sizeof( DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ), "struct and wrapper have different size!" );
9610
9611 struct DescriptorSetLayoutCreateInfo
9612 {
9613 DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateFlags flags_ = DescriptorSetLayoutCreateFlags(), uint32_t bindingCount_ = 0, const DescriptorSetLayoutBinding* pBindings_ = nullptr )
9614 : sType( StructureType::eDescriptorSetLayoutCreateInfo )
9615 , pNext( nullptr )
9616 , flags( flags_ )
9617 , bindingCount( bindingCount_ )
9618 , pBindings( pBindings_ )
9619 {
9620 }
9621
9622 DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs )
9623 {
9624 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9625 }
9626
9627 DescriptorSetLayoutCreateInfo& operator=( VkDescriptorSetLayoutCreateInfo const & rhs )
9628 {
9629 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9630 return *this;
9631 }
9632
9633 DescriptorSetLayoutCreateInfo& setSType( StructureType sType_ )
9634 {
9635 sType = sType_;
9636 return *this;
9637 }
9638
9639 DescriptorSetLayoutCreateInfo& setPNext( const void* pNext_ )
9640 {
9641 pNext = pNext_;
9642 return *this;
9643 }
9644
9645 DescriptorSetLayoutCreateInfo& setFlags( DescriptorSetLayoutCreateFlags flags_ )
9646 {
9647 flags = flags_;
9648 return *this;
9649 }
9650
9651 DescriptorSetLayoutCreateInfo& setBindingCount( uint32_t bindingCount_ )
9652 {
9653 bindingCount = bindingCount_;
9654 return *this;
9655 }
9656
9657 DescriptorSetLayoutCreateInfo& setPBindings( const DescriptorSetLayoutBinding* pBindings_ )
9658 {
9659 pBindings = pBindings_;
9660 return *this;
9661 }
9662
9663 operator const VkDescriptorSetLayoutCreateInfo&() const
9664 {
9665 return *reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>(this);
9666 }
9667
9668 bool operator==( DescriptorSetLayoutCreateInfo const& rhs ) const
9669 {
9670 return ( sType == rhs.sType )
9671 && ( pNext == rhs.pNext )
9672 && ( flags == rhs.flags )
9673 && ( bindingCount == rhs.bindingCount )
9674 && ( pBindings == rhs.pBindings );
9675 }
9676
9677 bool operator!=( DescriptorSetLayoutCreateInfo const& rhs ) const
9678 {
9679 return !operator==( rhs );
9680 }
9681
9682 private:
9683 StructureType sType;
9684
9685 public:
9686 const void* pNext;
9687 DescriptorSetLayoutCreateFlags flags;
9688 uint32_t bindingCount;
9689 const DescriptorSetLayoutBinding* pBindings;
9690 };
9691 static_assert( sizeof( DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ), "struct and wrapper have different size!" );
9692
9693 struct PipelineShaderStageCreateInfo
9694 {
9695 PipelineShaderStageCreateInfo( PipelineShaderStageCreateFlags flags_ = PipelineShaderStageCreateFlags(), ShaderStageFlagBits stage_ = ShaderStageFlagBits::eVertex, ShaderModule module_ = ShaderModule(), const char* pName_ = nullptr, const SpecializationInfo* pSpecializationInfo_ = nullptr )
9696 : sType( StructureType::ePipelineShaderStageCreateInfo )
9697 , pNext( nullptr )
9698 , flags( flags_ )
9699 , stage( stage_ )
9700 , module( module_ )
9701 , pName( pName_ )
9702 , pSpecializationInfo( pSpecializationInfo_ )
9703 {
9704 }
9705
9706 PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs )
9707 {
9708 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9709 }
9710
9711 PipelineShaderStageCreateInfo& operator=( VkPipelineShaderStageCreateInfo const & rhs )
9712 {
9713 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9714 return *this;
9715 }
9716
9717 PipelineShaderStageCreateInfo& setSType( StructureType sType_ )
9718 {
9719 sType = sType_;
9720 return *this;
9721 }
9722
9723 PipelineShaderStageCreateInfo& setPNext( const void* pNext_ )
9724 {
9725 pNext = pNext_;
9726 return *this;
9727 }
9728
9729 PipelineShaderStageCreateInfo& setFlags( PipelineShaderStageCreateFlags flags_ )
9730 {
9731 flags = flags_;
9732 return *this;
9733 }
9734
9735 PipelineShaderStageCreateInfo& setStage( ShaderStageFlagBits stage_ )
9736 {
9737 stage = stage_;
9738 return *this;
9739 }
9740
9741 PipelineShaderStageCreateInfo& setModule( ShaderModule module_ )
9742 {
9743 module = module_;
9744 return *this;
9745 }
9746
9747 PipelineShaderStageCreateInfo& setPName( const char* pName_ )
9748 {
9749 pName = pName_;
9750 return *this;
9751 }
9752
9753 PipelineShaderStageCreateInfo& setPSpecializationInfo( const SpecializationInfo* pSpecializationInfo_ )
9754 {
9755 pSpecializationInfo = pSpecializationInfo_;
9756 return *this;
9757 }
9758
9759 operator const VkPipelineShaderStageCreateInfo&() const
9760 {
9761 return *reinterpret_cast<const VkPipelineShaderStageCreateInfo*>(this);
9762 }
9763
9764 bool operator==( PipelineShaderStageCreateInfo const& rhs ) const
9765 {
9766 return ( sType == rhs.sType )
9767 && ( pNext == rhs.pNext )
9768 && ( flags == rhs.flags )
9769 && ( stage == rhs.stage )
9770 && ( module == rhs.module )
9771 && ( pName == rhs.pName )
9772 && ( pSpecializationInfo == rhs.pSpecializationInfo );
9773 }
9774
9775 bool operator!=( PipelineShaderStageCreateInfo const& rhs ) const
9776 {
9777 return !operator==( rhs );
9778 }
9779
9780 private:
9781 StructureType sType;
9782
9783 public:
9784 const void* pNext;
9785 PipelineShaderStageCreateFlags flags;
9786 ShaderStageFlagBits stage;
9787 ShaderModule module;
9788 const char* pName;
9789 const SpecializationInfo* pSpecializationInfo;
9790 };
9791 static_assert( sizeof( PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ), "struct and wrapper have different size!" );
9792
9793 struct PushConstantRange
9794 {
9795 PushConstantRange( ShaderStageFlags stageFlags_ = ShaderStageFlags(), uint32_t offset_ = 0, uint32_t size_ = 0 )
9796 : stageFlags( stageFlags_ )
9797 , offset( offset_ )
9798 , size( size_ )
9799 {
9800 }
9801
9802 PushConstantRange( VkPushConstantRange const & rhs )
9803 {
9804 memcpy( this, &rhs, sizeof(PushConstantRange) );
9805 }
9806
9807 PushConstantRange& operator=( VkPushConstantRange const & rhs )
9808 {
9809 memcpy( this, &rhs, sizeof(PushConstantRange) );
9810 return *this;
9811 }
9812
9813 PushConstantRange& setStageFlags( ShaderStageFlags stageFlags_ )
9814 {
9815 stageFlags = stageFlags_;
9816 return *this;
9817 }
9818
9819 PushConstantRange& setOffset( uint32_t offset_ )
9820 {
9821 offset = offset_;
9822 return *this;
9823 }
9824
9825 PushConstantRange& setSize( uint32_t size_ )
9826 {
9827 size = size_;
9828 return *this;
9829 }
9830
9831 operator const VkPushConstantRange&() const
9832 {
9833 return *reinterpret_cast<const VkPushConstantRange*>(this);
9834 }
9835
9836 bool operator==( PushConstantRange const& rhs ) const
9837 {
9838 return ( stageFlags == rhs.stageFlags )
9839 && ( offset == rhs.offset )
9840 && ( size == rhs.size );
9841 }
9842
9843 bool operator!=( PushConstantRange const& rhs ) const
9844 {
9845 return !operator==( rhs );
9846 }
9847
9848 ShaderStageFlags stageFlags;
9849 uint32_t offset;
9850 uint32_t size;
9851 };
9852 static_assert( sizeof( PushConstantRange ) == sizeof( VkPushConstantRange ), "struct and wrapper have different size!" );
9853
9854 struct PipelineLayoutCreateInfo
9855 {
9856 PipelineLayoutCreateInfo( PipelineLayoutCreateFlags flags_ = PipelineLayoutCreateFlags(), uint32_t setLayoutCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr, uint32_t pushConstantRangeCount_ = 0, const PushConstantRange* pPushConstantRanges_ = nullptr )
9857 : sType( StructureType::ePipelineLayoutCreateInfo )
9858 , pNext( nullptr )
9859 , flags( flags_ )
9860 , setLayoutCount( setLayoutCount_ )
9861 , pSetLayouts( pSetLayouts_ )
9862 , pushConstantRangeCount( pushConstantRangeCount_ )
9863 , pPushConstantRanges( pPushConstantRanges_ )
9864 {
9865 }
9866
9867 PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs )
9868 {
9869 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
9870 }
9871
9872 PipelineLayoutCreateInfo& operator=( VkPipelineLayoutCreateInfo const & rhs )
9873 {
9874 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
9875 return *this;
9876 }
9877
9878 PipelineLayoutCreateInfo& setSType( StructureType sType_ )
9879 {
9880 sType = sType_;
9881 return *this;
9882 }
9883
9884 PipelineLayoutCreateInfo& setPNext( const void* pNext_ )
9885 {
9886 pNext = pNext_;
9887 return *this;
9888 }
9889
9890 PipelineLayoutCreateInfo& setFlags( PipelineLayoutCreateFlags flags_ )
9891 {
9892 flags = flags_;
9893 return *this;
9894 }
9895
9896 PipelineLayoutCreateInfo& setSetLayoutCount( uint32_t setLayoutCount_ )
9897 {
9898 setLayoutCount = setLayoutCount_;
9899 return *this;
9900 }
9901
9902 PipelineLayoutCreateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
9903 {
9904 pSetLayouts = pSetLayouts_;
9905 return *this;
9906 }
9907
9908 PipelineLayoutCreateInfo& setPushConstantRangeCount( uint32_t pushConstantRangeCount_ )
9909 {
9910 pushConstantRangeCount = pushConstantRangeCount_;
9911 return *this;
9912 }
9913
9914 PipelineLayoutCreateInfo& setPPushConstantRanges( const PushConstantRange* pPushConstantRanges_ )
9915 {
9916 pPushConstantRanges = pPushConstantRanges_;
9917 return *this;
9918 }
9919
9920 operator const VkPipelineLayoutCreateInfo&() const
9921 {
9922 return *reinterpret_cast<const VkPipelineLayoutCreateInfo*>(this);
9923 }
9924
9925 bool operator==( PipelineLayoutCreateInfo const& rhs ) const
9926 {
9927 return ( sType == rhs.sType )
9928 && ( pNext == rhs.pNext )
9929 && ( flags == rhs.flags )
9930 && ( setLayoutCount == rhs.setLayoutCount )
9931 && ( pSetLayouts == rhs.pSetLayouts )
9932 && ( pushConstantRangeCount == rhs.pushConstantRangeCount )
9933 && ( pPushConstantRanges == rhs.pPushConstantRanges );
9934 }
9935
9936 bool operator!=( PipelineLayoutCreateInfo const& rhs ) const
9937 {
9938 return !operator==( rhs );
9939 }
9940
9941 private:
9942 StructureType sType;
9943
9944 public:
9945 const void* pNext;
9946 PipelineLayoutCreateFlags flags;
9947 uint32_t setLayoutCount;
9948 const DescriptorSetLayout* pSetLayouts;
9949 uint32_t pushConstantRangeCount;
9950 const PushConstantRange* pPushConstantRanges;
9951 };
9952 static_assert( sizeof( PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ), "struct and wrapper have different size!" );
9953
9954 enum class ImageUsageFlagBits
9955 {
9956 eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
9957 eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT,
9958 eSampled = VK_IMAGE_USAGE_SAMPLED_BIT,
9959 eStorage = VK_IMAGE_USAGE_STORAGE_BIT,
9960 eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
9961 eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
9962 eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
9963 eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
9964 };
9965
9966 using ImageUsageFlags = Flags<ImageUsageFlagBits, VkImageUsageFlags>;
9967
9968 inline ImageUsageFlags operator|( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 )
9969 {
9970 return ImageUsageFlags( bit0 ) | bit1;
9971 }
9972
9973 enum class ImageCreateFlagBits
9974 {
9975 eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
9976 eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
9977 eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,
9978 eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
9979 eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
9980 };
9981
9982 using ImageCreateFlags = Flags<ImageCreateFlagBits, VkImageCreateFlags>;
9983
9984 inline ImageCreateFlags operator|( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 )
9985 {
9986 return ImageCreateFlags( bit0 ) | bit1;
9987 }
9988
9989 enum class PipelineCreateFlagBits
9990 {
9991 eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
9992 eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
9993 eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT
9994 };
9995
9996 using PipelineCreateFlags = Flags<PipelineCreateFlagBits, VkPipelineCreateFlags>;
9997
9998 inline PipelineCreateFlags operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 )
9999 {
10000 return PipelineCreateFlags( bit0 ) | bit1;
10001 }
10002
10003 struct ComputePipelineCreateInfo
10004 {
10005 ComputePipelineCreateInfo( PipelineCreateFlags flags_ = PipelineCreateFlags(), PipelineShaderStageCreateInfo stage_ = PipelineShaderStageCreateInfo(), PipelineLayout layout_ = PipelineLayout(), Pipeline basePipelineHandle_ = Pipeline(), int32_t basePipelineIndex_ = 0 )
10006 : sType( StructureType::eComputePipelineCreateInfo )
10007 , pNext( nullptr )
10008 , flags( flags_ )
10009 , stage( stage_ )
10010 , layout( layout_ )
10011 , basePipelineHandle( basePipelineHandle_ )
10012 , basePipelineIndex( basePipelineIndex_ )
10013 {
10014 }
10015
10016 ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs )
10017 {
10018 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10019 }
10020
10021 ComputePipelineCreateInfo& operator=( VkComputePipelineCreateInfo const & rhs )
10022 {
10023 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10024 return *this;
10025 }
10026
10027 ComputePipelineCreateInfo& setSType( StructureType sType_ )
10028 {
10029 sType = sType_;
10030 return *this;
10031 }
10032
10033 ComputePipelineCreateInfo& setPNext( const void* pNext_ )
10034 {
10035 pNext = pNext_;
10036 return *this;
10037 }
10038
10039 ComputePipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
10040 {
10041 flags = flags_;
10042 return *this;
10043 }
10044
10045 ComputePipelineCreateInfo& setStage( PipelineShaderStageCreateInfo stage_ )
10046 {
10047 stage = stage_;
10048 return *this;
10049 }
10050
10051 ComputePipelineCreateInfo& setLayout( PipelineLayout layout_ )
10052 {
10053 layout = layout_;
10054 return *this;
10055 }
10056
10057 ComputePipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
10058 {
10059 basePipelineHandle = basePipelineHandle_;
10060 return *this;
10061 }
10062
10063 ComputePipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
10064 {
10065 basePipelineIndex = basePipelineIndex_;
10066 return *this;
10067 }
10068
10069 operator const VkComputePipelineCreateInfo&() const
10070 {
10071 return *reinterpret_cast<const VkComputePipelineCreateInfo*>(this);
10072 }
10073
10074 bool operator==( ComputePipelineCreateInfo const& rhs ) const
10075 {
10076 return ( sType == rhs.sType )
10077 && ( pNext == rhs.pNext )
10078 && ( flags == rhs.flags )
10079 && ( stage == rhs.stage )
10080 && ( layout == rhs.layout )
10081 && ( basePipelineHandle == rhs.basePipelineHandle )
10082 && ( basePipelineIndex == rhs.basePipelineIndex );
10083 }
10084
10085 bool operator!=( ComputePipelineCreateInfo const& rhs ) const
10086 {
10087 return !operator==( rhs );
10088 }
10089
10090 private:
10091 StructureType sType;
10092
10093 public:
10094 const void* pNext;
10095 PipelineCreateFlags flags;
10096 PipelineShaderStageCreateInfo stage;
10097 PipelineLayout layout;
10098 Pipeline basePipelineHandle;
10099 int32_t basePipelineIndex;
10100 };
10101 static_assert( sizeof( ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ), "struct and wrapper have different size!" );
10102
10103 enum class ColorComponentFlagBits
10104 {
10105 eR = VK_COLOR_COMPONENT_R_BIT,
10106 eG = VK_COLOR_COMPONENT_G_BIT,
10107 eB = VK_COLOR_COMPONENT_B_BIT,
10108 eA = VK_COLOR_COMPONENT_A_BIT
10109 };
10110
10111 using ColorComponentFlags = Flags<ColorComponentFlagBits, VkColorComponentFlags>;
10112
10113 inline ColorComponentFlags operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 )
10114 {
10115 return ColorComponentFlags( bit0 ) | bit1;
10116 }
10117
10118 struct PipelineColorBlendAttachmentState
10119 {
10120 PipelineColorBlendAttachmentState( Bool32 blendEnable_ = 0, BlendFactor srcColorBlendFactor_ = BlendFactor::eZero, BlendFactor dstColorBlendFactor_ = BlendFactor::eZero, BlendOp colorBlendOp_ = BlendOp::eAdd, BlendFactor srcAlphaBlendFactor_ = BlendFactor::eZero, BlendFactor dstAlphaBlendFactor_ = BlendFactor::eZero, BlendOp alphaBlendOp_ = BlendOp::eAdd, ColorComponentFlags colorWriteMask_ = ColorComponentFlags() )
10121 : blendEnable( blendEnable_ )
10122 , srcColorBlendFactor( srcColorBlendFactor_ )
10123 , dstColorBlendFactor( dstColorBlendFactor_ )
10124 , colorBlendOp( colorBlendOp_ )
10125 , srcAlphaBlendFactor( srcAlphaBlendFactor_ )
10126 , dstAlphaBlendFactor( dstAlphaBlendFactor_ )
10127 , alphaBlendOp( alphaBlendOp_ )
10128 , colorWriteMask( colorWriteMask_ )
10129 {
10130 }
10131
10132 PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs )
10133 {
10134 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10135 }
10136
10137 PipelineColorBlendAttachmentState& operator=( VkPipelineColorBlendAttachmentState const & rhs )
10138 {
10139 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10140 return *this;
10141 }
10142
10143 PipelineColorBlendAttachmentState& setBlendEnable( Bool32 blendEnable_ )
10144 {
10145 blendEnable = blendEnable_;
10146 return *this;
10147 }
10148
10149 PipelineColorBlendAttachmentState& setSrcColorBlendFactor( BlendFactor srcColorBlendFactor_ )
10150 {
10151 srcColorBlendFactor = srcColorBlendFactor_;
10152 return *this;
10153 }
10154
10155 PipelineColorBlendAttachmentState& setDstColorBlendFactor( BlendFactor dstColorBlendFactor_ )
10156 {
10157 dstColorBlendFactor = dstColorBlendFactor_;
10158 return *this;
10159 }
10160
10161 PipelineColorBlendAttachmentState& setColorBlendOp( BlendOp colorBlendOp_ )
10162 {
10163 colorBlendOp = colorBlendOp_;
10164 return *this;
10165 }
10166
10167 PipelineColorBlendAttachmentState& setSrcAlphaBlendFactor( BlendFactor srcAlphaBlendFactor_ )
10168 {
10169 srcAlphaBlendFactor = srcAlphaBlendFactor_;
10170 return *this;
10171 }
10172
10173 PipelineColorBlendAttachmentState& setDstAlphaBlendFactor( BlendFactor dstAlphaBlendFactor_ )
10174 {
10175 dstAlphaBlendFactor = dstAlphaBlendFactor_;
10176 return *this;
10177 }
10178
10179 PipelineColorBlendAttachmentState& setAlphaBlendOp( BlendOp alphaBlendOp_ )
10180 {
10181 alphaBlendOp = alphaBlendOp_;
10182 return *this;
10183 }
10184
10185 PipelineColorBlendAttachmentState& setColorWriteMask( ColorComponentFlags colorWriteMask_ )
10186 {
10187 colorWriteMask = colorWriteMask_;
10188 return *this;
10189 }
10190
10191 operator const VkPipelineColorBlendAttachmentState&() const
10192 {
10193 return *reinterpret_cast<const VkPipelineColorBlendAttachmentState*>(this);
10194 }
10195
10196 bool operator==( PipelineColorBlendAttachmentState const& rhs ) const
10197 {
10198 return ( blendEnable == rhs.blendEnable )
10199 && ( srcColorBlendFactor == rhs.srcColorBlendFactor )
10200 && ( dstColorBlendFactor == rhs.dstColorBlendFactor )
10201 && ( colorBlendOp == rhs.colorBlendOp )
10202 && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor )
10203 && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor )
10204 && ( alphaBlendOp == rhs.alphaBlendOp )
10205 && ( colorWriteMask == rhs.colorWriteMask );
10206 }
10207
10208 bool operator!=( PipelineColorBlendAttachmentState const& rhs ) const
10209 {
10210 return !operator==( rhs );
10211 }
10212
10213 Bool32 blendEnable;
10214 BlendFactor srcColorBlendFactor;
10215 BlendFactor dstColorBlendFactor;
10216 BlendOp colorBlendOp;
10217 BlendFactor srcAlphaBlendFactor;
10218 BlendFactor dstAlphaBlendFactor;
10219 BlendOp alphaBlendOp;
10220 ColorComponentFlags colorWriteMask;
10221 };
10222 static_assert( sizeof( PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ), "struct and wrapper have different size!" );
10223
10224 struct PipelineColorBlendStateCreateInfo
10225 {
10226 PipelineColorBlendStateCreateInfo( PipelineColorBlendStateCreateFlags flags_ = PipelineColorBlendStateCreateFlags(), Bool32 logicOpEnable_ = 0, LogicOp logicOp_ = LogicOp::eClear, uint32_t attachmentCount_ = 0, const PipelineColorBlendAttachmentState* pAttachments_ = nullptr, std::array<float,4> const& blendConstants_ = { { 0, 0, 0, 0 } } )
10227 : sType( StructureType::ePipelineColorBlendStateCreateInfo )
10228 , pNext( nullptr )
10229 , flags( flags_ )
10230 , logicOpEnable( logicOpEnable_ )
10231 , logicOp( logicOp_ )
10232 , attachmentCount( attachmentCount_ )
10233 , pAttachments( pAttachments_ )
10234 {
10235 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10236 }
10237
10238 PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs )
10239 {
10240 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10241 }
10242
10243 PipelineColorBlendStateCreateInfo& operator=( VkPipelineColorBlendStateCreateInfo const & rhs )
10244 {
10245 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10246 return *this;
10247 }
10248
10249 PipelineColorBlendStateCreateInfo& setSType( StructureType sType_ )
10250 {
10251 sType = sType_;
10252 return *this;
10253 }
10254
10255 PipelineColorBlendStateCreateInfo& setPNext( const void* pNext_ )
10256 {
10257 pNext = pNext_;
10258 return *this;
10259 }
10260
10261 PipelineColorBlendStateCreateInfo& setFlags( PipelineColorBlendStateCreateFlags flags_ )
10262 {
10263 flags = flags_;
10264 return *this;
10265 }
10266
10267 PipelineColorBlendStateCreateInfo& setLogicOpEnable( Bool32 logicOpEnable_ )
10268 {
10269 logicOpEnable = logicOpEnable_;
10270 return *this;
10271 }
10272
10273 PipelineColorBlendStateCreateInfo& setLogicOp( LogicOp logicOp_ )
10274 {
10275 logicOp = logicOp_;
10276 return *this;
10277 }
10278
10279 PipelineColorBlendStateCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
10280 {
10281 attachmentCount = attachmentCount_;
10282 return *this;
10283 }
10284
10285 PipelineColorBlendStateCreateInfo& setPAttachments( const PipelineColorBlendAttachmentState* pAttachments_ )
10286 {
10287 pAttachments = pAttachments_;
10288 return *this;
10289 }
10290
10291 PipelineColorBlendStateCreateInfo& setBlendConstants( std::array<float,4> blendConstants_ )
10292 {
10293 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10294 return *this;
10295 }
10296
10297 operator const VkPipelineColorBlendStateCreateInfo&() const
10298 {
10299 return *reinterpret_cast<const VkPipelineColorBlendStateCreateInfo*>(this);
10300 }
10301
10302 bool operator==( PipelineColorBlendStateCreateInfo const& rhs ) const
10303 {
10304 return ( sType == rhs.sType )
10305 && ( pNext == rhs.pNext )
10306 && ( flags == rhs.flags )
10307 && ( logicOpEnable == rhs.logicOpEnable )
10308 && ( logicOp == rhs.logicOp )
10309 && ( attachmentCount == rhs.attachmentCount )
10310 && ( pAttachments == rhs.pAttachments )
10311 && ( memcmp( blendConstants, rhs.blendConstants, 4 * sizeof( float ) ) == 0 );
10312 }
10313
10314 bool operator!=( PipelineColorBlendStateCreateInfo const& rhs ) const
10315 {
10316 return !operator==( rhs );
10317 }
10318
10319 private:
10320 StructureType sType;
10321
10322 public:
10323 const void* pNext;
10324 PipelineColorBlendStateCreateFlags flags;
10325 Bool32 logicOpEnable;
10326 LogicOp logicOp;
10327 uint32_t attachmentCount;
10328 const PipelineColorBlendAttachmentState* pAttachments;
10329 float blendConstants[4];
10330 };
10331 static_assert( sizeof( PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ), "struct and wrapper have different size!" );
10332
10333 enum class FenceCreateFlagBits
10334 {
10335 eSignaled = VK_FENCE_CREATE_SIGNALED_BIT
10336 };
10337
10338 using FenceCreateFlags = Flags<FenceCreateFlagBits, VkFenceCreateFlags>;
10339
10340 inline FenceCreateFlags operator|( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 )
10341 {
10342 return FenceCreateFlags( bit0 ) | bit1;
10343 }
10344
10345 struct FenceCreateInfo
10346 {
10347 FenceCreateInfo( FenceCreateFlags flags_ = FenceCreateFlags() )
10348 : sType( StructureType::eFenceCreateInfo )
10349 , pNext( nullptr )
10350 , flags( flags_ )
10351 {
10352 }
10353
10354 FenceCreateInfo( VkFenceCreateInfo const & rhs )
10355 {
10356 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10357 }
10358
10359 FenceCreateInfo& operator=( VkFenceCreateInfo const & rhs )
10360 {
10361 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10362 return *this;
10363 }
10364
10365 FenceCreateInfo& setSType( StructureType sType_ )
10366 {
10367 sType = sType_;
10368 return *this;
10369 }
10370
10371 FenceCreateInfo& setPNext( const void* pNext_ )
10372 {
10373 pNext = pNext_;
10374 return *this;
10375 }
10376
10377 FenceCreateInfo& setFlags( FenceCreateFlags flags_ )
10378 {
10379 flags = flags_;
10380 return *this;
10381 }
10382
10383 operator const VkFenceCreateInfo&() const
10384 {
10385 return *reinterpret_cast<const VkFenceCreateInfo*>(this);
10386 }
10387
10388 bool operator==( FenceCreateInfo const& rhs ) const
10389 {
10390 return ( sType == rhs.sType )
10391 && ( pNext == rhs.pNext )
10392 && ( flags == rhs.flags );
10393 }
10394
10395 bool operator!=( FenceCreateInfo const& rhs ) const
10396 {
10397 return !operator==( rhs );
10398 }
10399
10400 private:
10401 StructureType sType;
10402
10403 public:
10404 const void* pNext;
10405 FenceCreateFlags flags;
10406 };
10407 static_assert( sizeof( FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" );
10408
10409 enum class FormatFeatureFlagBits
10410 {
10411 eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
10412 eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
10413 eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,
10414 eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,
10415 eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,
10416 eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,
10417 eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,
10418 eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
10419 eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,
10420 eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,
10421 eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT,
10422 eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT,
10423 eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
10424 eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
10425 };
10426
10427 using FormatFeatureFlags = Flags<FormatFeatureFlagBits, VkFormatFeatureFlags>;
10428
10429 inline FormatFeatureFlags operator|( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 )
10430 {
10431 return FormatFeatureFlags( bit0 ) | bit1;
10432 }
10433
10434 struct FormatProperties
10435 {
10436 operator const VkFormatProperties&() const
10437 {
10438 return *reinterpret_cast<const VkFormatProperties*>(this);
10439 }
10440
10441 bool operator==( FormatProperties const& rhs ) const
10442 {
10443 return ( linearTilingFeatures == rhs.linearTilingFeatures )
10444 && ( optimalTilingFeatures == rhs.optimalTilingFeatures )
10445 && ( bufferFeatures == rhs.bufferFeatures );
10446 }
10447
10448 bool operator!=( FormatProperties const& rhs ) const
10449 {
10450 return !operator==( rhs );
10451 }
10452
10453 FormatFeatureFlags linearTilingFeatures;
10454 FormatFeatureFlags optimalTilingFeatures;
10455 FormatFeatureFlags bufferFeatures;
10456 };
10457 static_assert( sizeof( FormatProperties ) == sizeof( VkFormatProperties ), "struct and wrapper have different size!" );
10458
10459 enum class QueryControlFlagBits
10460 {
10461 ePrecise = VK_QUERY_CONTROL_PRECISE_BIT
10462 };
10463
10464 using QueryControlFlags = Flags<QueryControlFlagBits, VkQueryControlFlags>;
10465
10466 inline QueryControlFlags operator|( QueryControlFlagBits bit0, QueryControlFlagBits bit1 )
10467 {
10468 return QueryControlFlags( bit0 ) | bit1;
10469 }
10470
10471 enum class QueryResultFlagBits
10472 {
10473 e64 = VK_QUERY_RESULT_64_BIT,
10474 eWait = VK_QUERY_RESULT_WAIT_BIT,
10475 eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
10476 ePartial = VK_QUERY_RESULT_PARTIAL_BIT
10477 };
10478
10479 using QueryResultFlags = Flags<QueryResultFlagBits, VkQueryResultFlags>;
10480
10481 inline QueryResultFlags operator|( QueryResultFlagBits bit0, QueryResultFlagBits bit1 )
10482 {
10483 return QueryResultFlags( bit0 ) | bit1;
10484 }
10485
10486 enum class CommandBufferUsageFlagBits
10487 {
10488 eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
10489 eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
10490 eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
10491 };
10492
10493 using CommandBufferUsageFlags = Flags<CommandBufferUsageFlagBits, VkCommandBufferUsageFlags>;
10494
10495 inline CommandBufferUsageFlags operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 )
10496 {
10497 return CommandBufferUsageFlags( bit0 ) | bit1;
10498 }
10499
10500 enum class QueryPipelineStatisticFlagBits
10501 {
10502 eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,
10503 eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,
10504 eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,
10505 eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,
10506 eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,
10507 eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,
10508 eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,
10509 eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,
10510 eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,
10511 eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,
10512 eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
10513 };
10514
10515 using QueryPipelineStatisticFlags = Flags<QueryPipelineStatisticFlagBits, VkQueryPipelineStatisticFlags>;
10516
10517 inline QueryPipelineStatisticFlags operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 )
10518 {
10519 return QueryPipelineStatisticFlags( bit0 ) | bit1;
10520 }
10521
10522 struct CommandBufferInheritanceInfo
10523 {
10524 CommandBufferInheritanceInfo( RenderPass renderPass_ = RenderPass(), uint32_t subpass_ = 0, Framebuffer framebuffer_ = Framebuffer(), Bool32 occlusionQueryEnable_ = 0, QueryControlFlags queryFlags_ = QueryControlFlags(), QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10525 : sType( StructureType::eCommandBufferInheritanceInfo )
10526 , pNext( nullptr )
10527 , renderPass( renderPass_ )
10528 , subpass( subpass_ )
10529 , framebuffer( framebuffer_ )
10530 , occlusionQueryEnable( occlusionQueryEnable_ )
10531 , queryFlags( queryFlags_ )
10532 , pipelineStatistics( pipelineStatistics_ )
10533 {
10534 }
10535
10536 CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs )
10537 {
10538 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10539 }
10540
10541 CommandBufferInheritanceInfo& operator=( VkCommandBufferInheritanceInfo const & rhs )
10542 {
10543 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10544 return *this;
10545 }
10546
10547 CommandBufferInheritanceInfo& setSType( StructureType sType_ )
10548 {
10549 sType = sType_;
10550 return *this;
10551 }
10552
10553 CommandBufferInheritanceInfo& setPNext( const void* pNext_ )
10554 {
10555 pNext = pNext_;
10556 return *this;
10557 }
10558
10559 CommandBufferInheritanceInfo& setRenderPass( RenderPass renderPass_ )
10560 {
10561 renderPass = renderPass_;
10562 return *this;
10563 }
10564
10565 CommandBufferInheritanceInfo& setSubpass( uint32_t subpass_ )
10566 {
10567 subpass = subpass_;
10568 return *this;
10569 }
10570
10571 CommandBufferInheritanceInfo& setFramebuffer( Framebuffer framebuffer_ )
10572 {
10573 framebuffer = framebuffer_;
10574 return *this;
10575 }
10576
10577 CommandBufferInheritanceInfo& setOcclusionQueryEnable( Bool32 occlusionQueryEnable_ )
10578 {
10579 occlusionQueryEnable = occlusionQueryEnable_;
10580 return *this;
10581 }
10582
10583 CommandBufferInheritanceInfo& setQueryFlags( QueryControlFlags queryFlags_ )
10584 {
10585 queryFlags = queryFlags_;
10586 return *this;
10587 }
10588
10589 CommandBufferInheritanceInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10590 {
10591 pipelineStatistics = pipelineStatistics_;
10592 return *this;
10593 }
10594
10595 operator const VkCommandBufferInheritanceInfo&() const
10596 {
10597 return *reinterpret_cast<const VkCommandBufferInheritanceInfo*>(this);
10598 }
10599
10600 bool operator==( CommandBufferInheritanceInfo const& rhs ) const
10601 {
10602 return ( sType == rhs.sType )
10603 && ( pNext == rhs.pNext )
10604 && ( renderPass == rhs.renderPass )
10605 && ( subpass == rhs.subpass )
10606 && ( framebuffer == rhs.framebuffer )
10607 && ( occlusionQueryEnable == rhs.occlusionQueryEnable )
10608 && ( queryFlags == rhs.queryFlags )
10609 && ( pipelineStatistics == rhs.pipelineStatistics );
10610 }
10611
10612 bool operator!=( CommandBufferInheritanceInfo const& rhs ) const
10613 {
10614 return !operator==( rhs );
10615 }
10616
10617 private:
10618 StructureType sType;
10619
10620 public:
10621 const void* pNext;
10622 RenderPass renderPass;
10623 uint32_t subpass;
10624 Framebuffer framebuffer;
10625 Bool32 occlusionQueryEnable;
10626 QueryControlFlags queryFlags;
10627 QueryPipelineStatisticFlags pipelineStatistics;
10628 };
10629 static_assert( sizeof( CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ), "struct and wrapper have different size!" );
10630
10631 struct CommandBufferBeginInfo
10632 {
10633 CommandBufferBeginInfo( CommandBufferUsageFlags flags_ = CommandBufferUsageFlags(), const CommandBufferInheritanceInfo* pInheritanceInfo_ = nullptr )
10634 : sType( StructureType::eCommandBufferBeginInfo )
10635 , pNext( nullptr )
10636 , flags( flags_ )
10637 , pInheritanceInfo( pInheritanceInfo_ )
10638 {
10639 }
10640
10641 CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs )
10642 {
10643 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10644 }
10645
10646 CommandBufferBeginInfo& operator=( VkCommandBufferBeginInfo const & rhs )
10647 {
10648 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10649 return *this;
10650 }
10651
10652 CommandBufferBeginInfo& setSType( StructureType sType_ )
10653 {
10654 sType = sType_;
10655 return *this;
10656 }
10657
10658 CommandBufferBeginInfo& setPNext( const void* pNext_ )
10659 {
10660 pNext = pNext_;
10661 return *this;
10662 }
10663
10664 CommandBufferBeginInfo& setFlags( CommandBufferUsageFlags flags_ )
10665 {
10666 flags = flags_;
10667 return *this;
10668 }
10669
10670 CommandBufferBeginInfo& setPInheritanceInfo( const CommandBufferInheritanceInfo* pInheritanceInfo_ )
10671 {
10672 pInheritanceInfo = pInheritanceInfo_;
10673 return *this;
10674 }
10675
10676 operator const VkCommandBufferBeginInfo&() const
10677 {
10678 return *reinterpret_cast<const VkCommandBufferBeginInfo*>(this);
10679 }
10680
10681 bool operator==( CommandBufferBeginInfo const& rhs ) const
10682 {
10683 return ( sType == rhs.sType )
10684 && ( pNext == rhs.pNext )
10685 && ( flags == rhs.flags )
10686 && ( pInheritanceInfo == rhs.pInheritanceInfo );
10687 }
10688
10689 bool operator!=( CommandBufferBeginInfo const& rhs ) const
10690 {
10691 return !operator==( rhs );
10692 }
10693
10694 private:
10695 StructureType sType;
10696
10697 public:
10698 const void* pNext;
10699 CommandBufferUsageFlags flags;
10700 const CommandBufferInheritanceInfo* pInheritanceInfo;
10701 };
10702 static_assert( sizeof( CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ), "struct and wrapper have different size!" );
10703
10704 struct QueryPoolCreateInfo
10705 {
10706 QueryPoolCreateInfo( QueryPoolCreateFlags flags_ = QueryPoolCreateFlags(), QueryType queryType_ = QueryType::eOcclusion, uint32_t queryCount_ = 0, QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10707 : sType( StructureType::eQueryPoolCreateInfo )
10708 , pNext( nullptr )
10709 , flags( flags_ )
10710 , queryType( queryType_ )
10711 , queryCount( queryCount_ )
10712 , pipelineStatistics( pipelineStatistics_ )
10713 {
10714 }
10715
10716 QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs )
10717 {
10718 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10719 }
10720
10721 QueryPoolCreateInfo& operator=( VkQueryPoolCreateInfo const & rhs )
10722 {
10723 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10724 return *this;
10725 }
10726
10727 QueryPoolCreateInfo& setSType( StructureType sType_ )
10728 {
10729 sType = sType_;
10730 return *this;
10731 }
10732
10733 QueryPoolCreateInfo& setPNext( const void* pNext_ )
10734 {
10735 pNext = pNext_;
10736 return *this;
10737 }
10738
10739 QueryPoolCreateInfo& setFlags( QueryPoolCreateFlags flags_ )
10740 {
10741 flags = flags_;
10742 return *this;
10743 }
10744
10745 QueryPoolCreateInfo& setQueryType( QueryType queryType_ )
10746 {
10747 queryType = queryType_;
10748 return *this;
10749 }
10750
10751 QueryPoolCreateInfo& setQueryCount( uint32_t queryCount_ )
10752 {
10753 queryCount = queryCount_;
10754 return *this;
10755 }
10756
10757 QueryPoolCreateInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10758 {
10759 pipelineStatistics = pipelineStatistics_;
10760 return *this;
10761 }
10762
10763 operator const VkQueryPoolCreateInfo&() const
10764 {
10765 return *reinterpret_cast<const VkQueryPoolCreateInfo*>(this);
10766 }
10767
10768 bool operator==( QueryPoolCreateInfo const& rhs ) const
10769 {
10770 return ( sType == rhs.sType )
10771 && ( pNext == rhs.pNext )
10772 && ( flags == rhs.flags )
10773 && ( queryType == rhs.queryType )
10774 && ( queryCount == rhs.queryCount )
10775 && ( pipelineStatistics == rhs.pipelineStatistics );
10776 }
10777
10778 bool operator!=( QueryPoolCreateInfo const& rhs ) const
10779 {
10780 return !operator==( rhs );
10781 }
10782
10783 private:
10784 StructureType sType;
10785
10786 public:
10787 const void* pNext;
10788 QueryPoolCreateFlags flags;
10789 QueryType queryType;
10790 uint32_t queryCount;
10791 QueryPipelineStatisticFlags pipelineStatistics;
10792 };
10793 static_assert( sizeof( QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ), "struct and wrapper have different size!" );
10794
10795 enum class ImageAspectFlagBits
10796 {
10797 eColor = VK_IMAGE_ASPECT_COLOR_BIT,
10798 eDepth = VK_IMAGE_ASPECT_DEPTH_BIT,
10799 eStencil = VK_IMAGE_ASPECT_STENCIL_BIT,
10800 eMetadata = VK_IMAGE_ASPECT_METADATA_BIT
10801 };
10802
10803 using ImageAspectFlags = Flags<ImageAspectFlagBits, VkImageAspectFlags>;
10804
10805 inline ImageAspectFlags operator|( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 )
10806 {
10807 return ImageAspectFlags( bit0 ) | bit1;
10808 }
10809
10810 struct ImageSubresource
10811 {
10812 ImageSubresource( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t arrayLayer_ = 0 )
10813 : aspectMask( aspectMask_ )
10814 , mipLevel( mipLevel_ )
10815 , arrayLayer( arrayLayer_ )
10816 {
10817 }
10818
10819 ImageSubresource( VkImageSubresource const & rhs )
10820 {
10821 memcpy( this, &rhs, sizeof(ImageSubresource) );
10822 }
10823
10824 ImageSubresource& operator=( VkImageSubresource const & rhs )
10825 {
10826 memcpy( this, &rhs, sizeof(ImageSubresource) );
10827 return *this;
10828 }
10829
10830 ImageSubresource& setAspectMask( ImageAspectFlags aspectMask_ )
10831 {
10832 aspectMask = aspectMask_;
10833 return *this;
10834 }
10835
10836 ImageSubresource& setMipLevel( uint32_t mipLevel_ )
10837 {
10838 mipLevel = mipLevel_;
10839 return *this;
10840 }
10841
10842 ImageSubresource& setArrayLayer( uint32_t arrayLayer_ )
10843 {
10844 arrayLayer = arrayLayer_;
10845 return *this;
10846 }
10847
10848 operator const VkImageSubresource&() const
10849 {
10850 return *reinterpret_cast<const VkImageSubresource*>(this);
10851 }
10852
10853 bool operator==( ImageSubresource const& rhs ) const
10854 {
10855 return ( aspectMask == rhs.aspectMask )
10856 && ( mipLevel == rhs.mipLevel )
10857 && ( arrayLayer == rhs.arrayLayer );
10858 }
10859
10860 bool operator!=( ImageSubresource const& rhs ) const
10861 {
10862 return !operator==( rhs );
10863 }
10864
10865 ImageAspectFlags aspectMask;
10866 uint32_t mipLevel;
10867 uint32_t arrayLayer;
10868 };
10869 static_assert( sizeof( ImageSubresource ) == sizeof( VkImageSubresource ), "struct and wrapper have different size!" );
10870
10871 struct ImageSubresourceLayers
10872 {
10873 ImageSubresourceLayers( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
10874 : aspectMask( aspectMask_ )
10875 , mipLevel( mipLevel_ )
10876 , baseArrayLayer( baseArrayLayer_ )
10877 , layerCount( layerCount_ )
10878 {
10879 }
10880
10881 ImageSubresourceLayers( VkImageSubresourceLayers const & rhs )
10882 {
10883 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
10884 }
10885
10886 ImageSubresourceLayers& operator=( VkImageSubresourceLayers const & rhs )
10887 {
10888 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
10889 return *this;
10890 }
10891
10892 ImageSubresourceLayers& setAspectMask( ImageAspectFlags aspectMask_ )
10893 {
10894 aspectMask = aspectMask_;
10895 return *this;
10896 }
10897
10898 ImageSubresourceLayers& setMipLevel( uint32_t mipLevel_ )
10899 {
10900 mipLevel = mipLevel_;
10901 return *this;
10902 }
10903
10904 ImageSubresourceLayers& setBaseArrayLayer( uint32_t baseArrayLayer_ )
10905 {
10906 baseArrayLayer = baseArrayLayer_;
10907 return *this;
10908 }
10909
10910 ImageSubresourceLayers& setLayerCount( uint32_t layerCount_ )
10911 {
10912 layerCount = layerCount_;
10913 return *this;
10914 }
10915
10916 operator const VkImageSubresourceLayers&() const
10917 {
10918 return *reinterpret_cast<const VkImageSubresourceLayers*>(this);
10919 }
10920
10921 bool operator==( ImageSubresourceLayers const& rhs ) const
10922 {
10923 return ( aspectMask == rhs.aspectMask )
10924 && ( mipLevel == rhs.mipLevel )
10925 && ( baseArrayLayer == rhs.baseArrayLayer )
10926 && ( layerCount == rhs.layerCount );
10927 }
10928
10929 bool operator!=( ImageSubresourceLayers const& rhs ) const
10930 {
10931 return !operator==( rhs );
10932 }
10933
10934 ImageAspectFlags aspectMask;
10935 uint32_t mipLevel;
10936 uint32_t baseArrayLayer;
10937 uint32_t layerCount;
10938 };
10939 static_assert( sizeof( ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ), "struct and wrapper have different size!" );
10940
10941 struct ImageSubresourceRange
10942 {
10943 ImageSubresourceRange( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t baseMipLevel_ = 0, uint32_t levelCount_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
10944 : aspectMask( aspectMask_ )
10945 , baseMipLevel( baseMipLevel_ )
10946 , levelCount( levelCount_ )
10947 , baseArrayLayer( baseArrayLayer_ )
10948 , layerCount( layerCount_ )
10949 {
10950 }
10951
10952 ImageSubresourceRange( VkImageSubresourceRange const & rhs )
10953 {
10954 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
10955 }
10956
10957 ImageSubresourceRange& operator=( VkImageSubresourceRange const & rhs )
10958 {
10959 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
10960 return *this;
10961 }
10962
10963 ImageSubresourceRange& setAspectMask( ImageAspectFlags aspectMask_ )
10964 {
10965 aspectMask = aspectMask_;
10966 return *this;
10967 }
10968
10969 ImageSubresourceRange& setBaseMipLevel( uint32_t baseMipLevel_ )
10970 {
10971 baseMipLevel = baseMipLevel_;
10972 return *this;
10973 }
10974
10975 ImageSubresourceRange& setLevelCount( uint32_t levelCount_ )
10976 {
10977 levelCount = levelCount_;
10978 return *this;
10979 }
10980
10981 ImageSubresourceRange& setBaseArrayLayer( uint32_t baseArrayLayer_ )
10982 {
10983 baseArrayLayer = baseArrayLayer_;
10984 return *this;
10985 }
10986
10987 ImageSubresourceRange& setLayerCount( uint32_t layerCount_ )
10988 {
10989 layerCount = layerCount_;
10990 return *this;
10991 }
10992
10993 operator const VkImageSubresourceRange&() const
10994 {
10995 return *reinterpret_cast<const VkImageSubresourceRange*>(this);
10996 }
10997
10998 bool operator==( ImageSubresourceRange const& rhs ) const
10999 {
11000 return ( aspectMask == rhs.aspectMask )
11001 && ( baseMipLevel == rhs.baseMipLevel )
11002 && ( levelCount == rhs.levelCount )
11003 && ( baseArrayLayer == rhs.baseArrayLayer )
11004 && ( layerCount == rhs.layerCount );
11005 }
11006
11007 bool operator!=( ImageSubresourceRange const& rhs ) const
11008 {
11009 return !operator==( rhs );
11010 }
11011
11012 ImageAspectFlags aspectMask;
11013 uint32_t baseMipLevel;
11014 uint32_t levelCount;
11015 uint32_t baseArrayLayer;
11016 uint32_t layerCount;
11017 };
11018 static_assert( sizeof( ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ), "struct and wrapper have different size!" );
11019
11020 struct ImageMemoryBarrier
11021 {
11022 ImageMemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), ImageLayout oldLayout_ = ImageLayout::eUndefined, ImageLayout newLayout_ = ImageLayout::eUndefined, uint32_t srcQueueFamilyIndex_ = 0, uint32_t dstQueueFamilyIndex_ = 0, Image image_ = Image(), ImageSubresourceRange subresourceRange_ = ImageSubresourceRange() )
11023 : sType( StructureType::eImageMemoryBarrier )
11024 , pNext( nullptr )
11025 , srcAccessMask( srcAccessMask_ )
11026 , dstAccessMask( dstAccessMask_ )
11027 , oldLayout( oldLayout_ )
11028 , newLayout( newLayout_ )
11029 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
11030 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
11031 , image( image_ )
11032 , subresourceRange( subresourceRange_ )
11033 {
11034 }
11035
11036 ImageMemoryBarrier( VkImageMemoryBarrier const & rhs )
11037 {
11038 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11039 }
11040
11041 ImageMemoryBarrier& operator=( VkImageMemoryBarrier const & rhs )
11042 {
11043 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11044 return *this;
11045 }
11046
11047 ImageMemoryBarrier& setSType( StructureType sType_ )
11048 {
11049 sType = sType_;
11050 return *this;
11051 }
11052
11053 ImageMemoryBarrier& setPNext( const void* pNext_ )
11054 {
11055 pNext = pNext_;
11056 return *this;
11057 }
11058
11059 ImageMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
11060 {
11061 srcAccessMask = srcAccessMask_;
11062 return *this;
11063 }
11064
11065 ImageMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
11066 {
11067 dstAccessMask = dstAccessMask_;
11068 return *this;
11069 }
11070
11071 ImageMemoryBarrier& setOldLayout( ImageLayout oldLayout_ )
11072 {
11073 oldLayout = oldLayout_;
11074 return *this;
11075 }
11076
11077 ImageMemoryBarrier& setNewLayout( ImageLayout newLayout_ )
11078 {
11079 newLayout = newLayout_;
11080 return *this;
11081 }
11082
11083 ImageMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
11084 {
11085 srcQueueFamilyIndex = srcQueueFamilyIndex_;
11086 return *this;
11087 }
11088
11089 ImageMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
11090 {
11091 dstQueueFamilyIndex = dstQueueFamilyIndex_;
11092 return *this;
11093 }
11094
11095 ImageMemoryBarrier& setImage( Image image_ )
11096 {
11097 image = image_;
11098 return *this;
11099 }
11100
11101 ImageMemoryBarrier& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11102 {
11103 subresourceRange = subresourceRange_;
11104 return *this;
11105 }
11106
11107 operator const VkImageMemoryBarrier&() const
11108 {
11109 return *reinterpret_cast<const VkImageMemoryBarrier*>(this);
11110 }
11111
11112 bool operator==( ImageMemoryBarrier const& rhs ) const
11113 {
11114 return ( sType == rhs.sType )
11115 && ( pNext == rhs.pNext )
11116 && ( srcAccessMask == rhs.srcAccessMask )
11117 && ( dstAccessMask == rhs.dstAccessMask )
11118 && ( oldLayout == rhs.oldLayout )
11119 && ( newLayout == rhs.newLayout )
11120 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
11121 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
11122 && ( image == rhs.image )
11123 && ( subresourceRange == rhs.subresourceRange );
11124 }
11125
11126 bool operator!=( ImageMemoryBarrier const& rhs ) const
11127 {
11128 return !operator==( rhs );
11129 }
11130
11131 private:
11132 StructureType sType;
11133
11134 public:
11135 const void* pNext;
11136 AccessFlags srcAccessMask;
11137 AccessFlags dstAccessMask;
11138 ImageLayout oldLayout;
11139 ImageLayout newLayout;
11140 uint32_t srcQueueFamilyIndex;
11141 uint32_t dstQueueFamilyIndex;
11142 Image image;
11143 ImageSubresourceRange subresourceRange;
11144 };
11145 static_assert( sizeof( ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ), "struct and wrapper have different size!" );
11146
11147 struct ImageViewCreateInfo
11148 {
11149 ImageViewCreateInfo( ImageViewCreateFlags flags_ = ImageViewCreateFlags(), Image image_ = Image(), ImageViewType viewType_ = ImageViewType::e1D, Format format_ = Format::eUndefined, ComponentMapping components_ = ComponentMapping(), ImageSubresourceRange subresourceRange_ = ImageSubresourceRange() )
11150 : sType( StructureType::eImageViewCreateInfo )
11151 , pNext( nullptr )
11152 , flags( flags_ )
11153 , image( image_ )
11154 , viewType( viewType_ )
11155 , format( format_ )
11156 , components( components_ )
11157 , subresourceRange( subresourceRange_ )
11158 {
11159 }
11160
11161 ImageViewCreateInfo( VkImageViewCreateInfo const & rhs )
11162 {
11163 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11164 }
11165
11166 ImageViewCreateInfo& operator=( VkImageViewCreateInfo const & rhs )
11167 {
11168 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11169 return *this;
11170 }
11171
11172 ImageViewCreateInfo& setSType( StructureType sType_ )
11173 {
11174 sType = sType_;
11175 return *this;
11176 }
11177
11178 ImageViewCreateInfo& setPNext( const void* pNext_ )
11179 {
11180 pNext = pNext_;
11181 return *this;
11182 }
11183
11184 ImageViewCreateInfo& setFlags( ImageViewCreateFlags flags_ )
11185 {
11186 flags = flags_;
11187 return *this;
11188 }
11189
11190 ImageViewCreateInfo& setImage( Image image_ )
11191 {
11192 image = image_;
11193 return *this;
11194 }
11195
11196 ImageViewCreateInfo& setViewType( ImageViewType viewType_ )
11197 {
11198 viewType = viewType_;
11199 return *this;
11200 }
11201
11202 ImageViewCreateInfo& setFormat( Format format_ )
11203 {
11204 format = format_;
11205 return *this;
11206 }
11207
11208 ImageViewCreateInfo& setComponents( ComponentMapping components_ )
11209 {
11210 components = components_;
11211 return *this;
11212 }
11213
11214 ImageViewCreateInfo& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11215 {
11216 subresourceRange = subresourceRange_;
11217 return *this;
11218 }
11219
11220 operator const VkImageViewCreateInfo&() const
11221 {
11222 return *reinterpret_cast<const VkImageViewCreateInfo*>(this);
11223 }
11224
11225 bool operator==( ImageViewCreateInfo const& rhs ) const
11226 {
11227 return ( sType == rhs.sType )
11228 && ( pNext == rhs.pNext )
11229 && ( flags == rhs.flags )
11230 && ( image == rhs.image )
11231 && ( viewType == rhs.viewType )
11232 && ( format == rhs.format )
11233 && ( components == rhs.components )
11234 && ( subresourceRange == rhs.subresourceRange );
11235 }
11236
11237 bool operator!=( ImageViewCreateInfo const& rhs ) const
11238 {
11239 return !operator==( rhs );
11240 }
11241
11242 private:
11243 StructureType sType;
11244
11245 public:
11246 const void* pNext;
11247 ImageViewCreateFlags flags;
11248 Image image;
11249 ImageViewType viewType;
11250 Format format;
11251 ComponentMapping components;
11252 ImageSubresourceRange subresourceRange;
11253 };
11254 static_assert( sizeof( ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ), "struct and wrapper have different size!" );
11255
11256 struct ImageCopy
11257 {
11258 ImageCopy( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11259 : srcSubresource( srcSubresource_ )
11260 , srcOffset( srcOffset_ )
11261 , dstSubresource( dstSubresource_ )
11262 , dstOffset( dstOffset_ )
11263 , extent( extent_ )
11264 {
11265 }
11266
11267 ImageCopy( VkImageCopy const & rhs )
11268 {
11269 memcpy( this, &rhs, sizeof(ImageCopy) );
11270 }
11271
11272 ImageCopy& operator=( VkImageCopy const & rhs )
11273 {
11274 memcpy( this, &rhs, sizeof(ImageCopy) );
11275 return *this;
11276 }
11277
11278 ImageCopy& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11279 {
11280 srcSubresource = srcSubresource_;
11281 return *this;
11282 }
11283
11284 ImageCopy& setSrcOffset( Offset3D srcOffset_ )
11285 {
11286 srcOffset = srcOffset_;
11287 return *this;
11288 }
11289
11290 ImageCopy& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11291 {
11292 dstSubresource = dstSubresource_;
11293 return *this;
11294 }
11295
11296 ImageCopy& setDstOffset( Offset3D dstOffset_ )
11297 {
11298 dstOffset = dstOffset_;
11299 return *this;
11300 }
11301
11302 ImageCopy& setExtent( Extent3D extent_ )
11303 {
11304 extent = extent_;
11305 return *this;
11306 }
11307
11308 operator const VkImageCopy&() const
11309 {
11310 return *reinterpret_cast<const VkImageCopy*>(this);
11311 }
11312
11313 bool operator==( ImageCopy const& rhs ) const
11314 {
11315 return ( srcSubresource == rhs.srcSubresource )
11316 && ( srcOffset == rhs.srcOffset )
11317 && ( dstSubresource == rhs.dstSubresource )
11318 && ( dstOffset == rhs.dstOffset )
11319 && ( extent == rhs.extent );
11320 }
11321
11322 bool operator!=( ImageCopy const& rhs ) const
11323 {
11324 return !operator==( rhs );
11325 }
11326
11327 ImageSubresourceLayers srcSubresource;
11328 Offset3D srcOffset;
11329 ImageSubresourceLayers dstSubresource;
11330 Offset3D dstOffset;
11331 Extent3D extent;
11332 };
11333 static_assert( sizeof( ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" );
11334
11335 struct ImageBlit
11336 {
11337 ImageBlit( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& srcOffsets_ = { { Offset3D(), Offset3D() } }, ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& dstOffsets_ = { { Offset3D(), Offset3D() } } )
11338 : srcSubresource( srcSubresource_ )
11339 , dstSubresource( dstSubresource_ )
11340 {
11341 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11342 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11343 }
11344
11345 ImageBlit( VkImageBlit const & rhs )
11346 {
11347 memcpy( this, &rhs, sizeof(ImageBlit) );
11348 }
11349
11350 ImageBlit& operator=( VkImageBlit const & rhs )
11351 {
11352 memcpy( this, &rhs, sizeof(ImageBlit) );
11353 return *this;
11354 }
11355
11356 ImageBlit& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11357 {
11358 srcSubresource = srcSubresource_;
11359 return *this;
11360 }
11361
11362 ImageBlit& setSrcOffsets( std::array<Offset3D,2> srcOffsets_ )
11363 {
11364 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11365 return *this;
11366 }
11367
11368 ImageBlit& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11369 {
11370 dstSubresource = dstSubresource_;
11371 return *this;
11372 }
11373
11374 ImageBlit& setDstOffsets( std::array<Offset3D,2> dstOffsets_ )
11375 {
11376 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11377 return *this;
11378 }
11379
11380 operator const VkImageBlit&() const
11381 {
11382 return *reinterpret_cast<const VkImageBlit*>(this);
11383 }
11384
11385 bool operator==( ImageBlit const& rhs ) const
11386 {
11387 return ( srcSubresource == rhs.srcSubresource )
11388 && ( memcmp( srcOffsets, rhs.srcOffsets, 2 * sizeof( Offset3D ) ) == 0 )
11389 && ( dstSubresource == rhs.dstSubresource )
11390 && ( memcmp( dstOffsets, rhs.dstOffsets, 2 * sizeof( Offset3D ) ) == 0 );
11391 }
11392
11393 bool operator!=( ImageBlit const& rhs ) const
11394 {
11395 return !operator==( rhs );
11396 }
11397
11398 ImageSubresourceLayers srcSubresource;
11399 Offset3D srcOffsets[2];
11400 ImageSubresourceLayers dstSubresource;
11401 Offset3D dstOffsets[2];
11402 };
11403 static_assert( sizeof( ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" );
11404
11405 struct BufferImageCopy
11406 {
11407 BufferImageCopy( DeviceSize bufferOffset_ = 0, uint32_t bufferRowLength_ = 0, uint32_t bufferImageHeight_ = 0, ImageSubresourceLayers imageSubresource_ = ImageSubresourceLayers(), Offset3D imageOffset_ = Offset3D(), Extent3D imageExtent_ = Extent3D() )
11408 : bufferOffset( bufferOffset_ )
11409 , bufferRowLength( bufferRowLength_ )
11410 , bufferImageHeight( bufferImageHeight_ )
11411 , imageSubresource( imageSubresource_ )
11412 , imageOffset( imageOffset_ )
11413 , imageExtent( imageExtent_ )
11414 {
11415 }
11416
11417 BufferImageCopy( VkBufferImageCopy const & rhs )
11418 {
11419 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11420 }
11421
11422 BufferImageCopy& operator=( VkBufferImageCopy const & rhs )
11423 {
11424 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11425 return *this;
11426 }
11427
11428 BufferImageCopy& setBufferOffset( DeviceSize bufferOffset_ )
11429 {
11430 bufferOffset = bufferOffset_;
11431 return *this;
11432 }
11433
11434 BufferImageCopy& setBufferRowLength( uint32_t bufferRowLength_ )
11435 {
11436 bufferRowLength = bufferRowLength_;
11437 return *this;
11438 }
11439
11440 BufferImageCopy& setBufferImageHeight( uint32_t bufferImageHeight_ )
11441 {
11442 bufferImageHeight = bufferImageHeight_;
11443 return *this;
11444 }
11445
11446 BufferImageCopy& setImageSubresource( ImageSubresourceLayers imageSubresource_ )
11447 {
11448 imageSubresource = imageSubresource_;
11449 return *this;
11450 }
11451
11452 BufferImageCopy& setImageOffset( Offset3D imageOffset_ )
11453 {
11454 imageOffset = imageOffset_;
11455 return *this;
11456 }
11457
11458 BufferImageCopy& setImageExtent( Extent3D imageExtent_ )
11459 {
11460 imageExtent = imageExtent_;
11461 return *this;
11462 }
11463
11464 operator const VkBufferImageCopy&() const
11465 {
11466 return *reinterpret_cast<const VkBufferImageCopy*>(this);
11467 }
11468
11469 bool operator==( BufferImageCopy const& rhs ) const
11470 {
11471 return ( bufferOffset == rhs.bufferOffset )
11472 && ( bufferRowLength == rhs.bufferRowLength )
11473 && ( bufferImageHeight == rhs.bufferImageHeight )
11474 && ( imageSubresource == rhs.imageSubresource )
11475 && ( imageOffset == rhs.imageOffset )
11476 && ( imageExtent == rhs.imageExtent );
11477 }
11478
11479 bool operator!=( BufferImageCopy const& rhs ) const
11480 {
11481 return !operator==( rhs );
11482 }
11483
11484 DeviceSize bufferOffset;
11485 uint32_t bufferRowLength;
11486 uint32_t bufferImageHeight;
11487 ImageSubresourceLayers imageSubresource;
11488 Offset3D imageOffset;
11489 Extent3D imageExtent;
11490 };
11491 static_assert( sizeof( BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" );
11492
11493 struct ImageResolve
11494 {
11495 ImageResolve( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11496 : srcSubresource( srcSubresource_ )
11497 , srcOffset( srcOffset_ )
11498 , dstSubresource( dstSubresource_ )
11499 , dstOffset( dstOffset_ )
11500 , extent( extent_ )
11501 {
11502 }
11503
11504 ImageResolve( VkImageResolve const & rhs )
11505 {
11506 memcpy( this, &rhs, sizeof(ImageResolve) );
11507 }
11508
11509 ImageResolve& operator=( VkImageResolve const & rhs )
11510 {
11511 memcpy( this, &rhs, sizeof(ImageResolve) );
11512 return *this;
11513 }
11514
11515 ImageResolve& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11516 {
11517 srcSubresource = srcSubresource_;
11518 return *this;
11519 }
11520
11521 ImageResolve& setSrcOffset( Offset3D srcOffset_ )
11522 {
11523 srcOffset = srcOffset_;
11524 return *this;
11525 }
11526
11527 ImageResolve& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11528 {
11529 dstSubresource = dstSubresource_;
11530 return *this;
11531 }
11532
11533 ImageResolve& setDstOffset( Offset3D dstOffset_ )
11534 {
11535 dstOffset = dstOffset_;
11536 return *this;
11537 }
11538
11539 ImageResolve& setExtent( Extent3D extent_ )
11540 {
11541 extent = extent_;
11542 return *this;
11543 }
11544
11545 operator const VkImageResolve&() const
11546 {
11547 return *reinterpret_cast<const VkImageResolve*>(this);
11548 }
11549
11550 bool operator==( ImageResolve const& rhs ) const
11551 {
11552 return ( srcSubresource == rhs.srcSubresource )
11553 && ( srcOffset == rhs.srcOffset )
11554 && ( dstSubresource == rhs.dstSubresource )
11555 && ( dstOffset == rhs.dstOffset )
11556 && ( extent == rhs.extent );
11557 }
11558
11559 bool operator!=( ImageResolve const& rhs ) const
11560 {
11561 return !operator==( rhs );
11562 }
11563
11564 ImageSubresourceLayers srcSubresource;
11565 Offset3D srcOffset;
11566 ImageSubresourceLayers dstSubresource;
11567 Offset3D dstOffset;
11568 Extent3D extent;
11569 };
11570 static_assert( sizeof( ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" );
11571
11572 struct ClearAttachment
11573 {
11574 ClearAttachment( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t colorAttachment_ = 0, ClearValue clearValue_ = ClearValue() )
11575 : aspectMask( aspectMask_ )
11576 , colorAttachment( colorAttachment_ )
11577 , clearValue( clearValue_ )
11578 {
11579 }
11580
11581 ClearAttachment( VkClearAttachment const & rhs )
11582 {
11583 memcpy( this, &rhs, sizeof(ClearAttachment) );
11584 }
11585
11586 ClearAttachment& operator=( VkClearAttachment const & rhs )
11587 {
11588 memcpy( this, &rhs, sizeof(ClearAttachment) );
11589 return *this;
11590 }
11591
11592 ClearAttachment& setAspectMask( ImageAspectFlags aspectMask_ )
11593 {
11594 aspectMask = aspectMask_;
11595 return *this;
11596 }
11597
11598 ClearAttachment& setColorAttachment( uint32_t colorAttachment_ )
11599 {
11600 colorAttachment = colorAttachment_;
11601 return *this;
11602 }
11603
11604 ClearAttachment& setClearValue( ClearValue clearValue_ )
11605 {
11606 clearValue = clearValue_;
11607 return *this;
11608 }
11609
11610 operator const VkClearAttachment&() const
11611 {
11612 return *reinterpret_cast<const VkClearAttachment*>(this);
11613 }
11614
11615 ImageAspectFlags aspectMask;
11616 uint32_t colorAttachment;
11617 ClearValue clearValue;
11618 };
11619 static_assert( sizeof( ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" );
11620
11621 enum class SparseImageFormatFlagBits
11622 {
11623 eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,
11624 eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,
11625 eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
11626 };
11627
11628 using SparseImageFormatFlags = Flags<SparseImageFormatFlagBits, VkSparseImageFormatFlags>;
11629
11630 inline SparseImageFormatFlags operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 )
11631 {
11632 return SparseImageFormatFlags( bit0 ) | bit1;
11633 }
11634
11635 struct SparseImageFormatProperties
11636 {
11637 operator const VkSparseImageFormatProperties&() const
11638 {
11639 return *reinterpret_cast<const VkSparseImageFormatProperties*>(this);
11640 }
11641
11642 bool operator==( SparseImageFormatProperties const& rhs ) const
11643 {
11644 return ( aspectMask == rhs.aspectMask )
11645 && ( imageGranularity == rhs.imageGranularity )
11646 && ( flags == rhs.flags );
11647 }
11648
11649 bool operator!=( SparseImageFormatProperties const& rhs ) const
11650 {
11651 return !operator==( rhs );
11652 }
11653
11654 ImageAspectFlags aspectMask;
11655 Extent3D imageGranularity;
11656 SparseImageFormatFlags flags;
11657 };
11658 static_assert( sizeof( SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ), "struct and wrapper have different size!" );
11659
11660 struct SparseImageMemoryRequirements
11661 {
11662 operator const VkSparseImageMemoryRequirements&() const
11663 {
11664 return *reinterpret_cast<const VkSparseImageMemoryRequirements*>(this);
11665 }
11666
11667 bool operator==( SparseImageMemoryRequirements const& rhs ) const
11668 {
11669 return ( formatProperties == rhs.formatProperties )
11670 && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod )
11671 && ( imageMipTailSize == rhs.imageMipTailSize )
11672 && ( imageMipTailOffset == rhs.imageMipTailOffset )
11673 && ( imageMipTailStride == rhs.imageMipTailStride );
11674 }
11675
11676 bool operator!=( SparseImageMemoryRequirements const& rhs ) const
11677 {
11678 return !operator==( rhs );
11679 }
11680
11681 SparseImageFormatProperties formatProperties;
11682 uint32_t imageMipTailFirstLod;
11683 DeviceSize imageMipTailSize;
11684 DeviceSize imageMipTailOffset;
11685 DeviceSize imageMipTailStride;
11686 };
11687 static_assert( sizeof( SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ), "struct and wrapper have different size!" );
11688
11689 enum class SparseMemoryBindFlagBits
11690 {
11691 eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT
11692 };
11693
11694 using SparseMemoryBindFlags = Flags<SparseMemoryBindFlagBits, VkSparseMemoryBindFlags>;
11695
11696 inline SparseMemoryBindFlags operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 )
11697 {
11698 return SparseMemoryBindFlags( bit0 ) | bit1;
11699 }
11700
11701 struct SparseMemoryBind
11702 {
11703 SparseMemoryBind( DeviceSize resourceOffset_ = 0, DeviceSize size_ = 0, DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11704 : resourceOffset( resourceOffset_ )
11705 , size( size_ )
11706 , memory( memory_ )
11707 , memoryOffset( memoryOffset_ )
11708 , flags( flags_ )
11709 {
11710 }
11711
11712 SparseMemoryBind( VkSparseMemoryBind const & rhs )
11713 {
11714 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11715 }
11716
11717 SparseMemoryBind& operator=( VkSparseMemoryBind const & rhs )
11718 {
11719 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11720 return *this;
11721 }
11722
11723 SparseMemoryBind& setResourceOffset( DeviceSize resourceOffset_ )
11724 {
11725 resourceOffset = resourceOffset_;
11726 return *this;
11727 }
11728
11729 SparseMemoryBind& setSize( DeviceSize size_ )
11730 {
11731 size = size_;
11732 return *this;
11733 }
11734
11735 SparseMemoryBind& setMemory( DeviceMemory memory_ )
11736 {
11737 memory = memory_;
11738 return *this;
11739 }
11740
11741 SparseMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
11742 {
11743 memoryOffset = memoryOffset_;
11744 return *this;
11745 }
11746
11747 SparseMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
11748 {
11749 flags = flags_;
11750 return *this;
11751 }
11752
11753 operator const VkSparseMemoryBind&() const
11754 {
11755 return *reinterpret_cast<const VkSparseMemoryBind*>(this);
11756 }
11757
11758 bool operator==( SparseMemoryBind const& rhs ) const
11759 {
11760 return ( resourceOffset == rhs.resourceOffset )
11761 && ( size == rhs.size )
11762 && ( memory == rhs.memory )
11763 && ( memoryOffset == rhs.memoryOffset )
11764 && ( flags == rhs.flags );
11765 }
11766
11767 bool operator!=( SparseMemoryBind const& rhs ) const
11768 {
11769 return !operator==( rhs );
11770 }
11771
11772 DeviceSize resourceOffset;
11773 DeviceSize size;
11774 DeviceMemory memory;
11775 DeviceSize memoryOffset;
11776 SparseMemoryBindFlags flags;
11777 };
11778 static_assert( sizeof( SparseMemoryBind ) == sizeof( VkSparseMemoryBind ), "struct and wrapper have different size!" );
11779
11780 struct SparseImageMemoryBind
11781 {
11782 SparseImageMemoryBind( ImageSubresource subresource_ = ImageSubresource(), Offset3D offset_ = Offset3D(), Extent3D extent_ = Extent3D(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11783 : subresource( subresource_ )
11784 , offset( offset_ )
11785 , extent( extent_ )
11786 , memory( memory_ )
11787 , memoryOffset( memoryOffset_ )
11788 , flags( flags_ )
11789 {
11790 }
11791
11792 SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs )
11793 {
11794 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
11795 }
11796
11797 SparseImageMemoryBind& operator=( VkSparseImageMemoryBind const & rhs )
11798 {
11799 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
11800 return *this;
11801 }
11802
11803 SparseImageMemoryBind& setSubresource( ImageSubresource subresource_ )
11804 {
11805 subresource = subresource_;
11806 return *this;
11807 }
11808
11809 SparseImageMemoryBind& setOffset( Offset3D offset_ )
11810 {
11811 offset = offset_;
11812 return *this;
11813 }
11814
11815 SparseImageMemoryBind& setExtent( Extent3D extent_ )
11816 {
11817 extent = extent_;
11818 return *this;
11819 }
11820
11821 SparseImageMemoryBind& setMemory( DeviceMemory memory_ )
11822 {
11823 memory = memory_;
11824 return *this;
11825 }
11826
11827 SparseImageMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
11828 {
11829 memoryOffset = memoryOffset_;
11830 return *this;
11831 }
11832
11833 SparseImageMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
11834 {
11835 flags = flags_;
11836 return *this;
11837 }
11838
11839 operator const VkSparseImageMemoryBind&() const
11840 {
11841 return *reinterpret_cast<const VkSparseImageMemoryBind*>(this);
11842 }
11843
11844 bool operator==( SparseImageMemoryBind const& rhs ) const
11845 {
11846 return ( subresource == rhs.subresource )
11847 && ( offset == rhs.offset )
11848 && ( extent == rhs.extent )
11849 && ( memory == rhs.memory )
11850 && ( memoryOffset == rhs.memoryOffset )
11851 && ( flags == rhs.flags );
11852 }
11853
11854 bool operator!=( SparseImageMemoryBind const& rhs ) const
11855 {
11856 return !operator==( rhs );
11857 }
11858
11859 ImageSubresource subresource;
11860 Offset3D offset;
11861 Extent3D extent;
11862 DeviceMemory memory;
11863 DeviceSize memoryOffset;
11864 SparseMemoryBindFlags flags;
11865 };
11866 static_assert( sizeof( SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ), "struct and wrapper have different size!" );
11867
11868 struct SparseBufferMemoryBindInfo
11869 {
11870 SparseBufferMemoryBindInfo( Buffer buffer_ = Buffer(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
11871 : buffer( buffer_ )
11872 , bindCount( bindCount_ )
11873 , pBinds( pBinds_ )
11874 {
11875 }
11876
11877 SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs )
11878 {
11879 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
11880 }
11881
11882 SparseBufferMemoryBindInfo& operator=( VkSparseBufferMemoryBindInfo const & rhs )
11883 {
11884 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
11885 return *this;
11886 }
11887
11888 SparseBufferMemoryBindInfo& setBuffer( Buffer buffer_ )
11889 {
11890 buffer = buffer_;
11891 return *this;
11892 }
11893
11894 SparseBufferMemoryBindInfo& setBindCount( uint32_t bindCount_ )
11895 {
11896 bindCount = bindCount_;
11897 return *this;
11898 }
11899
11900 SparseBufferMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
11901 {
11902 pBinds = pBinds_;
11903 return *this;
11904 }
11905
11906 operator const VkSparseBufferMemoryBindInfo&() const
11907 {
11908 return *reinterpret_cast<const VkSparseBufferMemoryBindInfo*>(this);
11909 }
11910
11911 bool operator==( SparseBufferMemoryBindInfo const& rhs ) const
11912 {
11913 return ( buffer == rhs.buffer )
11914 && ( bindCount == rhs.bindCount )
11915 && ( pBinds == rhs.pBinds );
11916 }
11917
11918 bool operator!=( SparseBufferMemoryBindInfo const& rhs ) const
11919 {
11920 return !operator==( rhs );
11921 }
11922
11923 Buffer buffer;
11924 uint32_t bindCount;
11925 const SparseMemoryBind* pBinds;
11926 };
11927 static_assert( sizeof( SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ), "struct and wrapper have different size!" );
11928
11929 struct SparseImageOpaqueMemoryBindInfo
11930 {
11931 SparseImageOpaqueMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
11932 : image( image_ )
11933 , bindCount( bindCount_ )
11934 , pBinds( pBinds_ )
11935 {
11936 }
11937
11938 SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs )
11939 {
11940 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
11941 }
11942
11943 SparseImageOpaqueMemoryBindInfo& operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs )
11944 {
11945 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
11946 return *this;
11947 }
11948
11949 SparseImageOpaqueMemoryBindInfo& setImage( Image image_ )
11950 {
11951 image = image_;
11952 return *this;
11953 }
11954
11955 SparseImageOpaqueMemoryBindInfo& setBindCount( uint32_t bindCount_ )
11956 {
11957 bindCount = bindCount_;
11958 return *this;
11959 }
11960
11961 SparseImageOpaqueMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
11962 {
11963 pBinds = pBinds_;
11964 return *this;
11965 }
11966
11967 operator const VkSparseImageOpaqueMemoryBindInfo&() const
11968 {
11969 return *reinterpret_cast<const VkSparseImageOpaqueMemoryBindInfo*>(this);
11970 }
11971
11972 bool operator==( SparseImageOpaqueMemoryBindInfo const& rhs ) const
11973 {
11974 return ( image == rhs.image )
11975 && ( bindCount == rhs.bindCount )
11976 && ( pBinds == rhs.pBinds );
11977 }
11978
11979 bool operator!=( SparseImageOpaqueMemoryBindInfo const& rhs ) const
11980 {
11981 return !operator==( rhs );
11982 }
11983
11984 Image image;
11985 uint32_t bindCount;
11986 const SparseMemoryBind* pBinds;
11987 };
11988 static_assert( sizeof( SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ), "struct and wrapper have different size!" );
11989
11990 struct SparseImageMemoryBindInfo
11991 {
11992 SparseImageMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseImageMemoryBind* pBinds_ = nullptr )
11993 : image( image_ )
11994 , bindCount( bindCount_ )
11995 , pBinds( pBinds_ )
11996 {
11997 }
11998
11999 SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs )
12000 {
12001 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12002 }
12003
12004 SparseImageMemoryBindInfo& operator=( VkSparseImageMemoryBindInfo const & rhs )
12005 {
12006 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12007 return *this;
12008 }
12009
12010 SparseImageMemoryBindInfo& setImage( Image image_ )
12011 {
12012 image = image_;
12013 return *this;
12014 }
12015
12016 SparseImageMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12017 {
12018 bindCount = bindCount_;
12019 return *this;
12020 }
12021
12022 SparseImageMemoryBindInfo& setPBinds( const SparseImageMemoryBind* pBinds_ )
12023 {
12024 pBinds = pBinds_;
12025 return *this;
12026 }
12027
12028 operator const VkSparseImageMemoryBindInfo&() const
12029 {
12030 return *reinterpret_cast<const VkSparseImageMemoryBindInfo*>(this);
12031 }
12032
12033 bool operator==( SparseImageMemoryBindInfo const& rhs ) const
12034 {
12035 return ( image == rhs.image )
12036 && ( bindCount == rhs.bindCount )
12037 && ( pBinds == rhs.pBinds );
12038 }
12039
12040 bool operator!=( SparseImageMemoryBindInfo const& rhs ) const
12041 {
12042 return !operator==( rhs );
12043 }
12044
12045 Image image;
12046 uint32_t bindCount;
12047 const SparseImageMemoryBind* pBinds;
12048 };
12049 static_assert( sizeof( SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ), "struct and wrapper have different size!" );
12050
12051 struct BindSparseInfo
12052 {
12053 BindSparseInfo( uint32_t waitSemaphoreCount_ = 0, const Semaphore* pWaitSemaphores_ = nullptr, uint32_t bufferBindCount_ = 0, const SparseBufferMemoryBindInfo* pBufferBinds_ = nullptr, uint32_t imageOpaqueBindCount_ = 0, const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds_ = nullptr, uint32_t imageBindCount_ = 0, const SparseImageMemoryBindInfo* pImageBinds_ = nullptr, uint32_t signalSemaphoreCount_ = 0, const Semaphore* pSignalSemaphores_ = nullptr )
12054 : sType( StructureType::eBindSparseInfo )
12055 , pNext( nullptr )
12056 , waitSemaphoreCount( waitSemaphoreCount_ )
12057 , pWaitSemaphores( pWaitSemaphores_ )
12058 , bufferBindCount( bufferBindCount_ )
12059 , pBufferBinds( pBufferBinds_ )
12060 , imageOpaqueBindCount( imageOpaqueBindCount_ )
12061 , pImageOpaqueBinds( pImageOpaqueBinds_ )
12062 , imageBindCount( imageBindCount_ )
12063 , pImageBinds( pImageBinds_ )
12064 , signalSemaphoreCount( signalSemaphoreCount_ )
12065 , pSignalSemaphores( pSignalSemaphores_ )
12066 {
12067 }
12068
12069 BindSparseInfo( VkBindSparseInfo const & rhs )
12070 {
12071 memcpy( this, &rhs, sizeof(BindSparseInfo) );
12072 }
12073
12074 BindSparseInfo& operator=( VkBindSparseInfo const & rhs )
12075 {
12076 memcpy( this, &rhs, sizeof(BindSparseInfo) );
12077 return *this;
12078 }
12079
12080 BindSparseInfo& setSType( StructureType sType_ )
12081 {
12082 sType = sType_;
12083 return *this;
12084 }
12085
12086 BindSparseInfo& setPNext( const void* pNext_ )
12087 {
12088 pNext = pNext_;
12089 return *this;
12090 }
12091
12092 BindSparseInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
12093 {
12094 waitSemaphoreCount = waitSemaphoreCount_;
12095 return *this;
12096 }
12097
12098 BindSparseInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
12099 {
12100 pWaitSemaphores = pWaitSemaphores_;
12101 return *this;
12102 }
12103
12104 BindSparseInfo& setBufferBindCount( uint32_t bufferBindCount_ )
12105 {
12106 bufferBindCount = bufferBindCount_;
12107 return *this;
12108 }
12109
12110 BindSparseInfo& setPBufferBinds( const SparseBufferMemoryBindInfo* pBufferBinds_ )
12111 {
12112 pBufferBinds = pBufferBinds_;
12113 return *this;
12114 }
12115
12116 BindSparseInfo& setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ )
12117 {
12118 imageOpaqueBindCount = imageOpaqueBindCount_;
12119 return *this;
12120 }
12121
12122 BindSparseInfo& setPImageOpaqueBinds( const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds_ )
12123 {
12124 pImageOpaqueBinds = pImageOpaqueBinds_;
12125 return *this;
12126 }
12127
12128 BindSparseInfo& setImageBindCount( uint32_t imageBindCount_ )
12129 {
12130 imageBindCount = imageBindCount_;
12131 return *this;
12132 }
12133
12134 BindSparseInfo& setPImageBinds( const SparseImageMemoryBindInfo* pImageBinds_ )
12135 {
12136 pImageBinds = pImageBinds_;
12137 return *this;
12138 }
12139
12140 BindSparseInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
12141 {
12142 signalSemaphoreCount = signalSemaphoreCount_;
12143 return *this;
12144 }
12145
12146 BindSparseInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
12147 {
12148 pSignalSemaphores = pSignalSemaphores_;
12149 return *this;
12150 }
12151
12152 operator const VkBindSparseInfo&() const
12153 {
12154 return *reinterpret_cast<const VkBindSparseInfo*>(this);
12155 }
12156
12157 bool operator==( BindSparseInfo const& rhs ) const
12158 {
12159 return ( sType == rhs.sType )
12160 && ( pNext == rhs.pNext )
12161 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
12162 && ( pWaitSemaphores == rhs.pWaitSemaphores )
12163 && ( bufferBindCount == rhs.bufferBindCount )
12164 && ( pBufferBinds == rhs.pBufferBinds )
12165 && ( imageOpaqueBindCount == rhs.imageOpaqueBindCount )
12166 && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds )
12167 && ( imageBindCount == rhs.imageBindCount )
12168 && ( pImageBinds == rhs.pImageBinds )
12169 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
12170 && ( pSignalSemaphores == rhs.pSignalSemaphores );
12171 }
12172
12173 bool operator!=( BindSparseInfo const& rhs ) const
12174 {
12175 return !operator==( rhs );
12176 }
12177
12178 private:
12179 StructureType sType;
12180
12181 public:
12182 const void* pNext;
12183 uint32_t waitSemaphoreCount;
12184 const Semaphore* pWaitSemaphores;
12185 uint32_t bufferBindCount;
12186 const SparseBufferMemoryBindInfo* pBufferBinds;
12187 uint32_t imageOpaqueBindCount;
12188 const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
12189 uint32_t imageBindCount;
12190 const SparseImageMemoryBindInfo* pImageBinds;
12191 uint32_t signalSemaphoreCount;
12192 const Semaphore* pSignalSemaphores;
12193 };
12194 static_assert( sizeof( BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" );
12195
12196 enum class PipelineStageFlagBits
12197 {
12198 eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
12199 eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
12200 eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
12201 eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
12202 eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
12203 eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
12204 eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
12205 eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
12206 eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
12207 eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
12208 eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
12209 eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
12210 eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT,
12211 eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
12212 eHost = VK_PIPELINE_STAGE_HOST_BIT,
12213 eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
12214 eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
12215 };
12216
12217 using PipelineStageFlags = Flags<PipelineStageFlagBits, VkPipelineStageFlags>;
12218
12219 inline PipelineStageFlags operator|( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 )
12220 {
12221 return PipelineStageFlags( bit0 ) | bit1;
12222 }
12223
12224 enum class CommandPoolCreateFlagBits
12225 {
12226 eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,
12227 eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
12228 };
12229
12230 using CommandPoolCreateFlags = Flags<CommandPoolCreateFlagBits, VkCommandPoolCreateFlags>;
12231
12232 inline CommandPoolCreateFlags operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 )
12233 {
12234 return CommandPoolCreateFlags( bit0 ) | bit1;
12235 }
12236
12237 struct CommandPoolCreateInfo
12238 {
12239 CommandPoolCreateInfo( CommandPoolCreateFlags flags_ = CommandPoolCreateFlags(), uint32_t queueFamilyIndex_ = 0 )
12240 : sType( StructureType::eCommandPoolCreateInfo )
12241 , pNext( nullptr )
12242 , flags( flags_ )
12243 , queueFamilyIndex( queueFamilyIndex_ )
12244 {
12245 }
12246
12247 CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs )
12248 {
12249 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12250 }
12251
12252 CommandPoolCreateInfo& operator=( VkCommandPoolCreateInfo const & rhs )
12253 {
12254 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12255 return *this;
12256 }
12257
12258 CommandPoolCreateInfo& setSType( StructureType sType_ )
12259 {
12260 sType = sType_;
12261 return *this;
12262 }
12263
12264 CommandPoolCreateInfo& setPNext( const void* pNext_ )
12265 {
12266 pNext = pNext_;
12267 return *this;
12268 }
12269
12270 CommandPoolCreateInfo& setFlags( CommandPoolCreateFlags flags_ )
12271 {
12272 flags = flags_;
12273 return *this;
12274 }
12275
12276 CommandPoolCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
12277 {
12278 queueFamilyIndex = queueFamilyIndex_;
12279 return *this;
12280 }
12281
12282 operator const VkCommandPoolCreateInfo&() const
12283 {
12284 return *reinterpret_cast<const VkCommandPoolCreateInfo*>(this);
12285 }
12286
12287 bool operator==( CommandPoolCreateInfo const& rhs ) const
12288 {
12289 return ( sType == rhs.sType )
12290 && ( pNext == rhs.pNext )
12291 && ( flags == rhs.flags )
12292 && ( queueFamilyIndex == rhs.queueFamilyIndex );
12293 }
12294
12295 bool operator!=( CommandPoolCreateInfo const& rhs ) const
12296 {
12297 return !operator==( rhs );
12298 }
12299
12300 private:
12301 StructureType sType;
12302
12303 public:
12304 const void* pNext;
12305 CommandPoolCreateFlags flags;
12306 uint32_t queueFamilyIndex;
12307 };
12308 static_assert( sizeof( CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ), "struct and wrapper have different size!" );
12309
12310 enum class CommandPoolResetFlagBits
12311 {
12312 eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
12313 };
12314
12315 using CommandPoolResetFlags = Flags<CommandPoolResetFlagBits, VkCommandPoolResetFlags>;
12316
12317 inline CommandPoolResetFlags operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 )
12318 {
12319 return CommandPoolResetFlags( bit0 ) | bit1;
12320 }
12321
12322 enum class CommandBufferResetFlagBits
12323 {
12324 eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
12325 };
12326
12327 using CommandBufferResetFlags = Flags<CommandBufferResetFlagBits, VkCommandBufferResetFlags>;
12328
12329 inline CommandBufferResetFlags operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 )
12330 {
12331 return CommandBufferResetFlags( bit0 ) | bit1;
12332 }
12333
12334 enum class SampleCountFlagBits
12335 {
12336 e1 = VK_SAMPLE_COUNT_1_BIT,
12337 e2 = VK_SAMPLE_COUNT_2_BIT,
12338 e4 = VK_SAMPLE_COUNT_4_BIT,
12339 e8 = VK_SAMPLE_COUNT_8_BIT,
12340 e16 = VK_SAMPLE_COUNT_16_BIT,
12341 e32 = VK_SAMPLE_COUNT_32_BIT,
12342 e64 = VK_SAMPLE_COUNT_64_BIT
12343 };
12344
12345 using SampleCountFlags = Flags<SampleCountFlagBits, VkSampleCountFlags>;
12346
12347 inline SampleCountFlags operator|( SampleCountFlagBits bit0, SampleCountFlagBits bit1 )
12348 {
12349 return SampleCountFlags( bit0 ) | bit1;
12350 }
12351
12352 struct ImageFormatProperties
12353 {
12354 operator const VkImageFormatProperties&() const
12355 {
12356 return *reinterpret_cast<const VkImageFormatProperties*>(this);
12357 }
12358
12359 bool operator==( ImageFormatProperties const& rhs ) const
12360 {
12361 return ( maxExtent == rhs.maxExtent )
12362 && ( maxMipLevels == rhs.maxMipLevels )
12363 && ( maxArrayLayers == rhs.maxArrayLayers )
12364 && ( sampleCounts == rhs.sampleCounts )
12365 && ( maxResourceSize == rhs.maxResourceSize );
12366 }
12367
12368 bool operator!=( ImageFormatProperties const& rhs ) const
12369 {
12370 return !operator==( rhs );
12371 }
12372
12373 Extent3D maxExtent;
12374 uint32_t maxMipLevels;
12375 uint32_t maxArrayLayers;
12376 SampleCountFlags sampleCounts;
12377 DeviceSize maxResourceSize;
12378 };
12379 static_assert( sizeof( ImageFormatProperties ) == sizeof( VkImageFormatProperties ), "struct and wrapper have different size!" );
12380
12381 struct ImageCreateInfo
12382 {
12383 ImageCreateInfo( ImageCreateFlags flags_ = ImageCreateFlags(), ImageType imageType_ = ImageType::e1D, Format format_ = Format::eUndefined, Extent3D extent_ = Extent3D(), uint32_t mipLevels_ = 0, uint32_t arrayLayers_ = 0, SampleCountFlagBits samples_ = SampleCountFlagBits::e1, ImageTiling tiling_ = ImageTiling::eOptimal, ImageUsageFlags usage_ = ImageUsageFlags(), SharingMode sharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr, ImageLayout initialLayout_ = ImageLayout::eUndefined )
12384 : sType( StructureType::eImageCreateInfo )
12385 , pNext( nullptr )
12386 , flags( flags_ )
12387 , imageType( imageType_ )
12388 , format( format_ )
12389 , extent( extent_ )
12390 , mipLevels( mipLevels_ )
12391 , arrayLayers( arrayLayers_ )
12392 , samples( samples_ )
12393 , tiling( tiling_ )
12394 , usage( usage_ )
12395 , sharingMode( sharingMode_ )
12396 , queueFamilyIndexCount( queueFamilyIndexCount_ )
12397 , pQueueFamilyIndices( pQueueFamilyIndices_ )
12398 , initialLayout( initialLayout_ )
12399 {
12400 }
12401
12402 ImageCreateInfo( VkImageCreateInfo const & rhs )
12403 {
12404 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12405 }
12406
12407 ImageCreateInfo& operator=( VkImageCreateInfo const & rhs )
12408 {
12409 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12410 return *this;
12411 }
12412
12413 ImageCreateInfo& setSType( StructureType sType_ )
12414 {
12415 sType = sType_;
12416 return *this;
12417 }
12418
12419 ImageCreateInfo& setPNext( const void* pNext_ )
12420 {
12421 pNext = pNext_;
12422 return *this;
12423 }
12424
12425 ImageCreateInfo& setFlags( ImageCreateFlags flags_ )
12426 {
12427 flags = flags_;
12428 return *this;
12429 }
12430
12431 ImageCreateInfo& setImageType( ImageType imageType_ )
12432 {
12433 imageType = imageType_;
12434 return *this;
12435 }
12436
12437 ImageCreateInfo& setFormat( Format format_ )
12438 {
12439 format = format_;
12440 return *this;
12441 }
12442
12443 ImageCreateInfo& setExtent( Extent3D extent_ )
12444 {
12445 extent = extent_;
12446 return *this;
12447 }
12448
12449 ImageCreateInfo& setMipLevels( uint32_t mipLevels_ )
12450 {
12451 mipLevels = mipLevels_;
12452 return *this;
12453 }
12454
12455 ImageCreateInfo& setArrayLayers( uint32_t arrayLayers_ )
12456 {
12457 arrayLayers = arrayLayers_;
12458 return *this;
12459 }
12460
12461 ImageCreateInfo& setSamples( SampleCountFlagBits samples_ )
12462 {
12463 samples = samples_;
12464 return *this;
12465 }
12466
12467 ImageCreateInfo& setTiling( ImageTiling tiling_ )
12468 {
12469 tiling = tiling_;
12470 return *this;
12471 }
12472
12473 ImageCreateInfo& setUsage( ImageUsageFlags usage_ )
12474 {
12475 usage = usage_;
12476 return *this;
12477 }
12478
12479 ImageCreateInfo& setSharingMode( SharingMode sharingMode_ )
12480 {
12481 sharingMode = sharingMode_;
12482 return *this;
12483 }
12484
12485 ImageCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
12486 {
12487 queueFamilyIndexCount = queueFamilyIndexCount_;
12488 return *this;
12489 }
12490
12491 ImageCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
12492 {
12493 pQueueFamilyIndices = pQueueFamilyIndices_;
12494 return *this;
12495 }
12496
12497 ImageCreateInfo& setInitialLayout( ImageLayout initialLayout_ )
12498 {
12499 initialLayout = initialLayout_;
12500 return *this;
12501 }
12502
12503 operator const VkImageCreateInfo&() const
12504 {
12505 return *reinterpret_cast<const VkImageCreateInfo*>(this);
12506 }
12507
12508 bool operator==( ImageCreateInfo const& rhs ) const
12509 {
12510 return ( sType == rhs.sType )
12511 && ( pNext == rhs.pNext )
12512 && ( flags == rhs.flags )
12513 && ( imageType == rhs.imageType )
12514 && ( format == rhs.format )
12515 && ( extent == rhs.extent )
12516 && ( mipLevels == rhs.mipLevels )
12517 && ( arrayLayers == rhs.arrayLayers )
12518 && ( samples == rhs.samples )
12519 && ( tiling == rhs.tiling )
12520 && ( usage == rhs.usage )
12521 && ( sharingMode == rhs.sharingMode )
12522 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
12523 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
12524 && ( initialLayout == rhs.initialLayout );
12525 }
12526
12527 bool operator!=( ImageCreateInfo const& rhs ) const
12528 {
12529 return !operator==( rhs );
12530 }
12531
12532 private:
12533 StructureType sType;
12534
12535 public:
12536 const void* pNext;
12537 ImageCreateFlags flags;
12538 ImageType imageType;
12539 Format format;
12540 Extent3D extent;
12541 uint32_t mipLevels;
12542 uint32_t arrayLayers;
12543 SampleCountFlagBits samples;
12544 ImageTiling tiling;
12545 ImageUsageFlags usage;
12546 SharingMode sharingMode;
12547 uint32_t queueFamilyIndexCount;
12548 const uint32_t* pQueueFamilyIndices;
12549 ImageLayout initialLayout;
12550 };
12551 static_assert( sizeof( ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" );
12552
12553 struct PipelineMultisampleStateCreateInfo
12554 {
12555 PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateFlags flags_ = PipelineMultisampleStateCreateFlags(), SampleCountFlagBits rasterizationSamples_ = SampleCountFlagBits::e1, Bool32 sampleShadingEnable_ = 0, float minSampleShading_ = 0, const SampleMask* pSampleMask_ = nullptr, Bool32 alphaToCoverageEnable_ = 0, Bool32 alphaToOneEnable_ = 0 )
12556 : sType( StructureType::ePipelineMultisampleStateCreateInfo )
12557 , pNext( nullptr )
12558 , flags( flags_ )
12559 , rasterizationSamples( rasterizationSamples_ )
12560 , sampleShadingEnable( sampleShadingEnable_ )
12561 , minSampleShading( minSampleShading_ )
12562 , pSampleMask( pSampleMask_ )
12563 , alphaToCoverageEnable( alphaToCoverageEnable_ )
12564 , alphaToOneEnable( alphaToOneEnable_ )
12565 {
12566 }
12567
12568 PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs )
12569 {
12570 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12571 }
12572
12573 PipelineMultisampleStateCreateInfo& operator=( VkPipelineMultisampleStateCreateInfo const & rhs )
12574 {
12575 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12576 return *this;
12577 }
12578
12579 PipelineMultisampleStateCreateInfo& setSType( StructureType sType_ )
12580 {
12581 sType = sType_;
12582 return *this;
12583 }
12584
12585 PipelineMultisampleStateCreateInfo& setPNext( const void* pNext_ )
12586 {
12587 pNext = pNext_;
12588 return *this;
12589 }
12590
12591 PipelineMultisampleStateCreateInfo& setFlags( PipelineMultisampleStateCreateFlags flags_ )
12592 {
12593 flags = flags_;
12594 return *this;
12595 }
12596
12597 PipelineMultisampleStateCreateInfo& setRasterizationSamples( SampleCountFlagBits rasterizationSamples_ )
12598 {
12599 rasterizationSamples = rasterizationSamples_;
12600 return *this;
12601 }
12602
12603 PipelineMultisampleStateCreateInfo& setSampleShadingEnable( Bool32 sampleShadingEnable_ )
12604 {
12605 sampleShadingEnable = sampleShadingEnable_;
12606 return *this;
12607 }
12608
12609 PipelineMultisampleStateCreateInfo& setMinSampleShading( float minSampleShading_ )
12610 {
12611 minSampleShading = minSampleShading_;
12612 return *this;
12613 }
12614
12615 PipelineMultisampleStateCreateInfo& setPSampleMask( const SampleMask* pSampleMask_ )
12616 {
12617 pSampleMask = pSampleMask_;
12618 return *this;
12619 }
12620
12621 PipelineMultisampleStateCreateInfo& setAlphaToCoverageEnable( Bool32 alphaToCoverageEnable_ )
12622 {
12623 alphaToCoverageEnable = alphaToCoverageEnable_;
12624 return *this;
12625 }
12626
12627 PipelineMultisampleStateCreateInfo& setAlphaToOneEnable( Bool32 alphaToOneEnable_ )
12628 {
12629 alphaToOneEnable = alphaToOneEnable_;
12630 return *this;
12631 }
12632
12633 operator const VkPipelineMultisampleStateCreateInfo&() const
12634 {
12635 return *reinterpret_cast<const VkPipelineMultisampleStateCreateInfo*>(this);
12636 }
12637
12638 bool operator==( PipelineMultisampleStateCreateInfo const& rhs ) const
12639 {
12640 return ( sType == rhs.sType )
12641 && ( pNext == rhs.pNext )
12642 && ( flags == rhs.flags )
12643 && ( rasterizationSamples == rhs.rasterizationSamples )
12644 && ( sampleShadingEnable == rhs.sampleShadingEnable )
12645 && ( minSampleShading == rhs.minSampleShading )
12646 && ( pSampleMask == rhs.pSampleMask )
12647 && ( alphaToCoverageEnable == rhs.alphaToCoverageEnable )
12648 && ( alphaToOneEnable == rhs.alphaToOneEnable );
12649 }
12650
12651 bool operator!=( PipelineMultisampleStateCreateInfo const& rhs ) const
12652 {
12653 return !operator==( rhs );
12654 }
12655
12656 private:
12657 StructureType sType;
12658
12659 public:
12660 const void* pNext;
12661 PipelineMultisampleStateCreateFlags flags;
12662 SampleCountFlagBits rasterizationSamples;
12663 Bool32 sampleShadingEnable;
12664 float minSampleShading;
12665 const SampleMask* pSampleMask;
12666 Bool32 alphaToCoverageEnable;
12667 Bool32 alphaToOneEnable;
12668 };
12669 static_assert( sizeof( PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ), "struct and wrapper have different size!" );
12670
12671 struct GraphicsPipelineCreateInfo
12672 {
12673 GraphicsPipelineCreateInfo( PipelineCreateFlags flags_ = PipelineCreateFlags(), uint32_t stageCount_ = 0, const PipelineShaderStageCreateInfo* pStages_ = nullptr, const PipelineVertexInputStateCreateInfo* pVertexInputState_ = nullptr, const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState_ = nullptr, const PipelineTessellationStateCreateInfo* pTessellationState_ = nullptr, const PipelineViewportStateCreateInfo* pViewportState_ = nullptr, const PipelineRasterizationStateCreateInfo* pRasterizationState_ = nullptr, const PipelineMultisampleStateCreateInfo* pMultisampleState_ = nullptr, const PipelineDepthStencilStateCreateInfo* pDepthStencilState_ = nullptr, const PipelineColorBlendStateCreateInfo* pColorBlendState_ = nullptr, const PipelineDynamicStateCreateInfo* pDynamicState_ = nullptr, PipelineLayout layout_ = PipelineLayout(), RenderPass renderPass_ = RenderPass(), uint32_t subpass_ = 0, Pipeline basePipelineHandle_ = Pipeline(), int32_t basePipelineIndex_ = 0 )
12674 : sType( StructureType::eGraphicsPipelineCreateInfo )
12675 , pNext( nullptr )
12676 , flags( flags_ )
12677 , stageCount( stageCount_ )
12678 , pStages( pStages_ )
12679 , pVertexInputState( pVertexInputState_ )
12680 , pInputAssemblyState( pInputAssemblyState_ )
12681 , pTessellationState( pTessellationState_ )
12682 , pViewportState( pViewportState_ )
12683 , pRasterizationState( pRasterizationState_ )
12684 , pMultisampleState( pMultisampleState_ )
12685 , pDepthStencilState( pDepthStencilState_ )
12686 , pColorBlendState( pColorBlendState_ )
12687 , pDynamicState( pDynamicState_ )
12688 , layout( layout_ )
12689 , renderPass( renderPass_ )
12690 , subpass( subpass_ )
12691 , basePipelineHandle( basePipelineHandle_ )
12692 , basePipelineIndex( basePipelineIndex_ )
12693 {
12694 }
12695
12696 GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs )
12697 {
12698 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12699 }
12700
12701 GraphicsPipelineCreateInfo& operator=( VkGraphicsPipelineCreateInfo const & rhs )
12702 {
12703 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12704 return *this;
12705 }
12706
12707 GraphicsPipelineCreateInfo& setSType( StructureType sType_ )
12708 {
12709 sType = sType_;
12710 return *this;
12711 }
12712
12713 GraphicsPipelineCreateInfo& setPNext( const void* pNext_ )
12714 {
12715 pNext = pNext_;
12716 return *this;
12717 }
12718
12719 GraphicsPipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
12720 {
12721 flags = flags_;
12722 return *this;
12723 }
12724
12725 GraphicsPipelineCreateInfo& setStageCount( uint32_t stageCount_ )
12726 {
12727 stageCount = stageCount_;
12728 return *this;
12729 }
12730
12731 GraphicsPipelineCreateInfo& setPStages( const PipelineShaderStageCreateInfo* pStages_ )
12732 {
12733 pStages = pStages_;
12734 return *this;
12735 }
12736
12737 GraphicsPipelineCreateInfo& setPVertexInputState( const PipelineVertexInputStateCreateInfo* pVertexInputState_ )
12738 {
12739 pVertexInputState = pVertexInputState_;
12740 return *this;
12741 }
12742
12743 GraphicsPipelineCreateInfo& setPInputAssemblyState( const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState_ )
12744 {
12745 pInputAssemblyState = pInputAssemblyState_;
12746 return *this;
12747 }
12748
12749 GraphicsPipelineCreateInfo& setPTessellationState( const PipelineTessellationStateCreateInfo* pTessellationState_ )
12750 {
12751 pTessellationState = pTessellationState_;
12752 return *this;
12753 }
12754
12755 GraphicsPipelineCreateInfo& setPViewportState( const PipelineViewportStateCreateInfo* pViewportState_ )
12756 {
12757 pViewportState = pViewportState_;
12758 return *this;
12759 }
12760
12761 GraphicsPipelineCreateInfo& setPRasterizationState( const PipelineRasterizationStateCreateInfo* pRasterizationState_ )
12762 {
12763 pRasterizationState = pRasterizationState_;
12764 return *this;
12765 }
12766
12767 GraphicsPipelineCreateInfo& setPMultisampleState( const PipelineMultisampleStateCreateInfo* pMultisampleState_ )
12768 {
12769 pMultisampleState = pMultisampleState_;
12770 return *this;
12771 }
12772
12773 GraphicsPipelineCreateInfo& setPDepthStencilState( const PipelineDepthStencilStateCreateInfo* pDepthStencilState_ )
12774 {
12775 pDepthStencilState = pDepthStencilState_;
12776 return *this;
12777 }
12778
12779 GraphicsPipelineCreateInfo& setPColorBlendState( const PipelineColorBlendStateCreateInfo* pColorBlendState_ )
12780 {
12781 pColorBlendState = pColorBlendState_;
12782 return *this;
12783 }
12784
12785 GraphicsPipelineCreateInfo& setPDynamicState( const PipelineDynamicStateCreateInfo* pDynamicState_ )
12786 {
12787 pDynamicState = pDynamicState_;
12788 return *this;
12789 }
12790
12791 GraphicsPipelineCreateInfo& setLayout( PipelineLayout layout_ )
12792 {
12793 layout = layout_;
12794 return *this;
12795 }
12796
12797 GraphicsPipelineCreateInfo& setRenderPass( RenderPass renderPass_ )
12798 {
12799 renderPass = renderPass_;
12800 return *this;
12801 }
12802
12803 GraphicsPipelineCreateInfo& setSubpass( uint32_t subpass_ )
12804 {
12805 subpass = subpass_;
12806 return *this;
12807 }
12808
12809 GraphicsPipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
12810 {
12811 basePipelineHandle = basePipelineHandle_;
12812 return *this;
12813 }
12814
12815 GraphicsPipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
12816 {
12817 basePipelineIndex = basePipelineIndex_;
12818 return *this;
12819 }
12820
12821 operator const VkGraphicsPipelineCreateInfo&() const
12822 {
12823 return *reinterpret_cast<const VkGraphicsPipelineCreateInfo*>(this);
12824 }
12825
12826 bool operator==( GraphicsPipelineCreateInfo const& rhs ) const
12827 {
12828 return ( sType == rhs.sType )
12829 && ( pNext == rhs.pNext )
12830 && ( flags == rhs.flags )
12831 && ( stageCount == rhs.stageCount )
12832 && ( pStages == rhs.pStages )
12833 && ( pVertexInputState == rhs.pVertexInputState )
12834 && ( pInputAssemblyState == rhs.pInputAssemblyState )
12835 && ( pTessellationState == rhs.pTessellationState )
12836 && ( pViewportState == rhs.pViewportState )
12837 && ( pRasterizationState == rhs.pRasterizationState )
12838 && ( pMultisampleState == rhs.pMultisampleState )
12839 && ( pDepthStencilState == rhs.pDepthStencilState )
12840 && ( pColorBlendState == rhs.pColorBlendState )
12841 && ( pDynamicState == rhs.pDynamicState )
12842 && ( layout == rhs.layout )
12843 && ( renderPass == rhs.renderPass )
12844 && ( subpass == rhs.subpass )
12845 && ( basePipelineHandle == rhs.basePipelineHandle )
12846 && ( basePipelineIndex == rhs.basePipelineIndex );
12847 }
12848
12849 bool operator!=( GraphicsPipelineCreateInfo const& rhs ) const
12850 {
12851 return !operator==( rhs );
12852 }
12853
12854 private:
12855 StructureType sType;
12856
12857 public:
12858 const void* pNext;
12859 PipelineCreateFlags flags;
12860 uint32_t stageCount;
12861 const PipelineShaderStageCreateInfo* pStages;
12862 const PipelineVertexInputStateCreateInfo* pVertexInputState;
12863 const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
12864 const PipelineTessellationStateCreateInfo* pTessellationState;
12865 const PipelineViewportStateCreateInfo* pViewportState;
12866 const PipelineRasterizationStateCreateInfo* pRasterizationState;
12867 const PipelineMultisampleStateCreateInfo* pMultisampleState;
12868 const PipelineDepthStencilStateCreateInfo* pDepthStencilState;
12869 const PipelineColorBlendStateCreateInfo* pColorBlendState;
12870 const PipelineDynamicStateCreateInfo* pDynamicState;
12871 PipelineLayout layout;
12872 RenderPass renderPass;
12873 uint32_t subpass;
12874 Pipeline basePipelineHandle;
12875 int32_t basePipelineIndex;
12876 };
12877 static_assert( sizeof( GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ), "struct and wrapper have different size!" );
12878
12879 struct PhysicalDeviceLimits
12880 {
12881 operator const VkPhysicalDeviceLimits&() const
12882 {
12883 return *reinterpret_cast<const VkPhysicalDeviceLimits*>(this);
12884 }
12885
12886 bool operator==( PhysicalDeviceLimits const& rhs ) const
12887 {
12888 return ( maxImageDimension1D == rhs.maxImageDimension1D )
12889 && ( maxImageDimension2D == rhs.maxImageDimension2D )
12890 && ( maxImageDimension3D == rhs.maxImageDimension3D )
12891 && ( maxImageDimensionCube == rhs.maxImageDimensionCube )
12892 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
12893 && ( maxTexelBufferElements == rhs.maxTexelBufferElements )
12894 && ( maxUniformBufferRange == rhs.maxUniformBufferRange )
12895 && ( maxStorageBufferRange == rhs.maxStorageBufferRange )
12896 && ( maxPushConstantsSize == rhs.maxPushConstantsSize )
12897 && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount )
12898 && ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount )
12899 && ( bufferImageGranularity == rhs.bufferImageGranularity )
12900 && ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize )
12901 && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets )
12902 && ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers )
12903 && ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers )
12904 && ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers )
12905 && ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages )
12906 && ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages )
12907 && ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments )
12908 && ( maxPerStageResources == rhs.maxPerStageResources )
12909 && ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers )
12910 && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers )
12911 && ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic )
12912 && ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers )
12913 && ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic )
12914 && ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages )
12915 && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages )
12916 && ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments )
12917 && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes )
12918 && ( maxVertexInputBindings == rhs.maxVertexInputBindings )
12919 && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset )
12920 && ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride )
12921 && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents )
12922 && ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel )
12923 && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize )
12924 && ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents )
12925 && ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents )
12926 && ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents )
12927 && ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents )
12928 && ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents )
12929 && ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents )
12930 && ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations )
12931 && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents )
12932 && ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents )
12933 && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices )
12934 && ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents )
12935 && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents )
12936 && ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments )
12937 && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments )
12938 && ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources )
12939 && ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize )
12940 && ( memcmp( maxComputeWorkGroupCount, rhs.maxComputeWorkGroupCount, 3 * sizeof( uint32_t ) ) == 0 )
12941 && ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations )
12942 && ( memcmp( maxComputeWorkGroupSize, rhs.maxComputeWorkGroupSize, 3 * sizeof( uint32_t ) ) == 0 )
12943 && ( subPixelPrecisionBits == rhs.subPixelPrecisionBits )
12944 && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits )
12945 && ( mipmapPrecisionBits == rhs.mipmapPrecisionBits )
12946 && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue )
12947 && ( maxDrawIndirectCount == rhs.maxDrawIndirectCount )
12948 && ( maxSamplerLodBias == rhs.maxSamplerLodBias )
12949 && ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy )
12950 && ( maxViewports == rhs.maxViewports )
12951 && ( memcmp( maxViewportDimensions, rhs.maxViewportDimensions, 2 * sizeof( uint32_t ) ) == 0 )
12952 && ( memcmp( viewportBoundsRange, rhs.viewportBoundsRange, 2 * sizeof( float ) ) == 0 )
12953 && ( viewportSubPixelBits == rhs.viewportSubPixelBits )
12954 && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment )
12955 && ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment )
12956 && ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment )
12957 && ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment )
12958 && ( minTexelOffset == rhs.minTexelOffset )
12959 && ( maxTexelOffset == rhs.maxTexelOffset )
12960 && ( minTexelGatherOffset == rhs.minTexelGatherOffset )
12961 && ( maxTexelGatherOffset == rhs.maxTexelGatherOffset )
12962 && ( minInterpolationOffset == rhs.minInterpolationOffset )
12963 && ( maxInterpolationOffset == rhs.maxInterpolationOffset )
12964 && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits )
12965 && ( maxFramebufferWidth == rhs.maxFramebufferWidth )
12966 && ( maxFramebufferHeight == rhs.maxFramebufferHeight )
12967 && ( maxFramebufferLayers == rhs.maxFramebufferLayers )
12968 && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts )
12969 && ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts )
12970 && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts )
12971 && ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts )
12972 && ( maxColorAttachments == rhs.maxColorAttachments )
12973 && ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts )
12974 && ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts )
12975 && ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts )
12976 && ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts )
12977 && ( storageImageSampleCounts == rhs.storageImageSampleCounts )
12978 && ( maxSampleMaskWords == rhs.maxSampleMaskWords )
12979 && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics )
12980 && ( timestampPeriod == rhs.timestampPeriod )
12981 && ( maxClipDistances == rhs.maxClipDistances )
12982 && ( maxCullDistances == rhs.maxCullDistances )
12983 && ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances )
12984 && ( discreteQueuePriorities == rhs.discreteQueuePriorities )
12985 && ( memcmp( pointSizeRange, rhs.pointSizeRange, 2 * sizeof( float ) ) == 0 )
12986 && ( memcmp( lineWidthRange, rhs.lineWidthRange, 2 * sizeof( float ) ) == 0 )
12987 && ( pointSizeGranularity == rhs.pointSizeGranularity )
12988 && ( lineWidthGranularity == rhs.lineWidthGranularity )
12989 && ( strictLines == rhs.strictLines )
12990 && ( standardSampleLocations == rhs.standardSampleLocations )
12991 && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment )
12992 && ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment )
12993 && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize );
12994 }
12995
12996 bool operator!=( PhysicalDeviceLimits const& rhs ) const
12997 {
12998 return !operator==( rhs );
12999 }
13000
13001 uint32_t maxImageDimension1D;
13002 uint32_t maxImageDimension2D;
13003 uint32_t maxImageDimension3D;
13004 uint32_t maxImageDimensionCube;
13005 uint32_t maxImageArrayLayers;
13006 uint32_t maxTexelBufferElements;
13007 uint32_t maxUniformBufferRange;
13008 uint32_t maxStorageBufferRange;
13009 uint32_t maxPushConstantsSize;
13010 uint32_t maxMemoryAllocationCount;
13011 uint32_t maxSamplerAllocationCount;
13012 DeviceSize bufferImageGranularity;
13013 DeviceSize sparseAddressSpaceSize;
13014 uint32_t maxBoundDescriptorSets;
13015 uint32_t maxPerStageDescriptorSamplers;
13016 uint32_t maxPerStageDescriptorUniformBuffers;
13017 uint32_t maxPerStageDescriptorStorageBuffers;
13018 uint32_t maxPerStageDescriptorSampledImages;
13019 uint32_t maxPerStageDescriptorStorageImages;
13020 uint32_t maxPerStageDescriptorInputAttachments;
13021 uint32_t maxPerStageResources;
13022 uint32_t maxDescriptorSetSamplers;
13023 uint32_t maxDescriptorSetUniformBuffers;
13024 uint32_t maxDescriptorSetUniformBuffersDynamic;
13025 uint32_t maxDescriptorSetStorageBuffers;
13026 uint32_t maxDescriptorSetStorageBuffersDynamic;
13027 uint32_t maxDescriptorSetSampledImages;
13028 uint32_t maxDescriptorSetStorageImages;
13029 uint32_t maxDescriptorSetInputAttachments;
13030 uint32_t maxVertexInputAttributes;
13031 uint32_t maxVertexInputBindings;
13032 uint32_t maxVertexInputAttributeOffset;
13033 uint32_t maxVertexInputBindingStride;
13034 uint32_t maxVertexOutputComponents;
13035 uint32_t maxTessellationGenerationLevel;
13036 uint32_t maxTessellationPatchSize;
13037 uint32_t maxTessellationControlPerVertexInputComponents;
13038 uint32_t maxTessellationControlPerVertexOutputComponents;
13039 uint32_t maxTessellationControlPerPatchOutputComponents;
13040 uint32_t maxTessellationControlTotalOutputComponents;
13041 uint32_t maxTessellationEvaluationInputComponents;
13042 uint32_t maxTessellationEvaluationOutputComponents;
13043 uint32_t maxGeometryShaderInvocations;
13044 uint32_t maxGeometryInputComponents;
13045 uint32_t maxGeometryOutputComponents;
13046 uint32_t maxGeometryOutputVertices;
13047 uint32_t maxGeometryTotalOutputComponents;
13048 uint32_t maxFragmentInputComponents;
13049 uint32_t maxFragmentOutputAttachments;
13050 uint32_t maxFragmentDualSrcAttachments;
13051 uint32_t maxFragmentCombinedOutputResources;
13052 uint32_t maxComputeSharedMemorySize;
13053 uint32_t maxComputeWorkGroupCount[3];
13054 uint32_t maxComputeWorkGroupInvocations;
13055 uint32_t maxComputeWorkGroupSize[3];
13056 uint32_t subPixelPrecisionBits;
13057 uint32_t subTexelPrecisionBits;
13058 uint32_t mipmapPrecisionBits;
13059 uint32_t maxDrawIndexedIndexValue;
13060 uint32_t maxDrawIndirectCount;
13061 float maxSamplerLodBias;
13062 float maxSamplerAnisotropy;
13063 uint32_t maxViewports;
13064 uint32_t maxViewportDimensions[2];
13065 float viewportBoundsRange[2];
13066 uint32_t viewportSubPixelBits;
13067 size_t minMemoryMapAlignment;
13068 DeviceSize minTexelBufferOffsetAlignment;
13069 DeviceSize minUniformBufferOffsetAlignment;
13070 DeviceSize minStorageBufferOffsetAlignment;
13071 int32_t minTexelOffset;
13072 uint32_t maxTexelOffset;
13073 int32_t minTexelGatherOffset;
13074 uint32_t maxTexelGatherOffset;
13075 float minInterpolationOffset;
13076 float maxInterpolationOffset;
13077 uint32_t subPixelInterpolationOffsetBits;
13078 uint32_t maxFramebufferWidth;
13079 uint32_t maxFramebufferHeight;
13080 uint32_t maxFramebufferLayers;
13081 SampleCountFlags framebufferColorSampleCounts;
13082 SampleCountFlags framebufferDepthSampleCounts;
13083 SampleCountFlags framebufferStencilSampleCounts;
13084 SampleCountFlags framebufferNoAttachmentsSampleCounts;
13085 uint32_t maxColorAttachments;
13086 SampleCountFlags sampledImageColorSampleCounts;
13087 SampleCountFlags sampledImageIntegerSampleCounts;
13088 SampleCountFlags sampledImageDepthSampleCounts;
13089 SampleCountFlags sampledImageStencilSampleCounts;
13090 SampleCountFlags storageImageSampleCounts;
13091 uint32_t maxSampleMaskWords;
13092 Bool32 timestampComputeAndGraphics;
13093 float timestampPeriod;
13094 uint32_t maxClipDistances;
13095 uint32_t maxCullDistances;
13096 uint32_t maxCombinedClipAndCullDistances;
13097 uint32_t discreteQueuePriorities;
13098 float pointSizeRange[2];
13099 float lineWidthRange[2];
13100 float pointSizeGranularity;
13101 float lineWidthGranularity;
13102 Bool32 strictLines;
13103 Bool32 standardSampleLocations;
13104 DeviceSize optimalBufferCopyOffsetAlignment;
13105 DeviceSize optimalBufferCopyRowPitchAlignment;
13106 DeviceSize nonCoherentAtomSize;
13107 };
13108 static_assert( sizeof( PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ), "struct and wrapper have different size!" );
13109
13110 struct PhysicalDeviceProperties
13111 {
13112 operator const VkPhysicalDeviceProperties&() const
13113 {
13114 return *reinterpret_cast<const VkPhysicalDeviceProperties*>(this);
13115 }
13116
13117 bool operator==( PhysicalDeviceProperties const& rhs ) const
13118 {
13119 return ( apiVersion == rhs.apiVersion )
13120 && ( driverVersion == rhs.driverVersion )
13121 && ( vendorID == rhs.vendorID )
13122 && ( deviceID == rhs.deviceID )
13123 && ( deviceType == rhs.deviceType )
13124 && ( memcmp( deviceName, rhs.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof( char ) ) == 0 )
13125 && ( memcmp( pipelineCacheUUID, rhs.pipelineCacheUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
13126 && ( limits == rhs.limits )
13127 && ( sparseProperties == rhs.sparseProperties );
13128 }
13129
13130 bool operator!=( PhysicalDeviceProperties const& rhs ) const
13131 {
13132 return !operator==( rhs );
13133 }
13134
13135 uint32_t apiVersion;
13136 uint32_t driverVersion;
13137 uint32_t vendorID;
13138 uint32_t deviceID;
13139 PhysicalDeviceType deviceType;
13140 char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
13141 uint8_t pipelineCacheUUID[VK_UUID_SIZE];
13142 PhysicalDeviceLimits limits;
13143 PhysicalDeviceSparseProperties sparseProperties;
13144 };
13145 static_assert( sizeof( PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ), "struct and wrapper have different size!" );
13146
13147 enum class AttachmentDescriptionFlagBits
13148 {
13149 eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
13150 };
13151
13152 using AttachmentDescriptionFlags = Flags<AttachmentDescriptionFlagBits, VkAttachmentDescriptionFlags>;
13153
13154 inline AttachmentDescriptionFlags operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 )
13155 {
13156 return AttachmentDescriptionFlags( bit0 ) | bit1;
13157 }
13158
13159 struct AttachmentDescription
13160 {
13161 AttachmentDescription( AttachmentDescriptionFlags flags_ = AttachmentDescriptionFlags(), Format format_ = Format::eUndefined, SampleCountFlagBits samples_ = SampleCountFlagBits::e1, AttachmentLoadOp loadOp_ = AttachmentLoadOp::eLoad, AttachmentStoreOp storeOp_ = AttachmentStoreOp::eStore, AttachmentLoadOp stencilLoadOp_ = AttachmentLoadOp::eLoad, AttachmentStoreOp stencilStoreOp_ = AttachmentStoreOp::eStore, ImageLayout initialLayout_ = ImageLayout::eUndefined, ImageLayout finalLayout_ = ImageLayout::eUndefined )
13162 : flags( flags_ )
13163 , format( format_ )
13164 , samples( samples_ )
13165 , loadOp( loadOp_ )
13166 , storeOp( storeOp_ )
13167 , stencilLoadOp( stencilLoadOp_ )
13168 , stencilStoreOp( stencilStoreOp_ )
13169 , initialLayout( initialLayout_ )
13170 , finalLayout( finalLayout_ )
13171 {
13172 }
13173
13174 AttachmentDescription( VkAttachmentDescription const & rhs )
13175 {
13176 memcpy( this, &rhs, sizeof(AttachmentDescription) );
13177 }
13178
13179 AttachmentDescription& operator=( VkAttachmentDescription const & rhs )
13180 {
13181 memcpy( this, &rhs, sizeof(AttachmentDescription) );
13182 return *this;
13183 }
13184
13185 AttachmentDescription& setFlags( AttachmentDescriptionFlags flags_ )
13186 {
13187 flags = flags_;
13188 return *this;
13189 }
13190
13191 AttachmentDescription& setFormat( Format format_ )
13192 {
13193 format = format_;
13194 return *this;
13195 }
13196
13197 AttachmentDescription& setSamples( SampleCountFlagBits samples_ )
13198 {
13199 samples = samples_;
13200 return *this;
13201 }
13202
13203 AttachmentDescription& setLoadOp( AttachmentLoadOp loadOp_ )
13204 {
13205 loadOp = loadOp_;
13206 return *this;
13207 }
13208
13209 AttachmentDescription& setStoreOp( AttachmentStoreOp storeOp_ )
13210 {
13211 storeOp = storeOp_;
13212 return *this;
13213 }
13214
13215 AttachmentDescription& setStencilLoadOp( AttachmentLoadOp stencilLoadOp_ )
13216 {
13217 stencilLoadOp = stencilLoadOp_;
13218 return *this;
13219 }
13220
13221 AttachmentDescription& setStencilStoreOp( AttachmentStoreOp stencilStoreOp_ )
13222 {
13223 stencilStoreOp = stencilStoreOp_;
13224 return *this;
13225 }
13226
13227 AttachmentDescription& setInitialLayout( ImageLayout initialLayout_ )
13228 {
13229 initialLayout = initialLayout_;
13230 return *this;
13231 }
13232
13233 AttachmentDescription& setFinalLayout( ImageLayout finalLayout_ )
13234 {
13235 finalLayout = finalLayout_;
13236 return *this;
13237 }
13238
13239 operator const VkAttachmentDescription&() const
13240 {
13241 return *reinterpret_cast<const VkAttachmentDescription*>(this);
13242 }
13243
13244 bool operator==( AttachmentDescription const& rhs ) const
13245 {
13246 return ( flags == rhs.flags )
13247 && ( format == rhs.format )
13248 && ( samples == rhs.samples )
13249 && ( loadOp == rhs.loadOp )
13250 && ( storeOp == rhs.storeOp )
13251 && ( stencilLoadOp == rhs.stencilLoadOp )
13252 && ( stencilStoreOp == rhs.stencilStoreOp )
13253 && ( initialLayout == rhs.initialLayout )
13254 && ( finalLayout == rhs.finalLayout );
13255 }
13256
13257 bool operator!=( AttachmentDescription const& rhs ) const
13258 {
13259 return !operator==( rhs );
13260 }
13261
13262 AttachmentDescriptionFlags flags;
13263 Format format;
13264 SampleCountFlagBits samples;
13265 AttachmentLoadOp loadOp;
13266 AttachmentStoreOp storeOp;
13267 AttachmentLoadOp stencilLoadOp;
13268 AttachmentStoreOp stencilStoreOp;
13269 ImageLayout initialLayout;
13270 ImageLayout finalLayout;
13271 };
13272 static_assert( sizeof( AttachmentDescription ) == sizeof( VkAttachmentDescription ), "struct and wrapper have different size!" );
13273
13274 enum class StencilFaceFlagBits
13275 {
13276 eFront = VK_STENCIL_FACE_FRONT_BIT,
13277 eBack = VK_STENCIL_FACE_BACK_BIT,
13278 eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK
13279 };
13280
13281 using StencilFaceFlags = Flags<StencilFaceFlagBits, VkStencilFaceFlags>;
13282
13283 inline StencilFaceFlags operator|( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 )
13284 {
13285 return StencilFaceFlags( bit0 ) | bit1;
13286 }
13287
13288 enum class DescriptorPoolCreateFlagBits
13289 {
13290 eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
13291 };
13292
13293 using DescriptorPoolCreateFlags = Flags<DescriptorPoolCreateFlagBits, VkDescriptorPoolCreateFlags>;
13294
13295 inline DescriptorPoolCreateFlags operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 )
13296 {
13297 return DescriptorPoolCreateFlags( bit0 ) | bit1;
13298 }
13299
13300 struct DescriptorPoolCreateInfo
13301 {
13302 DescriptorPoolCreateInfo( DescriptorPoolCreateFlags flags_ = DescriptorPoolCreateFlags(), uint32_t maxSets_ = 0, uint32_t poolSizeCount_ = 0, const DescriptorPoolSize* pPoolSizes_ = nullptr )
13303 : sType( StructureType::eDescriptorPoolCreateInfo )
13304 , pNext( nullptr )
13305 , flags( flags_ )
13306 , maxSets( maxSets_ )
13307 , poolSizeCount( poolSizeCount_ )
13308 , pPoolSizes( pPoolSizes_ )
13309 {
13310 }
13311
13312 DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs )
13313 {
13314 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13315 }
13316
13317 DescriptorPoolCreateInfo& operator=( VkDescriptorPoolCreateInfo const & rhs )
13318 {
13319 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13320 return *this;
13321 }
13322
13323 DescriptorPoolCreateInfo& setSType( StructureType sType_ )
13324 {
13325 sType = sType_;
13326 return *this;
13327 }
13328
13329 DescriptorPoolCreateInfo& setPNext( const void* pNext_ )
13330 {
13331 pNext = pNext_;
13332 return *this;
13333 }
13334
13335 DescriptorPoolCreateInfo& setFlags( DescriptorPoolCreateFlags flags_ )
13336 {
13337 flags = flags_;
13338 return *this;
13339 }
13340
13341 DescriptorPoolCreateInfo& setMaxSets( uint32_t maxSets_ )
13342 {
13343 maxSets = maxSets_;
13344 return *this;
13345 }
13346
13347 DescriptorPoolCreateInfo& setPoolSizeCount( uint32_t poolSizeCount_ )
13348 {
13349 poolSizeCount = poolSizeCount_;
13350 return *this;
13351 }
13352
13353 DescriptorPoolCreateInfo& setPPoolSizes( const DescriptorPoolSize* pPoolSizes_ )
13354 {
13355 pPoolSizes = pPoolSizes_;
13356 return *this;
13357 }
13358
13359 operator const VkDescriptorPoolCreateInfo&() const
13360 {
13361 return *reinterpret_cast<const VkDescriptorPoolCreateInfo*>(this);
13362 }
13363
13364 bool operator==( DescriptorPoolCreateInfo const& rhs ) const
13365 {
13366 return ( sType == rhs.sType )
13367 && ( pNext == rhs.pNext )
13368 && ( flags == rhs.flags )
13369 && ( maxSets == rhs.maxSets )
13370 && ( poolSizeCount == rhs.poolSizeCount )
13371 && ( pPoolSizes == rhs.pPoolSizes );
13372 }
13373
13374 bool operator!=( DescriptorPoolCreateInfo const& rhs ) const
13375 {
13376 return !operator==( rhs );
13377 }
13378
13379 private:
13380 StructureType sType;
13381
13382 public:
13383 const void* pNext;
13384 DescriptorPoolCreateFlags flags;
13385 uint32_t maxSets;
13386 uint32_t poolSizeCount;
13387 const DescriptorPoolSize* pPoolSizes;
13388 };
13389 static_assert( sizeof( DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ), "struct and wrapper have different size!" );
13390
13391 enum class DependencyFlagBits
13392 {
13393 eByRegion = VK_DEPENDENCY_BY_REGION_BIT
13394 };
13395
13396 using DependencyFlags = Flags<DependencyFlagBits, VkDependencyFlags>;
13397
13398 inline DependencyFlags operator|( DependencyFlagBits bit0, DependencyFlagBits bit1 )
13399 {
13400 return DependencyFlags( bit0 ) | bit1;
13401 }
13402
13403 class CommandBuffer
13404 {
13405 public:
13406 CommandBuffer()
13407 : m_commandBuffer(VK_NULL_HANDLE)
13408 {}
13409
13410#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
13411 CommandBuffer(VkCommandBuffer commandBuffer)
13412 : m_commandBuffer(commandBuffer)
13413 {}
13414
13415 CommandBuffer& operator=(VkCommandBuffer commandBuffer)
13416 {
13417 m_commandBuffer = commandBuffer;
13418 return *this;
13419 }
13420#endif
13421
Lenny Komowebf33162016-08-26 14:10:08 -060013422 bool operator==(CommandBuffer const &rhs) const
13423 {
13424 return m_commandBuffer == rhs.m_commandBuffer;
13425 }
13426
13427 bool operator!=(CommandBuffer const &rhs) const
13428 {
13429 return m_commandBuffer != rhs.m_commandBuffer;
13430 }
13431
13432 bool operator<(CommandBuffer const &rhs) const
13433 {
13434 return m_commandBuffer < rhs.m_commandBuffer;
13435 }
13436
Lenny Komowbed9b5c2016-08-11 11:23:15 -060013437 Result begin( const CommandBufferBeginInfo* pBeginInfo ) const
13438 {
13439 return static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( pBeginInfo ) ) );
13440 }
13441
13442#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13443 ResultValueType<void>::type begin( const CommandBufferBeginInfo & beginInfo ) const
13444 {
13445 Result result = static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( &beginInfo ) ) );
13446 return createResultValue( result, "vk::CommandBuffer::begin" );
13447 }
13448#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13449
13450#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13451 Result end( ) const
13452 {
13453 return static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13454 }
13455#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13456
13457#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13458 ResultValueType<void>::type end() const
13459 {
13460 Result result = static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13461 return createResultValue( result, "vk::CommandBuffer::end" );
13462 }
13463#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13464
13465#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13466 Result reset( CommandBufferResetFlags flags ) const
13467 {
13468 return static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13469 }
13470#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13471
13472#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13473 ResultValueType<void>::type reset( CommandBufferResetFlags flags ) const
13474 {
13475 Result result = static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13476 return createResultValue( result, "vk::CommandBuffer::reset" );
13477 }
13478#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13479
13480#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13481 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13482 {
13483 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13484 }
13485#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13486
13487#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13488 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13489 {
13490 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13491 }
13492#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13493
13494 void setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport* pViewports ) const
13495 {
13496 vkCmdSetViewport( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast<const VkViewport*>( pViewports ) );
13497 }
13498
13499#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13500 void setViewport( uint32_t firstViewport, ArrayProxy<const Viewport> viewports ) const
13501 {
13502 vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size() , reinterpret_cast<const VkViewport*>( viewports.data() ) );
13503 }
13504#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13505
13506 void setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D* pScissors ) const
13507 {
13508 vkCmdSetScissor( m_commandBuffer, firstScissor, scissorCount, reinterpret_cast<const VkRect2D*>( pScissors ) );
13509 }
13510
13511#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13512 void setScissor( uint32_t firstScissor, ArrayProxy<const Rect2D> scissors ) const
13513 {
13514 vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size() , reinterpret_cast<const VkRect2D*>( scissors.data() ) );
13515 }
13516#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13517
13518#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13519 void setLineWidth( float lineWidth ) const
13520 {
13521 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13522 }
13523#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13524
13525#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13526 void setLineWidth( float lineWidth ) const
13527 {
13528 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13529 }
13530#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13531
13532#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13533 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13534 {
13535 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13536 }
13537#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13538
13539#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13540 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13541 {
13542 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13543 }
13544#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13545
13546#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13547 void setBlendConstants( const float blendConstants[4] ) const
13548 {
13549 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13550 }
13551#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13552
13553#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13554 void setBlendConstants( const float blendConstants[4] ) const
13555 {
13556 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13557 }
13558#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13559
13560#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13561 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13562 {
13563 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13564 }
13565#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13566
13567#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13568 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13569 {
13570 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13571 }
13572#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13573
13574#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13575 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13576 {
13577 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13578 }
13579#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13580
13581#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13582 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13583 {
13584 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13585 }
13586#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13587
13588#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13589 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13590 {
13591 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13592 }
13593#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13594
13595#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13596 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13597 {
13598 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13599 }
13600#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13601
13602#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13603 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13604 {
13605 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13606 }
13607#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13608
13609#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13610 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13611 {
13612 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13613 }
13614#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13615
13616 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets ) const
13617 {
13618 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ), dynamicOffsetCount, pDynamicOffsets );
13619 }
13620
13621#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13622 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, ArrayProxy<const DescriptorSet> descriptorSets, ArrayProxy<const uint32_t> dynamicOffsets ) const
13623 {
13624 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ), dynamicOffsets.size() , dynamicOffsets.data() );
13625 }
13626#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13627
13628#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13629 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13630 {
13631 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13632 }
13633#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13634
13635#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13636 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13637 {
13638 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13639 }
13640#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13641
13642 void bindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const Buffer* pBuffers, const DeviceSize* pOffsets ) const
13643 {
13644 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, bindingCount, reinterpret_cast<const VkBuffer*>( pBuffers ), pOffsets );
13645 }
13646
13647#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13648 void bindVertexBuffers( uint32_t firstBinding, ArrayProxy<const Buffer> buffers, ArrayProxy<const DeviceSize> offsets ) const
13649 {
13650#ifdef VULKAN_HPP_NO_EXCEPTIONS
13651 assert( buffers.size() == offsets.size() );
13652#else
13653 if ( buffers.size() != offsets.size() )
13654 {
13655 throw std::logic_error( "vk::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" );
13656 }
13657#endif // VULKAN_HPP_NO_EXCEPTIONS
13658 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, buffers.size() , reinterpret_cast<const VkBuffer*>( buffers.data() ), offsets.data() );
13659 }
13660#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13661
13662#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13663 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13664 {
13665 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13666 }
13667#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13668
13669#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13670 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13671 {
13672 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13673 }
13674#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13675
13676#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13677 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13678 {
13679 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13680 }
13681#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13682
13683#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13684 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13685 {
13686 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13687 }
13688#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13689
13690#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13691 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13692 {
13693 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13694 }
13695#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13696
13697#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13698 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13699 {
13700 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13701 }
13702#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13703
13704#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13705 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13706 {
13707 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13708 }
13709#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13710
13711#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13712 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13713 {
13714 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13715 }
13716#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13717
13718#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13719 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13720 {
13721 vkCmdDispatch( m_commandBuffer, x, y, z );
13722 }
13723#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13724
13725#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13726 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13727 {
13728 vkCmdDispatch( m_commandBuffer, x, y, z );
13729 }
13730#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13731
13732#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13733 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13734 {
13735 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13736 }
13737#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13738
13739#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13740 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13741 {
13742 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13743 }
13744#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13745
13746 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy* pRegions ) const
13747 {
13748 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferCopy*>( pRegions ) );
13749 }
13750
13751#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13752 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy<const BufferCopy> regions ) const
13753 {
13754 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferCopy*>( regions.data() ) );
13755 }
13756#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13757
13758 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageCopy* pRegions ) const
13759 {
13760 vkCmdCopyImage( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkImageCopy*>( pRegions ) );
13761 }
13762
13763#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13764 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageCopy> regions ) const
13765 {
13766 vkCmdCopyImage( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkImageCopy*>( regions.data() ) );
13767 }
13768#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13769
13770 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageBlit* pRegions, Filter filter ) const
13771 {
13772 vkCmdBlitImage( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkImageBlit*>( pRegions ), static_cast<VkFilter>( filter ) );
13773 }
13774
13775#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13776 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageBlit> regions, Filter filter ) const
13777 {
13778 vkCmdBlitImage( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkImageBlit*>( regions.data() ), static_cast<VkFilter>( filter ) );
13779 }
13780#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13781
13782 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13783 {
13784 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13785 }
13786
13787#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13788 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const BufferImageCopy> regions ) const
13789 {
13790 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
13791 }
13792#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13793
13794 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13795 {
13796 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13797 }
13798
13799#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13800 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, ArrayProxy<const BufferImageCopy> regions ) const
13801 {
13802 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
13803 }
13804#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13805
13806 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void* pData ) const
13807 {
13808 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, dataSize, pData );
13809 }
13810
13811#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13812 template <typename T>
13813 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy<const T> data ) const
13814 {
13815 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, data.size() * sizeof( T ) , reinterpret_cast<const void*>( data.data() ) );
13816 }
13817#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13818
13819#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13820 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
13821 {
13822 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
13823 }
13824#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13825
13826#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13827 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
13828 {
13829 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
13830 }
13831#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13832
13833 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue* pColor, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
13834 {
13835 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( pColor ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
13836 }
13837
13838#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13839 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ArrayProxy<const ImageSubresourceRange> ranges ) const
13840 {
13841 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( &color ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
13842 }
13843#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13844
13845 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
13846 {
13847 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( pDepthStencil ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
13848 }
13849
13850#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13851 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ArrayProxy<const ImageSubresourceRange> ranges ) const
13852 {
13853 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( &depthStencil ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
13854 }
13855#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13856
13857 void clearAttachments( uint32_t attachmentCount, const ClearAttachment* pAttachments, uint32_t rectCount, const ClearRect* pRects ) const
13858 {
13859 vkCmdClearAttachments( m_commandBuffer, attachmentCount, reinterpret_cast<const VkClearAttachment*>( pAttachments ), rectCount, reinterpret_cast<const VkClearRect*>( pRects ) );
13860 }
13861
13862#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13863 void clearAttachments( ArrayProxy<const ClearAttachment> attachments, ArrayProxy<const ClearRect> rects ) const
13864 {
13865 vkCmdClearAttachments( m_commandBuffer, attachments.size() , reinterpret_cast<const VkClearAttachment*>( attachments.data() ), rects.size() , reinterpret_cast<const VkClearRect*>( rects.data() ) );
13866 }
13867#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13868
13869 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageResolve* pRegions ) const
13870 {
13871 vkCmdResolveImage( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkImageResolve*>( pRegions ) );
13872 }
13873
13874#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13875 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageResolve> regions ) const
13876 {
13877 vkCmdResolveImage( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkImageResolve*>( regions.data() ) );
13878 }
13879#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13880
13881#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13882 void setEvent( Event event, PipelineStageFlags stageMask ) const
13883 {
13884 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
13885 }
13886#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13887
13888#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13889 void setEvent( Event event, PipelineStageFlags stageMask ) const
13890 {
13891 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
13892 }
13893#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13894
13895#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13896 void resetEvent( Event event, PipelineStageFlags stageMask ) const
13897 {
13898 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
13899 }
13900#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13901
13902#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13903 void resetEvent( Event event, PipelineStageFlags stageMask ) const
13904 {
13905 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
13906 }
13907#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13908
13909 void waitEvents( uint32_t eventCount, const Event* pEvents, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const MemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const BufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const ImageMemoryBarrier* pImageMemoryBarriers ) const
13910 {
13911 vkCmdWaitEvents( m_commandBuffer, eventCount, reinterpret_cast<const VkEvent*>( pEvents ), static_cast<VkPipelineStageFlags>( srcStageMask ), static_cast<VkPipelineStageFlags>( dstStageMask ), memoryBarrierCount, reinterpret_cast<const VkMemoryBarrier*>( pMemoryBarriers ), bufferMemoryBarrierCount, reinterpret_cast<const VkBufferMemoryBarrier*>( pBufferMemoryBarriers ), imageMemoryBarrierCount, reinterpret_cast<const VkImageMemoryBarrier*>( pImageMemoryBarriers ) );
13912 }
13913
13914#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13915 void waitEvents( ArrayProxy<const Event> events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
13916 {
13917 vkCmdWaitEvents( m_commandBuffer, events.size() , reinterpret_cast<const VkEvent*>( events.data() ), static_cast<VkPipelineStageFlags>( srcStageMask ), static_cast<VkPipelineStageFlags>( dstStageMask ), memoryBarriers.size() , reinterpret_cast<const VkMemoryBarrier*>( memoryBarriers.data() ), bufferMemoryBarriers.size() , reinterpret_cast<const VkBufferMemoryBarrier*>( bufferMemoryBarriers.data() ), imageMemoryBarriers.size() , reinterpret_cast<const VkImageMemoryBarrier*>( imageMemoryBarriers.data() ) );
13918 }
13919#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13920
13921 void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const MemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const BufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const ImageMemoryBarrier* pImageMemoryBarriers ) const
13922 {
13923 vkCmdPipelineBarrier( m_commandBuffer, static_cast<VkPipelineStageFlags>( srcStageMask ), static_cast<VkPipelineStageFlags>( dstStageMask ), static_cast<VkDependencyFlags>( dependencyFlags ), memoryBarrierCount, reinterpret_cast<const VkMemoryBarrier*>( pMemoryBarriers ), bufferMemoryBarrierCount, reinterpret_cast<const VkBufferMemoryBarrier*>( pBufferMemoryBarriers ), imageMemoryBarrierCount, reinterpret_cast<const VkImageMemoryBarrier*>( pImageMemoryBarriers ) );
13924 }
13925
13926#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13927 void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
13928 {
13929 vkCmdPipelineBarrier( m_commandBuffer, static_cast<VkPipelineStageFlags>( srcStageMask ), static_cast<VkPipelineStageFlags>( dstStageMask ), static_cast<VkDependencyFlags>( dependencyFlags ), memoryBarriers.size() , reinterpret_cast<const VkMemoryBarrier*>( memoryBarriers.data() ), bufferMemoryBarriers.size() , reinterpret_cast<const VkBufferMemoryBarrier*>( bufferMemoryBarriers.data() ), imageMemoryBarriers.size() , reinterpret_cast<const VkImageMemoryBarrier*>( imageMemoryBarriers.data() ) );
13930 }
13931#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13932
13933#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13934 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
13935 {
13936 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
13937 }
13938#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13939
13940#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13941 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
13942 {
13943 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
13944 }
13945#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13946
13947#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13948 void endQuery( QueryPool queryPool, uint32_t query ) const
13949 {
13950 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
13951 }
13952#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13953
13954#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13955 void endQuery( QueryPool queryPool, uint32_t query ) const
13956 {
13957 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
13958 }
13959#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13960
13961#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13962 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
13963 {
13964 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
13965 }
13966#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13967
13968#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13969 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
13970 {
13971 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
13972 }
13973#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13974
13975#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13976 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
13977 {
13978 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
13979 }
13980#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13981
13982#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13983 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
13984 {
13985 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
13986 }
13987#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13988
13989#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13990 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
13991 {
13992 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
13993 }
13994#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13995
13996#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13997 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
13998 {
13999 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14000 }
14001#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14002
14003 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues ) const
14004 {
14005 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, size, pValues );
14006 }
14007
14008#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14009 template <typename T>
14010 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, ArrayProxy<const T> values ) const
14011 {
14012 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, values.size() * sizeof( T ) , reinterpret_cast<const void*>( values.data() ) );
14013 }
14014#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14015
14016 void beginRenderPass( const RenderPassBeginInfo* pRenderPassBegin, SubpassContents contents ) const
14017 {
14018 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( pRenderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14019 }
14020
14021#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14022 void beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents ) const
14023 {
14024 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( &renderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14025 }
14026#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14027
14028#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14029 void nextSubpass( SubpassContents contents ) const
14030 {
14031 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14032 }
14033#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14034
14035#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14036 void nextSubpass( SubpassContents contents ) const
14037 {
14038 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14039 }
14040#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14041
14042#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14043 void endRenderPass( ) const
14044 {
14045 vkCmdEndRenderPass( m_commandBuffer );
14046 }
14047#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14048
14049#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14050 void endRenderPass() const
14051 {
14052 vkCmdEndRenderPass( m_commandBuffer );
14053 }
14054#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14055
14056 void executeCommands( uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
14057 {
14058 vkCmdExecuteCommands( m_commandBuffer, commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
14059 }
14060
14061#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14062 void executeCommands( ArrayProxy<const CommandBuffer> commandBuffers ) const
14063 {
14064 vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
14065 }
14066#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14067
14068 void debugMarkerBeginEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14069 {
14070 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14071 }
14072
14073#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14074 DebugMarkerMarkerInfoEXT debugMarkerBeginEXT() const
14075 {
14076 DebugMarkerMarkerInfoEXT markerInfo;
14077 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14078 return markerInfo;
14079 }
14080#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14081
14082#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14083 void debugMarkerEndEXT( ) const
14084 {
14085 vkCmdDebugMarkerEndEXT( m_commandBuffer );
14086 }
14087#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14088
14089#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14090 void debugMarkerEndEXT() const
14091 {
14092 vkCmdDebugMarkerEndEXT( m_commandBuffer );
14093 }
14094#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14095
14096 void debugMarkerInsertEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14097 {
14098 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14099 }
14100
14101#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14102 DebugMarkerMarkerInfoEXT debugMarkerInsertEXT() const
14103 {
14104 DebugMarkerMarkerInfoEXT markerInfo;
14105 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14106 return markerInfo;
14107 }
14108#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14109
14110#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14111 explicit
14112#endif
14113 operator VkCommandBuffer() const
14114 {
14115 return m_commandBuffer;
14116 }
14117
14118 explicit operator bool() const
14119 {
14120 return m_commandBuffer != VK_NULL_HANDLE;
14121 }
14122
14123 bool operator!() const
14124 {
14125 return m_commandBuffer == VK_NULL_HANDLE;
14126 }
14127
14128 private:
14129 VkCommandBuffer m_commandBuffer;
14130 };
14131 static_assert( sizeof( CommandBuffer ) == sizeof( VkCommandBuffer ), "handle and wrapper have different size!" );
14132
14133 struct SubpassDependency
14134 {
14135 SubpassDependency( uint32_t srcSubpass_ = 0, uint32_t dstSubpass_ = 0, PipelineStageFlags srcStageMask_ = PipelineStageFlags(), PipelineStageFlags dstStageMask_ = PipelineStageFlags(), AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), DependencyFlags dependencyFlags_ = DependencyFlags() )
14136 : srcSubpass( srcSubpass_ )
14137 , dstSubpass( dstSubpass_ )
14138 , srcStageMask( srcStageMask_ )
14139 , dstStageMask( dstStageMask_ )
14140 , srcAccessMask( srcAccessMask_ )
14141 , dstAccessMask( dstAccessMask_ )
14142 , dependencyFlags( dependencyFlags_ )
14143 {
14144 }
14145
14146 SubpassDependency( VkSubpassDependency const & rhs )
14147 {
14148 memcpy( this, &rhs, sizeof(SubpassDependency) );
14149 }
14150
14151 SubpassDependency& operator=( VkSubpassDependency const & rhs )
14152 {
14153 memcpy( this, &rhs, sizeof(SubpassDependency) );
14154 return *this;
14155 }
14156
14157 SubpassDependency& setSrcSubpass( uint32_t srcSubpass_ )
14158 {
14159 srcSubpass = srcSubpass_;
14160 return *this;
14161 }
14162
14163 SubpassDependency& setDstSubpass( uint32_t dstSubpass_ )
14164 {
14165 dstSubpass = dstSubpass_;
14166 return *this;
14167 }
14168
14169 SubpassDependency& setSrcStageMask( PipelineStageFlags srcStageMask_ )
14170 {
14171 srcStageMask = srcStageMask_;
14172 return *this;
14173 }
14174
14175 SubpassDependency& setDstStageMask( PipelineStageFlags dstStageMask_ )
14176 {
14177 dstStageMask = dstStageMask_;
14178 return *this;
14179 }
14180
14181 SubpassDependency& setSrcAccessMask( AccessFlags srcAccessMask_ )
14182 {
14183 srcAccessMask = srcAccessMask_;
14184 return *this;
14185 }
14186
14187 SubpassDependency& setDstAccessMask( AccessFlags dstAccessMask_ )
14188 {
14189 dstAccessMask = dstAccessMask_;
14190 return *this;
14191 }
14192
14193 SubpassDependency& setDependencyFlags( DependencyFlags dependencyFlags_ )
14194 {
14195 dependencyFlags = dependencyFlags_;
14196 return *this;
14197 }
14198
14199 operator const VkSubpassDependency&() const
14200 {
14201 return *reinterpret_cast<const VkSubpassDependency*>(this);
14202 }
14203
14204 bool operator==( SubpassDependency const& rhs ) const
14205 {
14206 return ( srcSubpass == rhs.srcSubpass )
14207 && ( dstSubpass == rhs.dstSubpass )
14208 && ( srcStageMask == rhs.srcStageMask )
14209 && ( dstStageMask == rhs.dstStageMask )
14210 && ( srcAccessMask == rhs.srcAccessMask )
14211 && ( dstAccessMask == rhs.dstAccessMask )
14212 && ( dependencyFlags == rhs.dependencyFlags );
14213 }
14214
14215 bool operator!=( SubpassDependency const& rhs ) const
14216 {
14217 return !operator==( rhs );
14218 }
14219
14220 uint32_t srcSubpass;
14221 uint32_t dstSubpass;
14222 PipelineStageFlags srcStageMask;
14223 PipelineStageFlags dstStageMask;
14224 AccessFlags srcAccessMask;
14225 AccessFlags dstAccessMask;
14226 DependencyFlags dependencyFlags;
14227 };
14228 static_assert( sizeof( SubpassDependency ) == sizeof( VkSubpassDependency ), "struct and wrapper have different size!" );
14229
14230 struct RenderPassCreateInfo
14231 {
14232 RenderPassCreateInfo( RenderPassCreateFlags flags_ = RenderPassCreateFlags(), uint32_t attachmentCount_ = 0, const AttachmentDescription* pAttachments_ = nullptr, uint32_t subpassCount_ = 0, const SubpassDescription* pSubpasses_ = nullptr, uint32_t dependencyCount_ = 0, const SubpassDependency* pDependencies_ = nullptr )
14233 : sType( StructureType::eRenderPassCreateInfo )
14234 , pNext( nullptr )
14235 , flags( flags_ )
14236 , attachmentCount( attachmentCount_ )
14237 , pAttachments( pAttachments_ )
14238 , subpassCount( subpassCount_ )
14239 , pSubpasses( pSubpasses_ )
14240 , dependencyCount( dependencyCount_ )
14241 , pDependencies( pDependencies_ )
14242 {
14243 }
14244
14245 RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs )
14246 {
14247 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14248 }
14249
14250 RenderPassCreateInfo& operator=( VkRenderPassCreateInfo const & rhs )
14251 {
14252 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14253 return *this;
14254 }
14255
14256 RenderPassCreateInfo& setSType( StructureType sType_ )
14257 {
14258 sType = sType_;
14259 return *this;
14260 }
14261
14262 RenderPassCreateInfo& setPNext( const void* pNext_ )
14263 {
14264 pNext = pNext_;
14265 return *this;
14266 }
14267
14268 RenderPassCreateInfo& setFlags( RenderPassCreateFlags flags_ )
14269 {
14270 flags = flags_;
14271 return *this;
14272 }
14273
14274 RenderPassCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
14275 {
14276 attachmentCount = attachmentCount_;
14277 return *this;
14278 }
14279
14280 RenderPassCreateInfo& setPAttachments( const AttachmentDescription* pAttachments_ )
14281 {
14282 pAttachments = pAttachments_;
14283 return *this;
14284 }
14285
14286 RenderPassCreateInfo& setSubpassCount( uint32_t subpassCount_ )
14287 {
14288 subpassCount = subpassCount_;
14289 return *this;
14290 }
14291
14292 RenderPassCreateInfo& setPSubpasses( const SubpassDescription* pSubpasses_ )
14293 {
14294 pSubpasses = pSubpasses_;
14295 return *this;
14296 }
14297
14298 RenderPassCreateInfo& setDependencyCount( uint32_t dependencyCount_ )
14299 {
14300 dependencyCount = dependencyCount_;
14301 return *this;
14302 }
14303
14304 RenderPassCreateInfo& setPDependencies( const SubpassDependency* pDependencies_ )
14305 {
14306 pDependencies = pDependencies_;
14307 return *this;
14308 }
14309
14310 operator const VkRenderPassCreateInfo&() const
14311 {
14312 return *reinterpret_cast<const VkRenderPassCreateInfo*>(this);
14313 }
14314
14315 bool operator==( RenderPassCreateInfo const& rhs ) const
14316 {
14317 return ( sType == rhs.sType )
14318 && ( pNext == rhs.pNext )
14319 && ( flags == rhs.flags )
14320 && ( attachmentCount == rhs.attachmentCount )
14321 && ( pAttachments == rhs.pAttachments )
14322 && ( subpassCount == rhs.subpassCount )
14323 && ( pSubpasses == rhs.pSubpasses )
14324 && ( dependencyCount == rhs.dependencyCount )
14325 && ( pDependencies == rhs.pDependencies );
14326 }
14327
14328 bool operator!=( RenderPassCreateInfo const& rhs ) const
14329 {
14330 return !operator==( rhs );
14331 }
14332
14333 private:
14334 StructureType sType;
14335
14336 public:
14337 const void* pNext;
14338 RenderPassCreateFlags flags;
14339 uint32_t attachmentCount;
14340 const AttachmentDescription* pAttachments;
14341 uint32_t subpassCount;
14342 const SubpassDescription* pSubpasses;
14343 uint32_t dependencyCount;
14344 const SubpassDependency* pDependencies;
14345 };
14346 static_assert( sizeof( RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ), "struct and wrapper have different size!" );
14347
14348 struct SubmitInfo
14349 {
14350 SubmitInfo( uint32_t waitSemaphoreCount_ = 0, const Semaphore* pWaitSemaphores_ = nullptr, const PipelineStageFlags* pWaitDstStageMask_ = nullptr, uint32_t commandBufferCount_ = 0, const CommandBuffer* pCommandBuffers_ = nullptr, uint32_t signalSemaphoreCount_ = 0, const Semaphore* pSignalSemaphores_ = nullptr )
14351 : sType( StructureType::eSubmitInfo )
14352 , pNext( nullptr )
14353 , waitSemaphoreCount( waitSemaphoreCount_ )
14354 , pWaitSemaphores( pWaitSemaphores_ )
14355 , pWaitDstStageMask( pWaitDstStageMask_ )
14356 , commandBufferCount( commandBufferCount_ )
14357 , pCommandBuffers( pCommandBuffers_ )
14358 , signalSemaphoreCount( signalSemaphoreCount_ )
14359 , pSignalSemaphores( pSignalSemaphores_ )
14360 {
14361 }
14362
14363 SubmitInfo( VkSubmitInfo const & rhs )
14364 {
14365 memcpy( this, &rhs, sizeof(SubmitInfo) );
14366 }
14367
14368 SubmitInfo& operator=( VkSubmitInfo const & rhs )
14369 {
14370 memcpy( this, &rhs, sizeof(SubmitInfo) );
14371 return *this;
14372 }
14373
14374 SubmitInfo& setSType( StructureType sType_ )
14375 {
14376 sType = sType_;
14377 return *this;
14378 }
14379
14380 SubmitInfo& setPNext( const void* pNext_ )
14381 {
14382 pNext = pNext_;
14383 return *this;
14384 }
14385
14386 SubmitInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
14387 {
14388 waitSemaphoreCount = waitSemaphoreCount_;
14389 return *this;
14390 }
14391
14392 SubmitInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
14393 {
14394 pWaitSemaphores = pWaitSemaphores_;
14395 return *this;
14396 }
14397
14398 SubmitInfo& setPWaitDstStageMask( const PipelineStageFlags* pWaitDstStageMask_ )
14399 {
14400 pWaitDstStageMask = pWaitDstStageMask_;
14401 return *this;
14402 }
14403
14404 SubmitInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
14405 {
14406 commandBufferCount = commandBufferCount_;
14407 return *this;
14408 }
14409
14410 SubmitInfo& setPCommandBuffers( const CommandBuffer* pCommandBuffers_ )
14411 {
14412 pCommandBuffers = pCommandBuffers_;
14413 return *this;
14414 }
14415
14416 SubmitInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
14417 {
14418 signalSemaphoreCount = signalSemaphoreCount_;
14419 return *this;
14420 }
14421
14422 SubmitInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
14423 {
14424 pSignalSemaphores = pSignalSemaphores_;
14425 return *this;
14426 }
14427
14428 operator const VkSubmitInfo&() const
14429 {
14430 return *reinterpret_cast<const VkSubmitInfo*>(this);
14431 }
14432
14433 bool operator==( SubmitInfo const& rhs ) const
14434 {
14435 return ( sType == rhs.sType )
14436 && ( pNext == rhs.pNext )
14437 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
14438 && ( pWaitSemaphores == rhs.pWaitSemaphores )
14439 && ( pWaitDstStageMask == rhs.pWaitDstStageMask )
14440 && ( commandBufferCount == rhs.commandBufferCount )
14441 && ( pCommandBuffers == rhs.pCommandBuffers )
14442 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
14443 && ( pSignalSemaphores == rhs.pSignalSemaphores );
14444 }
14445
14446 bool operator!=( SubmitInfo const& rhs ) const
14447 {
14448 return !operator==( rhs );
14449 }
14450
14451 private:
14452 StructureType sType;
14453
14454 public:
14455 const void* pNext;
14456 uint32_t waitSemaphoreCount;
14457 const Semaphore* pWaitSemaphores;
14458 const PipelineStageFlags* pWaitDstStageMask;
14459 uint32_t commandBufferCount;
14460 const CommandBuffer* pCommandBuffers;
14461 uint32_t signalSemaphoreCount;
14462 const Semaphore* pSignalSemaphores;
14463 };
14464 static_assert( sizeof( SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" );
14465
14466 class Queue
14467 {
14468 public:
14469 Queue()
14470 : m_queue(VK_NULL_HANDLE)
14471 {}
14472
14473#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14474 Queue(VkQueue queue)
14475 : m_queue(queue)
14476 {}
14477
14478 Queue& operator=(VkQueue queue)
14479 {
14480 m_queue = queue;
14481 return *this;
14482 }
14483#endif
14484
Lenny Komowebf33162016-08-26 14:10:08 -060014485 bool operator==(Queue const &rhs) const
14486 {
14487 return m_queue == rhs.m_queue;
14488 }
14489
14490 bool operator!=(Queue const &rhs) const
14491 {
14492 return m_queue != rhs.m_queue;
14493 }
14494
14495 bool operator<(Queue const &rhs) const
14496 {
14497 return m_queue < rhs.m_queue;
14498 }
14499
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014500 Result submit( uint32_t submitCount, const SubmitInfo* pSubmits, Fence fence ) const
14501 {
14502 return static_cast<Result>( vkQueueSubmit( m_queue, submitCount, reinterpret_cast<const VkSubmitInfo*>( pSubmits ), static_cast<VkFence>( fence ) ) );
14503 }
14504
14505#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14506 ResultValueType<void>::type submit( ArrayProxy<const SubmitInfo> submits, Fence fence ) const
14507 {
14508 Result result = static_cast<Result>( vkQueueSubmit( m_queue, submits.size() , reinterpret_cast<const VkSubmitInfo*>( submits.data() ), static_cast<VkFence>( fence ) ) );
14509 return createResultValue( result, "vk::Queue::submit" );
14510 }
14511#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14512
14513#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14514 Result waitIdle( ) const
14515 {
14516 return static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14517 }
14518#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14519
14520#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14521 ResultValueType<void>::type waitIdle() const
14522 {
14523 Result result = static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14524 return createResultValue( result, "vk::Queue::waitIdle" );
14525 }
14526#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14527
14528 Result bindSparse( uint32_t bindInfoCount, const BindSparseInfo* pBindInfo, Fence fence ) const
14529 {
14530 return static_cast<Result>( vkQueueBindSparse( m_queue, bindInfoCount, reinterpret_cast<const VkBindSparseInfo*>( pBindInfo ), static_cast<VkFence>( fence ) ) );
14531 }
14532
14533#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14534 ResultValueType<void>::type bindSparse( ArrayProxy<const BindSparseInfo> bindInfo, Fence fence ) const
14535 {
14536 Result result = static_cast<Result>( vkQueueBindSparse( m_queue, bindInfo.size() , reinterpret_cast<const VkBindSparseInfo*>( bindInfo.data() ), static_cast<VkFence>( fence ) ) );
14537 return createResultValue( result, "vk::Queue::bindSparse" );
14538 }
14539#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14540
14541 Result presentKHR( const PresentInfoKHR* pPresentInfo ) const
14542 {
14543 return static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( pPresentInfo ) ) );
14544 }
14545
14546#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14547 Result presentKHR( const PresentInfoKHR & presentInfo ) const
14548 {
14549 Result result = static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( &presentInfo ) ) );
14550 return createResultValue( result, "vk::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } );
14551 }
14552#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14553
14554#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14555 explicit
14556#endif
14557 operator VkQueue() const
14558 {
14559 return m_queue;
14560 }
14561
14562 explicit operator bool() const
14563 {
14564 return m_queue != VK_NULL_HANDLE;
14565 }
14566
14567 bool operator!() const
14568 {
14569 return m_queue == VK_NULL_HANDLE;
14570 }
14571
14572 private:
14573 VkQueue m_queue;
14574 };
14575 static_assert( sizeof( Queue ) == sizeof( VkQueue ), "handle and wrapper have different size!" );
14576
14577 enum class PresentModeKHR
14578 {
14579 eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR,
14580 eMailbox = VK_PRESENT_MODE_MAILBOX_KHR,
14581 eFifo = VK_PRESENT_MODE_FIFO_KHR,
14582 eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR
14583 };
14584
14585 enum class ColorSpaceKHR
14586 {
14587 eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
14588 };
14589
14590 struct SurfaceFormatKHR
14591 {
14592 SurfaceFormatKHR( Format format_ = Format::eUndefined, ColorSpaceKHR colorSpace_ = ColorSpaceKHR::eSrgbNonlinear )
14593 : format( format_ )
14594 , colorSpace( colorSpace_ )
14595 {
14596 }
14597
14598 SurfaceFormatKHR( VkSurfaceFormatKHR const & rhs )
14599 {
14600 memcpy( this, &rhs, sizeof(SurfaceFormatKHR) );
14601 }
14602
14603 SurfaceFormatKHR& operator=( VkSurfaceFormatKHR const & rhs )
14604 {
14605 memcpy( this, &rhs, sizeof(SurfaceFormatKHR) );
14606 return *this;
14607 }
14608
14609 SurfaceFormatKHR& setFormat( Format format_ )
14610 {
14611 format = format_;
14612 return *this;
14613 }
14614
14615 SurfaceFormatKHR& setColorSpace( ColorSpaceKHR colorSpace_ )
14616 {
14617 colorSpace = colorSpace_;
14618 return *this;
14619 }
14620
14621 operator const VkSurfaceFormatKHR&() const
14622 {
14623 return *reinterpret_cast<const VkSurfaceFormatKHR*>(this);
14624 }
14625
14626 bool operator==( SurfaceFormatKHR const& rhs ) const
14627 {
14628 return ( format == rhs.format )
14629 && ( colorSpace == rhs.colorSpace );
14630 }
14631
14632 bool operator!=( SurfaceFormatKHR const& rhs ) const
14633 {
14634 return !operator==( rhs );
14635 }
14636
14637 Format format;
14638 ColorSpaceKHR colorSpace;
14639 };
14640 static_assert( sizeof( SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ), "struct and wrapper have different size!" );
14641
14642 enum class DisplayPlaneAlphaFlagBitsKHR
14643 {
14644 eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,
14645 eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,
14646 ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,
14647 ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
14648 };
14649
14650 using DisplayPlaneAlphaFlagsKHR = Flags<DisplayPlaneAlphaFlagBitsKHR, VkDisplayPlaneAlphaFlagsKHR>;
14651
14652 inline DisplayPlaneAlphaFlagsKHR operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 )
14653 {
14654 return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1;
14655 }
14656
14657 struct DisplayPlaneCapabilitiesKHR
14658 {
14659 DisplayPlaneCapabilitiesKHR( DisplayPlaneAlphaFlagsKHR supportedAlpha_ = DisplayPlaneAlphaFlagsKHR(), Offset2D minSrcPosition_ = Offset2D(), Offset2D maxSrcPosition_ = Offset2D(), Extent2D minSrcExtent_ = Extent2D(), Extent2D maxSrcExtent_ = Extent2D(), Offset2D minDstPosition_ = Offset2D(), Offset2D maxDstPosition_ = Offset2D(), Extent2D minDstExtent_ = Extent2D(), Extent2D maxDstExtent_ = Extent2D() )
14660 : supportedAlpha( supportedAlpha_ )
14661 , minSrcPosition( minSrcPosition_ )
14662 , maxSrcPosition( maxSrcPosition_ )
14663 , minSrcExtent( minSrcExtent_ )
14664 , maxSrcExtent( maxSrcExtent_ )
14665 , minDstPosition( minDstPosition_ )
14666 , maxDstPosition( maxDstPosition_ )
14667 , minDstExtent( minDstExtent_ )
14668 , maxDstExtent( maxDstExtent_ )
14669 {
14670 }
14671
14672 DisplayPlaneCapabilitiesKHR( VkDisplayPlaneCapabilitiesKHR const & rhs )
14673 {
14674 memcpy( this, &rhs, sizeof(DisplayPlaneCapabilitiesKHR) );
14675 }
14676
14677 DisplayPlaneCapabilitiesKHR& operator=( VkDisplayPlaneCapabilitiesKHR const & rhs )
14678 {
14679 memcpy( this, &rhs, sizeof(DisplayPlaneCapabilitiesKHR) );
14680 return *this;
14681 }
14682
14683 DisplayPlaneCapabilitiesKHR& setSupportedAlpha( DisplayPlaneAlphaFlagsKHR supportedAlpha_ )
14684 {
14685 supportedAlpha = supportedAlpha_;
14686 return *this;
14687 }
14688
14689 DisplayPlaneCapabilitiesKHR& setMinSrcPosition( Offset2D minSrcPosition_ )
14690 {
14691 minSrcPosition = minSrcPosition_;
14692 return *this;
14693 }
14694
14695 DisplayPlaneCapabilitiesKHR& setMaxSrcPosition( Offset2D maxSrcPosition_ )
14696 {
14697 maxSrcPosition = maxSrcPosition_;
14698 return *this;
14699 }
14700
14701 DisplayPlaneCapabilitiesKHR& setMinSrcExtent( Extent2D minSrcExtent_ )
14702 {
14703 minSrcExtent = minSrcExtent_;
14704 return *this;
14705 }
14706
14707 DisplayPlaneCapabilitiesKHR& setMaxSrcExtent( Extent2D maxSrcExtent_ )
14708 {
14709 maxSrcExtent = maxSrcExtent_;
14710 return *this;
14711 }
14712
14713 DisplayPlaneCapabilitiesKHR& setMinDstPosition( Offset2D minDstPosition_ )
14714 {
14715 minDstPosition = minDstPosition_;
14716 return *this;
14717 }
14718
14719 DisplayPlaneCapabilitiesKHR& setMaxDstPosition( Offset2D maxDstPosition_ )
14720 {
14721 maxDstPosition = maxDstPosition_;
14722 return *this;
14723 }
14724
14725 DisplayPlaneCapabilitiesKHR& setMinDstExtent( Extent2D minDstExtent_ )
14726 {
14727 minDstExtent = minDstExtent_;
14728 return *this;
14729 }
14730
14731 DisplayPlaneCapabilitiesKHR& setMaxDstExtent( Extent2D maxDstExtent_ )
14732 {
14733 maxDstExtent = maxDstExtent_;
14734 return *this;
14735 }
14736
14737 operator const VkDisplayPlaneCapabilitiesKHR&() const
14738 {
14739 return *reinterpret_cast<const VkDisplayPlaneCapabilitiesKHR*>(this);
14740 }
14741
14742 bool operator==( DisplayPlaneCapabilitiesKHR const& rhs ) const
14743 {
14744 return ( supportedAlpha == rhs.supportedAlpha )
14745 && ( minSrcPosition == rhs.minSrcPosition )
14746 && ( maxSrcPosition == rhs.maxSrcPosition )
14747 && ( minSrcExtent == rhs.minSrcExtent )
14748 && ( maxSrcExtent == rhs.maxSrcExtent )
14749 && ( minDstPosition == rhs.minDstPosition )
14750 && ( maxDstPosition == rhs.maxDstPosition )
14751 && ( minDstExtent == rhs.minDstExtent )
14752 && ( maxDstExtent == rhs.maxDstExtent );
14753 }
14754
14755 bool operator!=( DisplayPlaneCapabilitiesKHR const& rhs ) const
14756 {
14757 return !operator==( rhs );
14758 }
14759
14760 DisplayPlaneAlphaFlagsKHR supportedAlpha;
14761 Offset2D minSrcPosition;
14762 Offset2D maxSrcPosition;
14763 Extent2D minSrcExtent;
14764 Extent2D maxSrcExtent;
14765 Offset2D minDstPosition;
14766 Offset2D maxDstPosition;
14767 Extent2D minDstExtent;
14768 Extent2D maxDstExtent;
14769 };
14770 static_assert( sizeof( DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ), "struct and wrapper have different size!" );
14771
14772 enum class CompositeAlphaFlagBitsKHR
14773 {
14774 eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
14775 ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
14776 ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
14777 eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
14778 };
14779
14780 using CompositeAlphaFlagsKHR = Flags<CompositeAlphaFlagBitsKHR, VkCompositeAlphaFlagsKHR>;
14781
14782 inline CompositeAlphaFlagsKHR operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 )
14783 {
14784 return CompositeAlphaFlagsKHR( bit0 ) | bit1;
14785 }
14786
14787 enum class SurfaceTransformFlagBitsKHR
14788 {
14789 eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
14790 eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
14791 eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,
14792 eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,
14793 eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,
14794 eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,
14795 eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,
14796 eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,
14797 eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
14798 };
14799
14800 using SurfaceTransformFlagsKHR = Flags<SurfaceTransformFlagBitsKHR, VkSurfaceTransformFlagsKHR>;
14801
14802 inline SurfaceTransformFlagsKHR operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 )
14803 {
14804 return SurfaceTransformFlagsKHR( bit0 ) | bit1;
14805 }
14806
14807 struct DisplayPropertiesKHR
14808 {
14809 DisplayPropertiesKHR( DisplayKHR display_ = DisplayKHR(), const char* displayName_ = nullptr, Extent2D physicalDimensions_ = Extent2D(), Extent2D physicalResolution_ = Extent2D(), SurfaceTransformFlagsKHR supportedTransforms_ = SurfaceTransformFlagsKHR(), Bool32 planeReorderPossible_ = 0, Bool32 persistentContent_ = 0 )
14810 : display( display_ )
14811 , displayName( displayName_ )
14812 , physicalDimensions( physicalDimensions_ )
14813 , physicalResolution( physicalResolution_ )
14814 , supportedTransforms( supportedTransforms_ )
14815 , planeReorderPossible( planeReorderPossible_ )
14816 , persistentContent( persistentContent_ )
14817 {
14818 }
14819
14820 DisplayPropertiesKHR( VkDisplayPropertiesKHR const & rhs )
14821 {
14822 memcpy( this, &rhs, sizeof(DisplayPropertiesKHR) );
14823 }
14824
14825 DisplayPropertiesKHR& operator=( VkDisplayPropertiesKHR const & rhs )
14826 {
14827 memcpy( this, &rhs, sizeof(DisplayPropertiesKHR) );
14828 return *this;
14829 }
14830
14831 DisplayPropertiesKHR& setDisplay( DisplayKHR display_ )
14832 {
14833 display = display_;
14834 return *this;
14835 }
14836
14837 DisplayPropertiesKHR& setDisplayName( const char* displayName_ )
14838 {
14839 displayName = displayName_;
14840 return *this;
14841 }
14842
14843 DisplayPropertiesKHR& setPhysicalDimensions( Extent2D physicalDimensions_ )
14844 {
14845 physicalDimensions = physicalDimensions_;
14846 return *this;
14847 }
14848
14849 DisplayPropertiesKHR& setPhysicalResolution( Extent2D physicalResolution_ )
14850 {
14851 physicalResolution = physicalResolution_;
14852 return *this;
14853 }
14854
14855 DisplayPropertiesKHR& setSupportedTransforms( SurfaceTransformFlagsKHR supportedTransforms_ )
14856 {
14857 supportedTransforms = supportedTransforms_;
14858 return *this;
14859 }
14860
14861 DisplayPropertiesKHR& setPlaneReorderPossible( Bool32 planeReorderPossible_ )
14862 {
14863 planeReorderPossible = planeReorderPossible_;
14864 return *this;
14865 }
14866
14867 DisplayPropertiesKHR& setPersistentContent( Bool32 persistentContent_ )
14868 {
14869 persistentContent = persistentContent_;
14870 return *this;
14871 }
14872
14873 operator const VkDisplayPropertiesKHR&() const
14874 {
14875 return *reinterpret_cast<const VkDisplayPropertiesKHR*>(this);
14876 }
14877
14878 bool operator==( DisplayPropertiesKHR const& rhs ) const
14879 {
14880 return ( display == rhs.display )
14881 && ( displayName == rhs.displayName )
14882 && ( physicalDimensions == rhs.physicalDimensions )
14883 && ( physicalResolution == rhs.physicalResolution )
14884 && ( supportedTransforms == rhs.supportedTransforms )
14885 && ( planeReorderPossible == rhs.planeReorderPossible )
14886 && ( persistentContent == rhs.persistentContent );
14887 }
14888
14889 bool operator!=( DisplayPropertiesKHR const& rhs ) const
14890 {
14891 return !operator==( rhs );
14892 }
14893
14894 DisplayKHR display;
14895 const char* displayName;
14896 Extent2D physicalDimensions;
14897 Extent2D physicalResolution;
14898 SurfaceTransformFlagsKHR supportedTransforms;
14899 Bool32 planeReorderPossible;
14900 Bool32 persistentContent;
14901 };
14902 static_assert( sizeof( DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ), "struct and wrapper have different size!" );
14903
14904 struct DisplaySurfaceCreateInfoKHR
14905 {
14906 DisplaySurfaceCreateInfoKHR( DisplaySurfaceCreateFlagsKHR flags_ = DisplaySurfaceCreateFlagsKHR(), DisplayModeKHR displayMode_ = DisplayModeKHR(), uint32_t planeIndex_ = 0, uint32_t planeStackIndex_ = 0, SurfaceTransformFlagBitsKHR transform_ = SurfaceTransformFlagBitsKHR::eIdentity, float globalAlpha_ = 0, DisplayPlaneAlphaFlagBitsKHR alphaMode_ = DisplayPlaneAlphaFlagBitsKHR::eOpaque, Extent2D imageExtent_ = Extent2D() )
14907 : sType( StructureType::eDisplaySurfaceCreateInfoKHR )
14908 , pNext( nullptr )
14909 , flags( flags_ )
14910 , displayMode( displayMode_ )
14911 , planeIndex( planeIndex_ )
14912 , planeStackIndex( planeStackIndex_ )
14913 , transform( transform_ )
14914 , globalAlpha( globalAlpha_ )
14915 , alphaMode( alphaMode_ )
14916 , imageExtent( imageExtent_ )
14917 {
14918 }
14919
14920 DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs )
14921 {
14922 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
14923 }
14924
14925 DisplaySurfaceCreateInfoKHR& operator=( VkDisplaySurfaceCreateInfoKHR const & rhs )
14926 {
14927 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
14928 return *this;
14929 }
14930
14931 DisplaySurfaceCreateInfoKHR& setSType( StructureType sType_ )
14932 {
14933 sType = sType_;
14934 return *this;
14935 }
14936
14937 DisplaySurfaceCreateInfoKHR& setPNext( const void* pNext_ )
14938 {
14939 pNext = pNext_;
14940 return *this;
14941 }
14942
14943 DisplaySurfaceCreateInfoKHR& setFlags( DisplaySurfaceCreateFlagsKHR flags_ )
14944 {
14945 flags = flags_;
14946 return *this;
14947 }
14948
14949 DisplaySurfaceCreateInfoKHR& setDisplayMode( DisplayModeKHR displayMode_ )
14950 {
14951 displayMode = displayMode_;
14952 return *this;
14953 }
14954
14955 DisplaySurfaceCreateInfoKHR& setPlaneIndex( uint32_t planeIndex_ )
14956 {
14957 planeIndex = planeIndex_;
14958 return *this;
14959 }
14960
14961 DisplaySurfaceCreateInfoKHR& setPlaneStackIndex( uint32_t planeStackIndex_ )
14962 {
14963 planeStackIndex = planeStackIndex_;
14964 return *this;
14965 }
14966
14967 DisplaySurfaceCreateInfoKHR& setTransform( SurfaceTransformFlagBitsKHR transform_ )
14968 {
14969 transform = transform_;
14970 return *this;
14971 }
14972
14973 DisplaySurfaceCreateInfoKHR& setGlobalAlpha( float globalAlpha_ )
14974 {
14975 globalAlpha = globalAlpha_;
14976 return *this;
14977 }
14978
14979 DisplaySurfaceCreateInfoKHR& setAlphaMode( DisplayPlaneAlphaFlagBitsKHR alphaMode_ )
14980 {
14981 alphaMode = alphaMode_;
14982 return *this;
14983 }
14984
14985 DisplaySurfaceCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
14986 {
14987 imageExtent = imageExtent_;
14988 return *this;
14989 }
14990
14991 operator const VkDisplaySurfaceCreateInfoKHR&() const
14992 {
14993 return *reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>(this);
14994 }
14995
14996 bool operator==( DisplaySurfaceCreateInfoKHR const& rhs ) const
14997 {
14998 return ( sType == rhs.sType )
14999 && ( pNext == rhs.pNext )
15000 && ( flags == rhs.flags )
15001 && ( displayMode == rhs.displayMode )
15002 && ( planeIndex == rhs.planeIndex )
15003 && ( planeStackIndex == rhs.planeStackIndex )
15004 && ( transform == rhs.transform )
15005 && ( globalAlpha == rhs.globalAlpha )
15006 && ( alphaMode == rhs.alphaMode )
15007 && ( imageExtent == rhs.imageExtent );
15008 }
15009
15010 bool operator!=( DisplaySurfaceCreateInfoKHR const& rhs ) const
15011 {
15012 return !operator==( rhs );
15013 }
15014
15015 private:
15016 StructureType sType;
15017
15018 public:
15019 const void* pNext;
15020 DisplaySurfaceCreateFlagsKHR flags;
15021 DisplayModeKHR displayMode;
15022 uint32_t planeIndex;
15023 uint32_t planeStackIndex;
15024 SurfaceTransformFlagBitsKHR transform;
15025 float globalAlpha;
15026 DisplayPlaneAlphaFlagBitsKHR alphaMode;
15027 Extent2D imageExtent;
15028 };
15029 static_assert( sizeof( DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
15030
15031 struct SurfaceCapabilitiesKHR
15032 {
15033 SurfaceCapabilitiesKHR( uint32_t minImageCount_ = 0, uint32_t maxImageCount_ = 0, Extent2D currentExtent_ = Extent2D(), Extent2D minImageExtent_ = Extent2D(), Extent2D maxImageExtent_ = Extent2D(), uint32_t maxImageArrayLayers_ = 0, SurfaceTransformFlagsKHR supportedTransforms_ = SurfaceTransformFlagsKHR(), SurfaceTransformFlagBitsKHR currentTransform_ = SurfaceTransformFlagBitsKHR::eIdentity, CompositeAlphaFlagsKHR supportedCompositeAlpha_ = CompositeAlphaFlagsKHR(), ImageUsageFlags supportedUsageFlags_ = ImageUsageFlags() )
15034 : minImageCount( minImageCount_ )
15035 , maxImageCount( maxImageCount_ )
15036 , currentExtent( currentExtent_ )
15037 , minImageExtent( minImageExtent_ )
15038 , maxImageExtent( maxImageExtent_ )
15039 , maxImageArrayLayers( maxImageArrayLayers_ )
15040 , supportedTransforms( supportedTransforms_ )
15041 , currentTransform( currentTransform_ )
15042 , supportedCompositeAlpha( supportedCompositeAlpha_ )
15043 , supportedUsageFlags( supportedUsageFlags_ )
15044 {
15045 }
15046
15047 SurfaceCapabilitiesKHR( VkSurfaceCapabilitiesKHR const & rhs )
15048 {
15049 memcpy( this, &rhs, sizeof(SurfaceCapabilitiesKHR) );
15050 }
15051
15052 SurfaceCapabilitiesKHR& operator=( VkSurfaceCapabilitiesKHR const & rhs )
15053 {
15054 memcpy( this, &rhs, sizeof(SurfaceCapabilitiesKHR) );
15055 return *this;
15056 }
15057
15058 SurfaceCapabilitiesKHR& setMinImageCount( uint32_t minImageCount_ )
15059 {
15060 minImageCount = minImageCount_;
15061 return *this;
15062 }
15063
15064 SurfaceCapabilitiesKHR& setMaxImageCount( uint32_t maxImageCount_ )
15065 {
15066 maxImageCount = maxImageCount_;
15067 return *this;
15068 }
15069
15070 SurfaceCapabilitiesKHR& setCurrentExtent( Extent2D currentExtent_ )
15071 {
15072 currentExtent = currentExtent_;
15073 return *this;
15074 }
15075
15076 SurfaceCapabilitiesKHR& setMinImageExtent( Extent2D minImageExtent_ )
15077 {
15078 minImageExtent = minImageExtent_;
15079 return *this;
15080 }
15081
15082 SurfaceCapabilitiesKHR& setMaxImageExtent( Extent2D maxImageExtent_ )
15083 {
15084 maxImageExtent = maxImageExtent_;
15085 return *this;
15086 }
15087
15088 SurfaceCapabilitiesKHR& setMaxImageArrayLayers( uint32_t maxImageArrayLayers_ )
15089 {
15090 maxImageArrayLayers = maxImageArrayLayers_;
15091 return *this;
15092 }
15093
15094 SurfaceCapabilitiesKHR& setSupportedTransforms( SurfaceTransformFlagsKHR supportedTransforms_ )
15095 {
15096 supportedTransforms = supportedTransforms_;
15097 return *this;
15098 }
15099
15100 SurfaceCapabilitiesKHR& setCurrentTransform( SurfaceTransformFlagBitsKHR currentTransform_ )
15101 {
15102 currentTransform = currentTransform_;
15103 return *this;
15104 }
15105
15106 SurfaceCapabilitiesKHR& setSupportedCompositeAlpha( CompositeAlphaFlagsKHR supportedCompositeAlpha_ )
15107 {
15108 supportedCompositeAlpha = supportedCompositeAlpha_;
15109 return *this;
15110 }
15111
15112 SurfaceCapabilitiesKHR& setSupportedUsageFlags( ImageUsageFlags supportedUsageFlags_ )
15113 {
15114 supportedUsageFlags = supportedUsageFlags_;
15115 return *this;
15116 }
15117
15118 operator const VkSurfaceCapabilitiesKHR&() const
15119 {
15120 return *reinterpret_cast<const VkSurfaceCapabilitiesKHR*>(this);
15121 }
15122
15123 bool operator==( SurfaceCapabilitiesKHR const& rhs ) const
15124 {
15125 return ( minImageCount == rhs.minImageCount )
15126 && ( maxImageCount == rhs.maxImageCount )
15127 && ( currentExtent == rhs.currentExtent )
15128 && ( minImageExtent == rhs.minImageExtent )
15129 && ( maxImageExtent == rhs.maxImageExtent )
15130 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
15131 && ( supportedTransforms == rhs.supportedTransforms )
15132 && ( currentTransform == rhs.currentTransform )
15133 && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha )
15134 && ( supportedUsageFlags == rhs.supportedUsageFlags );
15135 }
15136
15137 bool operator!=( SurfaceCapabilitiesKHR const& rhs ) const
15138 {
15139 return !operator==( rhs );
15140 }
15141
15142 uint32_t minImageCount;
15143 uint32_t maxImageCount;
15144 Extent2D currentExtent;
15145 Extent2D minImageExtent;
15146 Extent2D maxImageExtent;
15147 uint32_t maxImageArrayLayers;
15148 SurfaceTransformFlagsKHR supportedTransforms;
15149 SurfaceTransformFlagBitsKHR currentTransform;
15150 CompositeAlphaFlagsKHR supportedCompositeAlpha;
15151 ImageUsageFlags supportedUsageFlags;
15152 };
15153 static_assert( sizeof( SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ), "struct and wrapper have different size!" );
15154
15155 struct SwapchainCreateInfoKHR
15156 {
15157 SwapchainCreateInfoKHR( SwapchainCreateFlagsKHR flags_ = SwapchainCreateFlagsKHR(), SurfaceKHR surface_ = SurfaceKHR(), uint32_t minImageCount_ = 0, Format imageFormat_ = Format::eUndefined, ColorSpaceKHR imageColorSpace_ = ColorSpaceKHR::eSrgbNonlinear, Extent2D imageExtent_ = Extent2D(), uint32_t imageArrayLayers_ = 0, ImageUsageFlags imageUsage_ = ImageUsageFlags(), SharingMode imageSharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr, SurfaceTransformFlagBitsKHR preTransform_ = SurfaceTransformFlagBitsKHR::eIdentity, CompositeAlphaFlagBitsKHR compositeAlpha_ = CompositeAlphaFlagBitsKHR::eOpaque, PresentModeKHR presentMode_ = PresentModeKHR::eImmediate, Bool32 clipped_ = 0, SwapchainKHR oldSwapchain_ = SwapchainKHR() )
15158 : sType( StructureType::eSwapchainCreateInfoKHR )
15159 , pNext( nullptr )
15160 , flags( flags_ )
15161 , surface( surface_ )
15162 , minImageCount( minImageCount_ )
15163 , imageFormat( imageFormat_ )
15164 , imageColorSpace( imageColorSpace_ )
15165 , imageExtent( imageExtent_ )
15166 , imageArrayLayers( imageArrayLayers_ )
15167 , imageUsage( imageUsage_ )
15168 , imageSharingMode( imageSharingMode_ )
15169 , queueFamilyIndexCount( queueFamilyIndexCount_ )
15170 , pQueueFamilyIndices( pQueueFamilyIndices_ )
15171 , preTransform( preTransform_ )
15172 , compositeAlpha( compositeAlpha_ )
15173 , presentMode( presentMode_ )
15174 , clipped( clipped_ )
15175 , oldSwapchain( oldSwapchain_ )
15176 {
15177 }
15178
15179 SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs )
15180 {
15181 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15182 }
15183
15184 SwapchainCreateInfoKHR& operator=( VkSwapchainCreateInfoKHR const & rhs )
15185 {
15186 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15187 return *this;
15188 }
15189
15190 SwapchainCreateInfoKHR& setSType( StructureType sType_ )
15191 {
15192 sType = sType_;
15193 return *this;
15194 }
15195
15196 SwapchainCreateInfoKHR& setPNext( const void* pNext_ )
15197 {
15198 pNext = pNext_;
15199 return *this;
15200 }
15201
15202 SwapchainCreateInfoKHR& setFlags( SwapchainCreateFlagsKHR flags_ )
15203 {
15204 flags = flags_;
15205 return *this;
15206 }
15207
15208 SwapchainCreateInfoKHR& setSurface( SurfaceKHR surface_ )
15209 {
15210 surface = surface_;
15211 return *this;
15212 }
15213
15214 SwapchainCreateInfoKHR& setMinImageCount( uint32_t minImageCount_ )
15215 {
15216 minImageCount = minImageCount_;
15217 return *this;
15218 }
15219
15220 SwapchainCreateInfoKHR& setImageFormat( Format imageFormat_ )
15221 {
15222 imageFormat = imageFormat_;
15223 return *this;
15224 }
15225
15226 SwapchainCreateInfoKHR& setImageColorSpace( ColorSpaceKHR imageColorSpace_ )
15227 {
15228 imageColorSpace = imageColorSpace_;
15229 return *this;
15230 }
15231
15232 SwapchainCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
15233 {
15234 imageExtent = imageExtent_;
15235 return *this;
15236 }
15237
15238 SwapchainCreateInfoKHR& setImageArrayLayers( uint32_t imageArrayLayers_ )
15239 {
15240 imageArrayLayers = imageArrayLayers_;
15241 return *this;
15242 }
15243
15244 SwapchainCreateInfoKHR& setImageUsage( ImageUsageFlags imageUsage_ )
15245 {
15246 imageUsage = imageUsage_;
15247 return *this;
15248 }
15249
15250 SwapchainCreateInfoKHR& setImageSharingMode( SharingMode imageSharingMode_ )
15251 {
15252 imageSharingMode = imageSharingMode_;
15253 return *this;
15254 }
15255
15256 SwapchainCreateInfoKHR& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
15257 {
15258 queueFamilyIndexCount = queueFamilyIndexCount_;
15259 return *this;
15260 }
15261
15262 SwapchainCreateInfoKHR& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
15263 {
15264 pQueueFamilyIndices = pQueueFamilyIndices_;
15265 return *this;
15266 }
15267
15268 SwapchainCreateInfoKHR& setPreTransform( SurfaceTransformFlagBitsKHR preTransform_ )
15269 {
15270 preTransform = preTransform_;
15271 return *this;
15272 }
15273
15274 SwapchainCreateInfoKHR& setCompositeAlpha( CompositeAlphaFlagBitsKHR compositeAlpha_ )
15275 {
15276 compositeAlpha = compositeAlpha_;
15277 return *this;
15278 }
15279
15280 SwapchainCreateInfoKHR& setPresentMode( PresentModeKHR presentMode_ )
15281 {
15282 presentMode = presentMode_;
15283 return *this;
15284 }
15285
15286 SwapchainCreateInfoKHR& setClipped( Bool32 clipped_ )
15287 {
15288 clipped = clipped_;
15289 return *this;
15290 }
15291
15292 SwapchainCreateInfoKHR& setOldSwapchain( SwapchainKHR oldSwapchain_ )
15293 {
15294 oldSwapchain = oldSwapchain_;
15295 return *this;
15296 }
15297
15298 operator const VkSwapchainCreateInfoKHR&() const
15299 {
15300 return *reinterpret_cast<const VkSwapchainCreateInfoKHR*>(this);
15301 }
15302
15303 bool operator==( SwapchainCreateInfoKHR const& rhs ) const
15304 {
15305 return ( sType == rhs.sType )
15306 && ( pNext == rhs.pNext )
15307 && ( flags == rhs.flags )
15308 && ( surface == rhs.surface )
15309 && ( minImageCount == rhs.minImageCount )
15310 && ( imageFormat == rhs.imageFormat )
15311 && ( imageColorSpace == rhs.imageColorSpace )
15312 && ( imageExtent == rhs.imageExtent )
15313 && ( imageArrayLayers == rhs.imageArrayLayers )
15314 && ( imageUsage == rhs.imageUsage )
15315 && ( imageSharingMode == rhs.imageSharingMode )
15316 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
15317 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
15318 && ( preTransform == rhs.preTransform )
15319 && ( compositeAlpha == rhs.compositeAlpha )
15320 && ( presentMode == rhs.presentMode )
15321 && ( clipped == rhs.clipped )
15322 && ( oldSwapchain == rhs.oldSwapchain );
15323 }
15324
15325 bool operator!=( SwapchainCreateInfoKHR const& rhs ) const
15326 {
15327 return !operator==( rhs );
15328 }
15329
15330 private:
15331 StructureType sType;
15332
15333 public:
15334 const void* pNext;
15335 SwapchainCreateFlagsKHR flags;
15336 SurfaceKHR surface;
15337 uint32_t minImageCount;
15338 Format imageFormat;
15339 ColorSpaceKHR imageColorSpace;
15340 Extent2D imageExtent;
15341 uint32_t imageArrayLayers;
15342 ImageUsageFlags imageUsage;
15343 SharingMode imageSharingMode;
15344 uint32_t queueFamilyIndexCount;
15345 const uint32_t* pQueueFamilyIndices;
15346 SurfaceTransformFlagBitsKHR preTransform;
15347 CompositeAlphaFlagBitsKHR compositeAlpha;
15348 PresentModeKHR presentMode;
15349 Bool32 clipped;
15350 SwapchainKHR oldSwapchain;
15351 };
15352 static_assert( sizeof( SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ), "struct and wrapper have different size!" );
15353
15354 enum class DebugReportFlagBitsEXT
15355 {
15356 eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT,
15357 eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT,
15358 ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
15359 eError = VK_DEBUG_REPORT_ERROR_BIT_EXT,
15360 eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT
15361 };
15362
15363 using DebugReportFlagsEXT = Flags<DebugReportFlagBitsEXT, VkDebugReportFlagsEXT>;
15364
15365 inline DebugReportFlagsEXT operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 )
15366 {
15367 return DebugReportFlagsEXT( bit0 ) | bit1;
15368 }
15369
15370 struct DebugReportCallbackCreateInfoEXT
15371 {
15372 DebugReportCallbackCreateInfoEXT( DebugReportFlagsEXT flags_ = DebugReportFlagsEXT(), PFN_vkDebugReportCallbackEXT pfnCallback_ = nullptr, void* pUserData_ = nullptr )
15373 : sType( StructureType::eDebugReportCallbackCreateInfoEXT )
15374 , pNext( nullptr )
15375 , flags( flags_ )
15376 , pfnCallback( pfnCallback_ )
15377 , pUserData( pUserData_ )
15378 {
15379 }
15380
15381 DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs )
15382 {
15383 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15384 }
15385
15386 DebugReportCallbackCreateInfoEXT& operator=( VkDebugReportCallbackCreateInfoEXT const & rhs )
15387 {
15388 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15389 return *this;
15390 }
15391
15392 DebugReportCallbackCreateInfoEXT& setSType( StructureType sType_ )
15393 {
15394 sType = sType_;
15395 return *this;
15396 }
15397
15398 DebugReportCallbackCreateInfoEXT& setPNext( const void* pNext_ )
15399 {
15400 pNext = pNext_;
15401 return *this;
15402 }
15403
15404 DebugReportCallbackCreateInfoEXT& setFlags( DebugReportFlagsEXT flags_ )
15405 {
15406 flags = flags_;
15407 return *this;
15408 }
15409
15410 DebugReportCallbackCreateInfoEXT& setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ )
15411 {
15412 pfnCallback = pfnCallback_;
15413 return *this;
15414 }
15415
15416 DebugReportCallbackCreateInfoEXT& setPUserData( void* pUserData_ )
15417 {
15418 pUserData = pUserData_;
15419 return *this;
15420 }
15421
15422 operator const VkDebugReportCallbackCreateInfoEXT&() const
15423 {
15424 return *reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(this);
15425 }
15426
15427 bool operator==( DebugReportCallbackCreateInfoEXT const& rhs ) const
15428 {
15429 return ( sType == rhs.sType )
15430 && ( pNext == rhs.pNext )
15431 && ( flags == rhs.flags )
15432 && ( pfnCallback == rhs.pfnCallback )
15433 && ( pUserData == rhs.pUserData );
15434 }
15435
15436 bool operator!=( DebugReportCallbackCreateInfoEXT const& rhs ) const
15437 {
15438 return !operator==( rhs );
15439 }
15440
15441 private:
15442 StructureType sType;
15443
15444 public:
15445 const void* pNext;
15446 DebugReportFlagsEXT flags;
15447 PFN_vkDebugReportCallbackEXT pfnCallback;
15448 void* pUserData;
15449 };
15450 static_assert( sizeof( DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ), "struct and wrapper have different size!" );
15451
15452 enum class DebugReportObjectTypeEXT
15453 {
15454 eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
15455 eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
15456 ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
15457 eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
15458 eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
15459 eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
15460 eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
15461 eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
15462 eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
15463 eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
15464 eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
15465 eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
15466 eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
15467 eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
15468 eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
15469 eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
15470 ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
15471 ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
15472 eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
15473 ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
15474 eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
15475 eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
15476 eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
15477 eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
15478 eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
15479 eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
15480 eSurfaceKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
15481 eSwapchainKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
15482 eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT
15483 };
15484
15485 struct DebugMarkerObjectNameInfoEXT
15486 {
15487 DebugMarkerObjectNameInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, const char* pObjectName_ = nullptr )
15488 : sType( StructureType::eDebugMarkerObjectNameInfoEXT )
15489 , pNext( nullptr )
15490 , objectType( objectType_ )
15491 , object( object_ )
15492 , pObjectName( pObjectName_ )
15493 {
15494 }
15495
15496 DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs )
15497 {
15498 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15499 }
15500
15501 DebugMarkerObjectNameInfoEXT& operator=( VkDebugMarkerObjectNameInfoEXT const & rhs )
15502 {
15503 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15504 return *this;
15505 }
15506
15507 DebugMarkerObjectNameInfoEXT& setSType( StructureType sType_ )
15508 {
15509 sType = sType_;
15510 return *this;
15511 }
15512
15513 DebugMarkerObjectNameInfoEXT& setPNext( const void* pNext_ )
15514 {
15515 pNext = pNext_;
15516 return *this;
15517 }
15518
15519 DebugMarkerObjectNameInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15520 {
15521 objectType = objectType_;
15522 return *this;
15523 }
15524
15525 DebugMarkerObjectNameInfoEXT& setObject( uint64_t object_ )
15526 {
15527 object = object_;
15528 return *this;
15529 }
15530
15531 DebugMarkerObjectNameInfoEXT& setPObjectName( const char* pObjectName_ )
15532 {
15533 pObjectName = pObjectName_;
15534 return *this;
15535 }
15536
15537 operator const VkDebugMarkerObjectNameInfoEXT&() const
15538 {
15539 return *reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>(this);
15540 }
15541
15542 bool operator==( DebugMarkerObjectNameInfoEXT const& rhs ) const
15543 {
15544 return ( sType == rhs.sType )
15545 && ( pNext == rhs.pNext )
15546 && ( objectType == rhs.objectType )
15547 && ( object == rhs.object )
15548 && ( pObjectName == rhs.pObjectName );
15549 }
15550
15551 bool operator!=( DebugMarkerObjectNameInfoEXT const& rhs ) const
15552 {
15553 return !operator==( rhs );
15554 }
15555
15556 private:
15557 StructureType sType;
15558
15559 public:
15560 const void* pNext;
15561 DebugReportObjectTypeEXT objectType;
15562 uint64_t object;
15563 const char* pObjectName;
15564 };
15565 static_assert( sizeof( DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ), "struct and wrapper have different size!" );
15566
15567 struct DebugMarkerObjectTagInfoEXT
15568 {
15569 DebugMarkerObjectTagInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, uint64_t tagName_ = 0, size_t tagSize_ = 0, const void* pTag_ = nullptr )
15570 : sType( StructureType::eDebugMarkerObjectTagInfoEXT )
15571 , pNext( nullptr )
15572 , objectType( objectType_ )
15573 , object( object_ )
15574 , tagName( tagName_ )
15575 , tagSize( tagSize_ )
15576 , pTag( pTag_ )
15577 {
15578 }
15579
15580 DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs )
15581 {
15582 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15583 }
15584
15585 DebugMarkerObjectTagInfoEXT& operator=( VkDebugMarkerObjectTagInfoEXT const & rhs )
15586 {
15587 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15588 return *this;
15589 }
15590
15591 DebugMarkerObjectTagInfoEXT& setSType( StructureType sType_ )
15592 {
15593 sType = sType_;
15594 return *this;
15595 }
15596
15597 DebugMarkerObjectTagInfoEXT& setPNext( const void* pNext_ )
15598 {
15599 pNext = pNext_;
15600 return *this;
15601 }
15602
15603 DebugMarkerObjectTagInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15604 {
15605 objectType = objectType_;
15606 return *this;
15607 }
15608
15609 DebugMarkerObjectTagInfoEXT& setObject( uint64_t object_ )
15610 {
15611 object = object_;
15612 return *this;
15613 }
15614
15615 DebugMarkerObjectTagInfoEXT& setTagName( uint64_t tagName_ )
15616 {
15617 tagName = tagName_;
15618 return *this;
15619 }
15620
15621 DebugMarkerObjectTagInfoEXT& setTagSize( size_t tagSize_ )
15622 {
15623 tagSize = tagSize_;
15624 return *this;
15625 }
15626
15627 DebugMarkerObjectTagInfoEXT& setPTag( const void* pTag_ )
15628 {
15629 pTag = pTag_;
15630 return *this;
15631 }
15632
15633 operator const VkDebugMarkerObjectTagInfoEXT&() const
15634 {
15635 return *reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>(this);
15636 }
15637
15638 bool operator==( DebugMarkerObjectTagInfoEXT const& rhs ) const
15639 {
15640 return ( sType == rhs.sType )
15641 && ( pNext == rhs.pNext )
15642 && ( objectType == rhs.objectType )
15643 && ( object == rhs.object )
15644 && ( tagName == rhs.tagName )
15645 && ( tagSize == rhs.tagSize )
15646 && ( pTag == rhs.pTag );
15647 }
15648
15649 bool operator!=( DebugMarkerObjectTagInfoEXT const& rhs ) const
15650 {
15651 return !operator==( rhs );
15652 }
15653
15654 private:
15655 StructureType sType;
15656
15657 public:
15658 const void* pNext;
15659 DebugReportObjectTypeEXT objectType;
15660 uint64_t object;
15661 uint64_t tagName;
15662 size_t tagSize;
15663 const void* pTag;
15664 };
15665 static_assert( sizeof( DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ), "struct and wrapper have different size!" );
15666
15667 class Device
15668 {
15669 public:
15670 Device()
15671 : m_device(VK_NULL_HANDLE)
15672 {}
15673
15674#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
15675 Device(VkDevice device)
15676 : m_device(device)
15677 {}
15678
15679 Device& operator=(VkDevice device)
15680 {
15681 m_device = device;
15682 return *this;
15683 }
15684#endif
15685
Lenny Komowebf33162016-08-26 14:10:08 -060015686 bool operator==(Device const &rhs) const
15687 {
15688 return m_device == rhs.m_device;
15689 }
15690
15691 bool operator!=(Device const &rhs) const
15692 {
15693 return m_device != rhs.m_device;
15694 }
15695
15696 bool operator<(Device const &rhs) const
15697 {
15698 return m_device < rhs.m_device;
15699 }
15700
Lenny Komowbed9b5c2016-08-11 11:23:15 -060015701 PFN_vkVoidFunction getProcAddr( const char* pName ) const
15702 {
15703 return vkGetDeviceProcAddr( m_device, pName );
15704 }
15705
15706#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15707 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
15708 {
15709 return vkGetDeviceProcAddr( m_device, name.c_str() );
15710 }
15711#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15712
15713 void destroy( const AllocationCallbacks* pAllocator ) const
15714 {
15715 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15716 }
15717
15718#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15719 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
15720 {
15721 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15722 }
15723#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15724
15725 void getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue* pQueue ) const
15726 {
15727 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( pQueue ) );
15728 }
15729
15730#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15731 Queue getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const
15732 {
15733 Queue queue;
15734 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( &queue ) );
15735 return queue;
15736 }
15737#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15738
15739#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15740 Result waitIdle( ) const
15741 {
15742 return static_cast<Result>( vkDeviceWaitIdle( m_device ) );
15743 }
15744#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15745
15746#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15747 ResultValueType<void>::type waitIdle() const
15748 {
15749 Result result = static_cast<Result>( vkDeviceWaitIdle( m_device ) );
15750 return createResultValue( result, "vk::Device::waitIdle" );
15751 }
15752#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15753
15754 Result allocateMemory( const MemoryAllocateInfo* pAllocateInfo, const AllocationCallbacks* pAllocator, DeviceMemory* pMemory ) const
15755 {
15756 return static_cast<Result>( vkAllocateMemory( m_device, reinterpret_cast<const VkMemoryAllocateInfo*>( pAllocateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDeviceMemory*>( pMemory ) ) );
15757 }
15758
15759#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15760 ResultValueType<DeviceMemory>::type allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15761 {
15762 DeviceMemory memory;
15763 Result result = static_cast<Result>( vkAllocateMemory( m_device, reinterpret_cast<const VkMemoryAllocateInfo*>( &allocateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkDeviceMemory*>( &memory ) ) );
15764 return createResultValue( result, memory, "vk::Device::allocateMemory" );
15765 }
15766#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15767
15768 void freeMemory( DeviceMemory memory, const AllocationCallbacks* pAllocator ) const
15769 {
15770 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15771 }
15772
15773#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15774 void freeMemory( DeviceMemory memory, Optional<const AllocationCallbacks> allocator = nullptr ) const
15775 {
15776 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15777 }
15778#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15779
15780#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15781 Result mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void** ppData ) const
15782 {
15783 return static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), ppData ) );
15784 }
15785#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15786
15787#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15788 ResultValueType<void*>::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags = MemoryMapFlags() ) const
15789 {
15790 void* pData;
15791 Result result = static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), &pData ) );
15792 return createResultValue( result, pData, "vk::Device::mapMemory" );
15793 }
15794#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15795
15796#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15797 void unmapMemory( DeviceMemory memory ) const
15798 {
15799 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
15800 }
15801#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15802
15803#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15804 void unmapMemory( DeviceMemory memory ) const
15805 {
15806 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
15807 }
15808#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15809
15810 Result flushMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
15811 {
15812 return static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
15813 }
15814
15815#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15816 ResultValueType<void>::type flushMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
15817 {
15818 Result result = static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
15819 return createResultValue( result, "vk::Device::flushMappedMemoryRanges" );
15820 }
15821#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15822
15823 Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
15824 {
15825 return static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
15826 }
15827
15828#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15829 ResultValueType<void>::type invalidateMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
15830 {
15831 Result result = static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
15832 return createResultValue( result, "vk::Device::invalidateMappedMemoryRanges" );
15833 }
15834#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15835
15836 void getMemoryCommitment( DeviceMemory memory, DeviceSize* pCommittedMemoryInBytes ) const
15837 {
15838 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), pCommittedMemoryInBytes );
15839 }
15840
15841#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15842 DeviceSize getMemoryCommitment( DeviceMemory memory ) const
15843 {
15844 DeviceSize committedMemoryInBytes;
15845 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), &committedMemoryInBytes );
15846 return committedMemoryInBytes;
15847 }
15848#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15849
15850 void getBufferMemoryRequirements( Buffer buffer, MemoryRequirements* pMemoryRequirements ) const
15851 {
15852 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
15853 }
15854
15855#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15856 MemoryRequirements getBufferMemoryRequirements( Buffer buffer ) const
15857 {
15858 MemoryRequirements memoryRequirements;
15859 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
15860 return memoryRequirements;
15861 }
15862#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15863
15864#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15865 Result bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
15866 {
15867 return static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15868 }
15869#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15870
15871#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15872 ResultValueType<void>::type bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
15873 {
15874 Result result = static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15875 return createResultValue( result, "vk::Device::bindBufferMemory" );
15876 }
15877#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15878
15879 void getImageMemoryRequirements( Image image, MemoryRequirements* pMemoryRequirements ) const
15880 {
15881 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
15882 }
15883
15884#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15885 MemoryRequirements getImageMemoryRequirements( Image image ) const
15886 {
15887 MemoryRequirements memoryRequirements;
15888 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
15889 return memoryRequirements;
15890 }
15891#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15892
15893#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15894 Result bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
15895 {
15896 return static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15897 }
15898#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15899
15900#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15901 ResultValueType<void>::type bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
15902 {
15903 Result result = static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15904 return createResultValue( result, "vk::Device::bindImageMemory" );
15905 }
15906#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15907
15908 void getImageSparseMemoryRequirements( Image image, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements* pSparseMemoryRequirements ) const
15909 {
15910 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), pSparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( pSparseMemoryRequirements ) );
15911 }
15912
15913#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15914 template <typename Allocator = std::allocator<SparseImageMemoryRequirements>>
15915 std::vector<SparseImageMemoryRequirements,Allocator> getImageSparseMemoryRequirements( Image image ) const
15916 {
15917 std::vector<SparseImageMemoryRequirements,Allocator> sparseMemoryRequirements;
15918 uint32_t sparseMemoryRequirementCount;
15919 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, nullptr );
15920 sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
15921 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( sparseMemoryRequirements.data() ) );
15922 return sparseMemoryRequirements;
15923 }
15924#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15925
15926 Result createFence( const FenceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
15927 {
15928 return static_cast<Result>( vkCreateFence( m_device, reinterpret_cast<const VkFenceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
15929 }
15930
15931#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15932 ResultValueType<Fence>::type createFence( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15933 {
15934 Fence fence;
15935 Result result = static_cast<Result>( vkCreateFence( m_device, reinterpret_cast<const VkFenceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkFence*>( &fence ) ) );
15936 return createResultValue( result, fence, "vk::Device::createFence" );
15937 }
15938#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15939
15940 void destroyFence( Fence fence, const AllocationCallbacks* pAllocator ) const
15941 {
15942 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15943 }
15944
15945#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15946 void destroyFence( Fence fence, Optional<const AllocationCallbacks> allocator = nullptr ) const
15947 {
15948 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15949 }
15950#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15951
15952 Result resetFences( uint32_t fenceCount, const Fence* pFences ) const
15953 {
15954 return static_cast<Result>( vkResetFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ) ) );
15955 }
15956
15957#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15958 ResultValueType<void>::type resetFences( ArrayProxy<const Fence> fences ) const
15959 {
15960 Result result = static_cast<Result>( vkResetFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ) ) );
15961 return createResultValue( result, "vk::Device::resetFences" );
15962 }
15963#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15964
15965#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15966 Result getFenceStatus( Fence fence ) const
15967 {
15968 return static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
15969 }
15970#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15971
15972#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15973 Result getFenceStatus( Fence fence ) const
15974 {
15975 Result result = static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
15976 return createResultValue( result, "vk::Device::getFenceStatus", { Result::eSuccess, Result::eNotReady } );
15977 }
15978#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15979
15980 Result waitForFences( uint32_t fenceCount, const Fence* pFences, Bool32 waitAll, uint64_t timeout ) const
15981 {
15982 return static_cast<Result>( vkWaitForFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ), waitAll, timeout ) );
15983 }
15984
15985#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15986 Result waitForFences( ArrayProxy<const Fence> fences, Bool32 waitAll, uint64_t timeout ) const
15987 {
15988 Result result = static_cast<Result>( vkWaitForFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ), waitAll, timeout ) );
15989 return createResultValue( result, "vk::Device::waitForFences", { Result::eSuccess, Result::eTimeout } );
15990 }
15991#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15992
15993 Result createSemaphore( const SemaphoreCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Semaphore* pSemaphore ) const
15994 {
15995 return static_cast<Result>( vkCreateSemaphore( m_device, reinterpret_cast<const VkSemaphoreCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSemaphore*>( pSemaphore ) ) );
15996 }
15997
15998#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15999 ResultValueType<Semaphore>::type createSemaphore( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16000 {
16001 Semaphore semaphore;
16002 Result result = static_cast<Result>( vkCreateSemaphore( m_device, reinterpret_cast<const VkSemaphoreCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSemaphore*>( &semaphore ) ) );
16003 return createResultValue( result, semaphore, "vk::Device::createSemaphore" );
16004 }
16005#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16006
16007 void destroySemaphore( Semaphore semaphore, const AllocationCallbacks* pAllocator ) const
16008 {
16009 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16010 }
16011
16012#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16013 void destroySemaphore( Semaphore semaphore, Optional<const AllocationCallbacks> allocator = nullptr ) const
16014 {
16015 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16016 }
16017#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16018
16019 Result createEvent( const EventCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Event* pEvent ) const
16020 {
16021 return static_cast<Result>( vkCreateEvent( m_device, reinterpret_cast<const VkEventCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkEvent*>( pEvent ) ) );
16022 }
16023
16024#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16025 ResultValueType<Event>::type createEvent( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16026 {
16027 Event event;
16028 Result result = static_cast<Result>( vkCreateEvent( m_device, reinterpret_cast<const VkEventCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkEvent*>( &event ) ) );
16029 return createResultValue( result, event, "vk::Device::createEvent" );
16030 }
16031#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16032
16033 void destroyEvent( Event event, const AllocationCallbacks* pAllocator ) const
16034 {
16035 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16036 }
16037
16038#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16039 void destroyEvent( Event event, Optional<const AllocationCallbacks> allocator = nullptr ) const
16040 {
16041 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16042 }
16043#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16044
16045#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16046 Result getEventStatus( Event event ) const
16047 {
16048 return static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16049 }
16050#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16051
16052#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16053 Result getEventStatus( Event event ) const
16054 {
16055 Result result = static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16056 return createResultValue( result, "vk::Device::getEventStatus", { Result::eEventSet, Result::eEventReset } );
16057 }
16058#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16059
16060#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16061 Result setEvent( Event event ) const
16062 {
16063 return static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16064 }
16065#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16066
16067#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16068 ResultValueType<void>::type setEvent( Event event ) const
16069 {
16070 Result result = static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16071 return createResultValue( result, "vk::Device::setEvent" );
16072 }
16073#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16074
16075#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16076 Result resetEvent( Event event ) const
16077 {
16078 return static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16079 }
16080#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16081
16082#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16083 ResultValueType<void>::type resetEvent( Event event ) const
16084 {
16085 Result result = static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16086 return createResultValue( result, "vk::Device::resetEvent" );
16087 }
16088#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16089
16090 Result createQueryPool( const QueryPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, QueryPool* pQueryPool ) const
16091 {
16092 return static_cast<Result>( vkCreateQueryPool( m_device, reinterpret_cast<const VkQueryPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkQueryPool*>( pQueryPool ) ) );
16093 }
16094
16095#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16096 ResultValueType<QueryPool>::type createQueryPool( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16097 {
16098 QueryPool queryPool;
16099 Result result = static_cast<Result>( vkCreateQueryPool( m_device, reinterpret_cast<const VkQueryPoolCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkQueryPool*>( &queryPool ) ) );
16100 return createResultValue( result, queryPool, "vk::Device::createQueryPool" );
16101 }
16102#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16103
16104 void destroyQueryPool( QueryPool queryPool, const AllocationCallbacks* pAllocator ) const
16105 {
16106 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16107 }
16108
16109#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16110 void destroyQueryPool( QueryPool queryPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16111 {
16112 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16113 }
16114#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16115
16116 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, DeviceSize stride, QueryResultFlags flags ) const
16117 {
16118 return static_cast<Result>( vkGetQueryPoolResults( m_device, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, dataSize, pData, stride, static_cast<VkQueryResultFlags>( flags ) ) );
16119 }
16120
16121#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16122 template <typename T>
16123 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, ArrayProxy<T> data, DeviceSize stride, QueryResultFlags flags ) const
16124 {
16125 Result result = static_cast<Result>( vkGetQueryPoolResults( m_device, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, data.size() * sizeof( T ) , reinterpret_cast<void*>( data.data() ), stride, static_cast<VkQueryResultFlags>( flags ) ) );
16126 return createResultValue( result, "vk::Device::getQueryPoolResults", { Result::eSuccess, Result::eNotReady } );
16127 }
16128#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16129
16130 Result createBuffer( const BufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Buffer* pBuffer ) const
16131 {
16132 return static_cast<Result>( vkCreateBuffer( m_device, reinterpret_cast<const VkBufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBuffer*>( pBuffer ) ) );
16133 }
16134
16135#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16136 ResultValueType<Buffer>::type createBuffer( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16137 {
16138 Buffer buffer;
16139 Result result = static_cast<Result>( vkCreateBuffer( m_device, reinterpret_cast<const VkBufferCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkBuffer*>( &buffer ) ) );
16140 return createResultValue( result, buffer, "vk::Device::createBuffer" );
16141 }
16142#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16143
16144 void destroyBuffer( Buffer buffer, const AllocationCallbacks* pAllocator ) const
16145 {
16146 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16147 }
16148
16149#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16150 void destroyBuffer( Buffer buffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16151 {
16152 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16153 }
16154#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16155
16156 Result createBufferView( const BufferViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, BufferView* pView ) const
16157 {
16158 return static_cast<Result>( vkCreateBufferView( m_device, reinterpret_cast<const VkBufferViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBufferView*>( pView ) ) );
16159 }
16160
16161#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16162 ResultValueType<BufferView>::type createBufferView( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16163 {
16164 BufferView view;
16165 Result result = static_cast<Result>( vkCreateBufferView( m_device, reinterpret_cast<const VkBufferViewCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkBufferView*>( &view ) ) );
16166 return createResultValue( result, view, "vk::Device::createBufferView" );
16167 }
16168#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16169
16170 void destroyBufferView( BufferView bufferView, const AllocationCallbacks* pAllocator ) const
16171 {
16172 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16173 }
16174
16175#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16176 void destroyBufferView( BufferView bufferView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16177 {
16178 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16179 }
16180#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16181
16182 Result createImage( const ImageCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Image* pImage ) const
16183 {
16184 return static_cast<Result>( vkCreateImage( m_device, reinterpret_cast<const VkImageCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImage*>( pImage ) ) );
16185 }
16186
16187#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16188 ResultValueType<Image>::type createImage( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16189 {
16190 Image image;
16191 Result result = static_cast<Result>( vkCreateImage( m_device, reinterpret_cast<const VkImageCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkImage*>( &image ) ) );
16192 return createResultValue( result, image, "vk::Device::createImage" );
16193 }
16194#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16195
16196 void destroyImage( Image image, const AllocationCallbacks* pAllocator ) const
16197 {
16198 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16199 }
16200
16201#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16202 void destroyImage( Image image, Optional<const AllocationCallbacks> allocator = nullptr ) const
16203 {
16204 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16205 }
16206#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16207
16208 void getImageSubresourceLayout( Image image, const ImageSubresource* pSubresource, SubresourceLayout* pLayout ) const
16209 {
16210 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( pSubresource ), reinterpret_cast<VkSubresourceLayout*>( pLayout ) );
16211 }
16212
16213#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16214 SubresourceLayout getImageSubresourceLayout( Image image, const ImageSubresource & subresource ) const
16215 {
16216 SubresourceLayout layout;
16217 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( &subresource ), reinterpret_cast<VkSubresourceLayout*>( &layout ) );
16218 return layout;
16219 }
16220#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16221
16222 Result createImageView( const ImageViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ImageView* pView ) const
16223 {
16224 return static_cast<Result>( vkCreateImageView( m_device, reinterpret_cast<const VkImageViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImageView*>( pView ) ) );
16225 }
16226
16227#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16228 ResultValueType<ImageView>::type createImageView( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16229 {
16230 ImageView view;
16231 Result result = static_cast<Result>( vkCreateImageView( m_device, reinterpret_cast<const VkImageViewCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkImageView*>( &view ) ) );
16232 return createResultValue( result, view, "vk::Device::createImageView" );
16233 }
16234#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16235
16236 void destroyImageView( ImageView imageView, const AllocationCallbacks* pAllocator ) const
16237 {
16238 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16239 }
16240
16241#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16242 void destroyImageView( ImageView imageView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16243 {
16244 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16245 }
16246#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16247
16248 Result createShaderModule( const ShaderModuleCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ShaderModule* pShaderModule ) const
16249 {
16250 return static_cast<Result>( vkCreateShaderModule( m_device, reinterpret_cast<const VkShaderModuleCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkShaderModule*>( pShaderModule ) ) );
16251 }
16252
16253#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16254 ResultValueType<ShaderModule>::type createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16255 {
16256 ShaderModule shaderModule;
16257 Result result = static_cast<Result>( vkCreateShaderModule( m_device, reinterpret_cast<const VkShaderModuleCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkShaderModule*>( &shaderModule ) ) );
16258 return createResultValue( result, shaderModule, "vk::Device::createShaderModule" );
16259 }
16260#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16261
16262 void destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks* pAllocator ) const
16263 {
16264 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16265 }
16266
16267#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16268 void destroyShaderModule( ShaderModule shaderModule, Optional<const AllocationCallbacks> allocator = nullptr ) const
16269 {
16270 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16271 }
16272#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16273
16274 Result createPipelineCache( const PipelineCacheCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineCache* pPipelineCache ) const
16275 {
16276 return static_cast<Result>( vkCreatePipelineCache( m_device, reinterpret_cast<const VkPipelineCacheCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineCache*>( pPipelineCache ) ) );
16277 }
16278
16279#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16280 ResultValueType<PipelineCache>::type createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16281 {
16282 PipelineCache pipelineCache;
16283 Result result = static_cast<Result>( vkCreatePipelineCache( m_device, reinterpret_cast<const VkPipelineCacheCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkPipelineCache*>( &pipelineCache ) ) );
16284 return createResultValue( result, pipelineCache, "vk::Device::createPipelineCache" );
16285 }
16286#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16287
16288 void destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks* pAllocator ) const
16289 {
16290 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16291 }
16292
16293#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16294 void destroyPipelineCache( PipelineCache pipelineCache, Optional<const AllocationCallbacks> allocator = nullptr ) const
16295 {
16296 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16297 }
16298#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16299
16300 Result getPipelineCacheData( PipelineCache pipelineCache, size_t* pDataSize, void* pData ) const
16301 {
16302 return static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), pDataSize, pData ) );
16303 }
16304
16305#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16306 template <typename Allocator = std::allocator<uint8_t>>
16307 typename ResultValueType<std::vector<uint8_t,Allocator>>::type getPipelineCacheData( PipelineCache pipelineCache ) const
16308 {
16309 std::vector<uint8_t,Allocator> data;
16310 size_t dataSize;
16311 Result result;
16312 do
16313 {
16314 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, nullptr ) );
16315 if ( ( result == Result::eSuccess ) && dataSize )
16316 {
16317 data.resize( dataSize );
16318 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, reinterpret_cast<void*>( data.data() ) ) );
16319 }
16320 } while ( result == Result::eIncomplete );
16321 assert( dataSize <= data.size() );
16322 data.resize( dataSize );
16323 return createResultValue( result, data, "vk::Device::getPipelineCacheData" );
16324 }
16325#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16326
16327 Result mergePipelineCaches( PipelineCache dstCache, uint32_t srcCacheCount, const PipelineCache* pSrcCaches ) const
16328 {
16329 return static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCacheCount, reinterpret_cast<const VkPipelineCache*>( pSrcCaches ) ) );
16330 }
16331
16332#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16333 ResultValueType<void>::type mergePipelineCaches( PipelineCache dstCache, ArrayProxy<const PipelineCache> srcCaches ) const
16334 {
16335 Result result = static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCaches.size() , reinterpret_cast<const VkPipelineCache*>( srcCaches.data() ) ) );
16336 return createResultValue( result, "vk::Device::mergePipelineCaches" );
16337 }
16338#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16339
16340 Result createGraphicsPipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const GraphicsPipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16341 {
16342 return static_cast<Result>( vkCreateGraphicsPipelines( m_device, static_cast<VkPipelineCache>( pipelineCache ), createInfoCount, reinterpret_cast<const VkGraphicsPipelineCreateInfo*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipeline*>( pPipelines ) ) );
16343 }
16344
16345#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16346 template <typename Allocator = std::allocator<Pipeline>>
16347 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createGraphicsPipelines( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16348 {
16349 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16350 Result result = static_cast<Result>( vkCreateGraphicsPipelines( m_device, static_cast<VkPipelineCache>( pipelineCache ), createInfos.size() , reinterpret_cast<const VkGraphicsPipelineCreateInfo*>( createInfos.data() ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkPipeline*>( pipelines.data() ) ) );
16351 return createResultValue( result, pipelines, "vk::Device::createGraphicsPipelines" );
16352 }
16353
16354 ResultValueType<Pipeline>::type createGraphicsPipeline( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16355 {
16356 Pipeline pipeline;
16357 Result result = static_cast<Result>( vkCreateGraphicsPipelines( m_device, static_cast<VkPipelineCache>( pipelineCache ), 1 , reinterpret_cast<const VkGraphicsPipelineCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkPipeline*>( &pipeline ) ) );
16358 return createResultValue( result, pipeline, "vk::Device::createGraphicsPipeline" );
16359 }
16360#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16361
16362 Result createComputePipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const ComputePipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16363 {
16364 return static_cast<Result>( vkCreateComputePipelines( m_device, static_cast<VkPipelineCache>( pipelineCache ), createInfoCount, reinterpret_cast<const VkComputePipelineCreateInfo*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipeline*>( pPipelines ) ) );
16365 }
16366
16367#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16368 template <typename Allocator = std::allocator<Pipeline>>
16369 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createComputePipelines( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16370 {
16371 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16372 Result result = static_cast<Result>( vkCreateComputePipelines( m_device, static_cast<VkPipelineCache>( pipelineCache ), createInfos.size() , reinterpret_cast<const VkComputePipelineCreateInfo*>( createInfos.data() ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkPipeline*>( pipelines.data() ) ) );
16373 return createResultValue( result, pipelines, "vk::Device::createComputePipelines" );
16374 }
16375
16376 ResultValueType<Pipeline>::type createComputePipeline( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16377 {
16378 Pipeline pipeline;
16379 Result result = static_cast<Result>( vkCreateComputePipelines( m_device, static_cast<VkPipelineCache>( pipelineCache ), 1 , reinterpret_cast<const VkComputePipelineCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkPipeline*>( &pipeline ) ) );
16380 return createResultValue( result, pipeline, "vk::Device::createComputePipeline" );
16381 }
16382#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16383
16384 void destroyPipeline( Pipeline pipeline, const AllocationCallbacks* pAllocator ) const
16385 {
16386 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16387 }
16388
16389#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16390 void destroyPipeline( Pipeline pipeline, Optional<const AllocationCallbacks> allocator = nullptr ) const
16391 {
16392 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16393 }
16394#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16395
16396 Result createPipelineLayout( const PipelineLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineLayout* pPipelineLayout ) const
16397 {
16398 return static_cast<Result>( vkCreatePipelineLayout( m_device, reinterpret_cast<const VkPipelineLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineLayout*>( pPipelineLayout ) ) );
16399 }
16400
16401#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16402 ResultValueType<PipelineLayout>::type createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16403 {
16404 PipelineLayout pipelineLayout;
16405 Result result = static_cast<Result>( vkCreatePipelineLayout( m_device, reinterpret_cast<const VkPipelineLayoutCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkPipelineLayout*>( &pipelineLayout ) ) );
16406 return createResultValue( result, pipelineLayout, "vk::Device::createPipelineLayout" );
16407 }
16408#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16409
16410 void destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks* pAllocator ) const
16411 {
16412 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16413 }
16414
16415#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16416 void destroyPipelineLayout( PipelineLayout pipelineLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16417 {
16418 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16419 }
16420#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16421
16422 Result createSampler( const SamplerCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Sampler* pSampler ) const
16423 {
16424 return static_cast<Result>( vkCreateSampler( m_device, reinterpret_cast<const VkSamplerCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSampler*>( pSampler ) ) );
16425 }
16426
16427#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16428 ResultValueType<Sampler>::type createSampler( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16429 {
16430 Sampler sampler;
16431 Result result = static_cast<Result>( vkCreateSampler( m_device, reinterpret_cast<const VkSamplerCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSampler*>( &sampler ) ) );
16432 return createResultValue( result, sampler, "vk::Device::createSampler" );
16433 }
16434#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16435
16436 void destroySampler( Sampler sampler, const AllocationCallbacks* pAllocator ) const
16437 {
16438 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16439 }
16440
16441#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16442 void destroySampler( Sampler sampler, Optional<const AllocationCallbacks> allocator = nullptr ) const
16443 {
16444 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16445 }
16446#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16447
16448 Result createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorSetLayout* pSetLayout ) const
16449 {
16450 return static_cast<Result>( vkCreateDescriptorSetLayout( m_device, reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorSetLayout*>( pSetLayout ) ) );
16451 }
16452
16453#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16454 ResultValueType<DescriptorSetLayout>::type createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16455 {
16456 DescriptorSetLayout setLayout;
16457 Result result = static_cast<Result>( vkCreateDescriptorSetLayout( m_device, reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkDescriptorSetLayout*>( &setLayout ) ) );
16458 return createResultValue( result, setLayout, "vk::Device::createDescriptorSetLayout" );
16459 }
16460#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16461
16462 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks* pAllocator ) const
16463 {
16464 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16465 }
16466
16467#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16468 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16469 {
16470 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16471 }
16472#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16473
16474 Result createDescriptorPool( const DescriptorPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorPool* pDescriptorPool ) const
16475 {
16476 return static_cast<Result>( vkCreateDescriptorPool( m_device, reinterpret_cast<const VkDescriptorPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorPool*>( pDescriptorPool ) ) );
16477 }
16478
16479#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16480 ResultValueType<DescriptorPool>::type createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16481 {
16482 DescriptorPool descriptorPool;
16483 Result result = static_cast<Result>( vkCreateDescriptorPool( m_device, reinterpret_cast<const VkDescriptorPoolCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkDescriptorPool*>( &descriptorPool ) ) );
16484 return createResultValue( result, descriptorPool, "vk::Device::createDescriptorPool" );
16485 }
16486#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16487
16488 void destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks* pAllocator ) const
16489 {
16490 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16491 }
16492
16493#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16494 void destroyDescriptorPool( DescriptorPool descriptorPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16495 {
16496 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16497 }
16498#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16499
16500#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16501 Result resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const
16502 {
16503 return static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16504 }
16505#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16506
16507#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16508 ResultValueType<void>::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags = DescriptorPoolResetFlags() ) const
16509 {
16510 Result result = static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16511 return createResultValue( result, "vk::Device::resetDescriptorPool" );
16512 }
16513#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16514
16515 Result allocateDescriptorSets( const DescriptorSetAllocateInfo* pAllocateInfo, DescriptorSet* pDescriptorSets ) const
16516 {
16517 return static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkDescriptorSet*>( pDescriptorSets ) ) );
16518 }
16519
16520#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16521 template <typename Allocator = std::allocator<DescriptorSet>>
16522 typename ResultValueType<std::vector<DescriptorSet,Allocator>>::type allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo ) const
16523 {
16524 std::vector<DescriptorSet,Allocator> descriptorSets( allocateInfo.descriptorSetCount );
16525 Result result = static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkDescriptorSet*>( descriptorSets.data() ) ) );
16526 return createResultValue( result, descriptorSets, "vk::Device::allocateDescriptorSets" );
16527 }
16528#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16529
16530 Result freeDescriptorSets( DescriptorPool descriptorPool, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets ) const
16531 {
16532 return static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ) ) );
16533 }
16534
16535#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16536 ResultValueType<void>::type freeDescriptorSets( DescriptorPool descriptorPool, ArrayProxy<const DescriptorSet> descriptorSets ) const
16537 {
16538 Result result = static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ) ) );
16539 return createResultValue( result, "vk::Device::freeDescriptorSets" );
16540 }
16541#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16542
16543 void updateDescriptorSets( uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const CopyDescriptorSet* pDescriptorCopies ) const
16544 {
16545 vkUpdateDescriptorSets( m_device, descriptorWriteCount, reinterpret_cast<const VkWriteDescriptorSet*>( pDescriptorWrites ), descriptorCopyCount, reinterpret_cast<const VkCopyDescriptorSet*>( pDescriptorCopies ) );
16546 }
16547
16548#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16549 void updateDescriptorSets( ArrayProxy<const WriteDescriptorSet> descriptorWrites, ArrayProxy<const CopyDescriptorSet> descriptorCopies ) const
16550 {
16551 vkUpdateDescriptorSets( m_device, descriptorWrites.size() , reinterpret_cast<const VkWriteDescriptorSet*>( descriptorWrites.data() ), descriptorCopies.size() , reinterpret_cast<const VkCopyDescriptorSet*>( descriptorCopies.data() ) );
16552 }
16553#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16554
16555 Result createFramebuffer( const FramebufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Framebuffer* pFramebuffer ) const
16556 {
16557 return static_cast<Result>( vkCreateFramebuffer( m_device, reinterpret_cast<const VkFramebufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFramebuffer*>( pFramebuffer ) ) );
16558 }
16559
16560#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16561 ResultValueType<Framebuffer>::type createFramebuffer( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16562 {
16563 Framebuffer framebuffer;
16564 Result result = static_cast<Result>( vkCreateFramebuffer( m_device, reinterpret_cast<const VkFramebufferCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkFramebuffer*>( &framebuffer ) ) );
16565 return createResultValue( result, framebuffer, "vk::Device::createFramebuffer" );
16566 }
16567#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16568
16569 void destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks* pAllocator ) const
16570 {
16571 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16572 }
16573
16574#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16575 void destroyFramebuffer( Framebuffer framebuffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16576 {
16577 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16578 }
16579#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16580
16581 Result createRenderPass( const RenderPassCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, RenderPass* pRenderPass ) const
16582 {
16583 return static_cast<Result>( vkCreateRenderPass( m_device, reinterpret_cast<const VkRenderPassCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkRenderPass*>( pRenderPass ) ) );
16584 }
16585
16586#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16587 ResultValueType<RenderPass>::type createRenderPass( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16588 {
16589 RenderPass renderPass;
16590 Result result = static_cast<Result>( vkCreateRenderPass( m_device, reinterpret_cast<const VkRenderPassCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkRenderPass*>( &renderPass ) ) );
16591 return createResultValue( result, renderPass, "vk::Device::createRenderPass" );
16592 }
16593#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16594
16595 void destroyRenderPass( RenderPass renderPass, const AllocationCallbacks* pAllocator ) const
16596 {
16597 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16598 }
16599
16600#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16601 void destroyRenderPass( RenderPass renderPass, Optional<const AllocationCallbacks> allocator = nullptr ) const
16602 {
16603 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16604 }
16605#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16606
16607 void getRenderAreaGranularity( RenderPass renderPass, Extent2D* pGranularity ) const
16608 {
16609 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( pGranularity ) );
16610 }
16611
16612#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16613 Extent2D getRenderAreaGranularity( RenderPass renderPass ) const
16614 {
16615 Extent2D granularity;
16616 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( &granularity ) );
16617 return granularity;
16618 }
16619#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16620
16621 Result createCommandPool( const CommandPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, CommandPool* pCommandPool ) const
16622 {
16623 return static_cast<Result>( vkCreateCommandPool( m_device, reinterpret_cast<const VkCommandPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkCommandPool*>( pCommandPool ) ) );
16624 }
16625
16626#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16627 ResultValueType<CommandPool>::type createCommandPool( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16628 {
16629 CommandPool commandPool;
16630 Result result = static_cast<Result>( vkCreateCommandPool( m_device, reinterpret_cast<const VkCommandPoolCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkCommandPool*>( &commandPool ) ) );
16631 return createResultValue( result, commandPool, "vk::Device::createCommandPool" );
16632 }
16633#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16634
16635 void destroyCommandPool( CommandPool commandPool, const AllocationCallbacks* pAllocator ) const
16636 {
16637 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16638 }
16639
16640#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16641 void destroyCommandPool( CommandPool commandPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16642 {
16643 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16644 }
16645#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16646
16647#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16648 Result resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16649 {
16650 return static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16651 }
16652#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16653
16654#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16655 ResultValueType<void>::type resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16656 {
16657 Result result = static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16658 return createResultValue( result, "vk::Device::resetCommandPool" );
16659 }
16660#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16661
16662 Result allocateCommandBuffers( const CommandBufferAllocateInfo* pAllocateInfo, CommandBuffer* pCommandBuffers ) const
16663 {
16664 return static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkCommandBuffer*>( pCommandBuffers ) ) );
16665 }
16666
16667#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16668 template <typename Allocator = std::allocator<CommandBuffer>>
16669 typename ResultValueType<std::vector<CommandBuffer,Allocator>>::type allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo ) const
16670 {
16671 std::vector<CommandBuffer,Allocator> commandBuffers( allocateInfo.commandBufferCount );
16672 Result result = static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkCommandBuffer*>( commandBuffers.data() ) ) );
16673 return createResultValue( result, commandBuffers, "vk::Device::allocateCommandBuffers" );
16674 }
16675#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16676
16677 void freeCommandBuffers( CommandPool commandPool, uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
16678 {
16679 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
16680 }
16681
16682#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16683 void freeCommandBuffers( CommandPool commandPool, ArrayProxy<const CommandBuffer> commandBuffers ) const
16684 {
16685 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
16686 }
16687#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16688
16689 Result createSharedSwapchainsKHR( uint32_t swapchainCount, const SwapchainCreateInfoKHR* pCreateInfos, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchains ) const
16690 {
16691 return static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, swapchainCount, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchains ) ) );
16692 }
16693
16694#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16695 template <typename Allocator = std::allocator<SwapchainKHR>>
16696 typename ResultValueType<std::vector<SwapchainKHR,Allocator>>::type createSharedSwapchainsKHR( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16697 {
16698 std::vector<SwapchainKHR,Allocator> swapchains( createInfos.size() );
16699 Result result = static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, createInfos.size() , reinterpret_cast<const VkSwapchainCreateInfoKHR*>( createInfos.data() ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSwapchainKHR*>( swapchains.data() ) ) );
16700 return createResultValue( result, swapchains, "vk::Device::createSharedSwapchainsKHR" );
16701 }
16702
16703 ResultValueType<SwapchainKHR>::type createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16704 {
16705 SwapchainKHR swapchain;
16706 Result result = static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, 1 , reinterpret_cast<const VkSwapchainCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSwapchainKHR*>( &swapchain ) ) );
16707 return createResultValue( result, swapchain, "vk::Device::createSharedSwapchainKHR" );
16708 }
16709#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16710
16711 Result createSwapchainKHR( const SwapchainCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchain ) const
16712 {
16713 return static_cast<Result>( vkCreateSwapchainKHR( m_device, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchain ) ) );
16714 }
16715
16716#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16717 ResultValueType<SwapchainKHR>::type createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16718 {
16719 SwapchainKHR swapchain;
16720 Result result = static_cast<Result>( vkCreateSwapchainKHR( m_device, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSwapchainKHR*>( &swapchain ) ) );
16721 return createResultValue( result, swapchain, "vk::Device::createSwapchainKHR" );
16722 }
16723#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16724
16725 void destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks* pAllocator ) const
16726 {
16727 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16728 }
16729
16730#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16731 void destroySwapchainKHR( SwapchainKHR swapchain, Optional<const AllocationCallbacks> allocator = nullptr ) const
16732 {
16733 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16734 }
16735#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16736
16737 Result getSwapchainImagesKHR( SwapchainKHR swapchain, uint32_t* pSwapchainImageCount, Image* pSwapchainImages ) const
16738 {
16739 return static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), pSwapchainImageCount, reinterpret_cast<VkImage*>( pSwapchainImages ) ) );
16740 }
16741
16742#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16743 template <typename Allocator = std::allocator<Image>>
16744 typename ResultValueType<std::vector<Image,Allocator>>::type getSwapchainImagesKHR( SwapchainKHR swapchain ) const
16745 {
16746 std::vector<Image,Allocator> swapchainImages;
16747 uint32_t swapchainImageCount;
16748 Result result;
16749 do
16750 {
16751 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, nullptr ) );
16752 if ( ( result == Result::eSuccess ) && swapchainImageCount )
16753 {
16754 swapchainImages.resize( swapchainImageCount );
16755 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, reinterpret_cast<VkImage*>( swapchainImages.data() ) ) );
16756 }
16757 } while ( result == Result::eIncomplete );
16758 assert( swapchainImageCount <= swapchainImages.size() );
16759 swapchainImages.resize( swapchainImageCount );
16760 return createResultValue( result, swapchainImages, "vk::Device::getSwapchainImagesKHR" );
16761 }
16762#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16763
16764 Result acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t* pImageIndex ) const
16765 {
16766 return static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), pImageIndex ) );
16767 }
16768
16769#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16770 ResultValue<uint32_t> acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence ) const
16771 {
16772 uint32_t imageIndex;
16773 Result result = static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), &imageIndex ) );
16774 return createResultValue( result, imageIndex, "vk::Device::acquireNextImageKHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } );
16775 }
16776#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16777
16778 Result debugMarkerSetObjectNameEXT( DebugMarkerObjectNameInfoEXT* pNameInfo ) const
16779 {
16780 return static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( pNameInfo ) ) );
16781 }
16782
16783#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16784 ResultValueType<DebugMarkerObjectNameInfoEXT>::type debugMarkerSetObjectNameEXT() const
16785 {
16786 DebugMarkerObjectNameInfoEXT nameInfo;
16787 Result result = static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( &nameInfo ) ) );
16788 return createResultValue( result, nameInfo, "vk::Device::debugMarkerSetObjectNameEXT" );
16789 }
16790#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16791
16792 Result debugMarkerSetObjectTagEXT( DebugMarkerObjectTagInfoEXT* pTagInfo ) const
16793 {
16794 return static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( pTagInfo ) ) );
16795 }
16796
16797#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16798 ResultValueType<DebugMarkerObjectTagInfoEXT>::type debugMarkerSetObjectTagEXT() const
16799 {
16800 DebugMarkerObjectTagInfoEXT tagInfo;
16801 Result result = static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( &tagInfo ) ) );
16802 return createResultValue( result, tagInfo, "vk::Device::debugMarkerSetObjectTagEXT" );
16803 }
16804#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16805
16806#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
16807 explicit
16808#endif
16809 operator VkDevice() const
16810 {
16811 return m_device;
16812 }
16813
16814 explicit operator bool() const
16815 {
16816 return m_device != VK_NULL_HANDLE;
16817 }
16818
16819 bool operator!() const
16820 {
16821 return m_device == VK_NULL_HANDLE;
16822 }
16823
16824 private:
16825 VkDevice m_device;
16826 };
16827 static_assert( sizeof( Device ) == sizeof( VkDevice ), "handle and wrapper have different size!" );
16828
16829 class PhysicalDevice
16830 {
16831 public:
16832 PhysicalDevice()
16833 : m_physicalDevice(VK_NULL_HANDLE)
16834 {}
16835
16836#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
16837 PhysicalDevice(VkPhysicalDevice physicalDevice)
16838 : m_physicalDevice(physicalDevice)
16839 {}
16840
16841 PhysicalDevice& operator=(VkPhysicalDevice physicalDevice)
16842 {
16843 m_physicalDevice = physicalDevice;
16844 return *this;
16845 }
16846#endif
16847
Lenny Komowebf33162016-08-26 14:10:08 -060016848 bool operator==(PhysicalDevice const &rhs) const
16849 {
16850 return m_physicalDevice == rhs.m_physicalDevice;
16851 }
16852
16853 bool operator!=(PhysicalDevice const &rhs) const
16854 {
16855 return m_physicalDevice != rhs.m_physicalDevice;
16856 }
16857
16858 bool operator<(PhysicalDevice const &rhs) const
16859 {
16860 return m_physicalDevice < rhs.m_physicalDevice;
16861 }
16862
Lenny Komowbed9b5c2016-08-11 11:23:15 -060016863 void getProperties( PhysicalDeviceProperties* pProperties ) const
16864 {
16865 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( pProperties ) );
16866 }
16867
16868#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16869 PhysicalDeviceProperties getProperties() const
16870 {
16871 PhysicalDeviceProperties properties;
16872 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( &properties ) );
16873 return properties;
16874 }
16875#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16876
16877 void getQueueFamilyProperties( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties* pQueueFamilyProperties ) const
16878 {
16879 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( pQueueFamilyProperties ) );
16880 }
16881
16882#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16883 template <typename Allocator = std::allocator<QueueFamilyProperties>>
16884 std::vector<QueueFamilyProperties,Allocator> getQueueFamilyProperties() const
16885 {
16886 std::vector<QueueFamilyProperties,Allocator> queueFamilyProperties;
16887 uint32_t queueFamilyPropertyCount;
16888 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr );
16889 queueFamilyProperties.resize( queueFamilyPropertyCount );
16890 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( queueFamilyProperties.data() ) );
16891 return queueFamilyProperties;
16892 }
16893#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16894
16895 void getMemoryProperties( PhysicalDeviceMemoryProperties* pMemoryProperties ) const
16896 {
16897 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( pMemoryProperties ) );
16898 }
16899
16900#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16901 PhysicalDeviceMemoryProperties getMemoryProperties() const
16902 {
16903 PhysicalDeviceMemoryProperties memoryProperties;
16904 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( &memoryProperties ) );
16905 return memoryProperties;
16906 }
16907#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16908
16909 void getFeatures( PhysicalDeviceFeatures* pFeatures ) const
16910 {
16911 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( pFeatures ) );
16912 }
16913
16914#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16915 PhysicalDeviceFeatures getFeatures() const
16916 {
16917 PhysicalDeviceFeatures features;
16918 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( &features ) );
16919 return features;
16920 }
16921#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16922
16923 void getFormatProperties( Format format, FormatProperties* pFormatProperties ) const
16924 {
16925 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( pFormatProperties ) );
16926 }
16927
16928#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16929 FormatProperties getFormatProperties( Format format ) const
16930 {
16931 FormatProperties formatProperties;
16932 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( &formatProperties ) );
16933 return formatProperties;
16934 }
16935#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16936
16937 Result getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ImageFormatProperties* pImageFormatProperties ) const
16938 {
16939 return static_cast<Result>( vkGetPhysicalDeviceImageFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), static_cast<VkImageType>( type ), static_cast<VkImageTiling>( tiling ), static_cast<VkImageUsageFlags>( usage ), static_cast<VkImageCreateFlags>( flags ), reinterpret_cast<VkImageFormatProperties*>( pImageFormatProperties ) ) );
16940 }
16941
16942#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16943 ResultValueType<ImageFormatProperties>::type getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags ) const
16944 {
16945 ImageFormatProperties imageFormatProperties;
16946 Result result = static_cast<Result>( vkGetPhysicalDeviceImageFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), static_cast<VkImageType>( type ), static_cast<VkImageTiling>( tiling ), static_cast<VkImageUsageFlags>( usage ), static_cast<VkImageCreateFlags>( flags ), reinterpret_cast<VkImageFormatProperties*>( &imageFormatProperties ) ) );
16947 return createResultValue( result, imageFormatProperties, "vk::PhysicalDevice::getImageFormatProperties" );
16948 }
16949#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16950
16951 Result createDevice( const DeviceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Device* pDevice ) const
16952 {
16953 return static_cast<Result>( vkCreateDevice( m_physicalDevice, reinterpret_cast<const VkDeviceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDevice*>( pDevice ) ) );
16954 }
16955
16956#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16957 ResultValueType<Device>::type createDevice( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16958 {
16959 Device device;
16960 Result result = static_cast<Result>( vkCreateDevice( m_physicalDevice, reinterpret_cast<const VkDeviceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkDevice*>( &device ) ) );
16961 return createResultValue( result, device, "vk::PhysicalDevice::createDevice" );
16962 }
16963#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16964
16965 Result enumerateDeviceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties ) const
16966 {
16967 return static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
16968 }
16969
16970#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16971 template <typename Allocator = std::allocator<LayerProperties>>
16972 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateDeviceLayerProperties() const
16973 {
16974 std::vector<LayerProperties,Allocator> properties;
16975 uint32_t propertyCount;
16976 Result result;
16977 do
16978 {
16979 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) );
16980 if ( ( result == Result::eSuccess ) && propertyCount )
16981 {
16982 properties.resize( propertyCount );
16983 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
16984 }
16985 } while ( result == Result::eIncomplete );
16986 assert( propertyCount <= properties.size() );
16987 properties.resize( propertyCount );
16988 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceLayerProperties" );
16989 }
16990#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16991
16992 Result enumerateDeviceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties ) const
16993 {
16994 return static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
16995 }
16996
16997#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16998 template <typename Allocator = std::allocator<ExtensionProperties>>
16999 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateDeviceExtensionProperties( Optional<const std::string> layerName = nullptr ) const
17000 {
17001 std::vector<ExtensionProperties,Allocator> properties;
17002 uint32_t propertyCount;
17003 Result result;
17004 do
17005 {
17006 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
17007 if ( ( result == Result::eSuccess ) && propertyCount )
17008 {
17009 properties.resize( propertyCount );
17010 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
17011 }
17012 } while ( result == Result::eIncomplete );
17013 assert( propertyCount <= properties.size() );
17014 properties.resize( propertyCount );
17015 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceExtensionProperties" );
17016 }
17017#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17018
17019 void getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, uint32_t* pPropertyCount, SparseImageFormatProperties* pProperties ) const
17020 {
17021 vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), static_cast<VkImageType>( type ), static_cast<VkSampleCountFlagBits>( samples ), static_cast<VkImageUsageFlags>( usage ), static_cast<VkImageTiling>( tiling ), pPropertyCount, reinterpret_cast<VkSparseImageFormatProperties*>( pProperties ) );
17022 }
17023
17024#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17025 template <typename Allocator = std::allocator<SparseImageFormatProperties>>
17026 std::vector<SparseImageFormatProperties,Allocator> getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling ) const
17027 {
17028 std::vector<SparseImageFormatProperties,Allocator> properties;
17029 uint32_t propertyCount;
17030 vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), static_cast<VkImageType>( type ), static_cast<VkSampleCountFlagBits>( samples ), static_cast<VkImageUsageFlags>( usage ), static_cast<VkImageTiling>( tiling ), &propertyCount, nullptr );
17031 properties.resize( propertyCount );
17032 vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), static_cast<VkImageType>( type ), static_cast<VkSampleCountFlagBits>( samples ), static_cast<VkImageUsageFlags>( usage ), static_cast<VkImageTiling>( tiling ), &propertyCount, reinterpret_cast<VkSparseImageFormatProperties*>( properties.data() ) );
17033 return properties;
17034 }
17035#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17036
17037 Result getDisplayPropertiesKHR( uint32_t* pPropertyCount, DisplayPropertiesKHR* pProperties ) const
17038 {
17039 return static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( pProperties ) ) );
17040 }
17041
17042#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17043 template <typename Allocator = std::allocator<DisplayPropertiesKHR>>
17044 typename ResultValueType<std::vector<DisplayPropertiesKHR,Allocator>>::type getDisplayPropertiesKHR() const
17045 {
17046 std::vector<DisplayPropertiesKHR,Allocator> properties;
17047 uint32_t propertyCount;
17048 Result result;
17049 do
17050 {
17051 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17052 if ( ( result == Result::eSuccess ) && propertyCount )
17053 {
17054 properties.resize( propertyCount );
17055 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( properties.data() ) ) );
17056 }
17057 } while ( result == Result::eIncomplete );
17058 assert( propertyCount <= properties.size() );
17059 properties.resize( propertyCount );
17060 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPropertiesKHR" );
17061 }
17062#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17063
17064 Result getDisplayPlanePropertiesKHR( uint32_t* pPropertyCount, DisplayPlanePropertiesKHR* pProperties ) const
17065 {
17066 return static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( pProperties ) ) );
17067 }
17068
17069#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17070 template <typename Allocator = std::allocator<DisplayPlanePropertiesKHR>>
17071 typename ResultValueType<std::vector<DisplayPlanePropertiesKHR,Allocator>>::type getDisplayPlanePropertiesKHR() const
17072 {
17073 std::vector<DisplayPlanePropertiesKHR,Allocator> properties;
17074 uint32_t propertyCount;
17075 Result result;
17076 do
17077 {
17078 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17079 if ( ( result == Result::eSuccess ) && propertyCount )
17080 {
17081 properties.resize( propertyCount );
17082 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( properties.data() ) ) );
17083 }
17084 } while ( result == Result::eIncomplete );
17085 assert( propertyCount <= properties.size() );
17086 properties.resize( propertyCount );
17087 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPlanePropertiesKHR" );
17088 }
17089#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17090
17091 Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, uint32_t* pDisplayCount, DisplayKHR* pDisplays ) const
17092 {
17093 return static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, pDisplayCount, reinterpret_cast<VkDisplayKHR*>( pDisplays ) ) );
17094 }
17095
17096#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17097 template <typename Allocator = std::allocator<DisplayKHR>>
17098 typename ResultValueType<std::vector<DisplayKHR,Allocator>>::type getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const
17099 {
17100 std::vector<DisplayKHR,Allocator> displays;
17101 uint32_t displayCount;
17102 Result result;
17103 do
17104 {
17105 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) );
17106 if ( ( result == Result::eSuccess ) && displayCount )
17107 {
17108 displays.resize( displayCount );
17109 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR*>( displays.data() ) ) );
17110 }
17111 } while ( result == Result::eIncomplete );
17112 assert( displayCount <= displays.size() );
17113 displays.resize( displayCount );
17114 return createResultValue( result, displays, "vk::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
17115 }
17116#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17117
17118 Result getDisplayModePropertiesKHR( DisplayKHR display, uint32_t* pPropertyCount, DisplayModePropertiesKHR* pProperties ) const
17119 {
17120 return static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), pPropertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( pProperties ) ) );
17121 }
17122
17123#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17124 template <typename Allocator = std::allocator<DisplayModePropertiesKHR>>
17125 typename ResultValueType<std::vector<DisplayModePropertiesKHR,Allocator>>::type getDisplayModePropertiesKHR( DisplayKHR display ) const
17126 {
17127 std::vector<DisplayModePropertiesKHR,Allocator> properties;
17128 uint32_t propertyCount;
17129 Result result;
17130 do
17131 {
17132 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, nullptr ) );
17133 if ( ( result == Result::eSuccess ) && propertyCount )
17134 {
17135 properties.resize( propertyCount );
17136 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( properties.data() ) ) );
17137 }
17138 } while ( result == Result::eIncomplete );
17139 assert( propertyCount <= properties.size() );
17140 properties.resize( propertyCount );
17141 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayModePropertiesKHR" );
17142 }
17143#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17144
17145 Result createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DisplayModeKHR* pMode ) const
17146 {
17147 return static_cast<Result>( vkCreateDisplayModeKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), reinterpret_cast<const VkDisplayModeCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDisplayModeKHR*>( pMode ) ) );
17148 }
17149
17150#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17151 ResultValueType<DisplayModeKHR>::type createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17152 {
17153 DisplayModeKHR mode;
17154 Result result = static_cast<Result>( vkCreateDisplayModeKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), reinterpret_cast<const VkDisplayModeCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkDisplayModeKHR*>( &mode ) ) );
17155 return createResultValue( result, mode, "vk::PhysicalDevice::createDisplayModeKHR" );
17156 }
17157#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17158
17159 Result getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, DisplayPlaneCapabilitiesKHR* pCapabilities ) const
17160 {
17161 return static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( pCapabilities ) ) );
17162 }
17163
17164#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17165 ResultValueType<DisplayPlaneCapabilitiesKHR>::type getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex ) const
17166 {
17167 DisplayPlaneCapabilitiesKHR capabilities;
17168 Result result = static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( &capabilities ) ) );
17169 return createResultValue( result, capabilities, "vk::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" );
17170 }
17171#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17172
17173#ifdef VK_USE_PLATFORM_MIR_KHR
17174 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection* connection ) const
17175 {
17176 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection );
17177 }
17178#endif /*VK_USE_PLATFORM_MIR_KHR*/
17179
17180#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17181#ifdef VK_USE_PLATFORM_MIR_KHR
17182 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection & connection ) const
17183 {
17184 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection );
17185 }
17186#endif /*VK_USE_PLATFORM_MIR_KHR*/
17187#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17188
17189 Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32* pSupported ) const
17190 {
17191 return static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), pSupported ) );
17192 }
17193
17194#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17195 ResultValueType<Bool32>::type getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface ) const
17196 {
17197 Bool32 supported;
17198 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), &supported ) );
17199 return createResultValue( result, supported, "vk::PhysicalDevice::getSurfaceSupportKHR" );
17200 }
17201#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17202
17203 Result getSurfaceCapabilitiesKHR( SurfaceKHR surface, SurfaceCapabilitiesKHR* pSurfaceCapabilities ) const
17204 {
17205 return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( pSurfaceCapabilities ) ) );
17206 }
17207
17208#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17209 ResultValueType<SurfaceCapabilitiesKHR>::type getSurfaceCapabilitiesKHR( SurfaceKHR surface ) const
17210 {
17211 SurfaceCapabilitiesKHR surfaceCapabilities;
17212 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( &surfaceCapabilities ) ) );
17213 return createResultValue( result, surfaceCapabilities, "vk::PhysicalDevice::getSurfaceCapabilitiesKHR" );
17214 }
17215#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17216
17217 Result getSurfaceFormatsKHR( SurfaceKHR surface, uint32_t* pSurfaceFormatCount, SurfaceFormatKHR* pSurfaceFormats ) const
17218 {
17219 return static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pSurfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( pSurfaceFormats ) ) );
17220 }
17221
17222#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17223 template <typename Allocator = std::allocator<SurfaceFormatKHR>>
17224 typename ResultValueType<std::vector<SurfaceFormatKHR,Allocator>>::type getSurfaceFormatsKHR( SurfaceKHR surface ) const
17225 {
17226 std::vector<SurfaceFormatKHR,Allocator> surfaceFormats;
17227 uint32_t surfaceFormatCount;
17228 Result result;
17229 do
17230 {
17231 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, nullptr ) );
17232 if ( ( result == Result::eSuccess ) && surfaceFormatCount )
17233 {
17234 surfaceFormats.resize( surfaceFormatCount );
17235 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( surfaceFormats.data() ) ) );
17236 }
17237 } while ( result == Result::eIncomplete );
17238 assert( surfaceFormatCount <= surfaceFormats.size() );
17239 surfaceFormats.resize( surfaceFormatCount );
17240 return createResultValue( result, surfaceFormats, "vk::PhysicalDevice::getSurfaceFormatsKHR" );
17241 }
17242#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17243
17244 Result getSurfacePresentModesKHR( SurfaceKHR surface, uint32_t* pPresentModeCount, PresentModeKHR* pPresentModes ) const
17245 {
17246 return static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pPresentModeCount, reinterpret_cast<VkPresentModeKHR*>( pPresentModes ) ) );
17247 }
17248
17249#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17250 template <typename Allocator = std::allocator<PresentModeKHR>>
17251 typename ResultValueType<std::vector<PresentModeKHR,Allocator>>::type getSurfacePresentModesKHR( SurfaceKHR surface ) const
17252 {
17253 std::vector<PresentModeKHR,Allocator> presentModes;
17254 uint32_t presentModeCount;
17255 Result result;
17256 do
17257 {
17258 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, nullptr ) );
17259 if ( ( result == Result::eSuccess ) && presentModeCount )
17260 {
17261 presentModes.resize( presentModeCount );
17262 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, reinterpret_cast<VkPresentModeKHR*>( presentModes.data() ) ) );
17263 }
17264 } while ( result == Result::eIncomplete );
17265 assert( presentModeCount <= presentModes.size() );
17266 presentModes.resize( presentModeCount );
17267 return createResultValue( result, presentModes, "vk::PhysicalDevice::getSurfacePresentModesKHR" );
17268 }
17269#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17270
17271#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17272 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display* display ) const
17273 {
17274 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, display );
17275 }
17276#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17277
17278#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17279#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17280 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const
17281 {
17282 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display );
17283 }
17284#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17285#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17286
17287#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
17288#ifdef VK_USE_PLATFORM_WIN32_KHR
17289 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
17290 {
17291 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
17292 }
17293#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17294#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17295
17296#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17297#ifdef VK_USE_PLATFORM_WIN32_KHR
17298 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
17299 {
17300 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
17301 }
17302#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17303#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17304
17305#ifdef VK_USE_PLATFORM_XLIB_KHR
17306 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID ) const
17307 {
17308 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, dpy, visualID );
17309 }
17310#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17311
17312#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17313#ifdef VK_USE_PLATFORM_XLIB_KHR
17314 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const
17315 {
17316 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID );
17317 }
17318#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17319#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17320
17321#ifdef VK_USE_PLATFORM_XCB_KHR
17322 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id ) const
17323 {
17324 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection, visual_id );
17325 }
17326#endif /*VK_USE_PLATFORM_XCB_KHR*/
17327
17328#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17329#ifdef VK_USE_PLATFORM_XCB_KHR
17330 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const
17331 {
17332 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id );
17333 }
17334#endif /*VK_USE_PLATFORM_XCB_KHR*/
17335#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17336
17337#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17338 explicit
17339#endif
17340 operator VkPhysicalDevice() const
17341 {
17342 return m_physicalDevice;
17343 }
17344
17345 explicit operator bool() const
17346 {
17347 return m_physicalDevice != VK_NULL_HANDLE;
17348 }
17349
17350 bool operator!() const
17351 {
17352 return m_physicalDevice == VK_NULL_HANDLE;
17353 }
17354
17355 private:
17356 VkPhysicalDevice m_physicalDevice;
17357 };
17358 static_assert( sizeof( PhysicalDevice ) == sizeof( VkPhysicalDevice ), "handle and wrapper have different size!" );
17359
17360 class Instance
17361 {
17362 public:
17363 Instance()
17364 : m_instance(VK_NULL_HANDLE)
17365 {}
17366
17367#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17368 Instance(VkInstance instance)
17369 : m_instance(instance)
17370 {}
17371
17372 Instance& operator=(VkInstance instance)
17373 {
17374 m_instance = instance;
17375 return *this;
17376 }
17377#endif
17378
Lenny Komowebf33162016-08-26 14:10:08 -060017379 bool operator==(Instance const &rhs) const
17380 {
17381 return m_instance == rhs.m_instance;
17382 }
17383
17384 bool operator!=(Instance const &rhs) const
17385 {
17386 return m_instance != rhs.m_instance;
17387 }
17388
17389 bool operator<(Instance const &rhs) const
17390 {
17391 return m_instance < rhs.m_instance;
17392 }
17393
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017394 void destroy( const AllocationCallbacks* pAllocator ) const
17395 {
17396 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17397 }
17398
17399#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17400 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
17401 {
17402 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17403 }
17404#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17405
17406 Result enumeratePhysicalDevices( uint32_t* pPhysicalDeviceCount, PhysicalDevice* pPhysicalDevices ) const
17407 {
17408 return static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, pPhysicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( pPhysicalDevices ) ) );
17409 }
17410
17411#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17412 template <typename Allocator = std::allocator<PhysicalDevice>>
17413 typename ResultValueType<std::vector<PhysicalDevice,Allocator>>::type enumeratePhysicalDevices() const
17414 {
17415 std::vector<PhysicalDevice,Allocator> physicalDevices;
17416 uint32_t physicalDeviceCount;
17417 Result result;
17418 do
17419 {
17420 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) );
17421 if ( ( result == Result::eSuccess ) && physicalDeviceCount )
17422 {
17423 physicalDevices.resize( physicalDeviceCount );
17424 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( physicalDevices.data() ) ) );
17425 }
17426 } while ( result == Result::eIncomplete );
17427 assert( physicalDeviceCount <= physicalDevices.size() );
17428 physicalDevices.resize( physicalDeviceCount );
17429 return createResultValue( result, physicalDevices, "vk::Instance::enumeratePhysicalDevices" );
17430 }
17431#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17432
17433 PFN_vkVoidFunction getProcAddr( const char* pName ) const
17434 {
17435 return vkGetInstanceProcAddr( m_instance, pName );
17436 }
17437
17438#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17439 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
17440 {
17441 return vkGetInstanceProcAddr( m_instance, name.c_str() );
17442 }
17443#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17444
17445#ifdef VK_USE_PLATFORM_ANDROID_KHR
17446 Result createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17447 {
17448 return static_cast<Result>( vkCreateAndroidSurfaceKHR( m_instance, reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17449 }
17450#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
17451
17452#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17453#ifdef VK_USE_PLATFORM_ANDROID_KHR
17454 ResultValueType<SurfaceKHR>::type createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17455 {
17456 SurfaceKHR surface;
17457 Result result = static_cast<Result>( vkCreateAndroidSurfaceKHR( m_instance, reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
17458 return createResultValue( result, surface, "vk::Instance::createAndroidSurfaceKHR" );
17459 }
17460#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
17461#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17462
17463 Result createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17464 {
17465 return static_cast<Result>( vkCreateDisplayPlaneSurfaceKHR( m_instance, reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17466 }
17467
17468#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17469 ResultValueType<SurfaceKHR>::type createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17470 {
17471 SurfaceKHR surface;
17472 Result result = static_cast<Result>( vkCreateDisplayPlaneSurfaceKHR( m_instance, reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
17473 return createResultValue( result, surface, "vk::Instance::createDisplayPlaneSurfaceKHR" );
17474 }
17475#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17476
17477#ifdef VK_USE_PLATFORM_MIR_KHR
17478 Result createMirSurfaceKHR( const MirSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17479 {
17480 return static_cast<Result>( vkCreateMirSurfaceKHR( m_instance, reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17481 }
17482#endif /*VK_USE_PLATFORM_MIR_KHR*/
17483
17484#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17485#ifdef VK_USE_PLATFORM_MIR_KHR
17486 ResultValueType<SurfaceKHR>::type createMirSurfaceKHR( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17487 {
17488 SurfaceKHR surface;
17489 Result result = static_cast<Result>( vkCreateMirSurfaceKHR( m_instance, reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
17490 return createResultValue( result, surface, "vk::Instance::createMirSurfaceKHR" );
17491 }
17492#endif /*VK_USE_PLATFORM_MIR_KHR*/
17493#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17494
17495 void destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks* pAllocator ) const
17496 {
17497 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17498 }
17499
17500#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17501 void destroySurfaceKHR( SurfaceKHR surface, Optional<const AllocationCallbacks> allocator = nullptr ) const
17502 {
17503 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17504 }
17505#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17506
17507#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17508 Result createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17509 {
17510 return static_cast<Result>( vkCreateWaylandSurfaceKHR( m_instance, reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17511 }
17512#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17513
17514#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17515#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17516 ResultValueType<SurfaceKHR>::type createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17517 {
17518 SurfaceKHR surface;
17519 Result result = static_cast<Result>( vkCreateWaylandSurfaceKHR( m_instance, reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
17520 return createResultValue( result, surface, "vk::Instance::createWaylandSurfaceKHR" );
17521 }
17522#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17523#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17524
17525#ifdef VK_USE_PLATFORM_WIN32_KHR
17526 Result createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17527 {
17528 return static_cast<Result>( vkCreateWin32SurfaceKHR( m_instance, reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17529 }
17530#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17531
17532#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17533#ifdef VK_USE_PLATFORM_WIN32_KHR
17534 ResultValueType<SurfaceKHR>::type createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17535 {
17536 SurfaceKHR surface;
17537 Result result = static_cast<Result>( vkCreateWin32SurfaceKHR( m_instance, reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
17538 return createResultValue( result, surface, "vk::Instance::createWin32SurfaceKHR" );
17539 }
17540#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17541#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17542
17543#ifdef VK_USE_PLATFORM_XLIB_KHR
17544 Result createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17545 {
17546 return static_cast<Result>( vkCreateXlibSurfaceKHR( m_instance, reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17547 }
17548#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17549
17550#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17551#ifdef VK_USE_PLATFORM_XLIB_KHR
17552 ResultValueType<SurfaceKHR>::type createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17553 {
17554 SurfaceKHR surface;
17555 Result result = static_cast<Result>( vkCreateXlibSurfaceKHR( m_instance, reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
17556 return createResultValue( result, surface, "vk::Instance::createXlibSurfaceKHR" );
17557 }
17558#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17559#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17560
17561#ifdef VK_USE_PLATFORM_XCB_KHR
17562 Result createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17563 {
17564 return static_cast<Result>( vkCreateXcbSurfaceKHR( m_instance, reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17565 }
17566#endif /*VK_USE_PLATFORM_XCB_KHR*/
17567
17568#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17569#ifdef VK_USE_PLATFORM_XCB_KHR
17570 ResultValueType<SurfaceKHR>::type createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17571 {
17572 SurfaceKHR surface;
17573 Result result = static_cast<Result>( vkCreateXcbSurfaceKHR( m_instance, reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
17574 return createResultValue( result, surface, "vk::Instance::createXcbSurfaceKHR" );
17575 }
17576#endif /*VK_USE_PLATFORM_XCB_KHR*/
17577#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17578
17579 Result createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, DebugReportCallbackEXT* pCallback ) const
17580 {
17581 return static_cast<Result>( vkCreateDebugReportCallbackEXT( m_instance, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDebugReportCallbackEXT*>( pCallback ) ) );
17582 }
17583
17584#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17585 ResultValueType<DebugReportCallbackEXT>::type createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17586 {
17587 DebugReportCallbackEXT callback;
17588 Result result = static_cast<Result>( vkCreateDebugReportCallbackEXT( m_instance, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkDebugReportCallbackEXT*>( &callback ) ) );
17589 return createResultValue( result, callback, "vk::Instance::createDebugReportCallbackEXT" );
17590 }
17591#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17592
17593 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, const AllocationCallbacks* pAllocator ) const
17594 {
17595 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17596 }
17597
17598#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17599 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, Optional<const AllocationCallbacks> allocator = nullptr ) const
17600 {
17601 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17602 }
17603#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17604
17605 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage ) const
17606 {
17607 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, pLayerPrefix, pMessage );
17608 }
17609
17610#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17611 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const std::string & layerPrefix, const std::string & message ) const
17612 {
17613 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, layerPrefix.c_str(), message.c_str() );
17614 }
17615#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17616
17617#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17618 explicit
17619#endif
17620 operator VkInstance() const
17621 {
17622 return m_instance;
17623 }
17624
17625 explicit operator bool() const
17626 {
17627 return m_instance != VK_NULL_HANDLE;
17628 }
17629
17630 bool operator!() const
17631 {
17632 return m_instance == VK_NULL_HANDLE;
17633 }
17634
17635 private:
17636 VkInstance m_instance;
17637 };
17638 static_assert( sizeof( Instance ) == sizeof( VkInstance ), "handle and wrapper have different size!" );
17639
17640 enum class DebugReportErrorEXT
17641 {
17642 eNone = VK_DEBUG_REPORT_ERROR_NONE_EXT,
17643 eCallbackRef = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT
17644 };
17645
17646 enum class RasterizationOrderAMD
17647 {
17648 eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD,
17649 eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD
17650 };
17651
17652 struct PipelineRasterizationStateRasterizationOrderAMD
17653 {
17654 PipelineRasterizationStateRasterizationOrderAMD( RasterizationOrderAMD rasterizationOrder_ = RasterizationOrderAMD::eStrict )
17655 : sType( StructureType::ePipelineRasterizationStateRasterizationOrderAMD )
17656 , pNext( nullptr )
17657 , rasterizationOrder( rasterizationOrder_ )
17658 {
17659 }
17660
17661 PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
17662 {
17663 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
17664 }
17665
17666 PipelineRasterizationStateRasterizationOrderAMD& operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
17667 {
17668 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
17669 return *this;
17670 }
17671
17672 PipelineRasterizationStateRasterizationOrderAMD& setSType( StructureType sType_ )
17673 {
17674 sType = sType_;
17675 return *this;
17676 }
17677
17678 PipelineRasterizationStateRasterizationOrderAMD& setPNext( const void* pNext_ )
17679 {
17680 pNext = pNext_;
17681 return *this;
17682 }
17683
17684 PipelineRasterizationStateRasterizationOrderAMD& setRasterizationOrder( RasterizationOrderAMD rasterizationOrder_ )
17685 {
17686 rasterizationOrder = rasterizationOrder_;
17687 return *this;
17688 }
17689
17690 operator const VkPipelineRasterizationStateRasterizationOrderAMD&() const
17691 {
17692 return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(this);
17693 }
17694
17695 bool operator==( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
17696 {
17697 return ( sType == rhs.sType )
17698 && ( pNext == rhs.pNext )
17699 && ( rasterizationOrder == rhs.rasterizationOrder );
17700 }
17701
17702 bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
17703 {
17704 return !operator==( rhs );
17705 }
17706
17707 private:
17708 StructureType sType;
17709
17710 public:
17711 const void* pNext;
17712 RasterizationOrderAMD rasterizationOrder;
17713 };
17714 static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) == sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), "struct and wrapper have different size!" );
17715
17716 inline Result createInstance( const InstanceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Instance* pInstance )
17717 {
17718 return static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkInstance*>( pInstance ) ) );
17719 }
17720
17721#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17722 inline ResultValueType<Instance>::type createInstance( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr )
17723 {
17724 Instance instance;
17725 Result result = static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkInstance*>( &instance ) ) );
17726 return createResultValue( result, instance, "vk::createInstance" );
17727 }
17728#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17729
17730 inline Result enumerateInstanceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties )
17731 {
17732 return static_cast<Result>( vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
17733 }
17734
17735#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17736 template <typename Allocator = std::allocator<LayerProperties>>
17737 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties()
17738 {
17739 std::vector<LayerProperties,Allocator> properties;
17740 uint32_t propertyCount;
17741 Result result;
17742 do
17743 {
17744 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) );
17745 if ( ( result == Result::eSuccess ) && propertyCount )
17746 {
17747 properties.resize( propertyCount );
17748 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
17749 }
17750 } while ( result == Result::eIncomplete );
17751 assert( propertyCount <= properties.size() );
17752 properties.resize( propertyCount );
17753 return createResultValue( result, properties, "vk::enumerateInstanceLayerProperties" );
17754 }
17755#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17756
17757 inline Result enumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties )
17758 {
17759 return static_cast<Result>( vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
17760 }
17761
17762#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17763 template <typename Allocator = std::allocator<ExtensionProperties>>
17764 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateInstanceExtensionProperties( Optional<const std::string> layerName = nullptr )
17765 {
17766 std::vector<ExtensionProperties,Allocator> properties;
17767 uint32_t propertyCount;
17768 Result result;
17769 do
17770 {
17771 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
17772 if ( ( result == Result::eSuccess ) && propertyCount )
17773 {
17774 properties.resize( propertyCount );
17775 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
17776 }
17777 } while ( result == Result::eIncomplete );
17778 assert( propertyCount <= properties.size() );
17779 properties.resize( propertyCount );
17780 return createResultValue( result, properties, "vk::enumerateInstanceExtensionProperties" );
17781 }
17782#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17783
17784 inline std::string to_string(FramebufferCreateFlagBits)
17785 {
17786 return "(void)";
17787 }
17788
17789 inline std::string to_string(FramebufferCreateFlags)
17790 {
17791 return "{}";
17792 }
17793
17794 inline std::string to_string(QueryPoolCreateFlagBits)
17795 {
17796 return "(void)";
17797 }
17798
17799 inline std::string to_string(QueryPoolCreateFlags)
17800 {
17801 return "{}";
17802 }
17803
17804 inline std::string to_string(RenderPassCreateFlagBits)
17805 {
17806 return "(void)";
17807 }
17808
17809 inline std::string to_string(RenderPassCreateFlags)
17810 {
17811 return "{}";
17812 }
17813
17814 inline std::string to_string(SamplerCreateFlagBits)
17815 {
17816 return "(void)";
17817 }
17818
17819 inline std::string to_string(SamplerCreateFlags)
17820 {
17821 return "{}";
17822 }
17823
17824 inline std::string to_string(PipelineLayoutCreateFlagBits)
17825 {
17826 return "(void)";
17827 }
17828
17829 inline std::string to_string(PipelineLayoutCreateFlags)
17830 {
17831 return "{}";
17832 }
17833
17834 inline std::string to_string(PipelineCacheCreateFlagBits)
17835 {
17836 return "(void)";
17837 }
17838
17839 inline std::string to_string(PipelineCacheCreateFlags)
17840 {
17841 return "{}";
17842 }
17843
17844 inline std::string to_string(PipelineDepthStencilStateCreateFlagBits)
17845 {
17846 return "(void)";
17847 }
17848
17849 inline std::string to_string(PipelineDepthStencilStateCreateFlags)
17850 {
17851 return "{}";
17852 }
17853
17854 inline std::string to_string(PipelineDynamicStateCreateFlagBits)
17855 {
17856 return "(void)";
17857 }
17858
17859 inline std::string to_string(PipelineDynamicStateCreateFlags)
17860 {
17861 return "{}";
17862 }
17863
17864 inline std::string to_string(PipelineColorBlendStateCreateFlagBits)
17865 {
17866 return "(void)";
17867 }
17868
17869 inline std::string to_string(PipelineColorBlendStateCreateFlags)
17870 {
17871 return "{}";
17872 }
17873
17874 inline std::string to_string(PipelineMultisampleStateCreateFlagBits)
17875 {
17876 return "(void)";
17877 }
17878
17879 inline std::string to_string(PipelineMultisampleStateCreateFlags)
17880 {
17881 return "{}";
17882 }
17883
17884 inline std::string to_string(PipelineRasterizationStateCreateFlagBits)
17885 {
17886 return "(void)";
17887 }
17888
17889 inline std::string to_string(PipelineRasterizationStateCreateFlags)
17890 {
17891 return "{}";
17892 }
17893
17894 inline std::string to_string(PipelineViewportStateCreateFlagBits)
17895 {
17896 return "(void)";
17897 }
17898
17899 inline std::string to_string(PipelineViewportStateCreateFlags)
17900 {
17901 return "{}";
17902 }
17903
17904 inline std::string to_string(PipelineTessellationStateCreateFlagBits)
17905 {
17906 return "(void)";
17907 }
17908
17909 inline std::string to_string(PipelineTessellationStateCreateFlags)
17910 {
17911 return "{}";
17912 }
17913
17914 inline std::string to_string(PipelineInputAssemblyStateCreateFlagBits)
17915 {
17916 return "(void)";
17917 }
17918
17919 inline std::string to_string(PipelineInputAssemblyStateCreateFlags)
17920 {
17921 return "{}";
17922 }
17923
17924 inline std::string to_string(PipelineVertexInputStateCreateFlagBits)
17925 {
17926 return "(void)";
17927 }
17928
17929 inline std::string to_string(PipelineVertexInputStateCreateFlags)
17930 {
17931 return "{}";
17932 }
17933
17934 inline std::string to_string(PipelineShaderStageCreateFlagBits)
17935 {
17936 return "(void)";
17937 }
17938
17939 inline std::string to_string(PipelineShaderStageCreateFlags)
17940 {
17941 return "{}";
17942 }
17943
17944 inline std::string to_string(DescriptorSetLayoutCreateFlagBits)
17945 {
17946 return "(void)";
17947 }
17948
17949 inline std::string to_string(DescriptorSetLayoutCreateFlags)
17950 {
17951 return "{}";
17952 }
17953
17954 inline std::string to_string(BufferViewCreateFlagBits)
17955 {
17956 return "(void)";
17957 }
17958
17959 inline std::string to_string(BufferViewCreateFlags)
17960 {
17961 return "{}";
17962 }
17963
17964 inline std::string to_string(InstanceCreateFlagBits)
17965 {
17966 return "(void)";
17967 }
17968
17969 inline std::string to_string(InstanceCreateFlags)
17970 {
17971 return "{}";
17972 }
17973
17974 inline std::string to_string(DeviceCreateFlagBits)
17975 {
17976 return "(void)";
17977 }
17978
17979 inline std::string to_string(DeviceCreateFlags)
17980 {
17981 return "{}";
17982 }
17983
17984 inline std::string to_string(DeviceQueueCreateFlagBits)
17985 {
17986 return "(void)";
17987 }
17988
17989 inline std::string to_string(DeviceQueueCreateFlags)
17990 {
17991 return "{}";
17992 }
17993
17994 inline std::string to_string(ImageViewCreateFlagBits)
17995 {
17996 return "(void)";
17997 }
17998
17999 inline std::string to_string(ImageViewCreateFlags)
18000 {
18001 return "{}";
18002 }
18003
18004 inline std::string to_string(SemaphoreCreateFlagBits)
18005 {
18006 return "(void)";
18007 }
18008
18009 inline std::string to_string(SemaphoreCreateFlags)
18010 {
18011 return "{}";
18012 }
18013
18014 inline std::string to_string(ShaderModuleCreateFlagBits)
18015 {
18016 return "(void)";
18017 }
18018
18019 inline std::string to_string(ShaderModuleCreateFlags)
18020 {
18021 return "{}";
18022 }
18023
18024 inline std::string to_string(EventCreateFlagBits)
18025 {
18026 return "(void)";
18027 }
18028
18029 inline std::string to_string(EventCreateFlags)
18030 {
18031 return "{}";
18032 }
18033
18034 inline std::string to_string(MemoryMapFlagBits)
18035 {
18036 return "(void)";
18037 }
18038
18039 inline std::string to_string(MemoryMapFlags)
18040 {
18041 return "{}";
18042 }
18043
18044 inline std::string to_string(SubpassDescriptionFlagBits)
18045 {
18046 return "(void)";
18047 }
18048
18049 inline std::string to_string(SubpassDescriptionFlags)
18050 {
18051 return "{}";
18052 }
18053
18054 inline std::string to_string(DescriptorPoolResetFlagBits)
18055 {
18056 return "(void)";
18057 }
18058
18059 inline std::string to_string(DescriptorPoolResetFlags)
18060 {
18061 return "{}";
18062 }
18063
18064 inline std::string to_string(SwapchainCreateFlagBitsKHR)
18065 {
18066 return "(void)";
18067 }
18068
18069 inline std::string to_string(SwapchainCreateFlagsKHR)
18070 {
18071 return "{}";
18072 }
18073
18074 inline std::string to_string(DisplayModeCreateFlagBitsKHR)
18075 {
18076 return "(void)";
18077 }
18078
18079 inline std::string to_string(DisplayModeCreateFlagsKHR)
18080 {
18081 return "{}";
18082 }
18083
18084 inline std::string to_string(DisplaySurfaceCreateFlagBitsKHR)
18085 {
18086 return "(void)";
18087 }
18088
18089 inline std::string to_string(DisplaySurfaceCreateFlagsKHR)
18090 {
18091 return "{}";
18092 }
18093
18094#ifdef VK_USE_PLATFORM_ANDROID_KHR
18095 inline std::string to_string(AndroidSurfaceCreateFlagBitsKHR)
18096 {
18097 return "(void)";
18098 }
18099#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18100
18101#ifdef VK_USE_PLATFORM_ANDROID_KHR
18102 inline std::string to_string(AndroidSurfaceCreateFlagsKHR)
18103 {
18104 return "{}";
18105 }
18106#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18107
18108#ifdef VK_USE_PLATFORM_MIR_KHR
18109 inline std::string to_string(MirSurfaceCreateFlagBitsKHR)
18110 {
18111 return "(void)";
18112 }
18113#endif /*VK_USE_PLATFORM_MIR_KHR*/
18114
18115#ifdef VK_USE_PLATFORM_MIR_KHR
18116 inline std::string to_string(MirSurfaceCreateFlagsKHR)
18117 {
18118 return "{}";
18119 }
18120#endif /*VK_USE_PLATFORM_MIR_KHR*/
18121
18122#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18123 inline std::string to_string(WaylandSurfaceCreateFlagBitsKHR)
18124 {
18125 return "(void)";
18126 }
18127#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18128
18129#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18130 inline std::string to_string(WaylandSurfaceCreateFlagsKHR)
18131 {
18132 return "{}";
18133 }
18134#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18135
18136#ifdef VK_USE_PLATFORM_WIN32_KHR
18137 inline std::string to_string(Win32SurfaceCreateFlagBitsKHR)
18138 {
18139 return "(void)";
18140 }
18141#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18142
18143#ifdef VK_USE_PLATFORM_WIN32_KHR
18144 inline std::string to_string(Win32SurfaceCreateFlagsKHR)
18145 {
18146 return "{}";
18147 }
18148#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18149
18150#ifdef VK_USE_PLATFORM_XLIB_KHR
18151 inline std::string to_string(XlibSurfaceCreateFlagBitsKHR)
18152 {
18153 return "(void)";
18154 }
18155#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18156
18157#ifdef VK_USE_PLATFORM_XLIB_KHR
18158 inline std::string to_string(XlibSurfaceCreateFlagsKHR)
18159 {
18160 return "{}";
18161 }
18162#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18163
18164#ifdef VK_USE_PLATFORM_XCB_KHR
18165 inline std::string to_string(XcbSurfaceCreateFlagBitsKHR)
18166 {
18167 return "(void)";
18168 }
18169#endif /*VK_USE_PLATFORM_XCB_KHR*/
18170
18171#ifdef VK_USE_PLATFORM_XCB_KHR
18172 inline std::string to_string(XcbSurfaceCreateFlagsKHR)
18173 {
18174 return "{}";
18175 }
18176#endif /*VK_USE_PLATFORM_XCB_KHR*/
18177
18178 inline std::string to_string(ImageLayout value)
18179 {
18180 switch (value)
18181 {
18182 case ImageLayout::eUndefined: return "Undefined";
18183 case ImageLayout::eGeneral: return "General";
18184 case ImageLayout::eColorAttachmentOptimal: return "ColorAttachmentOptimal";
18185 case ImageLayout::eDepthStencilAttachmentOptimal: return "DepthStencilAttachmentOptimal";
18186 case ImageLayout::eDepthStencilReadOnlyOptimal: return "DepthStencilReadOnlyOptimal";
18187 case ImageLayout::eShaderReadOnlyOptimal: return "ShaderReadOnlyOptimal";
18188 case ImageLayout::eTransferSrcOptimal: return "TransferSrcOptimal";
18189 case ImageLayout::eTransferDstOptimal: return "TransferDstOptimal";
18190 case ImageLayout::ePreinitialized: return "Preinitialized";
18191 case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR";
18192 default: return "invalid";
18193 }
18194 }
18195
18196 inline std::string to_string(AttachmentLoadOp value)
18197 {
18198 switch (value)
18199 {
18200 case AttachmentLoadOp::eLoad: return "Load";
18201 case AttachmentLoadOp::eClear: return "Clear";
18202 case AttachmentLoadOp::eDontCare: return "DontCare";
18203 default: return "invalid";
18204 }
18205 }
18206
18207 inline std::string to_string(AttachmentStoreOp value)
18208 {
18209 switch (value)
18210 {
18211 case AttachmentStoreOp::eStore: return "Store";
18212 case AttachmentStoreOp::eDontCare: return "DontCare";
18213 default: return "invalid";
18214 }
18215 }
18216
18217 inline std::string to_string(ImageType value)
18218 {
18219 switch (value)
18220 {
18221 case ImageType::e1D: return "1D";
18222 case ImageType::e2D: return "2D";
18223 case ImageType::e3D: return "3D";
18224 default: return "invalid";
18225 }
18226 }
18227
18228 inline std::string to_string(ImageTiling value)
18229 {
18230 switch (value)
18231 {
18232 case ImageTiling::eOptimal: return "Optimal";
18233 case ImageTiling::eLinear: return "Linear";
18234 default: return "invalid";
18235 }
18236 }
18237
18238 inline std::string to_string(ImageViewType value)
18239 {
18240 switch (value)
18241 {
18242 case ImageViewType::e1D: return "1D";
18243 case ImageViewType::e2D: return "2D";
18244 case ImageViewType::e3D: return "3D";
18245 case ImageViewType::eCube: return "Cube";
18246 case ImageViewType::e1DArray: return "1DArray";
18247 case ImageViewType::e2DArray: return "2DArray";
18248 case ImageViewType::eCubeArray: return "CubeArray";
18249 default: return "invalid";
18250 }
18251 }
18252
18253 inline std::string to_string(CommandBufferLevel value)
18254 {
18255 switch (value)
18256 {
18257 case CommandBufferLevel::ePrimary: return "Primary";
18258 case CommandBufferLevel::eSecondary: return "Secondary";
18259 default: return "invalid";
18260 }
18261 }
18262
18263 inline std::string to_string(ComponentSwizzle value)
18264 {
18265 switch (value)
18266 {
18267 case ComponentSwizzle::eIdentity: return "Identity";
18268 case ComponentSwizzle::eZero: return "Zero";
18269 case ComponentSwizzle::eOne: return "One";
18270 case ComponentSwizzle::eR: return "R";
18271 case ComponentSwizzle::eG: return "G";
18272 case ComponentSwizzle::eB: return "B";
18273 case ComponentSwizzle::eA: return "A";
18274 default: return "invalid";
18275 }
18276 }
18277
18278 inline std::string to_string(DescriptorType value)
18279 {
18280 switch (value)
18281 {
18282 case DescriptorType::eSampler: return "Sampler";
18283 case DescriptorType::eCombinedImageSampler: return "CombinedImageSampler";
18284 case DescriptorType::eSampledImage: return "SampledImage";
18285 case DescriptorType::eStorageImage: return "StorageImage";
18286 case DescriptorType::eUniformTexelBuffer: return "UniformTexelBuffer";
18287 case DescriptorType::eStorageTexelBuffer: return "StorageTexelBuffer";
18288 case DescriptorType::eUniformBuffer: return "UniformBuffer";
18289 case DescriptorType::eStorageBuffer: return "StorageBuffer";
18290 case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic";
18291 case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic";
18292 case DescriptorType::eInputAttachment: return "InputAttachment";
18293 default: return "invalid";
18294 }
18295 }
18296
18297 inline std::string to_string(QueryType value)
18298 {
18299 switch (value)
18300 {
18301 case QueryType::eOcclusion: return "Occlusion";
18302 case QueryType::ePipelineStatistics: return "PipelineStatistics";
18303 case QueryType::eTimestamp: return "Timestamp";
18304 default: return "invalid";
18305 }
18306 }
18307
18308 inline std::string to_string(BorderColor value)
18309 {
18310 switch (value)
18311 {
18312 case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack";
18313 case BorderColor::eIntTransparentBlack: return "IntTransparentBlack";
18314 case BorderColor::eFloatOpaqueBlack: return "FloatOpaqueBlack";
18315 case BorderColor::eIntOpaqueBlack: return "IntOpaqueBlack";
18316 case BorderColor::eFloatOpaqueWhite: return "FloatOpaqueWhite";
18317 case BorderColor::eIntOpaqueWhite: return "IntOpaqueWhite";
18318 default: return "invalid";
18319 }
18320 }
18321
18322 inline std::string to_string(PipelineBindPoint value)
18323 {
18324 switch (value)
18325 {
18326 case PipelineBindPoint::eGraphics: return "Graphics";
18327 case PipelineBindPoint::eCompute: return "Compute";
18328 default: return "invalid";
18329 }
18330 }
18331
18332 inline std::string to_string(PipelineCacheHeaderVersion value)
18333 {
18334 switch (value)
18335 {
18336 case PipelineCacheHeaderVersion::eOne: return "One";
18337 default: return "invalid";
18338 }
18339 }
18340
18341 inline std::string to_string(PrimitiveTopology value)
18342 {
18343 switch (value)
18344 {
18345 case PrimitiveTopology::ePointList: return "PointList";
18346 case PrimitiveTopology::eLineList: return "LineList";
18347 case PrimitiveTopology::eLineStrip: return "LineStrip";
18348 case PrimitiveTopology::eTriangleList: return "TriangleList";
18349 case PrimitiveTopology::eTriangleStrip: return "TriangleStrip";
18350 case PrimitiveTopology::eTriangleFan: return "TriangleFan";
18351 case PrimitiveTopology::eLineListWithAdjacency: return "LineListWithAdjacency";
18352 case PrimitiveTopology::eLineStripWithAdjacency: return "LineStripWithAdjacency";
18353 case PrimitiveTopology::eTriangleListWithAdjacency: return "TriangleListWithAdjacency";
18354 case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency";
18355 case PrimitiveTopology::ePatchList: return "PatchList";
18356 default: return "invalid";
18357 }
18358 }
18359
18360 inline std::string to_string(SharingMode value)
18361 {
18362 switch (value)
18363 {
18364 case SharingMode::eExclusive: return "Exclusive";
18365 case SharingMode::eConcurrent: return "Concurrent";
18366 default: return "invalid";
18367 }
18368 }
18369
18370 inline std::string to_string(IndexType value)
18371 {
18372 switch (value)
18373 {
18374 case IndexType::eUint16: return "Uint16";
18375 case IndexType::eUint32: return "Uint32";
18376 default: return "invalid";
18377 }
18378 }
18379
18380 inline std::string to_string(Filter value)
18381 {
18382 switch (value)
18383 {
18384 case Filter::eNearest: return "Nearest";
18385 case Filter::eLinear: return "Linear";
18386 case Filter::eCubicIMG: return "CubicIMG";
18387 default: return "invalid";
18388 }
18389 }
18390
18391 inline std::string to_string(SamplerMipmapMode value)
18392 {
18393 switch (value)
18394 {
18395 case SamplerMipmapMode::eNearest: return "Nearest";
18396 case SamplerMipmapMode::eLinear: return "Linear";
18397 default: return "invalid";
18398 }
18399 }
18400
18401 inline std::string to_string(SamplerAddressMode value)
18402 {
18403 switch (value)
18404 {
18405 case SamplerAddressMode::eRepeat: return "Repeat";
18406 case SamplerAddressMode::eMirroredRepeat: return "MirroredRepeat";
18407 case SamplerAddressMode::eClampToEdge: return "ClampToEdge";
18408 case SamplerAddressMode::eClampToBorder: return "ClampToBorder";
18409 case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge";
18410 default: return "invalid";
18411 }
18412 }
18413
18414 inline std::string to_string(CompareOp value)
18415 {
18416 switch (value)
18417 {
18418 case CompareOp::eNever: return "Never";
18419 case CompareOp::eLess: return "Less";
18420 case CompareOp::eEqual: return "Equal";
18421 case CompareOp::eLessOrEqual: return "LessOrEqual";
18422 case CompareOp::eGreater: return "Greater";
18423 case CompareOp::eNotEqual: return "NotEqual";
18424 case CompareOp::eGreaterOrEqual: return "GreaterOrEqual";
18425 case CompareOp::eAlways: return "Always";
18426 default: return "invalid";
18427 }
18428 }
18429
18430 inline std::string to_string(PolygonMode value)
18431 {
18432 switch (value)
18433 {
18434 case PolygonMode::eFill: return "Fill";
18435 case PolygonMode::eLine: return "Line";
18436 case PolygonMode::ePoint: return "Point";
18437 default: return "invalid";
18438 }
18439 }
18440
18441 inline std::string to_string(CullModeFlagBits value)
18442 {
18443 switch (value)
18444 {
18445 case CullModeFlagBits::eNone: return "None";
18446 case CullModeFlagBits::eFront: return "Front";
18447 case CullModeFlagBits::eBack: return "Back";
18448 case CullModeFlagBits::eFrontAndBack: return "FrontAndBack";
18449 default: return "invalid";
18450 }
18451 }
18452
18453 inline std::string to_string(CullModeFlags value)
18454 {
18455 if (!value) return "{}";
18456 std::string result;
18457 if (value & CullModeFlagBits::eNone) result += "None | ";
18458 if (value & CullModeFlagBits::eFront) result += "Front | ";
18459 if (value & CullModeFlagBits::eBack) result += "Back | ";
18460 if (value & CullModeFlagBits::eFrontAndBack) result += "FrontAndBack | ";
18461 return "{" + result.substr(0, result.size() - 3) + "}";
18462 }
18463
18464 inline std::string to_string(FrontFace value)
18465 {
18466 switch (value)
18467 {
18468 case FrontFace::eCounterClockwise: return "CounterClockwise";
18469 case FrontFace::eClockwise: return "Clockwise";
18470 default: return "invalid";
18471 }
18472 }
18473
18474 inline std::string to_string(BlendFactor value)
18475 {
18476 switch (value)
18477 {
18478 case BlendFactor::eZero: return "Zero";
18479 case BlendFactor::eOne: return "One";
18480 case BlendFactor::eSrcColor: return "SrcColor";
18481 case BlendFactor::eOneMinusSrcColor: return "OneMinusSrcColor";
18482 case BlendFactor::eDstColor: return "DstColor";
18483 case BlendFactor::eOneMinusDstColor: return "OneMinusDstColor";
18484 case BlendFactor::eSrcAlpha: return "SrcAlpha";
18485 case BlendFactor::eOneMinusSrcAlpha: return "OneMinusSrcAlpha";
18486 case BlendFactor::eDstAlpha: return "DstAlpha";
18487 case BlendFactor::eOneMinusDstAlpha: return "OneMinusDstAlpha";
18488 case BlendFactor::eConstantColor: return "ConstantColor";
18489 case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor";
18490 case BlendFactor::eConstantAlpha: return "ConstantAlpha";
18491 case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha";
18492 case BlendFactor::eSrcAlphaSaturate: return "SrcAlphaSaturate";
18493 case BlendFactor::eSrc1Color: return "Src1Color";
18494 case BlendFactor::eOneMinusSrc1Color: return "OneMinusSrc1Color";
18495 case BlendFactor::eSrc1Alpha: return "Src1Alpha";
18496 case BlendFactor::eOneMinusSrc1Alpha: return "OneMinusSrc1Alpha";
18497 default: return "invalid";
18498 }
18499 }
18500
18501 inline std::string to_string(BlendOp value)
18502 {
18503 switch (value)
18504 {
18505 case BlendOp::eAdd: return "Add";
18506 case BlendOp::eSubtract: return "Subtract";
18507 case BlendOp::eReverseSubtract: return "ReverseSubtract";
18508 case BlendOp::eMin: return "Min";
18509 case BlendOp::eMax: return "Max";
18510 default: return "invalid";
18511 }
18512 }
18513
18514 inline std::string to_string(StencilOp value)
18515 {
18516 switch (value)
18517 {
18518 case StencilOp::eKeep: return "Keep";
18519 case StencilOp::eZero: return "Zero";
18520 case StencilOp::eReplace: return "Replace";
18521 case StencilOp::eIncrementAndClamp: return "IncrementAndClamp";
18522 case StencilOp::eDecrementAndClamp: return "DecrementAndClamp";
18523 case StencilOp::eInvert: return "Invert";
18524 case StencilOp::eIncrementAndWrap: return "IncrementAndWrap";
18525 case StencilOp::eDecrementAndWrap: return "DecrementAndWrap";
18526 default: return "invalid";
18527 }
18528 }
18529
18530 inline std::string to_string(LogicOp value)
18531 {
18532 switch (value)
18533 {
18534 case LogicOp::eClear: return "Clear";
18535 case LogicOp::eAnd: return "And";
18536 case LogicOp::eAndReverse: return "AndReverse";
18537 case LogicOp::eCopy: return "Copy";
18538 case LogicOp::eAndInverted: return "AndInverted";
18539 case LogicOp::eNoOp: return "NoOp";
18540 case LogicOp::eXor: return "Xor";
18541 case LogicOp::eOr: return "Or";
18542 case LogicOp::eNor: return "Nor";
18543 case LogicOp::eEquivalent: return "Equivalent";
18544 case LogicOp::eInvert: return "Invert";
18545 case LogicOp::eOrReverse: return "OrReverse";
18546 case LogicOp::eCopyInverted: return "CopyInverted";
18547 case LogicOp::eOrInverted: return "OrInverted";
18548 case LogicOp::eNand: return "Nand";
18549 case LogicOp::eSet: return "Set";
18550 default: return "invalid";
18551 }
18552 }
18553
18554 inline std::string to_string(InternalAllocationType value)
18555 {
18556 switch (value)
18557 {
18558 case InternalAllocationType::eExecutable: return "Executable";
18559 default: return "invalid";
18560 }
18561 }
18562
18563 inline std::string to_string(SystemAllocationScope value)
18564 {
18565 switch (value)
18566 {
18567 case SystemAllocationScope::eCommand: return "Command";
18568 case SystemAllocationScope::eObject: return "Object";
18569 case SystemAllocationScope::eCache: return "Cache";
18570 case SystemAllocationScope::eDevice: return "Device";
18571 case SystemAllocationScope::eInstance: return "Instance";
18572 default: return "invalid";
18573 }
18574 }
18575
18576 inline std::string to_string(PhysicalDeviceType value)
18577 {
18578 switch (value)
18579 {
18580 case PhysicalDeviceType::eOther: return "Other";
18581 case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu";
18582 case PhysicalDeviceType::eDiscreteGpu: return "DiscreteGpu";
18583 case PhysicalDeviceType::eVirtualGpu: return "VirtualGpu";
18584 case PhysicalDeviceType::eCpu: return "Cpu";
18585 default: return "invalid";
18586 }
18587 }
18588
18589 inline std::string to_string(VertexInputRate value)
18590 {
18591 switch (value)
18592 {
18593 case VertexInputRate::eVertex: return "Vertex";
18594 case VertexInputRate::eInstance: return "Instance";
18595 default: return "invalid";
18596 }
18597 }
18598
18599 inline std::string to_string(Format value)
18600 {
18601 switch (value)
18602 {
18603 case Format::eUndefined: return "Undefined";
18604 case Format::eR4G4UnormPack8: return "R4G4UnormPack8";
18605 case Format::eR4G4B4A4UnormPack16: return "R4G4B4A4UnormPack16";
18606 case Format::eB4G4R4A4UnormPack16: return "B4G4R4A4UnormPack16";
18607 case Format::eR5G6B5UnormPack16: return "R5G6B5UnormPack16";
18608 case Format::eB5G6R5UnormPack16: return "B5G6R5UnormPack16";
18609 case Format::eR5G5B5A1UnormPack16: return "R5G5B5A1UnormPack16";
18610 case Format::eB5G5R5A1UnormPack16: return "B5G5R5A1UnormPack16";
18611 case Format::eA1R5G5B5UnormPack16: return "A1R5G5B5UnormPack16";
18612 case Format::eR8Unorm: return "R8Unorm";
18613 case Format::eR8Snorm: return "R8Snorm";
18614 case Format::eR8Uscaled: return "R8Uscaled";
18615 case Format::eR8Sscaled: return "R8Sscaled";
18616 case Format::eR8Uint: return "R8Uint";
18617 case Format::eR8Sint: return "R8Sint";
18618 case Format::eR8Srgb: return "R8Srgb";
18619 case Format::eR8G8Unorm: return "R8G8Unorm";
18620 case Format::eR8G8Snorm: return "R8G8Snorm";
18621 case Format::eR8G8Uscaled: return "R8G8Uscaled";
18622 case Format::eR8G8Sscaled: return "R8G8Sscaled";
18623 case Format::eR8G8Uint: return "R8G8Uint";
18624 case Format::eR8G8Sint: return "R8G8Sint";
18625 case Format::eR8G8Srgb: return "R8G8Srgb";
18626 case Format::eR8G8B8Unorm: return "R8G8B8Unorm";
18627 case Format::eR8G8B8Snorm: return "R8G8B8Snorm";
18628 case Format::eR8G8B8Uscaled: return "R8G8B8Uscaled";
18629 case Format::eR8G8B8Sscaled: return "R8G8B8Sscaled";
18630 case Format::eR8G8B8Uint: return "R8G8B8Uint";
18631 case Format::eR8G8B8Sint: return "R8G8B8Sint";
18632 case Format::eR8G8B8Srgb: return "R8G8B8Srgb";
18633 case Format::eB8G8R8Unorm: return "B8G8R8Unorm";
18634 case Format::eB8G8R8Snorm: return "B8G8R8Snorm";
18635 case Format::eB8G8R8Uscaled: return "B8G8R8Uscaled";
18636 case Format::eB8G8R8Sscaled: return "B8G8R8Sscaled";
18637 case Format::eB8G8R8Uint: return "B8G8R8Uint";
18638 case Format::eB8G8R8Sint: return "B8G8R8Sint";
18639 case Format::eB8G8R8Srgb: return "B8G8R8Srgb";
18640 case Format::eR8G8B8A8Unorm: return "R8G8B8A8Unorm";
18641 case Format::eR8G8B8A8Snorm: return "R8G8B8A8Snorm";
18642 case Format::eR8G8B8A8Uscaled: return "R8G8B8A8Uscaled";
18643 case Format::eR8G8B8A8Sscaled: return "R8G8B8A8Sscaled";
18644 case Format::eR8G8B8A8Uint: return "R8G8B8A8Uint";
18645 case Format::eR8G8B8A8Sint: return "R8G8B8A8Sint";
18646 case Format::eR8G8B8A8Srgb: return "R8G8B8A8Srgb";
18647 case Format::eB8G8R8A8Unorm: return "B8G8R8A8Unorm";
18648 case Format::eB8G8R8A8Snorm: return "B8G8R8A8Snorm";
18649 case Format::eB8G8R8A8Uscaled: return "B8G8R8A8Uscaled";
18650 case Format::eB8G8R8A8Sscaled: return "B8G8R8A8Sscaled";
18651 case Format::eB8G8R8A8Uint: return "B8G8R8A8Uint";
18652 case Format::eB8G8R8A8Sint: return "B8G8R8A8Sint";
18653 case Format::eB8G8R8A8Srgb: return "B8G8R8A8Srgb";
18654 case Format::eA8B8G8R8UnormPack32: return "A8B8G8R8UnormPack32";
18655 case Format::eA8B8G8R8SnormPack32: return "A8B8G8R8SnormPack32";
18656 case Format::eA8B8G8R8UscaledPack32: return "A8B8G8R8UscaledPack32";
18657 case Format::eA8B8G8R8SscaledPack32: return "A8B8G8R8SscaledPack32";
18658 case Format::eA8B8G8R8UintPack32: return "A8B8G8R8UintPack32";
18659 case Format::eA8B8G8R8SintPack32: return "A8B8G8R8SintPack32";
18660 case Format::eA8B8G8R8SrgbPack32: return "A8B8G8R8SrgbPack32";
18661 case Format::eA2R10G10B10UnormPack32: return "A2R10G10B10UnormPack32";
18662 case Format::eA2R10G10B10SnormPack32: return "A2R10G10B10SnormPack32";
18663 case Format::eA2R10G10B10UscaledPack32: return "A2R10G10B10UscaledPack32";
18664 case Format::eA2R10G10B10SscaledPack32: return "A2R10G10B10SscaledPack32";
18665 case Format::eA2R10G10B10UintPack32: return "A2R10G10B10UintPack32";
18666 case Format::eA2R10G10B10SintPack32: return "A2R10G10B10SintPack32";
18667 case Format::eA2B10G10R10UnormPack32: return "A2B10G10R10UnormPack32";
18668 case Format::eA2B10G10R10SnormPack32: return "A2B10G10R10SnormPack32";
18669 case Format::eA2B10G10R10UscaledPack32: return "A2B10G10R10UscaledPack32";
18670 case Format::eA2B10G10R10SscaledPack32: return "A2B10G10R10SscaledPack32";
18671 case Format::eA2B10G10R10UintPack32: return "A2B10G10R10UintPack32";
18672 case Format::eA2B10G10R10SintPack32: return "A2B10G10R10SintPack32";
18673 case Format::eR16Unorm: return "R16Unorm";
18674 case Format::eR16Snorm: return "R16Snorm";
18675 case Format::eR16Uscaled: return "R16Uscaled";
18676 case Format::eR16Sscaled: return "R16Sscaled";
18677 case Format::eR16Uint: return "R16Uint";
18678 case Format::eR16Sint: return "R16Sint";
18679 case Format::eR16Sfloat: return "R16Sfloat";
18680 case Format::eR16G16Unorm: return "R16G16Unorm";
18681 case Format::eR16G16Snorm: return "R16G16Snorm";
18682 case Format::eR16G16Uscaled: return "R16G16Uscaled";
18683 case Format::eR16G16Sscaled: return "R16G16Sscaled";
18684 case Format::eR16G16Uint: return "R16G16Uint";
18685 case Format::eR16G16Sint: return "R16G16Sint";
18686 case Format::eR16G16Sfloat: return "R16G16Sfloat";
18687 case Format::eR16G16B16Unorm: return "R16G16B16Unorm";
18688 case Format::eR16G16B16Snorm: return "R16G16B16Snorm";
18689 case Format::eR16G16B16Uscaled: return "R16G16B16Uscaled";
18690 case Format::eR16G16B16Sscaled: return "R16G16B16Sscaled";
18691 case Format::eR16G16B16Uint: return "R16G16B16Uint";
18692 case Format::eR16G16B16Sint: return "R16G16B16Sint";
18693 case Format::eR16G16B16Sfloat: return "R16G16B16Sfloat";
18694 case Format::eR16G16B16A16Unorm: return "R16G16B16A16Unorm";
18695 case Format::eR16G16B16A16Snorm: return "R16G16B16A16Snorm";
18696 case Format::eR16G16B16A16Uscaled: return "R16G16B16A16Uscaled";
18697 case Format::eR16G16B16A16Sscaled: return "R16G16B16A16Sscaled";
18698 case Format::eR16G16B16A16Uint: return "R16G16B16A16Uint";
18699 case Format::eR16G16B16A16Sint: return "R16G16B16A16Sint";
18700 case Format::eR16G16B16A16Sfloat: return "R16G16B16A16Sfloat";
18701 case Format::eR32Uint: return "R32Uint";
18702 case Format::eR32Sint: return "R32Sint";
18703 case Format::eR32Sfloat: return "R32Sfloat";
18704 case Format::eR32G32Uint: return "R32G32Uint";
18705 case Format::eR32G32Sint: return "R32G32Sint";
18706 case Format::eR32G32Sfloat: return "R32G32Sfloat";
18707 case Format::eR32G32B32Uint: return "R32G32B32Uint";
18708 case Format::eR32G32B32Sint: return "R32G32B32Sint";
18709 case Format::eR32G32B32Sfloat: return "R32G32B32Sfloat";
18710 case Format::eR32G32B32A32Uint: return "R32G32B32A32Uint";
18711 case Format::eR32G32B32A32Sint: return "R32G32B32A32Sint";
18712 case Format::eR32G32B32A32Sfloat: return "R32G32B32A32Sfloat";
18713 case Format::eR64Uint: return "R64Uint";
18714 case Format::eR64Sint: return "R64Sint";
18715 case Format::eR64Sfloat: return "R64Sfloat";
18716 case Format::eR64G64Uint: return "R64G64Uint";
18717 case Format::eR64G64Sint: return "R64G64Sint";
18718 case Format::eR64G64Sfloat: return "R64G64Sfloat";
18719 case Format::eR64G64B64Uint: return "R64G64B64Uint";
18720 case Format::eR64G64B64Sint: return "R64G64B64Sint";
18721 case Format::eR64G64B64Sfloat: return "R64G64B64Sfloat";
18722 case Format::eR64G64B64A64Uint: return "R64G64B64A64Uint";
18723 case Format::eR64G64B64A64Sint: return "R64G64B64A64Sint";
18724 case Format::eR64G64B64A64Sfloat: return "R64G64B64A64Sfloat";
18725 case Format::eB10G11R11UfloatPack32: return "B10G11R11UfloatPack32";
18726 case Format::eE5B9G9R9UfloatPack32: return "E5B9G9R9UfloatPack32";
18727 case Format::eD16Unorm: return "D16Unorm";
18728 case Format::eX8D24UnormPack32: return "X8D24UnormPack32";
18729 case Format::eD32Sfloat: return "D32Sfloat";
18730 case Format::eS8Uint: return "S8Uint";
18731 case Format::eD16UnormS8Uint: return "D16UnormS8Uint";
18732 case Format::eD24UnormS8Uint: return "D24UnormS8Uint";
18733 case Format::eD32SfloatS8Uint: return "D32SfloatS8Uint";
18734 case Format::eBc1RgbUnormBlock: return "Bc1RgbUnormBlock";
18735 case Format::eBc1RgbSrgbBlock: return "Bc1RgbSrgbBlock";
18736 case Format::eBc1RgbaUnormBlock: return "Bc1RgbaUnormBlock";
18737 case Format::eBc1RgbaSrgbBlock: return "Bc1RgbaSrgbBlock";
18738 case Format::eBc2UnormBlock: return "Bc2UnormBlock";
18739 case Format::eBc2SrgbBlock: return "Bc2SrgbBlock";
18740 case Format::eBc3UnormBlock: return "Bc3UnormBlock";
18741 case Format::eBc3SrgbBlock: return "Bc3SrgbBlock";
18742 case Format::eBc4UnormBlock: return "Bc4UnormBlock";
18743 case Format::eBc4SnormBlock: return "Bc4SnormBlock";
18744 case Format::eBc5UnormBlock: return "Bc5UnormBlock";
18745 case Format::eBc5SnormBlock: return "Bc5SnormBlock";
18746 case Format::eBc6HUfloatBlock: return "Bc6HUfloatBlock";
18747 case Format::eBc6HSfloatBlock: return "Bc6HSfloatBlock";
18748 case Format::eBc7UnormBlock: return "Bc7UnormBlock";
18749 case Format::eBc7SrgbBlock: return "Bc7SrgbBlock";
18750 case Format::eEtc2R8G8B8UnormBlock: return "Etc2R8G8B8UnormBlock";
18751 case Format::eEtc2R8G8B8SrgbBlock: return "Etc2R8G8B8SrgbBlock";
18752 case Format::eEtc2R8G8B8A1UnormBlock: return "Etc2R8G8B8A1UnormBlock";
18753 case Format::eEtc2R8G8B8A1SrgbBlock: return "Etc2R8G8B8A1SrgbBlock";
18754 case Format::eEtc2R8G8B8A8UnormBlock: return "Etc2R8G8B8A8UnormBlock";
18755 case Format::eEtc2R8G8B8A8SrgbBlock: return "Etc2R8G8B8A8SrgbBlock";
18756 case Format::eEacR11UnormBlock: return "EacR11UnormBlock";
18757 case Format::eEacR11SnormBlock: return "EacR11SnormBlock";
18758 case Format::eEacR11G11UnormBlock: return "EacR11G11UnormBlock";
18759 case Format::eEacR11G11SnormBlock: return "EacR11G11SnormBlock";
18760 case Format::eAstc4x4UnormBlock: return "Astc4x4UnormBlock";
18761 case Format::eAstc4x4SrgbBlock: return "Astc4x4SrgbBlock";
18762 case Format::eAstc5x4UnormBlock: return "Astc5x4UnormBlock";
18763 case Format::eAstc5x4SrgbBlock: return "Astc5x4SrgbBlock";
18764 case Format::eAstc5x5UnormBlock: return "Astc5x5UnormBlock";
18765 case Format::eAstc5x5SrgbBlock: return "Astc5x5SrgbBlock";
18766 case Format::eAstc6x5UnormBlock: return "Astc6x5UnormBlock";
18767 case Format::eAstc6x5SrgbBlock: return "Astc6x5SrgbBlock";
18768 case Format::eAstc6x6UnormBlock: return "Astc6x6UnormBlock";
18769 case Format::eAstc6x6SrgbBlock: return "Astc6x6SrgbBlock";
18770 case Format::eAstc8x5UnormBlock: return "Astc8x5UnormBlock";
18771 case Format::eAstc8x5SrgbBlock: return "Astc8x5SrgbBlock";
18772 case Format::eAstc8x6UnormBlock: return "Astc8x6UnormBlock";
18773 case Format::eAstc8x6SrgbBlock: return "Astc8x6SrgbBlock";
18774 case Format::eAstc8x8UnormBlock: return "Astc8x8UnormBlock";
18775 case Format::eAstc8x8SrgbBlock: return "Astc8x8SrgbBlock";
18776 case Format::eAstc10x5UnormBlock: return "Astc10x5UnormBlock";
18777 case Format::eAstc10x5SrgbBlock: return "Astc10x5SrgbBlock";
18778 case Format::eAstc10x6UnormBlock: return "Astc10x6UnormBlock";
18779 case Format::eAstc10x6SrgbBlock: return "Astc10x6SrgbBlock";
18780 case Format::eAstc10x8UnormBlock: return "Astc10x8UnormBlock";
18781 case Format::eAstc10x8SrgbBlock: return "Astc10x8SrgbBlock";
18782 case Format::eAstc10x10UnormBlock: return "Astc10x10UnormBlock";
18783 case Format::eAstc10x10SrgbBlock: return "Astc10x10SrgbBlock";
18784 case Format::eAstc12x10UnormBlock: return "Astc12x10UnormBlock";
18785 case Format::eAstc12x10SrgbBlock: return "Astc12x10SrgbBlock";
18786 case Format::eAstc12x12UnormBlock: return "Astc12x12UnormBlock";
18787 case Format::eAstc12x12SrgbBlock: return "Astc12x12SrgbBlock";
Lenny Komowebf33162016-08-26 14:10:08 -060018788 case Format::ePvrtc12BppUnormBlockIMG: return "Pvrtc12BppUnormBlockIMG";
18789 case Format::ePvrtc14BppUnormBlockIMG: return "Pvrtc14BppUnormBlockIMG";
18790 case Format::ePvrtc22BppUnormBlockIMG: return "Pvrtc22BppUnormBlockIMG";
18791 case Format::ePvrtc24BppUnormBlockIMG: return "Pvrtc24BppUnormBlockIMG";
18792 case Format::ePvrtc12BppSrgbBlockIMG: return "Pvrtc12BppSrgbBlockIMG";
18793 case Format::ePvrtc14BppSrgbBlockIMG: return "Pvrtc14BppSrgbBlockIMG";
18794 case Format::ePvrtc22BppSrgbBlockIMG: return "Pvrtc22BppSrgbBlockIMG";
18795 case Format::ePvrtc24BppSrgbBlockIMG: return "Pvrtc24BppSrgbBlockIMG";
Lenny Komowbed9b5c2016-08-11 11:23:15 -060018796 default: return "invalid";
18797 }
18798 }
18799
18800 inline std::string to_string(StructureType value)
18801 {
18802 switch (value)
18803 {
18804 case StructureType::eApplicationInfo: return "ApplicationInfo";
18805 case StructureType::eInstanceCreateInfo: return "InstanceCreateInfo";
18806 case StructureType::eDeviceQueueCreateInfo: return "DeviceQueueCreateInfo";
18807 case StructureType::eDeviceCreateInfo: return "DeviceCreateInfo";
18808 case StructureType::eSubmitInfo: return "SubmitInfo";
18809 case StructureType::eMemoryAllocateInfo: return "MemoryAllocateInfo";
18810 case StructureType::eMappedMemoryRange: return "MappedMemoryRange";
18811 case StructureType::eBindSparseInfo: return "BindSparseInfo";
18812 case StructureType::eFenceCreateInfo: return "FenceCreateInfo";
18813 case StructureType::eSemaphoreCreateInfo: return "SemaphoreCreateInfo";
18814 case StructureType::eEventCreateInfo: return "EventCreateInfo";
18815 case StructureType::eQueryPoolCreateInfo: return "QueryPoolCreateInfo";
18816 case StructureType::eBufferCreateInfo: return "BufferCreateInfo";
18817 case StructureType::eBufferViewCreateInfo: return "BufferViewCreateInfo";
18818 case StructureType::eImageCreateInfo: return "ImageCreateInfo";
18819 case StructureType::eImageViewCreateInfo: return "ImageViewCreateInfo";
18820 case StructureType::eShaderModuleCreateInfo: return "ShaderModuleCreateInfo";
18821 case StructureType::ePipelineCacheCreateInfo: return "PipelineCacheCreateInfo";
18822 case StructureType::ePipelineShaderStageCreateInfo: return "PipelineShaderStageCreateInfo";
18823 case StructureType::ePipelineVertexInputStateCreateInfo: return "PipelineVertexInputStateCreateInfo";
18824 case StructureType::ePipelineInputAssemblyStateCreateInfo: return "PipelineInputAssemblyStateCreateInfo";
18825 case StructureType::ePipelineTessellationStateCreateInfo: return "PipelineTessellationStateCreateInfo";
18826 case StructureType::ePipelineViewportStateCreateInfo: return "PipelineViewportStateCreateInfo";
18827 case StructureType::ePipelineRasterizationStateCreateInfo: return "PipelineRasterizationStateCreateInfo";
18828 case StructureType::ePipelineMultisampleStateCreateInfo: return "PipelineMultisampleStateCreateInfo";
18829 case StructureType::ePipelineDepthStencilStateCreateInfo: return "PipelineDepthStencilStateCreateInfo";
18830 case StructureType::ePipelineColorBlendStateCreateInfo: return "PipelineColorBlendStateCreateInfo";
18831 case StructureType::ePipelineDynamicStateCreateInfo: return "PipelineDynamicStateCreateInfo";
18832 case StructureType::eGraphicsPipelineCreateInfo: return "GraphicsPipelineCreateInfo";
18833 case StructureType::eComputePipelineCreateInfo: return "ComputePipelineCreateInfo";
18834 case StructureType::ePipelineLayoutCreateInfo: return "PipelineLayoutCreateInfo";
18835 case StructureType::eSamplerCreateInfo: return "SamplerCreateInfo";
18836 case StructureType::eDescriptorSetLayoutCreateInfo: return "DescriptorSetLayoutCreateInfo";
18837 case StructureType::eDescriptorPoolCreateInfo: return "DescriptorPoolCreateInfo";
18838 case StructureType::eDescriptorSetAllocateInfo: return "DescriptorSetAllocateInfo";
18839 case StructureType::eWriteDescriptorSet: return "WriteDescriptorSet";
18840 case StructureType::eCopyDescriptorSet: return "CopyDescriptorSet";
18841 case StructureType::eFramebufferCreateInfo: return "FramebufferCreateInfo";
18842 case StructureType::eRenderPassCreateInfo: return "RenderPassCreateInfo";
18843 case StructureType::eCommandPoolCreateInfo: return "CommandPoolCreateInfo";
18844 case StructureType::eCommandBufferAllocateInfo: return "CommandBufferAllocateInfo";
18845 case StructureType::eCommandBufferInheritanceInfo: return "CommandBufferInheritanceInfo";
18846 case StructureType::eCommandBufferBeginInfo: return "CommandBufferBeginInfo";
18847 case StructureType::eRenderPassBeginInfo: return "RenderPassBeginInfo";
18848 case StructureType::eBufferMemoryBarrier: return "BufferMemoryBarrier";
18849 case StructureType::eImageMemoryBarrier: return "ImageMemoryBarrier";
18850 case StructureType::eMemoryBarrier: return "MemoryBarrier";
18851 case StructureType::eLoaderInstanceCreateInfo: return "LoaderInstanceCreateInfo";
18852 case StructureType::eLoaderDeviceCreateInfo: return "LoaderDeviceCreateInfo";
18853 case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR";
18854 case StructureType::ePresentInfoKHR: return "PresentInfoKHR";
18855 case StructureType::eDisplayModeCreateInfoKHR: return "DisplayModeCreateInfoKHR";
18856 case StructureType::eDisplaySurfaceCreateInfoKHR: return "DisplaySurfaceCreateInfoKHR";
18857 case StructureType::eDisplayPresentInfoKHR: return "DisplayPresentInfoKHR";
18858 case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR";
18859 case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR";
18860 case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR";
18861 case StructureType::eMirSurfaceCreateInfoKHR: return "MirSurfaceCreateInfoKHR";
18862 case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR";
18863 case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR";
18864 case StructureType::eDebugReportCallbackCreateInfoEXT: return "DebugReportCallbackCreateInfoEXT";
18865 case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD";
18866 case StructureType::eDebugMarkerObjectNameInfoEXT: return "DebugMarkerObjectNameInfoEXT";
18867 case StructureType::eDebugMarkerObjectTagInfoEXT: return "DebugMarkerObjectTagInfoEXT";
18868 case StructureType::eDebugMarkerMarkerInfoEXT: return "DebugMarkerMarkerInfoEXT";
18869 case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV";
18870 case StructureType::eDedicatedAllocationBufferCreateInfoNV: return "DedicatedAllocationBufferCreateInfoNV";
18871 case StructureType::eDedicatedAllocationMemoryAllocateInfoNV: return "DedicatedAllocationMemoryAllocateInfoNV";
18872 default: return "invalid";
18873 }
18874 }
18875
18876 inline std::string to_string(SubpassContents value)
18877 {
18878 switch (value)
18879 {
18880 case SubpassContents::eInline: return "Inline";
18881 case SubpassContents::eSecondaryCommandBuffers: return "SecondaryCommandBuffers";
18882 default: return "invalid";
18883 }
18884 }
18885
18886 inline std::string to_string(DynamicState value)
18887 {
18888 switch (value)
18889 {
18890 case DynamicState::eViewport: return "Viewport";
18891 case DynamicState::eScissor: return "Scissor";
18892 case DynamicState::eLineWidth: return "LineWidth";
18893 case DynamicState::eDepthBias: return "DepthBias";
18894 case DynamicState::eBlendConstants: return "BlendConstants";
18895 case DynamicState::eDepthBounds: return "DepthBounds";
18896 case DynamicState::eStencilCompareMask: return "StencilCompareMask";
18897 case DynamicState::eStencilWriteMask: return "StencilWriteMask";
18898 case DynamicState::eStencilReference: return "StencilReference";
18899 default: return "invalid";
18900 }
18901 }
18902
18903 inline std::string to_string(QueueFlagBits value)
18904 {
18905 switch (value)
18906 {
18907 case QueueFlagBits::eGraphics: return "Graphics";
18908 case QueueFlagBits::eCompute: return "Compute";
18909 case QueueFlagBits::eTransfer: return "Transfer";
18910 case QueueFlagBits::eSparseBinding: return "SparseBinding";
18911 default: return "invalid";
18912 }
18913 }
18914
18915 inline std::string to_string(QueueFlags value)
18916 {
18917 if (!value) return "{}";
18918 std::string result;
18919 if (value & QueueFlagBits::eGraphics) result += "Graphics | ";
18920 if (value & QueueFlagBits::eCompute) result += "Compute | ";
18921 if (value & QueueFlagBits::eTransfer) result += "Transfer | ";
18922 if (value & QueueFlagBits::eSparseBinding) result += "SparseBinding | ";
18923 return "{" + result.substr(0, result.size() - 3) + "}";
18924 }
18925
18926 inline std::string to_string(MemoryPropertyFlagBits value)
18927 {
18928 switch (value)
18929 {
18930 case MemoryPropertyFlagBits::eDeviceLocal: return "DeviceLocal";
18931 case MemoryPropertyFlagBits::eHostVisible: return "HostVisible";
18932 case MemoryPropertyFlagBits::eHostCoherent: return "HostCoherent";
18933 case MemoryPropertyFlagBits::eHostCached: return "HostCached";
18934 case MemoryPropertyFlagBits::eLazilyAllocated: return "LazilyAllocated";
18935 default: return "invalid";
18936 }
18937 }
18938
18939 inline std::string to_string(MemoryPropertyFlags value)
18940 {
18941 if (!value) return "{}";
18942 std::string result;
18943 if (value & MemoryPropertyFlagBits::eDeviceLocal) result += "DeviceLocal | ";
18944 if (value & MemoryPropertyFlagBits::eHostVisible) result += "HostVisible | ";
18945 if (value & MemoryPropertyFlagBits::eHostCoherent) result += "HostCoherent | ";
18946 if (value & MemoryPropertyFlagBits::eHostCached) result += "HostCached | ";
18947 if (value & MemoryPropertyFlagBits::eLazilyAllocated) result += "LazilyAllocated | ";
18948 return "{" + result.substr(0, result.size() - 3) + "}";
18949 }
18950
18951 inline std::string to_string(MemoryHeapFlagBits value)
18952 {
18953 switch (value)
18954 {
18955 case MemoryHeapFlagBits::eDeviceLocal: return "DeviceLocal";
18956 default: return "invalid";
18957 }
18958 }
18959
18960 inline std::string to_string(MemoryHeapFlags value)
18961 {
18962 if (!value) return "{}";
18963 std::string result;
18964 if (value & MemoryHeapFlagBits::eDeviceLocal) result += "DeviceLocal | ";
18965 return "{" + result.substr(0, result.size() - 3) + "}";
18966 }
18967
18968 inline std::string to_string(AccessFlagBits value)
18969 {
18970 switch (value)
18971 {
18972 case AccessFlagBits::eIndirectCommandRead: return "IndirectCommandRead";
18973 case AccessFlagBits::eIndexRead: return "IndexRead";
18974 case AccessFlagBits::eVertexAttributeRead: return "VertexAttributeRead";
18975 case AccessFlagBits::eUniformRead: return "UniformRead";
18976 case AccessFlagBits::eInputAttachmentRead: return "InputAttachmentRead";
18977 case AccessFlagBits::eShaderRead: return "ShaderRead";
18978 case AccessFlagBits::eShaderWrite: return "ShaderWrite";
18979 case AccessFlagBits::eColorAttachmentRead: return "ColorAttachmentRead";
18980 case AccessFlagBits::eColorAttachmentWrite: return "ColorAttachmentWrite";
18981 case AccessFlagBits::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
18982 case AccessFlagBits::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
18983 case AccessFlagBits::eTransferRead: return "TransferRead";
18984 case AccessFlagBits::eTransferWrite: return "TransferWrite";
18985 case AccessFlagBits::eHostRead: return "HostRead";
18986 case AccessFlagBits::eHostWrite: return "HostWrite";
18987 case AccessFlagBits::eMemoryRead: return "MemoryRead";
18988 case AccessFlagBits::eMemoryWrite: return "MemoryWrite";
18989 default: return "invalid";
18990 }
18991 }
18992
18993 inline std::string to_string(AccessFlags value)
18994 {
18995 if (!value) return "{}";
18996 std::string result;
18997 if (value & AccessFlagBits::eIndirectCommandRead) result += "IndirectCommandRead | ";
18998 if (value & AccessFlagBits::eIndexRead) result += "IndexRead | ";
18999 if (value & AccessFlagBits::eVertexAttributeRead) result += "VertexAttributeRead | ";
19000 if (value & AccessFlagBits::eUniformRead) result += "UniformRead | ";
19001 if (value & AccessFlagBits::eInputAttachmentRead) result += "InputAttachmentRead | ";
19002 if (value & AccessFlagBits::eShaderRead) result += "ShaderRead | ";
19003 if (value & AccessFlagBits::eShaderWrite) result += "ShaderWrite | ";
19004 if (value & AccessFlagBits::eColorAttachmentRead) result += "ColorAttachmentRead | ";
19005 if (value & AccessFlagBits::eColorAttachmentWrite) result += "ColorAttachmentWrite | ";
19006 if (value & AccessFlagBits::eDepthStencilAttachmentRead) result += "DepthStencilAttachmentRead | ";
19007 if (value & AccessFlagBits::eDepthStencilAttachmentWrite) result += "DepthStencilAttachmentWrite | ";
19008 if (value & AccessFlagBits::eTransferRead) result += "TransferRead | ";
19009 if (value & AccessFlagBits::eTransferWrite) result += "TransferWrite | ";
19010 if (value & AccessFlagBits::eHostRead) result += "HostRead | ";
19011 if (value & AccessFlagBits::eHostWrite) result += "HostWrite | ";
19012 if (value & AccessFlagBits::eMemoryRead) result += "MemoryRead | ";
19013 if (value & AccessFlagBits::eMemoryWrite) result += "MemoryWrite | ";
19014 return "{" + result.substr(0, result.size() - 3) + "}";
19015 }
19016
19017 inline std::string to_string(BufferUsageFlagBits value)
19018 {
19019 switch (value)
19020 {
19021 case BufferUsageFlagBits::eTransferSrc: return "TransferSrc";
19022 case BufferUsageFlagBits::eTransferDst: return "TransferDst";
19023 case BufferUsageFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19024 case BufferUsageFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19025 case BufferUsageFlagBits::eUniformBuffer: return "UniformBuffer";
19026 case BufferUsageFlagBits::eStorageBuffer: return "StorageBuffer";
19027 case BufferUsageFlagBits::eIndexBuffer: return "IndexBuffer";
19028 case BufferUsageFlagBits::eVertexBuffer: return "VertexBuffer";
19029 case BufferUsageFlagBits::eIndirectBuffer: return "IndirectBuffer";
19030 default: return "invalid";
19031 }
19032 }
19033
19034 inline std::string to_string(BufferUsageFlags value)
19035 {
19036 if (!value) return "{}";
19037 std::string result;
19038 if (value & BufferUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19039 if (value & BufferUsageFlagBits::eTransferDst) result += "TransferDst | ";
19040 if (value & BufferUsageFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19041 if (value & BufferUsageFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19042 if (value & BufferUsageFlagBits::eUniformBuffer) result += "UniformBuffer | ";
19043 if (value & BufferUsageFlagBits::eStorageBuffer) result += "StorageBuffer | ";
19044 if (value & BufferUsageFlagBits::eIndexBuffer) result += "IndexBuffer | ";
19045 if (value & BufferUsageFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19046 if (value & BufferUsageFlagBits::eIndirectBuffer) result += "IndirectBuffer | ";
19047 return "{" + result.substr(0, result.size() - 3) + "}";
19048 }
19049
19050 inline std::string to_string(BufferCreateFlagBits value)
19051 {
19052 switch (value)
19053 {
19054 case BufferCreateFlagBits::eSparseBinding: return "SparseBinding";
19055 case BufferCreateFlagBits::eSparseResidency: return "SparseResidency";
19056 case BufferCreateFlagBits::eSparseAliased: return "SparseAliased";
19057 default: return "invalid";
19058 }
19059 }
19060
19061 inline std::string to_string(BufferCreateFlags value)
19062 {
19063 if (!value) return "{}";
19064 std::string result;
19065 if (value & BufferCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19066 if (value & BufferCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19067 if (value & BufferCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19068 return "{" + result.substr(0, result.size() - 3) + "}";
19069 }
19070
19071 inline std::string to_string(ShaderStageFlagBits value)
19072 {
19073 switch (value)
19074 {
19075 case ShaderStageFlagBits::eVertex: return "Vertex";
19076 case ShaderStageFlagBits::eTessellationControl: return "TessellationControl";
19077 case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation";
19078 case ShaderStageFlagBits::eGeometry: return "Geometry";
19079 case ShaderStageFlagBits::eFragment: return "Fragment";
19080 case ShaderStageFlagBits::eCompute: return "Compute";
19081 case ShaderStageFlagBits::eAllGraphics: return "AllGraphics";
19082 case ShaderStageFlagBits::eAll: return "All";
19083 default: return "invalid";
19084 }
19085 }
19086
19087 inline std::string to_string(ShaderStageFlags value)
19088 {
19089 if (!value) return "{}";
19090 std::string result;
19091 if (value & ShaderStageFlagBits::eVertex) result += "Vertex | ";
19092 if (value & ShaderStageFlagBits::eTessellationControl) result += "TessellationControl | ";
19093 if (value & ShaderStageFlagBits::eTessellationEvaluation) result += "TessellationEvaluation | ";
19094 if (value & ShaderStageFlagBits::eGeometry) result += "Geometry | ";
19095 if (value & ShaderStageFlagBits::eFragment) result += "Fragment | ";
19096 if (value & ShaderStageFlagBits::eCompute) result += "Compute | ";
19097 if (value & ShaderStageFlagBits::eAllGraphics) result += "AllGraphics | ";
19098 if (value & ShaderStageFlagBits::eAll) result += "All | ";
19099 return "{" + result.substr(0, result.size() - 3) + "}";
19100 }
19101
19102 inline std::string to_string(ImageUsageFlagBits value)
19103 {
19104 switch (value)
19105 {
19106 case ImageUsageFlagBits::eTransferSrc: return "TransferSrc";
19107 case ImageUsageFlagBits::eTransferDst: return "TransferDst";
19108 case ImageUsageFlagBits::eSampled: return "Sampled";
19109 case ImageUsageFlagBits::eStorage: return "Storage";
19110 case ImageUsageFlagBits::eColorAttachment: return "ColorAttachment";
19111 case ImageUsageFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
19112 case ImageUsageFlagBits::eTransientAttachment: return "TransientAttachment";
19113 case ImageUsageFlagBits::eInputAttachment: return "InputAttachment";
19114 default: return "invalid";
19115 }
19116 }
19117
19118 inline std::string to_string(ImageUsageFlags value)
19119 {
19120 if (!value) return "{}";
19121 std::string result;
19122 if (value & ImageUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19123 if (value & ImageUsageFlagBits::eTransferDst) result += "TransferDst | ";
19124 if (value & ImageUsageFlagBits::eSampled) result += "Sampled | ";
19125 if (value & ImageUsageFlagBits::eStorage) result += "Storage | ";
19126 if (value & ImageUsageFlagBits::eColorAttachment) result += "ColorAttachment | ";
19127 if (value & ImageUsageFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
19128 if (value & ImageUsageFlagBits::eTransientAttachment) result += "TransientAttachment | ";
19129 if (value & ImageUsageFlagBits::eInputAttachment) result += "InputAttachment | ";
19130 return "{" + result.substr(0, result.size() - 3) + "}";
19131 }
19132
19133 inline std::string to_string(ImageCreateFlagBits value)
19134 {
19135 switch (value)
19136 {
19137 case ImageCreateFlagBits::eSparseBinding: return "SparseBinding";
19138 case ImageCreateFlagBits::eSparseResidency: return "SparseResidency";
19139 case ImageCreateFlagBits::eSparseAliased: return "SparseAliased";
19140 case ImageCreateFlagBits::eMutableFormat: return "MutableFormat";
19141 case ImageCreateFlagBits::eCubeCompatible: return "CubeCompatible";
19142 default: return "invalid";
19143 }
19144 }
19145
19146 inline std::string to_string(ImageCreateFlags value)
19147 {
19148 if (!value) return "{}";
19149 std::string result;
19150 if (value & ImageCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19151 if (value & ImageCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19152 if (value & ImageCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19153 if (value & ImageCreateFlagBits::eMutableFormat) result += "MutableFormat | ";
19154 if (value & ImageCreateFlagBits::eCubeCompatible) result += "CubeCompatible | ";
19155 return "{" + result.substr(0, result.size() - 3) + "}";
19156 }
19157
19158 inline std::string to_string(PipelineCreateFlagBits value)
19159 {
19160 switch (value)
19161 {
19162 case PipelineCreateFlagBits::eDisableOptimization: return "DisableOptimization";
19163 case PipelineCreateFlagBits::eAllowDerivatives: return "AllowDerivatives";
19164 case PipelineCreateFlagBits::eDerivative: return "Derivative";
19165 default: return "invalid";
19166 }
19167 }
19168
19169 inline std::string to_string(PipelineCreateFlags value)
19170 {
19171 if (!value) return "{}";
19172 std::string result;
19173 if (value & PipelineCreateFlagBits::eDisableOptimization) result += "DisableOptimization | ";
19174 if (value & PipelineCreateFlagBits::eAllowDerivatives) result += "AllowDerivatives | ";
19175 if (value & PipelineCreateFlagBits::eDerivative) result += "Derivative | ";
19176 return "{" + result.substr(0, result.size() - 3) + "}";
19177 }
19178
19179 inline std::string to_string(ColorComponentFlagBits value)
19180 {
19181 switch (value)
19182 {
19183 case ColorComponentFlagBits::eR: return "R";
19184 case ColorComponentFlagBits::eG: return "G";
19185 case ColorComponentFlagBits::eB: return "B";
19186 case ColorComponentFlagBits::eA: return "A";
19187 default: return "invalid";
19188 }
19189 }
19190
19191 inline std::string to_string(ColorComponentFlags value)
19192 {
19193 if (!value) return "{}";
19194 std::string result;
19195 if (value & ColorComponentFlagBits::eR) result += "R | ";
19196 if (value & ColorComponentFlagBits::eG) result += "G | ";
19197 if (value & ColorComponentFlagBits::eB) result += "B | ";
19198 if (value & ColorComponentFlagBits::eA) result += "A | ";
19199 return "{" + result.substr(0, result.size() - 3) + "}";
19200 }
19201
19202 inline std::string to_string(FenceCreateFlagBits value)
19203 {
19204 switch (value)
19205 {
19206 case FenceCreateFlagBits::eSignaled: return "Signaled";
19207 default: return "invalid";
19208 }
19209 }
19210
19211 inline std::string to_string(FenceCreateFlags value)
19212 {
19213 if (!value) return "{}";
19214 std::string result;
19215 if (value & FenceCreateFlagBits::eSignaled) result += "Signaled | ";
19216 return "{" + result.substr(0, result.size() - 3) + "}";
19217 }
19218
19219 inline std::string to_string(FormatFeatureFlagBits value)
19220 {
19221 switch (value)
19222 {
19223 case FormatFeatureFlagBits::eSampledImage: return "SampledImage";
19224 case FormatFeatureFlagBits::eStorageImage: return "StorageImage";
19225 case FormatFeatureFlagBits::eStorageImageAtomic: return "StorageImageAtomic";
19226 case FormatFeatureFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19227 case FormatFeatureFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19228 case FormatFeatureFlagBits::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic";
19229 case FormatFeatureFlagBits::eVertexBuffer: return "VertexBuffer";
19230 case FormatFeatureFlagBits::eColorAttachment: return "ColorAttachment";
19231 case FormatFeatureFlagBits::eColorAttachmentBlend: return "ColorAttachmentBlend";
19232 case FormatFeatureFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
19233 case FormatFeatureFlagBits::eBlitSrc: return "BlitSrc";
19234 case FormatFeatureFlagBits::eBlitDst: return "BlitDst";
19235 case FormatFeatureFlagBits::eSampledImageFilterLinear: return "SampledImageFilterLinear";
19236 case FormatFeatureFlagBits::eSampledImageFilterCubicIMG: return "SampledImageFilterCubicIMG";
19237 default: return "invalid";
19238 }
19239 }
19240
19241 inline std::string to_string(FormatFeatureFlags value)
19242 {
19243 if (!value) return "{}";
19244 std::string result;
19245 if (value & FormatFeatureFlagBits::eSampledImage) result += "SampledImage | ";
19246 if (value & FormatFeatureFlagBits::eStorageImage) result += "StorageImage | ";
19247 if (value & FormatFeatureFlagBits::eStorageImageAtomic) result += "StorageImageAtomic | ";
19248 if (value & FormatFeatureFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19249 if (value & FormatFeatureFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19250 if (value & FormatFeatureFlagBits::eStorageTexelBufferAtomic) result += "StorageTexelBufferAtomic | ";
19251 if (value & FormatFeatureFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19252 if (value & FormatFeatureFlagBits::eColorAttachment) result += "ColorAttachment | ";
19253 if (value & FormatFeatureFlagBits::eColorAttachmentBlend) result += "ColorAttachmentBlend | ";
19254 if (value & FormatFeatureFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
19255 if (value & FormatFeatureFlagBits::eBlitSrc) result += "BlitSrc | ";
19256 if (value & FormatFeatureFlagBits::eBlitDst) result += "BlitDst | ";
19257 if (value & FormatFeatureFlagBits::eSampledImageFilterLinear) result += "SampledImageFilterLinear | ";
19258 if (value & FormatFeatureFlagBits::eSampledImageFilterCubicIMG) result += "SampledImageFilterCubicIMG | ";
19259 return "{" + result.substr(0, result.size() - 3) + "}";
19260 }
19261
19262 inline std::string to_string(QueryControlFlagBits value)
19263 {
19264 switch (value)
19265 {
19266 case QueryControlFlagBits::ePrecise: return "Precise";
19267 default: return "invalid";
19268 }
19269 }
19270
19271 inline std::string to_string(QueryControlFlags value)
19272 {
19273 if (!value) return "{}";
19274 std::string result;
19275 if (value & QueryControlFlagBits::ePrecise) result += "Precise | ";
19276 return "{" + result.substr(0, result.size() - 3) + "}";
19277 }
19278
19279 inline std::string to_string(QueryResultFlagBits value)
19280 {
19281 switch (value)
19282 {
19283 case QueryResultFlagBits::e64: return "64";
19284 case QueryResultFlagBits::eWait: return "Wait";
19285 case QueryResultFlagBits::eWithAvailability: return "WithAvailability";
19286 case QueryResultFlagBits::ePartial: return "Partial";
19287 default: return "invalid";
19288 }
19289 }
19290
19291 inline std::string to_string(QueryResultFlags value)
19292 {
19293 if (!value) return "{}";
19294 std::string result;
19295 if (value & QueryResultFlagBits::e64) result += "64 | ";
19296 if (value & QueryResultFlagBits::eWait) result += "Wait | ";
19297 if (value & QueryResultFlagBits::eWithAvailability) result += "WithAvailability | ";
19298 if (value & QueryResultFlagBits::ePartial) result += "Partial | ";
19299 return "{" + result.substr(0, result.size() - 3) + "}";
19300 }
19301
19302 inline std::string to_string(CommandBufferUsageFlagBits value)
19303 {
19304 switch (value)
19305 {
19306 case CommandBufferUsageFlagBits::eOneTimeSubmit: return "OneTimeSubmit";
19307 case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue";
19308 case CommandBufferUsageFlagBits::eSimultaneousUse: return "SimultaneousUse";
19309 default: return "invalid";
19310 }
19311 }
19312
19313 inline std::string to_string(CommandBufferUsageFlags value)
19314 {
19315 if (!value) return "{}";
19316 std::string result;
19317 if (value & CommandBufferUsageFlagBits::eOneTimeSubmit) result += "OneTimeSubmit | ";
19318 if (value & CommandBufferUsageFlagBits::eRenderPassContinue) result += "RenderPassContinue | ";
19319 if (value & CommandBufferUsageFlagBits::eSimultaneousUse) result += "SimultaneousUse | ";
19320 return "{" + result.substr(0, result.size() - 3) + "}";
19321 }
19322
19323 inline std::string to_string(QueryPipelineStatisticFlagBits value)
19324 {
19325 switch (value)
19326 {
19327 case QueryPipelineStatisticFlagBits::eInputAssemblyVertices: return "InputAssemblyVertices";
19328 case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives: return "InputAssemblyPrimitives";
19329 case QueryPipelineStatisticFlagBits::eVertexShaderInvocations: return "VertexShaderInvocations";
19330 case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations: return "GeometryShaderInvocations";
19331 case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives: return "GeometryShaderPrimitives";
19332 case QueryPipelineStatisticFlagBits::eClippingInvocations: return "ClippingInvocations";
19333 case QueryPipelineStatisticFlagBits::eClippingPrimitives: return "ClippingPrimitives";
19334 case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations: return "FragmentShaderInvocations";
19335 case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches: return "TessellationControlShaderPatches";
19336 case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations";
19337 case QueryPipelineStatisticFlagBits::eComputeShaderInvocations: return "ComputeShaderInvocations";
19338 default: return "invalid";
19339 }
19340 }
19341
19342 inline std::string to_string(QueryPipelineStatisticFlags value)
19343 {
19344 if (!value) return "{}";
19345 std::string result;
19346 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices) result += "InputAssemblyVertices | ";
19347 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives) result += "InputAssemblyPrimitives | ";
19348 if (value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations) result += "VertexShaderInvocations | ";
19349 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations) result += "GeometryShaderInvocations | ";
19350 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives) result += "GeometryShaderPrimitives | ";
19351 if (value & QueryPipelineStatisticFlagBits::eClippingInvocations) result += "ClippingInvocations | ";
19352 if (value & QueryPipelineStatisticFlagBits::eClippingPrimitives) result += "ClippingPrimitives | ";
19353 if (value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations) result += "FragmentShaderInvocations | ";
19354 if (value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches) result += "TessellationControlShaderPatches | ";
19355 if (value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations) result += "TessellationEvaluationShaderInvocations | ";
19356 if (value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations) result += "ComputeShaderInvocations | ";
19357 return "{" + result.substr(0, result.size() - 3) + "}";
19358 }
19359
19360 inline std::string to_string(ImageAspectFlagBits value)
19361 {
19362 switch (value)
19363 {
19364 case ImageAspectFlagBits::eColor: return "Color";
19365 case ImageAspectFlagBits::eDepth: return "Depth";
19366 case ImageAspectFlagBits::eStencil: return "Stencil";
19367 case ImageAspectFlagBits::eMetadata: return "Metadata";
19368 default: return "invalid";
19369 }
19370 }
19371
19372 inline std::string to_string(ImageAspectFlags value)
19373 {
19374 if (!value) return "{}";
19375 std::string result;
19376 if (value & ImageAspectFlagBits::eColor) result += "Color | ";
19377 if (value & ImageAspectFlagBits::eDepth) result += "Depth | ";
19378 if (value & ImageAspectFlagBits::eStencil) result += "Stencil | ";
19379 if (value & ImageAspectFlagBits::eMetadata) result += "Metadata | ";
19380 return "{" + result.substr(0, result.size() - 3) + "}";
19381 }
19382
19383 inline std::string to_string(SparseImageFormatFlagBits value)
19384 {
19385 switch (value)
19386 {
19387 case SparseImageFormatFlagBits::eSingleMiptail: return "SingleMiptail";
19388 case SparseImageFormatFlagBits::eAlignedMipSize: return "AlignedMipSize";
19389 case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize";
19390 default: return "invalid";
19391 }
19392 }
19393
19394 inline std::string to_string(SparseImageFormatFlags value)
19395 {
19396 if (!value) return "{}";
19397 std::string result;
19398 if (value & SparseImageFormatFlagBits::eSingleMiptail) result += "SingleMiptail | ";
19399 if (value & SparseImageFormatFlagBits::eAlignedMipSize) result += "AlignedMipSize | ";
19400 if (value & SparseImageFormatFlagBits::eNonstandardBlockSize) result += "NonstandardBlockSize | ";
19401 return "{" + result.substr(0, result.size() - 3) + "}";
19402 }
19403
19404 inline std::string to_string(SparseMemoryBindFlagBits value)
19405 {
19406 switch (value)
19407 {
19408 case SparseMemoryBindFlagBits::eMetadata: return "Metadata";
19409 default: return "invalid";
19410 }
19411 }
19412
19413 inline std::string to_string(SparseMemoryBindFlags value)
19414 {
19415 if (!value) return "{}";
19416 std::string result;
19417 if (value & SparseMemoryBindFlagBits::eMetadata) result += "Metadata | ";
19418 return "{" + result.substr(0, result.size() - 3) + "}";
19419 }
19420
19421 inline std::string to_string(PipelineStageFlagBits value)
19422 {
19423 switch (value)
19424 {
19425 case PipelineStageFlagBits::eTopOfPipe: return "TopOfPipe";
19426 case PipelineStageFlagBits::eDrawIndirect: return "DrawIndirect";
19427 case PipelineStageFlagBits::eVertexInput: return "VertexInput";
19428 case PipelineStageFlagBits::eVertexShader: return "VertexShader";
19429 case PipelineStageFlagBits::eTessellationControlShader: return "TessellationControlShader";
19430 case PipelineStageFlagBits::eTessellationEvaluationShader: return "TessellationEvaluationShader";
19431 case PipelineStageFlagBits::eGeometryShader: return "GeometryShader";
19432 case PipelineStageFlagBits::eFragmentShader: return "FragmentShader";
19433 case PipelineStageFlagBits::eEarlyFragmentTests: return "EarlyFragmentTests";
19434 case PipelineStageFlagBits::eLateFragmentTests: return "LateFragmentTests";
19435 case PipelineStageFlagBits::eColorAttachmentOutput: return "ColorAttachmentOutput";
19436 case PipelineStageFlagBits::eComputeShader: return "ComputeShader";
19437 case PipelineStageFlagBits::eTransfer: return "Transfer";
19438 case PipelineStageFlagBits::eBottomOfPipe: return "BottomOfPipe";
19439 case PipelineStageFlagBits::eHost: return "Host";
19440 case PipelineStageFlagBits::eAllGraphics: return "AllGraphics";
19441 case PipelineStageFlagBits::eAllCommands: return "AllCommands";
19442 default: return "invalid";
19443 }
19444 }
19445
19446 inline std::string to_string(PipelineStageFlags value)
19447 {
19448 if (!value) return "{}";
19449 std::string result;
19450 if (value & PipelineStageFlagBits::eTopOfPipe) result += "TopOfPipe | ";
19451 if (value & PipelineStageFlagBits::eDrawIndirect) result += "DrawIndirect | ";
19452 if (value & PipelineStageFlagBits::eVertexInput) result += "VertexInput | ";
19453 if (value & PipelineStageFlagBits::eVertexShader) result += "VertexShader | ";
19454 if (value & PipelineStageFlagBits::eTessellationControlShader) result += "TessellationControlShader | ";
19455 if (value & PipelineStageFlagBits::eTessellationEvaluationShader) result += "TessellationEvaluationShader | ";
19456 if (value & PipelineStageFlagBits::eGeometryShader) result += "GeometryShader | ";
19457 if (value & PipelineStageFlagBits::eFragmentShader) result += "FragmentShader | ";
19458 if (value & PipelineStageFlagBits::eEarlyFragmentTests) result += "EarlyFragmentTests | ";
19459 if (value & PipelineStageFlagBits::eLateFragmentTests) result += "LateFragmentTests | ";
19460 if (value & PipelineStageFlagBits::eColorAttachmentOutput) result += "ColorAttachmentOutput | ";
19461 if (value & PipelineStageFlagBits::eComputeShader) result += "ComputeShader | ";
19462 if (value & PipelineStageFlagBits::eTransfer) result += "Transfer | ";
19463 if (value & PipelineStageFlagBits::eBottomOfPipe) result += "BottomOfPipe | ";
19464 if (value & PipelineStageFlagBits::eHost) result += "Host | ";
19465 if (value & PipelineStageFlagBits::eAllGraphics) result += "AllGraphics | ";
19466 if (value & PipelineStageFlagBits::eAllCommands) result += "AllCommands | ";
19467 return "{" + result.substr(0, result.size() - 3) + "}";
19468 }
19469
19470 inline std::string to_string(CommandPoolCreateFlagBits value)
19471 {
19472 switch (value)
19473 {
19474 case CommandPoolCreateFlagBits::eTransient: return "Transient";
19475 case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer";
19476 default: return "invalid";
19477 }
19478 }
19479
19480 inline std::string to_string(CommandPoolCreateFlags value)
19481 {
19482 if (!value) return "{}";
19483 std::string result;
19484 if (value & CommandPoolCreateFlagBits::eTransient) result += "Transient | ";
19485 if (value & CommandPoolCreateFlagBits::eResetCommandBuffer) result += "ResetCommandBuffer | ";
19486 return "{" + result.substr(0, result.size() - 3) + "}";
19487 }
19488
19489 inline std::string to_string(CommandPoolResetFlagBits value)
19490 {
19491 switch (value)
19492 {
19493 case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources";
19494 default: return "invalid";
19495 }
19496 }
19497
19498 inline std::string to_string(CommandPoolResetFlags value)
19499 {
19500 if (!value) return "{}";
19501 std::string result;
19502 if (value & CommandPoolResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
19503 return "{" + result.substr(0, result.size() - 3) + "}";
19504 }
19505
19506 inline std::string to_string(CommandBufferResetFlagBits value)
19507 {
19508 switch (value)
19509 {
19510 case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources";
19511 default: return "invalid";
19512 }
19513 }
19514
19515 inline std::string to_string(CommandBufferResetFlags value)
19516 {
19517 if (!value) return "{}";
19518 std::string result;
19519 if (value & CommandBufferResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
19520 return "{" + result.substr(0, result.size() - 3) + "}";
19521 }
19522
19523 inline std::string to_string(SampleCountFlagBits value)
19524 {
19525 switch (value)
19526 {
19527 case SampleCountFlagBits::e1: return "1";
19528 case SampleCountFlagBits::e2: return "2";
19529 case SampleCountFlagBits::e4: return "4";
19530 case SampleCountFlagBits::e8: return "8";
19531 case SampleCountFlagBits::e16: return "16";
19532 case SampleCountFlagBits::e32: return "32";
19533 case SampleCountFlagBits::e64: return "64";
19534 default: return "invalid";
19535 }
19536 }
19537
19538 inline std::string to_string(SampleCountFlags value)
19539 {
19540 if (!value) return "{}";
19541 std::string result;
19542 if (value & SampleCountFlagBits::e1) result += "1 | ";
19543 if (value & SampleCountFlagBits::e2) result += "2 | ";
19544 if (value & SampleCountFlagBits::e4) result += "4 | ";
19545 if (value & SampleCountFlagBits::e8) result += "8 | ";
19546 if (value & SampleCountFlagBits::e16) result += "16 | ";
19547 if (value & SampleCountFlagBits::e32) result += "32 | ";
19548 if (value & SampleCountFlagBits::e64) result += "64 | ";
19549 return "{" + result.substr(0, result.size() - 3) + "}";
19550 }
19551
19552 inline std::string to_string(AttachmentDescriptionFlagBits value)
19553 {
19554 switch (value)
19555 {
19556 case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias";
19557 default: return "invalid";
19558 }
19559 }
19560
19561 inline std::string to_string(AttachmentDescriptionFlags value)
19562 {
19563 if (!value) return "{}";
19564 std::string result;
19565 if (value & AttachmentDescriptionFlagBits::eMayAlias) result += "MayAlias | ";
19566 return "{" + result.substr(0, result.size() - 3) + "}";
19567 }
19568
19569 inline std::string to_string(StencilFaceFlagBits value)
19570 {
19571 switch (value)
19572 {
19573 case StencilFaceFlagBits::eFront: return "Front";
19574 case StencilFaceFlagBits::eBack: return "Back";
19575 case StencilFaceFlagBits::eVkStencilFrontAndBack: return "VkStencilFrontAndBack";
19576 default: return "invalid";
19577 }
19578 }
19579
19580 inline std::string to_string(StencilFaceFlags value)
19581 {
19582 if (!value) return "{}";
19583 std::string result;
19584 if (value & StencilFaceFlagBits::eFront) result += "Front | ";
19585 if (value & StencilFaceFlagBits::eBack) result += "Back | ";
19586 if (value & StencilFaceFlagBits::eVkStencilFrontAndBack) result += "VkStencilFrontAndBack | ";
19587 return "{" + result.substr(0, result.size() - 3) + "}";
19588 }
19589
19590 inline std::string to_string(DescriptorPoolCreateFlagBits value)
19591 {
19592 switch (value)
19593 {
19594 case DescriptorPoolCreateFlagBits::eFreeDescriptorSet: return "FreeDescriptorSet";
19595 default: return "invalid";
19596 }
19597 }
19598
19599 inline std::string to_string(DescriptorPoolCreateFlags value)
19600 {
19601 if (!value) return "{}";
19602 std::string result;
19603 if (value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet) result += "FreeDescriptorSet | ";
19604 return "{" + result.substr(0, result.size() - 3) + "}";
19605 }
19606
19607 inline std::string to_string(DependencyFlagBits value)
19608 {
19609 switch (value)
19610 {
19611 case DependencyFlagBits::eByRegion: return "ByRegion";
19612 default: return "invalid";
19613 }
19614 }
19615
19616 inline std::string to_string(DependencyFlags value)
19617 {
19618 if (!value) return "{}";
19619 std::string result;
19620 if (value & DependencyFlagBits::eByRegion) result += "ByRegion | ";
19621 return "{" + result.substr(0, result.size() - 3) + "}";
19622 }
19623
19624 inline std::string to_string(PresentModeKHR value)
19625 {
19626 switch (value)
19627 {
19628 case PresentModeKHR::eImmediate: return "Immediate";
19629 case PresentModeKHR::eMailbox: return "Mailbox";
19630 case PresentModeKHR::eFifo: return "Fifo";
19631 case PresentModeKHR::eFifoRelaxed: return "FifoRelaxed";
19632 default: return "invalid";
19633 }
19634 }
19635
19636 inline std::string to_string(ColorSpaceKHR value)
19637 {
19638 switch (value)
19639 {
19640 case ColorSpaceKHR::eSrgbNonlinear: return "SrgbNonlinear";
19641 default: return "invalid";
19642 }
19643 }
19644
19645 inline std::string to_string(DisplayPlaneAlphaFlagBitsKHR value)
19646 {
19647 switch (value)
19648 {
19649 case DisplayPlaneAlphaFlagBitsKHR::eOpaque: return "Opaque";
19650 case DisplayPlaneAlphaFlagBitsKHR::eGlobal: return "Global";
19651 case DisplayPlaneAlphaFlagBitsKHR::ePerPixel: return "PerPixel";
19652 case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied";
19653 default: return "invalid";
19654 }
19655 }
19656
19657 inline std::string to_string(DisplayPlaneAlphaFlagsKHR value)
19658 {
19659 if (!value) return "{}";
19660 std::string result;
19661 if (value & DisplayPlaneAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
19662 if (value & DisplayPlaneAlphaFlagBitsKHR::eGlobal) result += "Global | ";
19663 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel) result += "PerPixel | ";
19664 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied) result += "PerPixelPremultiplied | ";
19665 return "{" + result.substr(0, result.size() - 3) + "}";
19666 }
19667
19668 inline std::string to_string(CompositeAlphaFlagBitsKHR value)
19669 {
19670 switch (value)
19671 {
19672 case CompositeAlphaFlagBitsKHR::eOpaque: return "Opaque";
19673 case CompositeAlphaFlagBitsKHR::ePreMultiplied: return "PreMultiplied";
19674 case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied";
19675 case CompositeAlphaFlagBitsKHR::eInherit: return "Inherit";
19676 default: return "invalid";
19677 }
19678 }
19679
19680 inline std::string to_string(CompositeAlphaFlagsKHR value)
19681 {
19682 if (!value) return "{}";
19683 std::string result;
19684 if (value & CompositeAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
19685 if (value & CompositeAlphaFlagBitsKHR::ePreMultiplied) result += "PreMultiplied | ";
19686 if (value & CompositeAlphaFlagBitsKHR::ePostMultiplied) result += "PostMultiplied | ";
19687 if (value & CompositeAlphaFlagBitsKHR::eInherit) result += "Inherit | ";
19688 return "{" + result.substr(0, result.size() - 3) + "}";
19689 }
19690
19691 inline std::string to_string(SurfaceTransformFlagBitsKHR value)
19692 {
19693 switch (value)
19694 {
19695 case SurfaceTransformFlagBitsKHR::eIdentity: return "Identity";
19696 case SurfaceTransformFlagBitsKHR::eRotate90: return "Rotate90";
19697 case SurfaceTransformFlagBitsKHR::eRotate180: return "Rotate180";
19698 case SurfaceTransformFlagBitsKHR::eRotate270: return "Rotate270";
19699 case SurfaceTransformFlagBitsKHR::eHorizontalMirror: return "HorizontalMirror";
19700 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90: return "HorizontalMirrorRotate90";
19701 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180";
19702 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270";
19703 case SurfaceTransformFlagBitsKHR::eInherit: return "Inherit";
19704 default: return "invalid";
19705 }
19706 }
19707
19708 inline std::string to_string(SurfaceTransformFlagsKHR value)
19709 {
19710 if (!value) return "{}";
19711 std::string result;
19712 if (value & SurfaceTransformFlagBitsKHR::eIdentity) result += "Identity | ";
19713 if (value & SurfaceTransformFlagBitsKHR::eRotate90) result += "Rotate90 | ";
19714 if (value & SurfaceTransformFlagBitsKHR::eRotate180) result += "Rotate180 | ";
19715 if (value & SurfaceTransformFlagBitsKHR::eRotate270) result += "Rotate270 | ";
19716 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirror) result += "HorizontalMirror | ";
19717 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90) result += "HorizontalMirrorRotate90 | ";
19718 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180) result += "HorizontalMirrorRotate180 | ";
19719 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270) result += "HorizontalMirrorRotate270 | ";
19720 if (value & SurfaceTransformFlagBitsKHR::eInherit) result += "Inherit | ";
19721 return "{" + result.substr(0, result.size() - 3) + "}";
19722 }
19723
19724 inline std::string to_string(DebugReportFlagBitsEXT value)
19725 {
19726 switch (value)
19727 {
19728 case DebugReportFlagBitsEXT::eInformation: return "Information";
19729 case DebugReportFlagBitsEXT::eWarning: return "Warning";
19730 case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning";
19731 case DebugReportFlagBitsEXT::eError: return "Error";
19732 case DebugReportFlagBitsEXT::eDebug: return "Debug";
19733 default: return "invalid";
19734 }
19735 }
19736
19737 inline std::string to_string(DebugReportFlagsEXT value)
19738 {
19739 if (!value) return "{}";
19740 std::string result;
19741 if (value & DebugReportFlagBitsEXT::eInformation) result += "Information | ";
19742 if (value & DebugReportFlagBitsEXT::eWarning) result += "Warning | ";
19743 if (value & DebugReportFlagBitsEXT::ePerformanceWarning) result += "PerformanceWarning | ";
19744 if (value & DebugReportFlagBitsEXT::eError) result += "Error | ";
19745 if (value & DebugReportFlagBitsEXT::eDebug) result += "Debug | ";
19746 return "{" + result.substr(0, result.size() - 3) + "}";
19747 }
19748
19749 inline std::string to_string(DebugReportObjectTypeEXT value)
19750 {
19751 switch (value)
19752 {
19753 case DebugReportObjectTypeEXT::eUnknown: return "Unknown";
19754 case DebugReportObjectTypeEXT::eInstance: return "Instance";
19755 case DebugReportObjectTypeEXT::ePhysicalDevice: return "PhysicalDevice";
19756 case DebugReportObjectTypeEXT::eDevice: return "Device";
19757 case DebugReportObjectTypeEXT::eQueue: return "Queue";
19758 case DebugReportObjectTypeEXT::eSemaphore: return "Semaphore";
19759 case DebugReportObjectTypeEXT::eCommandBuffer: return "CommandBuffer";
19760 case DebugReportObjectTypeEXT::eFence: return "Fence";
19761 case DebugReportObjectTypeEXT::eDeviceMemory: return "DeviceMemory";
19762 case DebugReportObjectTypeEXT::eBuffer: return "Buffer";
19763 case DebugReportObjectTypeEXT::eImage: return "Image";
19764 case DebugReportObjectTypeEXT::eEvent: return "Event";
19765 case DebugReportObjectTypeEXT::eQueryPool: return "QueryPool";
19766 case DebugReportObjectTypeEXT::eBufferView: return "BufferView";
19767 case DebugReportObjectTypeEXT::eImageView: return "ImageView";
19768 case DebugReportObjectTypeEXT::eShaderModule: return "ShaderModule";
19769 case DebugReportObjectTypeEXT::ePipelineCache: return "PipelineCache";
19770 case DebugReportObjectTypeEXT::ePipelineLayout: return "PipelineLayout";
19771 case DebugReportObjectTypeEXT::eRenderPass: return "RenderPass";
19772 case DebugReportObjectTypeEXT::ePipeline: return "Pipeline";
19773 case DebugReportObjectTypeEXT::eDescriptorSetLayout: return "DescriptorSetLayout";
19774 case DebugReportObjectTypeEXT::eSampler: return "Sampler";
19775 case DebugReportObjectTypeEXT::eDescriptorPool: return "DescriptorPool";
19776 case DebugReportObjectTypeEXT::eDescriptorSet: return "DescriptorSet";
19777 case DebugReportObjectTypeEXT::eFramebuffer: return "Framebuffer";
19778 case DebugReportObjectTypeEXT::eCommandPool: return "CommandPool";
19779 case DebugReportObjectTypeEXT::eSurfaceKhr: return "SurfaceKhr";
19780 case DebugReportObjectTypeEXT::eSwapchainKhr: return "SwapchainKhr";
19781 case DebugReportObjectTypeEXT::eDebugReport: return "DebugReport";
19782 default: return "invalid";
19783 }
19784 }
19785
19786 inline std::string to_string(DebugReportErrorEXT value)
19787 {
19788 switch (value)
19789 {
19790 case DebugReportErrorEXT::eNone: return "None";
19791 case DebugReportErrorEXT::eCallbackRef: return "CallbackRef";
19792 default: return "invalid";
19793 }
19794 }
19795
19796 inline std::string to_string(RasterizationOrderAMD value)
19797 {
19798 switch (value)
19799 {
19800 case RasterizationOrderAMD::eStrict: return "Strict";
19801 case RasterizationOrderAMD::eRelaxed: return "Relaxed";
19802 default: return "invalid";
19803 }
19804 }
19805
19806} // namespace vk
19807
19808#endif