blob: fcabd189af01a7fac110d3ea986a780e22e7a023 [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
43static_assert( VK_HEADER_VERSION == 21 , "Wrong VK_HEADER_VERSION!" );
44
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
47#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
48#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,
307 eErrorSurfaceLostKHR = VK_ERROR_SURFACE_LOST_KHR,
308 eErrorNativeWindowInUseKHR = VK_ERROR_NATIVE_WINDOW_IN_USE_KHR,
309 eSuboptimalKHR = VK_SUBOPTIMAL_KHR,
310 eErrorOutOfDateKHR = VK_ERROR_OUT_OF_DATE_KHR,
311 eErrorIncompatibleDisplayKHR = VK_ERROR_INCOMPATIBLE_DISPLAY_KHR,
312 eErrorValidationFailedEXT = VK_ERROR_VALIDATION_FAILED_EXT,
313 eErrorInvalidShaderNV = VK_ERROR_INVALID_SHADER_NV
314 };
315
316 inline std::string to_string(Result value)
317 {
318 switch (value)
319 {
320 case Result::eSuccess: return "Success";
321 case Result::eNotReady: return "NotReady";
322 case Result::eTimeout: return "Timeout";
323 case Result::eEventSet: return "EventSet";
324 case Result::eEventReset: return "EventReset";
325 case Result::eIncomplete: return "Incomplete";
326 case Result::eErrorOutOfHostMemory: return "ErrorOutOfHostMemory";
327 case Result::eErrorOutOfDeviceMemory: return "ErrorOutOfDeviceMemory";
328 case Result::eErrorInitializationFailed: return "ErrorInitializationFailed";
329 case Result::eErrorDeviceLost: return "ErrorDeviceLost";
330 case Result::eErrorMemoryMapFailed: return "ErrorMemoryMapFailed";
331 case Result::eErrorLayerNotPresent: return "ErrorLayerNotPresent";
332 case Result::eErrorExtensionNotPresent: return "ErrorExtensionNotPresent";
333 case Result::eErrorFeatureNotPresent: return "ErrorFeatureNotPresent";
334 case Result::eErrorIncompatibleDriver: return "ErrorIncompatibleDriver";
335 case Result::eErrorTooManyObjects: return "ErrorTooManyObjects";
336 case Result::eErrorFormatNotSupported: return "ErrorFormatNotSupported";
337 case Result::eErrorSurfaceLostKHR: return "ErrorSurfaceLostKHR";
338 case Result::eErrorNativeWindowInUseKHR: return "ErrorNativeWindowInUseKHR";
339 case Result::eSuboptimalKHR: return "SuboptimalKHR";
340 case Result::eErrorOutOfDateKHR: return "ErrorOutOfDateKHR";
341 case Result::eErrorIncompatibleDisplayKHR: return "ErrorIncompatibleDisplayKHR";
342 case Result::eErrorValidationFailedEXT: return "ErrorValidationFailedEXT";
343 case Result::eErrorInvalidShaderNV: return "ErrorInvalidShaderNV";
344 default: return "invalid";
345 }
346 }
347
348#if defined(_MSC_VER) && (_MSC_VER == 1800)
349# define noexcept _NOEXCEPT
350#endif
351
352 class ErrorCategoryImpl : public std::error_category
353 {
354 public:
355 virtual const char* name() const noexcept override { return "vk::Result"; }
356 virtual std::string message(int ev) const override { return to_string(static_cast<Result>(ev)); }
357 };
358
359#if defined(_MSC_VER) && (_MSC_VER == 1800)
360# undef noexcept
361#endif
362
363 inline const std::error_category& errorCategory()
364 {
365 static ErrorCategoryImpl instance;
366 return instance;
367 }
368
369 inline std::error_code make_error_code(Result e)
370 {
371 return std::error_code(static_cast<int>(e), errorCategory());
372 }
373
374 inline std::error_condition make_error_condition(Result e)
375 {
376 return std::error_condition(static_cast<int>(e), errorCategory());
377 }
378
379} // namespace vk
380
381namespace std
382{
383 template <>
384 struct is_error_code_enum<vk::Result> : public true_type
385 {};
386}
387
388namespace vk
389{
390 template <typename T>
391 struct ResultValue
392 {
393 ResultValue( Result r, T & v )
394 : result( r )
395 , value( v )
396 {}
397
398 Result result;
399 T value;
400 };
401
402 template <typename T>
403 struct ResultValueType
404 {
405#ifdef VULKAN_HPP_NO_EXCEPTIONS
406 typedef ResultValue<T> type;
407#else
408 typedef T type;
409#endif
410 };
411
412 template <> struct ResultValueType<void>
413 {
414#ifdef VULKAN_HPP_NO_EXCEPTIONS
415 typedef Result type;
416#else
417 typedef void type;
418#endif
419 };
420
421 inline ResultValueType<void>::type createResultValue( Result result, char const * message )
422 {
423#ifdef VULKAN_HPP_NO_EXCEPTIONS
424 assert( result == Result::eSuccess );
425 return result;
426#else
427 if ( result != Result::eSuccess )
428 {
429 throw std::system_error( result, message );
430 }
431#endif
432 }
433
434 template <typename T>
435 inline typename ResultValueType<T>::type createResultValue( Result result, T & data, char const * message )
436 {
437#ifdef VULKAN_HPP_NO_EXCEPTIONS
438 assert( result == Result::eSuccess );
439 return ResultValue<T>( result, data );
440#else
441 if ( result != Result::eSuccess )
442 {
443 throw std::system_error( result, message );
444 }
445 return data;
446#endif
447 }
448
449 inline Result createResultValue( Result result, char const * message, std::initializer_list<Result> successCodes )
450 {
451#ifdef VULKAN_HPP_NO_EXCEPTIONS
452 assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
453#else
454 if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
455 {
456 throw std::system_error( result, message );
457 }
458#endif
459 return result;
460 }
461
462 template <typename T>
463 inline ResultValue<T> createResultValue( Result result, T & data, char const * message, std::initializer_list<Result> successCodes )
464 {
465#ifdef VULKAN_HPP_NO_EXCEPTIONS
466 assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
467#else
468 if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
469 {
470 throw std::system_error( result, message );
471 }
472#endif
473 return ResultValue<T>( result, data );
474 }
475
476 using SampleMask = uint32_t;
477
478 using Bool32 = uint32_t;
479
480 using DeviceSize = uint64_t;
481
482 enum class FramebufferCreateFlagBits
483 {
484 };
485
486 using FramebufferCreateFlags = Flags<FramebufferCreateFlagBits, VkFramebufferCreateFlags>;
487
488 inline FramebufferCreateFlags operator|( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 )
489 {
490 return FramebufferCreateFlags( bit0 ) | bit1;
491 }
492
493 enum class QueryPoolCreateFlagBits
494 {
495 };
496
497 using QueryPoolCreateFlags = Flags<QueryPoolCreateFlagBits, VkQueryPoolCreateFlags>;
498
499 inline QueryPoolCreateFlags operator|( QueryPoolCreateFlagBits bit0, QueryPoolCreateFlagBits bit1 )
500 {
501 return QueryPoolCreateFlags( bit0 ) | bit1;
502 }
503
504 enum class RenderPassCreateFlagBits
505 {
506 };
507
508 using RenderPassCreateFlags = Flags<RenderPassCreateFlagBits, VkRenderPassCreateFlags>;
509
510 inline RenderPassCreateFlags operator|( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 )
511 {
512 return RenderPassCreateFlags( bit0 ) | bit1;
513 }
514
515 enum class SamplerCreateFlagBits
516 {
517 };
518
519 using SamplerCreateFlags = Flags<SamplerCreateFlagBits, VkSamplerCreateFlags>;
520
521 inline SamplerCreateFlags operator|( SamplerCreateFlagBits bit0, SamplerCreateFlagBits bit1 )
522 {
523 return SamplerCreateFlags( bit0 ) | bit1;
524 }
525
526 enum class PipelineLayoutCreateFlagBits
527 {
528 };
529
530 using PipelineLayoutCreateFlags = Flags<PipelineLayoutCreateFlagBits, VkPipelineLayoutCreateFlags>;
531
532 inline PipelineLayoutCreateFlags operator|( PipelineLayoutCreateFlagBits bit0, PipelineLayoutCreateFlagBits bit1 )
533 {
534 return PipelineLayoutCreateFlags( bit0 ) | bit1;
535 }
536
537 enum class PipelineCacheCreateFlagBits
538 {
539 };
540
541 using PipelineCacheCreateFlags = Flags<PipelineCacheCreateFlagBits, VkPipelineCacheCreateFlags>;
542
543 inline PipelineCacheCreateFlags operator|( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 )
544 {
545 return PipelineCacheCreateFlags( bit0 ) | bit1;
546 }
547
548 enum class PipelineDepthStencilStateCreateFlagBits
549 {
550 };
551
552 using PipelineDepthStencilStateCreateFlags = Flags<PipelineDepthStencilStateCreateFlagBits, VkPipelineDepthStencilStateCreateFlags>;
553
554 inline PipelineDepthStencilStateCreateFlags operator|( PipelineDepthStencilStateCreateFlagBits bit0, PipelineDepthStencilStateCreateFlagBits bit1 )
555 {
556 return PipelineDepthStencilStateCreateFlags( bit0 ) | bit1;
557 }
558
559 enum class PipelineDynamicStateCreateFlagBits
560 {
561 };
562
563 using PipelineDynamicStateCreateFlags = Flags<PipelineDynamicStateCreateFlagBits, VkPipelineDynamicStateCreateFlags>;
564
565 inline PipelineDynamicStateCreateFlags operator|( PipelineDynamicStateCreateFlagBits bit0, PipelineDynamicStateCreateFlagBits bit1 )
566 {
567 return PipelineDynamicStateCreateFlags( bit0 ) | bit1;
568 }
569
570 enum class PipelineColorBlendStateCreateFlagBits
571 {
572 };
573
574 using PipelineColorBlendStateCreateFlags = Flags<PipelineColorBlendStateCreateFlagBits, VkPipelineColorBlendStateCreateFlags>;
575
576 inline PipelineColorBlendStateCreateFlags operator|( PipelineColorBlendStateCreateFlagBits bit0, PipelineColorBlendStateCreateFlagBits bit1 )
577 {
578 return PipelineColorBlendStateCreateFlags( bit0 ) | bit1;
579 }
580
581 enum class PipelineMultisampleStateCreateFlagBits
582 {
583 };
584
585 using PipelineMultisampleStateCreateFlags = Flags<PipelineMultisampleStateCreateFlagBits, VkPipelineMultisampleStateCreateFlags>;
586
587 inline PipelineMultisampleStateCreateFlags operator|( PipelineMultisampleStateCreateFlagBits bit0, PipelineMultisampleStateCreateFlagBits bit1 )
588 {
589 return PipelineMultisampleStateCreateFlags( bit0 ) | bit1;
590 }
591
592 enum class PipelineRasterizationStateCreateFlagBits
593 {
594 };
595
596 using PipelineRasterizationStateCreateFlags = Flags<PipelineRasterizationStateCreateFlagBits, VkPipelineRasterizationStateCreateFlags>;
597
598 inline PipelineRasterizationStateCreateFlags operator|( PipelineRasterizationStateCreateFlagBits bit0, PipelineRasterizationStateCreateFlagBits bit1 )
599 {
600 return PipelineRasterizationStateCreateFlags( bit0 ) | bit1;
601 }
602
603 enum class PipelineViewportStateCreateFlagBits
604 {
605 };
606
607 using PipelineViewportStateCreateFlags = Flags<PipelineViewportStateCreateFlagBits, VkPipelineViewportStateCreateFlags>;
608
609 inline PipelineViewportStateCreateFlags operator|( PipelineViewportStateCreateFlagBits bit0, PipelineViewportStateCreateFlagBits bit1 )
610 {
611 return PipelineViewportStateCreateFlags( bit0 ) | bit1;
612 }
613
614 enum class PipelineTessellationStateCreateFlagBits
615 {
616 };
617
618 using PipelineTessellationStateCreateFlags = Flags<PipelineTessellationStateCreateFlagBits, VkPipelineTessellationStateCreateFlags>;
619
620 inline PipelineTessellationStateCreateFlags operator|( PipelineTessellationStateCreateFlagBits bit0, PipelineTessellationStateCreateFlagBits bit1 )
621 {
622 return PipelineTessellationStateCreateFlags( bit0 ) | bit1;
623 }
624
625 enum class PipelineInputAssemblyStateCreateFlagBits
626 {
627 };
628
629 using PipelineInputAssemblyStateCreateFlags = Flags<PipelineInputAssemblyStateCreateFlagBits, VkPipelineInputAssemblyStateCreateFlags>;
630
631 inline PipelineInputAssemblyStateCreateFlags operator|( PipelineInputAssemblyStateCreateFlagBits bit0, PipelineInputAssemblyStateCreateFlagBits bit1 )
632 {
633 return PipelineInputAssemblyStateCreateFlags( bit0 ) | bit1;
634 }
635
636 enum class PipelineVertexInputStateCreateFlagBits
637 {
638 };
639
640 using PipelineVertexInputStateCreateFlags = Flags<PipelineVertexInputStateCreateFlagBits, VkPipelineVertexInputStateCreateFlags>;
641
642 inline PipelineVertexInputStateCreateFlags operator|( PipelineVertexInputStateCreateFlagBits bit0, PipelineVertexInputStateCreateFlagBits bit1 )
643 {
644 return PipelineVertexInputStateCreateFlags( bit0 ) | bit1;
645 }
646
647 enum class PipelineShaderStageCreateFlagBits
648 {
649 };
650
651 using PipelineShaderStageCreateFlags = Flags<PipelineShaderStageCreateFlagBits, VkPipelineShaderStageCreateFlags>;
652
653 inline PipelineShaderStageCreateFlags operator|( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 )
654 {
655 return PipelineShaderStageCreateFlags( bit0 ) | bit1;
656 }
657
658 enum class DescriptorSetLayoutCreateFlagBits
659 {
660 };
661
662 using DescriptorSetLayoutCreateFlags = Flags<DescriptorSetLayoutCreateFlagBits, VkDescriptorSetLayoutCreateFlags>;
663
664 inline DescriptorSetLayoutCreateFlags operator|( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 )
665 {
666 return DescriptorSetLayoutCreateFlags( bit0 ) | bit1;
667 }
668
669 enum class BufferViewCreateFlagBits
670 {
671 };
672
673 using BufferViewCreateFlags = Flags<BufferViewCreateFlagBits, VkBufferViewCreateFlags>;
674
675 inline BufferViewCreateFlags operator|( BufferViewCreateFlagBits bit0, BufferViewCreateFlagBits bit1 )
676 {
677 return BufferViewCreateFlags( bit0 ) | bit1;
678 }
679
680 enum class InstanceCreateFlagBits
681 {
682 };
683
684 using InstanceCreateFlags = Flags<InstanceCreateFlagBits, VkInstanceCreateFlags>;
685
686 inline InstanceCreateFlags operator|( InstanceCreateFlagBits bit0, InstanceCreateFlagBits bit1 )
687 {
688 return InstanceCreateFlags( bit0 ) | bit1;
689 }
690
691 enum class DeviceCreateFlagBits
692 {
693 };
694
695 using DeviceCreateFlags = Flags<DeviceCreateFlagBits, VkDeviceCreateFlags>;
696
697 inline DeviceCreateFlags operator|( DeviceCreateFlagBits bit0, DeviceCreateFlagBits bit1 )
698 {
699 return DeviceCreateFlags( bit0 ) | bit1;
700 }
701
702 enum class DeviceQueueCreateFlagBits
703 {
704 };
705
706 using DeviceQueueCreateFlags = Flags<DeviceQueueCreateFlagBits, VkDeviceQueueCreateFlags>;
707
708 inline DeviceQueueCreateFlags operator|( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 )
709 {
710 return DeviceQueueCreateFlags( bit0 ) | bit1;
711 }
712
713 enum class ImageViewCreateFlagBits
714 {
715 };
716
717 using ImageViewCreateFlags = Flags<ImageViewCreateFlagBits, VkImageViewCreateFlags>;
718
719 inline ImageViewCreateFlags operator|( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 )
720 {
721 return ImageViewCreateFlags( bit0 ) | bit1;
722 }
723
724 enum class SemaphoreCreateFlagBits
725 {
726 };
727
728 using SemaphoreCreateFlags = Flags<SemaphoreCreateFlagBits, VkSemaphoreCreateFlags>;
729
730 inline SemaphoreCreateFlags operator|( SemaphoreCreateFlagBits bit0, SemaphoreCreateFlagBits bit1 )
731 {
732 return SemaphoreCreateFlags( bit0 ) | bit1;
733 }
734
735 enum class ShaderModuleCreateFlagBits
736 {
737 };
738
739 using ShaderModuleCreateFlags = Flags<ShaderModuleCreateFlagBits, VkShaderModuleCreateFlags>;
740
741 inline ShaderModuleCreateFlags operator|( ShaderModuleCreateFlagBits bit0, ShaderModuleCreateFlagBits bit1 )
742 {
743 return ShaderModuleCreateFlags( bit0 ) | bit1;
744 }
745
746 enum class EventCreateFlagBits
747 {
748 };
749
750 using EventCreateFlags = Flags<EventCreateFlagBits, VkEventCreateFlags>;
751
752 inline EventCreateFlags operator|( EventCreateFlagBits bit0, EventCreateFlagBits bit1 )
753 {
754 return EventCreateFlags( bit0 ) | bit1;
755 }
756
757 enum class MemoryMapFlagBits
758 {
759 };
760
761 using MemoryMapFlags = Flags<MemoryMapFlagBits, VkMemoryMapFlags>;
762
763 inline MemoryMapFlags operator|( MemoryMapFlagBits bit0, MemoryMapFlagBits bit1 )
764 {
765 return MemoryMapFlags( bit0 ) | bit1;
766 }
767
768 enum class SubpassDescriptionFlagBits
769 {
770 };
771
772 using SubpassDescriptionFlags = Flags<SubpassDescriptionFlagBits, VkSubpassDescriptionFlags>;
773
774 inline SubpassDescriptionFlags operator|( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 )
775 {
776 return SubpassDescriptionFlags( bit0 ) | bit1;
777 }
778
779 enum class DescriptorPoolResetFlagBits
780 {
781 };
782
783 using DescriptorPoolResetFlags = Flags<DescriptorPoolResetFlagBits, VkDescriptorPoolResetFlags>;
784
785 inline DescriptorPoolResetFlags operator|( DescriptorPoolResetFlagBits bit0, DescriptorPoolResetFlagBits bit1 )
786 {
787 return DescriptorPoolResetFlags( bit0 ) | bit1;
788 }
789
790 enum class SwapchainCreateFlagBitsKHR
791 {
792 };
793
794 using SwapchainCreateFlagsKHR = Flags<SwapchainCreateFlagBitsKHR, VkSwapchainCreateFlagsKHR>;
795
796 inline SwapchainCreateFlagsKHR operator|( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 )
797 {
798 return SwapchainCreateFlagsKHR( bit0 ) | bit1;
799 }
800
801 enum class DisplayModeCreateFlagBitsKHR
802 {
803 };
804
805 using DisplayModeCreateFlagsKHR = Flags<DisplayModeCreateFlagBitsKHR, VkDisplayModeCreateFlagsKHR>;
806
807 inline DisplayModeCreateFlagsKHR operator|( DisplayModeCreateFlagBitsKHR bit0, DisplayModeCreateFlagBitsKHR bit1 )
808 {
809 return DisplayModeCreateFlagsKHR( bit0 ) | bit1;
810 }
811
812 enum class DisplaySurfaceCreateFlagBitsKHR
813 {
814 };
815
816 using DisplaySurfaceCreateFlagsKHR = Flags<DisplaySurfaceCreateFlagBitsKHR, VkDisplaySurfaceCreateFlagsKHR>;
817
818 inline DisplaySurfaceCreateFlagsKHR operator|( DisplaySurfaceCreateFlagBitsKHR bit0, DisplaySurfaceCreateFlagBitsKHR bit1 )
819 {
820 return DisplaySurfaceCreateFlagsKHR( bit0 ) | bit1;
821 }
822
823#ifdef VK_USE_PLATFORM_ANDROID_KHR
824 enum class AndroidSurfaceCreateFlagBitsKHR
825 {
826 };
827#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
828
829#ifdef VK_USE_PLATFORM_ANDROID_KHR
830 using AndroidSurfaceCreateFlagsKHR = Flags<AndroidSurfaceCreateFlagBitsKHR, VkAndroidSurfaceCreateFlagsKHR>;
831
832 inline AndroidSurfaceCreateFlagsKHR operator|( AndroidSurfaceCreateFlagBitsKHR bit0, AndroidSurfaceCreateFlagBitsKHR bit1 )
833 {
834 return AndroidSurfaceCreateFlagsKHR( bit0 ) | bit1;
835 }
836#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
837
838#ifdef VK_USE_PLATFORM_MIR_KHR
839 enum class MirSurfaceCreateFlagBitsKHR
840 {
841 };
842#endif /*VK_USE_PLATFORM_MIR_KHR*/
843
844#ifdef VK_USE_PLATFORM_MIR_KHR
845 using MirSurfaceCreateFlagsKHR = Flags<MirSurfaceCreateFlagBitsKHR, VkMirSurfaceCreateFlagsKHR>;
846
847 inline MirSurfaceCreateFlagsKHR operator|( MirSurfaceCreateFlagBitsKHR bit0, MirSurfaceCreateFlagBitsKHR bit1 )
848 {
849 return MirSurfaceCreateFlagsKHR( bit0 ) | bit1;
850 }
851#endif /*VK_USE_PLATFORM_MIR_KHR*/
852
853#ifdef VK_USE_PLATFORM_WAYLAND_KHR
854 enum class WaylandSurfaceCreateFlagBitsKHR
855 {
856 };
857#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
858
859#ifdef VK_USE_PLATFORM_WAYLAND_KHR
860 using WaylandSurfaceCreateFlagsKHR = Flags<WaylandSurfaceCreateFlagBitsKHR, VkWaylandSurfaceCreateFlagsKHR>;
861
862 inline WaylandSurfaceCreateFlagsKHR operator|( WaylandSurfaceCreateFlagBitsKHR bit0, WaylandSurfaceCreateFlagBitsKHR bit1 )
863 {
864 return WaylandSurfaceCreateFlagsKHR( bit0 ) | bit1;
865 }
866#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
867
868#ifdef VK_USE_PLATFORM_WIN32_KHR
869 enum class Win32SurfaceCreateFlagBitsKHR
870 {
871 };
872#endif /*VK_USE_PLATFORM_WIN32_KHR*/
873
874#ifdef VK_USE_PLATFORM_WIN32_KHR
875 using Win32SurfaceCreateFlagsKHR = Flags<Win32SurfaceCreateFlagBitsKHR, VkWin32SurfaceCreateFlagsKHR>;
876
877 inline Win32SurfaceCreateFlagsKHR operator|( Win32SurfaceCreateFlagBitsKHR bit0, Win32SurfaceCreateFlagBitsKHR bit1 )
878 {
879 return Win32SurfaceCreateFlagsKHR( bit0 ) | bit1;
880 }
881#endif /*VK_USE_PLATFORM_WIN32_KHR*/
882
883#ifdef VK_USE_PLATFORM_XLIB_KHR
884 enum class XlibSurfaceCreateFlagBitsKHR
885 {
886 };
887#endif /*VK_USE_PLATFORM_XLIB_KHR*/
888
889#ifdef VK_USE_PLATFORM_XLIB_KHR
890 using XlibSurfaceCreateFlagsKHR = Flags<XlibSurfaceCreateFlagBitsKHR, VkXlibSurfaceCreateFlagsKHR>;
891
892 inline XlibSurfaceCreateFlagsKHR operator|( XlibSurfaceCreateFlagBitsKHR bit0, XlibSurfaceCreateFlagBitsKHR bit1 )
893 {
894 return XlibSurfaceCreateFlagsKHR( bit0 ) | bit1;
895 }
896#endif /*VK_USE_PLATFORM_XLIB_KHR*/
897
898#ifdef VK_USE_PLATFORM_XCB_KHR
899 enum class XcbSurfaceCreateFlagBitsKHR
900 {
901 };
902#endif /*VK_USE_PLATFORM_XCB_KHR*/
903
904#ifdef VK_USE_PLATFORM_XCB_KHR
905 using XcbSurfaceCreateFlagsKHR = Flags<XcbSurfaceCreateFlagBitsKHR, VkXcbSurfaceCreateFlagsKHR>;
906
907 inline XcbSurfaceCreateFlagsKHR operator|( XcbSurfaceCreateFlagBitsKHR bit0, XcbSurfaceCreateFlagBitsKHR bit1 )
908 {
909 return XcbSurfaceCreateFlagsKHR( bit0 ) | bit1;
910 }
911#endif /*VK_USE_PLATFORM_XCB_KHR*/
912
913 class DeviceMemory
914 {
915 public:
916 DeviceMemory()
917 : m_deviceMemory(VK_NULL_HANDLE)
918 {}
919
920#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
921 DeviceMemory(VkDeviceMemory deviceMemory)
922 : m_deviceMemory(deviceMemory)
923 {}
924
925 DeviceMemory& operator=(VkDeviceMemory deviceMemory)
926 {
927 m_deviceMemory = deviceMemory;
928 return *this;
929 }
930#endif
931
932#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
933 explicit
934#endif
935 operator VkDeviceMemory() const
936 {
937 return m_deviceMemory;
938 }
939
940 explicit operator bool() const
941 {
942 return m_deviceMemory != VK_NULL_HANDLE;
943 }
944
945 bool operator!() const
946 {
947 return m_deviceMemory == VK_NULL_HANDLE;
948 }
949
950 private:
951 VkDeviceMemory m_deviceMemory;
952 };
953 static_assert( sizeof( DeviceMemory ) == sizeof( VkDeviceMemory ), "handle and wrapper have different size!" );
954
955 class CommandPool
956 {
957 public:
958 CommandPool()
959 : m_commandPool(VK_NULL_HANDLE)
960 {}
961
962#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
963 CommandPool(VkCommandPool commandPool)
964 : m_commandPool(commandPool)
965 {}
966
967 CommandPool& operator=(VkCommandPool commandPool)
968 {
969 m_commandPool = commandPool;
970 return *this;
971 }
972#endif
973
974#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
975 explicit
976#endif
977 operator VkCommandPool() const
978 {
979 return m_commandPool;
980 }
981
982 explicit operator bool() const
983 {
984 return m_commandPool != VK_NULL_HANDLE;
985 }
986
987 bool operator!() const
988 {
989 return m_commandPool == VK_NULL_HANDLE;
990 }
991
992 private:
993 VkCommandPool m_commandPool;
994 };
995 static_assert( sizeof( CommandPool ) == sizeof( VkCommandPool ), "handle and wrapper have different size!" );
996
997 class Buffer
998 {
999 public:
1000 Buffer()
1001 : m_buffer(VK_NULL_HANDLE)
1002 {}
1003
1004#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1005 Buffer(VkBuffer buffer)
1006 : m_buffer(buffer)
1007 {}
1008
1009 Buffer& operator=(VkBuffer buffer)
1010 {
1011 m_buffer = buffer;
1012 return *this;
1013 }
1014#endif
1015
1016#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1017 explicit
1018#endif
1019 operator VkBuffer() const
1020 {
1021 return m_buffer;
1022 }
1023
1024 explicit operator bool() const
1025 {
1026 return m_buffer != VK_NULL_HANDLE;
1027 }
1028
1029 bool operator!() const
1030 {
1031 return m_buffer == VK_NULL_HANDLE;
1032 }
1033
1034 private:
1035 VkBuffer m_buffer;
1036 };
1037 static_assert( sizeof( Buffer ) == sizeof( VkBuffer ), "handle and wrapper have different size!" );
1038
1039 class BufferView
1040 {
1041 public:
1042 BufferView()
1043 : m_bufferView(VK_NULL_HANDLE)
1044 {}
1045
1046#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1047 BufferView(VkBufferView bufferView)
1048 : m_bufferView(bufferView)
1049 {}
1050
1051 BufferView& operator=(VkBufferView bufferView)
1052 {
1053 m_bufferView = bufferView;
1054 return *this;
1055 }
1056#endif
1057
1058#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1059 explicit
1060#endif
1061 operator VkBufferView() const
1062 {
1063 return m_bufferView;
1064 }
1065
1066 explicit operator bool() const
1067 {
1068 return m_bufferView != VK_NULL_HANDLE;
1069 }
1070
1071 bool operator!() const
1072 {
1073 return m_bufferView == VK_NULL_HANDLE;
1074 }
1075
1076 private:
1077 VkBufferView m_bufferView;
1078 };
1079 static_assert( sizeof( BufferView ) == sizeof( VkBufferView ), "handle and wrapper have different size!" );
1080
1081 class Image
1082 {
1083 public:
1084 Image()
1085 : m_image(VK_NULL_HANDLE)
1086 {}
1087
1088#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1089 Image(VkImage image)
1090 : m_image(image)
1091 {}
1092
1093 Image& operator=(VkImage image)
1094 {
1095 m_image = image;
1096 return *this;
1097 }
1098#endif
1099
1100#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1101 explicit
1102#endif
1103 operator VkImage() const
1104 {
1105 return m_image;
1106 }
1107
1108 explicit operator bool() const
1109 {
1110 return m_image != VK_NULL_HANDLE;
1111 }
1112
1113 bool operator!() const
1114 {
1115 return m_image == VK_NULL_HANDLE;
1116 }
1117
1118 private:
1119 VkImage m_image;
1120 };
1121 static_assert( sizeof( Image ) == sizeof( VkImage ), "handle and wrapper have different size!" );
1122
1123 class ImageView
1124 {
1125 public:
1126 ImageView()
1127 : m_imageView(VK_NULL_HANDLE)
1128 {}
1129
1130#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1131 ImageView(VkImageView imageView)
1132 : m_imageView(imageView)
1133 {}
1134
1135 ImageView& operator=(VkImageView imageView)
1136 {
1137 m_imageView = imageView;
1138 return *this;
1139 }
1140#endif
1141
1142#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1143 explicit
1144#endif
1145 operator VkImageView() const
1146 {
1147 return m_imageView;
1148 }
1149
1150 explicit operator bool() const
1151 {
1152 return m_imageView != VK_NULL_HANDLE;
1153 }
1154
1155 bool operator!() const
1156 {
1157 return m_imageView == VK_NULL_HANDLE;
1158 }
1159
1160 private:
1161 VkImageView m_imageView;
1162 };
1163 static_assert( sizeof( ImageView ) == sizeof( VkImageView ), "handle and wrapper have different size!" );
1164
1165 class ShaderModule
1166 {
1167 public:
1168 ShaderModule()
1169 : m_shaderModule(VK_NULL_HANDLE)
1170 {}
1171
1172#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1173 ShaderModule(VkShaderModule shaderModule)
1174 : m_shaderModule(shaderModule)
1175 {}
1176
1177 ShaderModule& operator=(VkShaderModule shaderModule)
1178 {
1179 m_shaderModule = shaderModule;
1180 return *this;
1181 }
1182#endif
1183
1184#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1185 explicit
1186#endif
1187 operator VkShaderModule() const
1188 {
1189 return m_shaderModule;
1190 }
1191
1192 explicit operator bool() const
1193 {
1194 return m_shaderModule != VK_NULL_HANDLE;
1195 }
1196
1197 bool operator!() const
1198 {
1199 return m_shaderModule == VK_NULL_HANDLE;
1200 }
1201
1202 private:
1203 VkShaderModule m_shaderModule;
1204 };
1205 static_assert( sizeof( ShaderModule ) == sizeof( VkShaderModule ), "handle and wrapper have different size!" );
1206
1207 class Pipeline
1208 {
1209 public:
1210 Pipeline()
1211 : m_pipeline(VK_NULL_HANDLE)
1212 {}
1213
1214#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1215 Pipeline(VkPipeline pipeline)
1216 : m_pipeline(pipeline)
1217 {}
1218
1219 Pipeline& operator=(VkPipeline pipeline)
1220 {
1221 m_pipeline = pipeline;
1222 return *this;
1223 }
1224#endif
1225
1226#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1227 explicit
1228#endif
1229 operator VkPipeline() const
1230 {
1231 return m_pipeline;
1232 }
1233
1234 explicit operator bool() const
1235 {
1236 return m_pipeline != VK_NULL_HANDLE;
1237 }
1238
1239 bool operator!() const
1240 {
1241 return m_pipeline == VK_NULL_HANDLE;
1242 }
1243
1244 private:
1245 VkPipeline m_pipeline;
1246 };
1247 static_assert( sizeof( Pipeline ) == sizeof( VkPipeline ), "handle and wrapper have different size!" );
1248
1249 class PipelineLayout
1250 {
1251 public:
1252 PipelineLayout()
1253 : m_pipelineLayout(VK_NULL_HANDLE)
1254 {}
1255
1256#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1257 PipelineLayout(VkPipelineLayout pipelineLayout)
1258 : m_pipelineLayout(pipelineLayout)
1259 {}
1260
1261 PipelineLayout& operator=(VkPipelineLayout pipelineLayout)
1262 {
1263 m_pipelineLayout = pipelineLayout;
1264 return *this;
1265 }
1266#endif
1267
1268#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1269 explicit
1270#endif
1271 operator VkPipelineLayout() const
1272 {
1273 return m_pipelineLayout;
1274 }
1275
1276 explicit operator bool() const
1277 {
1278 return m_pipelineLayout != VK_NULL_HANDLE;
1279 }
1280
1281 bool operator!() const
1282 {
1283 return m_pipelineLayout == VK_NULL_HANDLE;
1284 }
1285
1286 private:
1287 VkPipelineLayout m_pipelineLayout;
1288 };
1289 static_assert( sizeof( PipelineLayout ) == sizeof( VkPipelineLayout ), "handle and wrapper have different size!" );
1290
1291 class Sampler
1292 {
1293 public:
1294 Sampler()
1295 : m_sampler(VK_NULL_HANDLE)
1296 {}
1297
1298#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1299 Sampler(VkSampler sampler)
1300 : m_sampler(sampler)
1301 {}
1302
1303 Sampler& operator=(VkSampler sampler)
1304 {
1305 m_sampler = sampler;
1306 return *this;
1307 }
1308#endif
1309
1310#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1311 explicit
1312#endif
1313 operator VkSampler() const
1314 {
1315 return m_sampler;
1316 }
1317
1318 explicit operator bool() const
1319 {
1320 return m_sampler != VK_NULL_HANDLE;
1321 }
1322
1323 bool operator!() const
1324 {
1325 return m_sampler == VK_NULL_HANDLE;
1326 }
1327
1328 private:
1329 VkSampler m_sampler;
1330 };
1331 static_assert( sizeof( Sampler ) == sizeof( VkSampler ), "handle and wrapper have different size!" );
1332
1333 class DescriptorSet
1334 {
1335 public:
1336 DescriptorSet()
1337 : m_descriptorSet(VK_NULL_HANDLE)
1338 {}
1339
1340#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1341 DescriptorSet(VkDescriptorSet descriptorSet)
1342 : m_descriptorSet(descriptorSet)
1343 {}
1344
1345 DescriptorSet& operator=(VkDescriptorSet descriptorSet)
1346 {
1347 m_descriptorSet = descriptorSet;
1348 return *this;
1349 }
1350#endif
1351
1352#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1353 explicit
1354#endif
1355 operator VkDescriptorSet() const
1356 {
1357 return m_descriptorSet;
1358 }
1359
1360 explicit operator bool() const
1361 {
1362 return m_descriptorSet != VK_NULL_HANDLE;
1363 }
1364
1365 bool operator!() const
1366 {
1367 return m_descriptorSet == VK_NULL_HANDLE;
1368 }
1369
1370 private:
1371 VkDescriptorSet m_descriptorSet;
1372 };
1373 static_assert( sizeof( DescriptorSet ) == sizeof( VkDescriptorSet ), "handle and wrapper have different size!" );
1374
1375 class DescriptorSetLayout
1376 {
1377 public:
1378 DescriptorSetLayout()
1379 : m_descriptorSetLayout(VK_NULL_HANDLE)
1380 {}
1381
1382#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1383 DescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout)
1384 : m_descriptorSetLayout(descriptorSetLayout)
1385 {}
1386
1387 DescriptorSetLayout& operator=(VkDescriptorSetLayout descriptorSetLayout)
1388 {
1389 m_descriptorSetLayout = descriptorSetLayout;
1390 return *this;
1391 }
1392#endif
1393
1394#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1395 explicit
1396#endif
1397 operator VkDescriptorSetLayout() const
1398 {
1399 return m_descriptorSetLayout;
1400 }
1401
1402 explicit operator bool() const
1403 {
1404 return m_descriptorSetLayout != VK_NULL_HANDLE;
1405 }
1406
1407 bool operator!() const
1408 {
1409 return m_descriptorSetLayout == VK_NULL_HANDLE;
1410 }
1411
1412 private:
1413 VkDescriptorSetLayout m_descriptorSetLayout;
1414 };
1415 static_assert( sizeof( DescriptorSetLayout ) == sizeof( VkDescriptorSetLayout ), "handle and wrapper have different size!" );
1416
1417 class DescriptorPool
1418 {
1419 public:
1420 DescriptorPool()
1421 : m_descriptorPool(VK_NULL_HANDLE)
1422 {}
1423
1424#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1425 DescriptorPool(VkDescriptorPool descriptorPool)
1426 : m_descriptorPool(descriptorPool)
1427 {}
1428
1429 DescriptorPool& operator=(VkDescriptorPool descriptorPool)
1430 {
1431 m_descriptorPool = descriptorPool;
1432 return *this;
1433 }
1434#endif
1435
1436#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1437 explicit
1438#endif
1439 operator VkDescriptorPool() const
1440 {
1441 return m_descriptorPool;
1442 }
1443
1444 explicit operator bool() const
1445 {
1446 return m_descriptorPool != VK_NULL_HANDLE;
1447 }
1448
1449 bool operator!() const
1450 {
1451 return m_descriptorPool == VK_NULL_HANDLE;
1452 }
1453
1454 private:
1455 VkDescriptorPool m_descriptorPool;
1456 };
1457 static_assert( sizeof( DescriptorPool ) == sizeof( VkDescriptorPool ), "handle and wrapper have different size!" );
1458
1459 class Fence
1460 {
1461 public:
1462 Fence()
1463 : m_fence(VK_NULL_HANDLE)
1464 {}
1465
1466#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1467 Fence(VkFence fence)
1468 : m_fence(fence)
1469 {}
1470
1471 Fence& operator=(VkFence fence)
1472 {
1473 m_fence = fence;
1474 return *this;
1475 }
1476#endif
1477
1478#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1479 explicit
1480#endif
1481 operator VkFence() const
1482 {
1483 return m_fence;
1484 }
1485
1486 explicit operator bool() const
1487 {
1488 return m_fence != VK_NULL_HANDLE;
1489 }
1490
1491 bool operator!() const
1492 {
1493 return m_fence == VK_NULL_HANDLE;
1494 }
1495
1496 private:
1497 VkFence m_fence;
1498 };
1499 static_assert( sizeof( Fence ) == sizeof( VkFence ), "handle and wrapper have different size!" );
1500
1501 class Semaphore
1502 {
1503 public:
1504 Semaphore()
1505 : m_semaphore(VK_NULL_HANDLE)
1506 {}
1507
1508#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1509 Semaphore(VkSemaphore semaphore)
1510 : m_semaphore(semaphore)
1511 {}
1512
1513 Semaphore& operator=(VkSemaphore semaphore)
1514 {
1515 m_semaphore = semaphore;
1516 return *this;
1517 }
1518#endif
1519
1520#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1521 explicit
1522#endif
1523 operator VkSemaphore() const
1524 {
1525 return m_semaphore;
1526 }
1527
1528 explicit operator bool() const
1529 {
1530 return m_semaphore != VK_NULL_HANDLE;
1531 }
1532
1533 bool operator!() const
1534 {
1535 return m_semaphore == VK_NULL_HANDLE;
1536 }
1537
1538 private:
1539 VkSemaphore m_semaphore;
1540 };
1541 static_assert( sizeof( Semaphore ) == sizeof( VkSemaphore ), "handle and wrapper have different size!" );
1542
1543 class Event
1544 {
1545 public:
1546 Event()
1547 : m_event(VK_NULL_HANDLE)
1548 {}
1549
1550#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1551 Event(VkEvent event)
1552 : m_event(event)
1553 {}
1554
1555 Event& operator=(VkEvent event)
1556 {
1557 m_event = event;
1558 return *this;
1559 }
1560#endif
1561
1562#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1563 explicit
1564#endif
1565 operator VkEvent() const
1566 {
1567 return m_event;
1568 }
1569
1570 explicit operator bool() const
1571 {
1572 return m_event != VK_NULL_HANDLE;
1573 }
1574
1575 bool operator!() const
1576 {
1577 return m_event == VK_NULL_HANDLE;
1578 }
1579
1580 private:
1581 VkEvent m_event;
1582 };
1583 static_assert( sizeof( Event ) == sizeof( VkEvent ), "handle and wrapper have different size!" );
1584
1585 class QueryPool
1586 {
1587 public:
1588 QueryPool()
1589 : m_queryPool(VK_NULL_HANDLE)
1590 {}
1591
1592#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1593 QueryPool(VkQueryPool queryPool)
1594 : m_queryPool(queryPool)
1595 {}
1596
1597 QueryPool& operator=(VkQueryPool queryPool)
1598 {
1599 m_queryPool = queryPool;
1600 return *this;
1601 }
1602#endif
1603
1604#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1605 explicit
1606#endif
1607 operator VkQueryPool() const
1608 {
1609 return m_queryPool;
1610 }
1611
1612 explicit operator bool() const
1613 {
1614 return m_queryPool != VK_NULL_HANDLE;
1615 }
1616
1617 bool operator!() const
1618 {
1619 return m_queryPool == VK_NULL_HANDLE;
1620 }
1621
1622 private:
1623 VkQueryPool m_queryPool;
1624 };
1625 static_assert( sizeof( QueryPool ) == sizeof( VkQueryPool ), "handle and wrapper have different size!" );
1626
1627 class Framebuffer
1628 {
1629 public:
1630 Framebuffer()
1631 : m_framebuffer(VK_NULL_HANDLE)
1632 {}
1633
1634#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1635 Framebuffer(VkFramebuffer framebuffer)
1636 : m_framebuffer(framebuffer)
1637 {}
1638
1639 Framebuffer& operator=(VkFramebuffer framebuffer)
1640 {
1641 m_framebuffer = framebuffer;
1642 return *this;
1643 }
1644#endif
1645
1646#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1647 explicit
1648#endif
1649 operator VkFramebuffer() const
1650 {
1651 return m_framebuffer;
1652 }
1653
1654 explicit operator bool() const
1655 {
1656 return m_framebuffer != VK_NULL_HANDLE;
1657 }
1658
1659 bool operator!() const
1660 {
1661 return m_framebuffer == VK_NULL_HANDLE;
1662 }
1663
1664 private:
1665 VkFramebuffer m_framebuffer;
1666 };
1667 static_assert( sizeof( Framebuffer ) == sizeof( VkFramebuffer ), "handle and wrapper have different size!" );
1668
1669 class RenderPass
1670 {
1671 public:
1672 RenderPass()
1673 : m_renderPass(VK_NULL_HANDLE)
1674 {}
1675
1676#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1677 RenderPass(VkRenderPass renderPass)
1678 : m_renderPass(renderPass)
1679 {}
1680
1681 RenderPass& operator=(VkRenderPass renderPass)
1682 {
1683 m_renderPass = renderPass;
1684 return *this;
1685 }
1686#endif
1687
1688#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1689 explicit
1690#endif
1691 operator VkRenderPass() const
1692 {
1693 return m_renderPass;
1694 }
1695
1696 explicit operator bool() const
1697 {
1698 return m_renderPass != VK_NULL_HANDLE;
1699 }
1700
1701 bool operator!() const
1702 {
1703 return m_renderPass == VK_NULL_HANDLE;
1704 }
1705
1706 private:
1707 VkRenderPass m_renderPass;
1708 };
1709 static_assert( sizeof( RenderPass ) == sizeof( VkRenderPass ), "handle and wrapper have different size!" );
1710
1711 class PipelineCache
1712 {
1713 public:
1714 PipelineCache()
1715 : m_pipelineCache(VK_NULL_HANDLE)
1716 {}
1717
1718#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1719 PipelineCache(VkPipelineCache pipelineCache)
1720 : m_pipelineCache(pipelineCache)
1721 {}
1722
1723 PipelineCache& operator=(VkPipelineCache pipelineCache)
1724 {
1725 m_pipelineCache = pipelineCache;
1726 return *this;
1727 }
1728#endif
1729
1730#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1731 explicit
1732#endif
1733 operator VkPipelineCache() const
1734 {
1735 return m_pipelineCache;
1736 }
1737
1738 explicit operator bool() const
1739 {
1740 return m_pipelineCache != VK_NULL_HANDLE;
1741 }
1742
1743 bool operator!() const
1744 {
1745 return m_pipelineCache == VK_NULL_HANDLE;
1746 }
1747
1748 private:
1749 VkPipelineCache m_pipelineCache;
1750 };
1751 static_assert( sizeof( PipelineCache ) == sizeof( VkPipelineCache ), "handle and wrapper have different size!" );
1752
1753 class DisplayKHR
1754 {
1755 public:
1756 DisplayKHR()
1757 : m_displayKHR(VK_NULL_HANDLE)
1758 {}
1759
1760#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1761 DisplayKHR(VkDisplayKHR displayKHR)
1762 : m_displayKHR(displayKHR)
1763 {}
1764
1765 DisplayKHR& operator=(VkDisplayKHR displayKHR)
1766 {
1767 m_displayKHR = displayKHR;
1768 return *this;
1769 }
1770#endif
1771
1772#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1773 explicit
1774#endif
1775 operator VkDisplayKHR() const
1776 {
1777 return m_displayKHR;
1778 }
1779
1780 explicit operator bool() const
1781 {
1782 return m_displayKHR != VK_NULL_HANDLE;
1783 }
1784
1785 bool operator!() const
1786 {
1787 return m_displayKHR == VK_NULL_HANDLE;
1788 }
1789
1790 private:
1791 VkDisplayKHR m_displayKHR;
1792 };
1793 static_assert( sizeof( DisplayKHR ) == sizeof( VkDisplayKHR ), "handle and wrapper have different size!" );
1794
1795 class DisplayModeKHR
1796 {
1797 public:
1798 DisplayModeKHR()
1799 : m_displayModeKHR(VK_NULL_HANDLE)
1800 {}
1801
1802#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1803 DisplayModeKHR(VkDisplayModeKHR displayModeKHR)
1804 : m_displayModeKHR(displayModeKHR)
1805 {}
1806
1807 DisplayModeKHR& operator=(VkDisplayModeKHR displayModeKHR)
1808 {
1809 m_displayModeKHR = displayModeKHR;
1810 return *this;
1811 }
1812#endif
1813
1814#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1815 explicit
1816#endif
1817 operator VkDisplayModeKHR() const
1818 {
1819 return m_displayModeKHR;
1820 }
1821
1822 explicit operator bool() const
1823 {
1824 return m_displayModeKHR != VK_NULL_HANDLE;
1825 }
1826
1827 bool operator!() const
1828 {
1829 return m_displayModeKHR == VK_NULL_HANDLE;
1830 }
1831
1832 private:
1833 VkDisplayModeKHR m_displayModeKHR;
1834 };
1835 static_assert( sizeof( DisplayModeKHR ) == sizeof( VkDisplayModeKHR ), "handle and wrapper have different size!" );
1836
1837 class SurfaceKHR
1838 {
1839 public:
1840 SurfaceKHR()
1841 : m_surfaceKHR(VK_NULL_HANDLE)
1842 {}
1843
1844#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1845 SurfaceKHR(VkSurfaceKHR surfaceKHR)
1846 : m_surfaceKHR(surfaceKHR)
1847 {}
1848
1849 SurfaceKHR& operator=(VkSurfaceKHR surfaceKHR)
1850 {
1851 m_surfaceKHR = surfaceKHR;
1852 return *this;
1853 }
1854#endif
1855
1856#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1857 explicit
1858#endif
1859 operator VkSurfaceKHR() const
1860 {
1861 return m_surfaceKHR;
1862 }
1863
1864 explicit operator bool() const
1865 {
1866 return m_surfaceKHR != VK_NULL_HANDLE;
1867 }
1868
1869 bool operator!() const
1870 {
1871 return m_surfaceKHR == VK_NULL_HANDLE;
1872 }
1873
1874 private:
1875 VkSurfaceKHR m_surfaceKHR;
1876 };
1877 static_assert( sizeof( SurfaceKHR ) == sizeof( VkSurfaceKHR ), "handle and wrapper have different size!" );
1878
1879 class SwapchainKHR
1880 {
1881 public:
1882 SwapchainKHR()
1883 : m_swapchainKHR(VK_NULL_HANDLE)
1884 {}
1885
1886#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1887 SwapchainKHR(VkSwapchainKHR swapchainKHR)
1888 : m_swapchainKHR(swapchainKHR)
1889 {}
1890
1891 SwapchainKHR& operator=(VkSwapchainKHR swapchainKHR)
1892 {
1893 m_swapchainKHR = swapchainKHR;
1894 return *this;
1895 }
1896#endif
1897
1898#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1899 explicit
1900#endif
1901 operator VkSwapchainKHR() const
1902 {
1903 return m_swapchainKHR;
1904 }
1905
1906 explicit operator bool() const
1907 {
1908 return m_swapchainKHR != VK_NULL_HANDLE;
1909 }
1910
1911 bool operator!() const
1912 {
1913 return m_swapchainKHR == VK_NULL_HANDLE;
1914 }
1915
1916 private:
1917 VkSwapchainKHR m_swapchainKHR;
1918 };
1919 static_assert( sizeof( SwapchainKHR ) == sizeof( VkSwapchainKHR ), "handle and wrapper have different size!" );
1920
1921 class DebugReportCallbackEXT
1922 {
1923 public:
1924 DebugReportCallbackEXT()
1925 : m_debugReportCallbackEXT(VK_NULL_HANDLE)
1926 {}
1927
1928#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1929 DebugReportCallbackEXT(VkDebugReportCallbackEXT debugReportCallbackEXT)
1930 : m_debugReportCallbackEXT(debugReportCallbackEXT)
1931 {}
1932
1933 DebugReportCallbackEXT& operator=(VkDebugReportCallbackEXT debugReportCallbackEXT)
1934 {
1935 m_debugReportCallbackEXT = debugReportCallbackEXT;
1936 return *this;
1937 }
1938#endif
1939
1940#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1941 explicit
1942#endif
1943 operator VkDebugReportCallbackEXT() const
1944 {
1945 return m_debugReportCallbackEXT;
1946 }
1947
1948 explicit operator bool() const
1949 {
1950 return m_debugReportCallbackEXT != VK_NULL_HANDLE;
1951 }
1952
1953 bool operator!() const
1954 {
1955 return m_debugReportCallbackEXT == VK_NULL_HANDLE;
1956 }
1957
1958 private:
1959 VkDebugReportCallbackEXT m_debugReportCallbackEXT;
1960 };
1961 static_assert( sizeof( DebugReportCallbackEXT ) == sizeof( VkDebugReportCallbackEXT ), "handle and wrapper have different size!" );
1962
1963 struct Offset2D
1964 {
1965 Offset2D( int32_t x_ = 0, int32_t y_ = 0 )
1966 : x( x_ )
1967 , y( y_ )
1968 {
1969 }
1970
1971 Offset2D( VkOffset2D const & rhs )
1972 {
1973 memcpy( this, &rhs, sizeof(Offset2D) );
1974 }
1975
1976 Offset2D& operator=( VkOffset2D const & rhs )
1977 {
1978 memcpy( this, &rhs, sizeof(Offset2D) );
1979 return *this;
1980 }
1981
1982 Offset2D& setX( int32_t x_ )
1983 {
1984 x = x_;
1985 return *this;
1986 }
1987
1988 Offset2D& setY( int32_t y_ )
1989 {
1990 y = y_;
1991 return *this;
1992 }
1993
1994 operator const VkOffset2D&() const
1995 {
1996 return *reinterpret_cast<const VkOffset2D*>(this);
1997 }
1998
1999 bool operator==( Offset2D const& rhs ) const
2000 {
2001 return ( x == rhs.x )
2002 && ( y == rhs.y );
2003 }
2004
2005 bool operator!=( Offset2D const& rhs ) const
2006 {
2007 return !operator==( rhs );
2008 }
2009
2010 int32_t x;
2011 int32_t y;
2012 };
2013 static_assert( sizeof( Offset2D ) == sizeof( VkOffset2D ), "struct and wrapper have different size!" );
2014
2015 struct Offset3D
2016 {
2017 Offset3D( int32_t x_ = 0, int32_t y_ = 0, int32_t z_ = 0 )
2018 : x( x_ )
2019 , y( y_ )
2020 , z( z_ )
2021 {
2022 }
2023
2024 Offset3D( VkOffset3D const & rhs )
2025 {
2026 memcpy( this, &rhs, sizeof(Offset3D) );
2027 }
2028
2029 Offset3D& operator=( VkOffset3D const & rhs )
2030 {
2031 memcpy( this, &rhs, sizeof(Offset3D) );
2032 return *this;
2033 }
2034
2035 Offset3D& setX( int32_t x_ )
2036 {
2037 x = x_;
2038 return *this;
2039 }
2040
2041 Offset3D& setY( int32_t y_ )
2042 {
2043 y = y_;
2044 return *this;
2045 }
2046
2047 Offset3D& setZ( int32_t z_ )
2048 {
2049 z = z_;
2050 return *this;
2051 }
2052
2053 operator const VkOffset3D&() const
2054 {
2055 return *reinterpret_cast<const VkOffset3D*>(this);
2056 }
2057
2058 bool operator==( Offset3D const& rhs ) const
2059 {
2060 return ( x == rhs.x )
2061 && ( y == rhs.y )
2062 && ( z == rhs.z );
2063 }
2064
2065 bool operator!=( Offset3D const& rhs ) const
2066 {
2067 return !operator==( rhs );
2068 }
2069
2070 int32_t x;
2071 int32_t y;
2072 int32_t z;
2073 };
2074 static_assert( sizeof( Offset3D ) == sizeof( VkOffset3D ), "struct and wrapper have different size!" );
2075
2076 struct Extent2D
2077 {
2078 Extent2D( uint32_t width_ = 0, uint32_t height_ = 0 )
2079 : width( width_ )
2080 , height( height_ )
2081 {
2082 }
2083
2084 Extent2D( VkExtent2D const & rhs )
2085 {
2086 memcpy( this, &rhs, sizeof(Extent2D) );
2087 }
2088
2089 Extent2D& operator=( VkExtent2D const & rhs )
2090 {
2091 memcpy( this, &rhs, sizeof(Extent2D) );
2092 return *this;
2093 }
2094
2095 Extent2D& setWidth( uint32_t width_ )
2096 {
2097 width = width_;
2098 return *this;
2099 }
2100
2101 Extent2D& setHeight( uint32_t height_ )
2102 {
2103 height = height_;
2104 return *this;
2105 }
2106
2107 operator const VkExtent2D&() const
2108 {
2109 return *reinterpret_cast<const VkExtent2D*>(this);
2110 }
2111
2112 bool operator==( Extent2D const& rhs ) const
2113 {
2114 return ( width == rhs.width )
2115 && ( height == rhs.height );
2116 }
2117
2118 bool operator!=( Extent2D const& rhs ) const
2119 {
2120 return !operator==( rhs );
2121 }
2122
2123 uint32_t width;
2124 uint32_t height;
2125 };
2126 static_assert( sizeof( Extent2D ) == sizeof( VkExtent2D ), "struct and wrapper have different size!" );
2127
2128 struct Extent3D
2129 {
2130 Extent3D( uint32_t width_ = 0, uint32_t height_ = 0, uint32_t depth_ = 0 )
2131 : width( width_ )
2132 , height( height_ )
2133 , depth( depth_ )
2134 {
2135 }
2136
2137 Extent3D( VkExtent3D const & rhs )
2138 {
2139 memcpy( this, &rhs, sizeof(Extent3D) );
2140 }
2141
2142 Extent3D& operator=( VkExtent3D const & rhs )
2143 {
2144 memcpy( this, &rhs, sizeof(Extent3D) );
2145 return *this;
2146 }
2147
2148 Extent3D& setWidth( uint32_t width_ )
2149 {
2150 width = width_;
2151 return *this;
2152 }
2153
2154 Extent3D& setHeight( uint32_t height_ )
2155 {
2156 height = height_;
2157 return *this;
2158 }
2159
2160 Extent3D& setDepth( uint32_t depth_ )
2161 {
2162 depth = depth_;
2163 return *this;
2164 }
2165
2166 operator const VkExtent3D&() const
2167 {
2168 return *reinterpret_cast<const VkExtent3D*>(this);
2169 }
2170
2171 bool operator==( Extent3D const& rhs ) const
2172 {
2173 return ( width == rhs.width )
2174 && ( height == rhs.height )
2175 && ( depth == rhs.depth );
2176 }
2177
2178 bool operator!=( Extent3D const& rhs ) const
2179 {
2180 return !operator==( rhs );
2181 }
2182
2183 uint32_t width;
2184 uint32_t height;
2185 uint32_t depth;
2186 };
2187 static_assert( sizeof( Extent3D ) == sizeof( VkExtent3D ), "struct and wrapper have different size!" );
2188
2189 struct Viewport
2190 {
2191 Viewport( float x_ = 0, float y_ = 0, float width_ = 0, float height_ = 0, float minDepth_ = 0, float maxDepth_ = 0 )
2192 : x( x_ )
2193 , y( y_ )
2194 , width( width_ )
2195 , height( height_ )
2196 , minDepth( minDepth_ )
2197 , maxDepth( maxDepth_ )
2198 {
2199 }
2200
2201 Viewport( VkViewport const & rhs )
2202 {
2203 memcpy( this, &rhs, sizeof(Viewport) );
2204 }
2205
2206 Viewport& operator=( VkViewport const & rhs )
2207 {
2208 memcpy( this, &rhs, sizeof(Viewport) );
2209 return *this;
2210 }
2211
2212 Viewport& setX( float x_ )
2213 {
2214 x = x_;
2215 return *this;
2216 }
2217
2218 Viewport& setY( float y_ )
2219 {
2220 y = y_;
2221 return *this;
2222 }
2223
2224 Viewport& setWidth( float width_ )
2225 {
2226 width = width_;
2227 return *this;
2228 }
2229
2230 Viewport& setHeight( float height_ )
2231 {
2232 height = height_;
2233 return *this;
2234 }
2235
2236 Viewport& setMinDepth( float minDepth_ )
2237 {
2238 minDepth = minDepth_;
2239 return *this;
2240 }
2241
2242 Viewport& setMaxDepth( float maxDepth_ )
2243 {
2244 maxDepth = maxDepth_;
2245 return *this;
2246 }
2247
2248 operator const VkViewport&() const
2249 {
2250 return *reinterpret_cast<const VkViewport*>(this);
2251 }
2252
2253 bool operator==( Viewport const& rhs ) const
2254 {
2255 return ( x == rhs.x )
2256 && ( y == rhs.y )
2257 && ( width == rhs.width )
2258 && ( height == rhs.height )
2259 && ( minDepth == rhs.minDepth )
2260 && ( maxDepth == rhs.maxDepth );
2261 }
2262
2263 bool operator!=( Viewport const& rhs ) const
2264 {
2265 return !operator==( rhs );
2266 }
2267
2268 float x;
2269 float y;
2270 float width;
2271 float height;
2272 float minDepth;
2273 float maxDepth;
2274 };
2275 static_assert( sizeof( Viewport ) == sizeof( VkViewport ), "struct and wrapper have different size!" );
2276
2277 struct Rect2D
2278 {
2279 Rect2D( Offset2D offset_ = Offset2D(), Extent2D extent_ = Extent2D() )
2280 : offset( offset_ )
2281 , extent( extent_ )
2282 {
2283 }
2284
2285 Rect2D( VkRect2D const & rhs )
2286 {
2287 memcpy( this, &rhs, sizeof(Rect2D) );
2288 }
2289
2290 Rect2D& operator=( VkRect2D const & rhs )
2291 {
2292 memcpy( this, &rhs, sizeof(Rect2D) );
2293 return *this;
2294 }
2295
2296 Rect2D& setOffset( Offset2D offset_ )
2297 {
2298 offset = offset_;
2299 return *this;
2300 }
2301
2302 Rect2D& setExtent( Extent2D extent_ )
2303 {
2304 extent = extent_;
2305 return *this;
2306 }
2307
2308 operator const VkRect2D&() const
2309 {
2310 return *reinterpret_cast<const VkRect2D*>(this);
2311 }
2312
2313 bool operator==( Rect2D const& rhs ) const
2314 {
2315 return ( offset == rhs.offset )
2316 && ( extent == rhs.extent );
2317 }
2318
2319 bool operator!=( Rect2D const& rhs ) const
2320 {
2321 return !operator==( rhs );
2322 }
2323
2324 Offset2D offset;
2325 Extent2D extent;
2326 };
2327 static_assert( sizeof( Rect2D ) == sizeof( VkRect2D ), "struct and wrapper have different size!" );
2328
2329 struct ClearRect
2330 {
2331 ClearRect( Rect2D rect_ = Rect2D(), uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
2332 : rect( rect_ )
2333 , baseArrayLayer( baseArrayLayer_ )
2334 , layerCount( layerCount_ )
2335 {
2336 }
2337
2338 ClearRect( VkClearRect const & rhs )
2339 {
2340 memcpy( this, &rhs, sizeof(ClearRect) );
2341 }
2342
2343 ClearRect& operator=( VkClearRect const & rhs )
2344 {
2345 memcpy( this, &rhs, sizeof(ClearRect) );
2346 return *this;
2347 }
2348
2349 ClearRect& setRect( Rect2D rect_ )
2350 {
2351 rect = rect_;
2352 return *this;
2353 }
2354
2355 ClearRect& setBaseArrayLayer( uint32_t baseArrayLayer_ )
2356 {
2357 baseArrayLayer = baseArrayLayer_;
2358 return *this;
2359 }
2360
2361 ClearRect& setLayerCount( uint32_t layerCount_ )
2362 {
2363 layerCount = layerCount_;
2364 return *this;
2365 }
2366
2367 operator const VkClearRect&() const
2368 {
2369 return *reinterpret_cast<const VkClearRect*>(this);
2370 }
2371
2372 bool operator==( ClearRect const& rhs ) const
2373 {
2374 return ( rect == rhs.rect )
2375 && ( baseArrayLayer == rhs.baseArrayLayer )
2376 && ( layerCount == rhs.layerCount );
2377 }
2378
2379 bool operator!=( ClearRect const& rhs ) const
2380 {
2381 return !operator==( rhs );
2382 }
2383
2384 Rect2D rect;
2385 uint32_t baseArrayLayer;
2386 uint32_t layerCount;
2387 };
2388 static_assert( sizeof( ClearRect ) == sizeof( VkClearRect ), "struct and wrapper have different size!" );
2389
2390 struct ExtensionProperties
2391 {
2392 operator const VkExtensionProperties&() const
2393 {
2394 return *reinterpret_cast<const VkExtensionProperties*>(this);
2395 }
2396
2397 bool operator==( ExtensionProperties const& rhs ) const
2398 {
2399 return ( memcmp( extensionName, rhs.extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
2400 && ( specVersion == rhs.specVersion );
2401 }
2402
2403 bool operator!=( ExtensionProperties const& rhs ) const
2404 {
2405 return !operator==( rhs );
2406 }
2407
2408 char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
2409 uint32_t specVersion;
2410 };
2411 static_assert( sizeof( ExtensionProperties ) == sizeof( VkExtensionProperties ), "struct and wrapper have different size!" );
2412
2413 struct LayerProperties
2414 {
2415 operator const VkLayerProperties&() const
2416 {
2417 return *reinterpret_cast<const VkLayerProperties*>(this);
2418 }
2419
2420 bool operator==( LayerProperties const& rhs ) const
2421 {
2422 return ( memcmp( layerName, rhs.layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
2423 && ( specVersion == rhs.specVersion )
2424 && ( implementationVersion == rhs.implementationVersion )
2425 && ( memcmp( description, rhs.description, VK_MAX_DESCRIPTION_SIZE * sizeof( char ) ) == 0 );
2426 }
2427
2428 bool operator!=( LayerProperties const& rhs ) const
2429 {
2430 return !operator==( rhs );
2431 }
2432
2433 char layerName[VK_MAX_EXTENSION_NAME_SIZE];
2434 uint32_t specVersion;
2435 uint32_t implementationVersion;
2436 char description[VK_MAX_DESCRIPTION_SIZE];
2437 };
2438 static_assert( sizeof( LayerProperties ) == sizeof( VkLayerProperties ), "struct and wrapper have different size!" );
2439
2440 struct AllocationCallbacks
2441 {
2442 AllocationCallbacks( void* pUserData_ = nullptr, PFN_vkAllocationFunction pfnAllocation_ = nullptr, PFN_vkReallocationFunction pfnReallocation_ = nullptr, PFN_vkFreeFunction pfnFree_ = nullptr, PFN_vkInternalAllocationNotification pfnInternalAllocation_ = nullptr, PFN_vkInternalFreeNotification pfnInternalFree_ = nullptr )
2443 : pUserData( pUserData_ )
2444 , pfnAllocation( pfnAllocation_ )
2445 , pfnReallocation( pfnReallocation_ )
2446 , pfnFree( pfnFree_ )
2447 , pfnInternalAllocation( pfnInternalAllocation_ )
2448 , pfnInternalFree( pfnInternalFree_ )
2449 {
2450 }
2451
2452 AllocationCallbacks( VkAllocationCallbacks const & rhs )
2453 {
2454 memcpy( this, &rhs, sizeof(AllocationCallbacks) );
2455 }
2456
2457 AllocationCallbacks& operator=( VkAllocationCallbacks const & rhs )
2458 {
2459 memcpy( this, &rhs, sizeof(AllocationCallbacks) );
2460 return *this;
2461 }
2462
2463 AllocationCallbacks& setPUserData( void* pUserData_ )
2464 {
2465 pUserData = pUserData_;
2466 return *this;
2467 }
2468
2469 AllocationCallbacks& setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ )
2470 {
2471 pfnAllocation = pfnAllocation_;
2472 return *this;
2473 }
2474
2475 AllocationCallbacks& setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ )
2476 {
2477 pfnReallocation = pfnReallocation_;
2478 return *this;
2479 }
2480
2481 AllocationCallbacks& setPfnFree( PFN_vkFreeFunction pfnFree_ )
2482 {
2483 pfnFree = pfnFree_;
2484 return *this;
2485 }
2486
2487 AllocationCallbacks& setPfnInternalAllocation( PFN_vkInternalAllocationNotification pfnInternalAllocation_ )
2488 {
2489 pfnInternalAllocation = pfnInternalAllocation_;
2490 return *this;
2491 }
2492
2493 AllocationCallbacks& setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ )
2494 {
2495 pfnInternalFree = pfnInternalFree_;
2496 return *this;
2497 }
2498
2499 operator const VkAllocationCallbacks&() const
2500 {
2501 return *reinterpret_cast<const VkAllocationCallbacks*>(this);
2502 }
2503
2504 bool operator==( AllocationCallbacks const& rhs ) const
2505 {
2506 return ( pUserData == rhs.pUserData )
2507 && ( pfnAllocation == rhs.pfnAllocation )
2508 && ( pfnReallocation == rhs.pfnReallocation )
2509 && ( pfnFree == rhs.pfnFree )
2510 && ( pfnInternalAllocation == rhs.pfnInternalAllocation )
2511 && ( pfnInternalFree == rhs.pfnInternalFree );
2512 }
2513
2514 bool operator!=( AllocationCallbacks const& rhs ) const
2515 {
2516 return !operator==( rhs );
2517 }
2518
2519 void* pUserData;
2520 PFN_vkAllocationFunction pfnAllocation;
2521 PFN_vkReallocationFunction pfnReallocation;
2522 PFN_vkFreeFunction pfnFree;
2523 PFN_vkInternalAllocationNotification pfnInternalAllocation;
2524 PFN_vkInternalFreeNotification pfnInternalFree;
2525 };
2526 static_assert( sizeof( AllocationCallbacks ) == sizeof( VkAllocationCallbacks ), "struct and wrapper have different size!" );
2527
2528 struct MemoryRequirements
2529 {
2530 operator const VkMemoryRequirements&() const
2531 {
2532 return *reinterpret_cast<const VkMemoryRequirements*>(this);
2533 }
2534
2535 bool operator==( MemoryRequirements const& rhs ) const
2536 {
2537 return ( size == rhs.size )
2538 && ( alignment == rhs.alignment )
2539 && ( memoryTypeBits == rhs.memoryTypeBits );
2540 }
2541
2542 bool operator!=( MemoryRequirements const& rhs ) const
2543 {
2544 return !operator==( rhs );
2545 }
2546
2547 DeviceSize size;
2548 DeviceSize alignment;
2549 uint32_t memoryTypeBits;
2550 };
2551 static_assert( sizeof( MemoryRequirements ) == sizeof( VkMemoryRequirements ), "struct and wrapper have different size!" );
2552
2553 struct DescriptorBufferInfo
2554 {
2555 DescriptorBufferInfo( Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize range_ = 0 )
2556 : buffer( buffer_ )
2557 , offset( offset_ )
2558 , range( range_ )
2559 {
2560 }
2561
2562 DescriptorBufferInfo( VkDescriptorBufferInfo const & rhs )
2563 {
2564 memcpy( this, &rhs, sizeof(DescriptorBufferInfo) );
2565 }
2566
2567 DescriptorBufferInfo& operator=( VkDescriptorBufferInfo const & rhs )
2568 {
2569 memcpy( this, &rhs, sizeof(DescriptorBufferInfo) );
2570 return *this;
2571 }
2572
2573 DescriptorBufferInfo& setBuffer( Buffer buffer_ )
2574 {
2575 buffer = buffer_;
2576 return *this;
2577 }
2578
2579 DescriptorBufferInfo& setOffset( DeviceSize offset_ )
2580 {
2581 offset = offset_;
2582 return *this;
2583 }
2584
2585 DescriptorBufferInfo& setRange( DeviceSize range_ )
2586 {
2587 range = range_;
2588 return *this;
2589 }
2590
2591 operator const VkDescriptorBufferInfo&() const
2592 {
2593 return *reinterpret_cast<const VkDescriptorBufferInfo*>(this);
2594 }
2595
2596 bool operator==( DescriptorBufferInfo const& rhs ) const
2597 {
2598 return ( buffer == rhs.buffer )
2599 && ( offset == rhs.offset )
2600 && ( range == rhs.range );
2601 }
2602
2603 bool operator!=( DescriptorBufferInfo const& rhs ) const
2604 {
2605 return !operator==( rhs );
2606 }
2607
2608 Buffer buffer;
2609 DeviceSize offset;
2610 DeviceSize range;
2611 };
2612 static_assert( sizeof( DescriptorBufferInfo ) == sizeof( VkDescriptorBufferInfo ), "struct and wrapper have different size!" );
2613
2614 struct SubresourceLayout
2615 {
2616 operator const VkSubresourceLayout&() const
2617 {
2618 return *reinterpret_cast<const VkSubresourceLayout*>(this);
2619 }
2620
2621 bool operator==( SubresourceLayout const& rhs ) const
2622 {
2623 return ( offset == rhs.offset )
2624 && ( size == rhs.size )
2625 && ( rowPitch == rhs.rowPitch )
2626 && ( arrayPitch == rhs.arrayPitch )
2627 && ( depthPitch == rhs.depthPitch );
2628 }
2629
2630 bool operator!=( SubresourceLayout const& rhs ) const
2631 {
2632 return !operator==( rhs );
2633 }
2634
2635 DeviceSize offset;
2636 DeviceSize size;
2637 DeviceSize rowPitch;
2638 DeviceSize arrayPitch;
2639 DeviceSize depthPitch;
2640 };
2641 static_assert( sizeof( SubresourceLayout ) == sizeof( VkSubresourceLayout ), "struct and wrapper have different size!" );
2642
2643 struct BufferCopy
2644 {
2645 BufferCopy( DeviceSize srcOffset_ = 0, DeviceSize dstOffset_ = 0, DeviceSize size_ = 0 )
2646 : srcOffset( srcOffset_ )
2647 , dstOffset( dstOffset_ )
2648 , size( size_ )
2649 {
2650 }
2651
2652 BufferCopy( VkBufferCopy const & rhs )
2653 {
2654 memcpy( this, &rhs, sizeof(BufferCopy) );
2655 }
2656
2657 BufferCopy& operator=( VkBufferCopy const & rhs )
2658 {
2659 memcpy( this, &rhs, sizeof(BufferCopy) );
2660 return *this;
2661 }
2662
2663 BufferCopy& setSrcOffset( DeviceSize srcOffset_ )
2664 {
2665 srcOffset = srcOffset_;
2666 return *this;
2667 }
2668
2669 BufferCopy& setDstOffset( DeviceSize dstOffset_ )
2670 {
2671 dstOffset = dstOffset_;
2672 return *this;
2673 }
2674
2675 BufferCopy& setSize( DeviceSize size_ )
2676 {
2677 size = size_;
2678 return *this;
2679 }
2680
2681 operator const VkBufferCopy&() const
2682 {
2683 return *reinterpret_cast<const VkBufferCopy*>(this);
2684 }
2685
2686 bool operator==( BufferCopy const& rhs ) const
2687 {
2688 return ( srcOffset == rhs.srcOffset )
2689 && ( dstOffset == rhs.dstOffset )
2690 && ( size == rhs.size );
2691 }
2692
2693 bool operator!=( BufferCopy const& rhs ) const
2694 {
2695 return !operator==( rhs );
2696 }
2697
2698 DeviceSize srcOffset;
2699 DeviceSize dstOffset;
2700 DeviceSize size;
2701 };
2702 static_assert( sizeof( BufferCopy ) == sizeof( VkBufferCopy ), "struct and wrapper have different size!" );
2703
2704 struct SpecializationMapEntry
2705 {
2706 SpecializationMapEntry( uint32_t constantID_ = 0, uint32_t offset_ = 0, size_t size_ = 0 )
2707 : constantID( constantID_ )
2708 , offset( offset_ )
2709 , size( size_ )
2710 {
2711 }
2712
2713 SpecializationMapEntry( VkSpecializationMapEntry const & rhs )
2714 {
2715 memcpy( this, &rhs, sizeof(SpecializationMapEntry) );
2716 }
2717
2718 SpecializationMapEntry& operator=( VkSpecializationMapEntry const & rhs )
2719 {
2720 memcpy( this, &rhs, sizeof(SpecializationMapEntry) );
2721 return *this;
2722 }
2723
2724 SpecializationMapEntry& setConstantID( uint32_t constantID_ )
2725 {
2726 constantID = constantID_;
2727 return *this;
2728 }
2729
2730 SpecializationMapEntry& setOffset( uint32_t offset_ )
2731 {
2732 offset = offset_;
2733 return *this;
2734 }
2735
2736 SpecializationMapEntry& setSize( size_t size_ )
2737 {
2738 size = size_;
2739 return *this;
2740 }
2741
2742 operator const VkSpecializationMapEntry&() const
2743 {
2744 return *reinterpret_cast<const VkSpecializationMapEntry*>(this);
2745 }
2746
2747 bool operator==( SpecializationMapEntry const& rhs ) const
2748 {
2749 return ( constantID == rhs.constantID )
2750 && ( offset == rhs.offset )
2751 && ( size == rhs.size );
2752 }
2753
2754 bool operator!=( SpecializationMapEntry const& rhs ) const
2755 {
2756 return !operator==( rhs );
2757 }
2758
2759 uint32_t constantID;
2760 uint32_t offset;
2761 size_t size;
2762 };
2763 static_assert( sizeof( SpecializationMapEntry ) == sizeof( VkSpecializationMapEntry ), "struct and wrapper have different size!" );
2764
2765 struct SpecializationInfo
2766 {
2767 SpecializationInfo( uint32_t mapEntryCount_ = 0, const SpecializationMapEntry* pMapEntries_ = nullptr, size_t dataSize_ = 0, const void* pData_ = nullptr )
2768 : mapEntryCount( mapEntryCount_ )
2769 , pMapEntries( pMapEntries_ )
2770 , dataSize( dataSize_ )
2771 , pData( pData_ )
2772 {
2773 }
2774
2775 SpecializationInfo( VkSpecializationInfo const & rhs )
2776 {
2777 memcpy( this, &rhs, sizeof(SpecializationInfo) );
2778 }
2779
2780 SpecializationInfo& operator=( VkSpecializationInfo const & rhs )
2781 {
2782 memcpy( this, &rhs, sizeof(SpecializationInfo) );
2783 return *this;
2784 }
2785
2786 SpecializationInfo& setMapEntryCount( uint32_t mapEntryCount_ )
2787 {
2788 mapEntryCount = mapEntryCount_;
2789 return *this;
2790 }
2791
2792 SpecializationInfo& setPMapEntries( const SpecializationMapEntry* pMapEntries_ )
2793 {
2794 pMapEntries = pMapEntries_;
2795 return *this;
2796 }
2797
2798 SpecializationInfo& setDataSize( size_t dataSize_ )
2799 {
2800 dataSize = dataSize_;
2801 return *this;
2802 }
2803
2804 SpecializationInfo& setPData( const void* pData_ )
2805 {
2806 pData = pData_;
2807 return *this;
2808 }
2809
2810 operator const VkSpecializationInfo&() const
2811 {
2812 return *reinterpret_cast<const VkSpecializationInfo*>(this);
2813 }
2814
2815 bool operator==( SpecializationInfo const& rhs ) const
2816 {
2817 return ( mapEntryCount == rhs.mapEntryCount )
2818 && ( pMapEntries == rhs.pMapEntries )
2819 && ( dataSize == rhs.dataSize )
2820 && ( pData == rhs.pData );
2821 }
2822
2823 bool operator!=( SpecializationInfo const& rhs ) const
2824 {
2825 return !operator==( rhs );
2826 }
2827
2828 uint32_t mapEntryCount;
2829 const SpecializationMapEntry* pMapEntries;
2830 size_t dataSize;
2831 const void* pData;
2832 };
2833 static_assert( sizeof( SpecializationInfo ) == sizeof( VkSpecializationInfo ), "struct and wrapper have different size!" );
2834
2835 union ClearColorValue
2836 {
2837 ClearColorValue( const std::array<float,4>& float32_ = { {0} } )
2838 {
2839 memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
2840 }
2841
2842 ClearColorValue( const std::array<int32_t,4>& int32_ )
2843 {
2844 memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
2845 }
2846
2847 ClearColorValue( const std::array<uint32_t,4>& uint32_ )
2848 {
2849 memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
2850 }
2851
2852 ClearColorValue& setFloat32( std::array<float,4> float32_ )
2853 {
2854 memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
2855 return *this;
2856 }
2857
2858 ClearColorValue& setInt32( std::array<int32_t,4> int32_ )
2859 {
2860 memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
2861 return *this;
2862 }
2863
2864 ClearColorValue& setUint32( std::array<uint32_t,4> uint32_ )
2865 {
2866 memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
2867 return *this;
2868 }
2869
2870 operator VkClearColorValue const& () const
2871 {
2872 return *reinterpret_cast<const VkClearColorValue*>(this);
2873 }
2874
2875 float float32[4];
2876 int32_t int32[4];
2877 uint32_t uint32[4];
2878 };
2879
2880 struct ClearDepthStencilValue
2881 {
2882 ClearDepthStencilValue( float depth_ = 0, uint32_t stencil_ = 0 )
2883 : depth( depth_ )
2884 , stencil( stencil_ )
2885 {
2886 }
2887
2888 ClearDepthStencilValue( VkClearDepthStencilValue const & rhs )
2889 {
2890 memcpy( this, &rhs, sizeof(ClearDepthStencilValue) );
2891 }
2892
2893 ClearDepthStencilValue& operator=( VkClearDepthStencilValue const & rhs )
2894 {
2895 memcpy( this, &rhs, sizeof(ClearDepthStencilValue) );
2896 return *this;
2897 }
2898
2899 ClearDepthStencilValue& setDepth( float depth_ )
2900 {
2901 depth = depth_;
2902 return *this;
2903 }
2904
2905 ClearDepthStencilValue& setStencil( uint32_t stencil_ )
2906 {
2907 stencil = stencil_;
2908 return *this;
2909 }
2910
2911 operator const VkClearDepthStencilValue&() const
2912 {
2913 return *reinterpret_cast<const VkClearDepthStencilValue*>(this);
2914 }
2915
2916 bool operator==( ClearDepthStencilValue const& rhs ) const
2917 {
2918 return ( depth == rhs.depth )
2919 && ( stencil == rhs.stencil );
2920 }
2921
2922 bool operator!=( ClearDepthStencilValue const& rhs ) const
2923 {
2924 return !operator==( rhs );
2925 }
2926
2927 float depth;
2928 uint32_t stencil;
2929 };
2930 static_assert( sizeof( ClearDepthStencilValue ) == sizeof( VkClearDepthStencilValue ), "struct and wrapper have different size!" );
2931
2932 union ClearValue
2933 {
2934 ClearValue( ClearColorValue color_ = ClearColorValue() )
2935 {
2936 color = color_;
2937 }
2938
2939 ClearValue( ClearDepthStencilValue depthStencil_ )
2940 {
2941 depthStencil = depthStencil_;
2942 }
2943
2944 ClearValue& setColor( ClearColorValue color_ )
2945 {
2946 color = color_;
2947 return *this;
2948 }
2949
2950 ClearValue& setDepthStencil( ClearDepthStencilValue depthStencil_ )
2951 {
2952 depthStencil = depthStencil_;
2953 return *this;
2954 }
2955
2956 operator VkClearValue const& () const
2957 {
2958 return *reinterpret_cast<const VkClearValue*>(this);
2959 }
2960
2961#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
2962 ClearColorValue color;
2963 ClearDepthStencilValue depthStencil;
2964#else
2965 VkClearColorValue color;
2966 VkClearDepthStencilValue depthStencil;
2967#endif // VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
2968 };
2969
2970 struct PhysicalDeviceFeatures
2971 {
2972 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 )
2973 : robustBufferAccess( robustBufferAccess_ )
2974 , fullDrawIndexUint32( fullDrawIndexUint32_ )
2975 , imageCubeArray( imageCubeArray_ )
2976 , independentBlend( independentBlend_ )
2977 , geometryShader( geometryShader_ )
2978 , tessellationShader( tessellationShader_ )
2979 , sampleRateShading( sampleRateShading_ )
2980 , dualSrcBlend( dualSrcBlend_ )
2981 , logicOp( logicOp_ )
2982 , multiDrawIndirect( multiDrawIndirect_ )
2983 , drawIndirectFirstInstance( drawIndirectFirstInstance_ )
2984 , depthClamp( depthClamp_ )
2985 , depthBiasClamp( depthBiasClamp_ )
2986 , fillModeNonSolid( fillModeNonSolid_ )
2987 , depthBounds( depthBounds_ )
2988 , wideLines( wideLines_ )
2989 , largePoints( largePoints_ )
2990 , alphaToOne( alphaToOne_ )
2991 , multiViewport( multiViewport_ )
2992 , samplerAnisotropy( samplerAnisotropy_ )
2993 , textureCompressionETC2( textureCompressionETC2_ )
2994 , textureCompressionASTC_LDR( textureCompressionASTC_LDR_ )
2995 , textureCompressionBC( textureCompressionBC_ )
2996 , occlusionQueryPrecise( occlusionQueryPrecise_ )
2997 , pipelineStatisticsQuery( pipelineStatisticsQuery_ )
2998 , vertexPipelineStoresAndAtomics( vertexPipelineStoresAndAtomics_ )
2999 , fragmentStoresAndAtomics( fragmentStoresAndAtomics_ )
3000 , shaderTessellationAndGeometryPointSize( shaderTessellationAndGeometryPointSize_ )
3001 , shaderImageGatherExtended( shaderImageGatherExtended_ )
3002 , shaderStorageImageExtendedFormats( shaderStorageImageExtendedFormats_ )
3003 , shaderStorageImageMultisample( shaderStorageImageMultisample_ )
3004 , shaderStorageImageReadWithoutFormat( shaderStorageImageReadWithoutFormat_ )
3005 , shaderStorageImageWriteWithoutFormat( shaderStorageImageWriteWithoutFormat_ )
3006 , shaderUniformBufferArrayDynamicIndexing( shaderUniformBufferArrayDynamicIndexing_ )
3007 , shaderSampledImageArrayDynamicIndexing( shaderSampledImageArrayDynamicIndexing_ )
3008 , shaderStorageBufferArrayDynamicIndexing( shaderStorageBufferArrayDynamicIndexing_ )
3009 , shaderStorageImageArrayDynamicIndexing( shaderStorageImageArrayDynamicIndexing_ )
3010 , shaderClipDistance( shaderClipDistance_ )
3011 , shaderCullDistance( shaderCullDistance_ )
3012 , shaderFloat64( shaderFloat64_ )
3013 , shaderInt64( shaderInt64_ )
3014 , shaderInt16( shaderInt16_ )
3015 , shaderResourceResidency( shaderResourceResidency_ )
3016 , shaderResourceMinLod( shaderResourceMinLod_ )
3017 , sparseBinding( sparseBinding_ )
3018 , sparseResidencyBuffer( sparseResidencyBuffer_ )
3019 , sparseResidencyImage2D( sparseResidencyImage2D_ )
3020 , sparseResidencyImage3D( sparseResidencyImage3D_ )
3021 , sparseResidency2Samples( sparseResidency2Samples_ )
3022 , sparseResidency4Samples( sparseResidency4Samples_ )
3023 , sparseResidency8Samples( sparseResidency8Samples_ )
3024 , sparseResidency16Samples( sparseResidency16Samples_ )
3025 , sparseResidencyAliased( sparseResidencyAliased_ )
3026 , variableMultisampleRate( variableMultisampleRate_ )
3027 , inheritedQueries( inheritedQueries_ )
3028 {
3029 }
3030
3031 PhysicalDeviceFeatures( VkPhysicalDeviceFeatures const & rhs )
3032 {
3033 memcpy( this, &rhs, sizeof(PhysicalDeviceFeatures) );
3034 }
3035
3036 PhysicalDeviceFeatures& operator=( VkPhysicalDeviceFeatures const & rhs )
3037 {
3038 memcpy( this, &rhs, sizeof(PhysicalDeviceFeatures) );
3039 return *this;
3040 }
3041
3042 PhysicalDeviceFeatures& setRobustBufferAccess( Bool32 robustBufferAccess_ )
3043 {
3044 robustBufferAccess = robustBufferAccess_;
3045 return *this;
3046 }
3047
3048 PhysicalDeviceFeatures& setFullDrawIndexUint32( Bool32 fullDrawIndexUint32_ )
3049 {
3050 fullDrawIndexUint32 = fullDrawIndexUint32_;
3051 return *this;
3052 }
3053
3054 PhysicalDeviceFeatures& setImageCubeArray( Bool32 imageCubeArray_ )
3055 {
3056 imageCubeArray = imageCubeArray_;
3057 return *this;
3058 }
3059
3060 PhysicalDeviceFeatures& setIndependentBlend( Bool32 independentBlend_ )
3061 {
3062 independentBlend = independentBlend_;
3063 return *this;
3064 }
3065
3066 PhysicalDeviceFeatures& setGeometryShader( Bool32 geometryShader_ )
3067 {
3068 geometryShader = geometryShader_;
3069 return *this;
3070 }
3071
3072 PhysicalDeviceFeatures& setTessellationShader( Bool32 tessellationShader_ )
3073 {
3074 tessellationShader = tessellationShader_;
3075 return *this;
3076 }
3077
3078 PhysicalDeviceFeatures& setSampleRateShading( Bool32 sampleRateShading_ )
3079 {
3080 sampleRateShading = sampleRateShading_;
3081 return *this;
3082 }
3083
3084 PhysicalDeviceFeatures& setDualSrcBlend( Bool32 dualSrcBlend_ )
3085 {
3086 dualSrcBlend = dualSrcBlend_;
3087 return *this;
3088 }
3089
3090 PhysicalDeviceFeatures& setLogicOp( Bool32 logicOp_ )
3091 {
3092 logicOp = logicOp_;
3093 return *this;
3094 }
3095
3096 PhysicalDeviceFeatures& setMultiDrawIndirect( Bool32 multiDrawIndirect_ )
3097 {
3098 multiDrawIndirect = multiDrawIndirect_;
3099 return *this;
3100 }
3101
3102 PhysicalDeviceFeatures& setDrawIndirectFirstInstance( Bool32 drawIndirectFirstInstance_ )
3103 {
3104 drawIndirectFirstInstance = drawIndirectFirstInstance_;
3105 return *this;
3106 }
3107
3108 PhysicalDeviceFeatures& setDepthClamp( Bool32 depthClamp_ )
3109 {
3110 depthClamp = depthClamp_;
3111 return *this;
3112 }
3113
3114 PhysicalDeviceFeatures& setDepthBiasClamp( Bool32 depthBiasClamp_ )
3115 {
3116 depthBiasClamp = depthBiasClamp_;
3117 return *this;
3118 }
3119
3120 PhysicalDeviceFeatures& setFillModeNonSolid( Bool32 fillModeNonSolid_ )
3121 {
3122 fillModeNonSolid = fillModeNonSolid_;
3123 return *this;
3124 }
3125
3126 PhysicalDeviceFeatures& setDepthBounds( Bool32 depthBounds_ )
3127 {
3128 depthBounds = depthBounds_;
3129 return *this;
3130 }
3131
3132 PhysicalDeviceFeatures& setWideLines( Bool32 wideLines_ )
3133 {
3134 wideLines = wideLines_;
3135 return *this;
3136 }
3137
3138 PhysicalDeviceFeatures& setLargePoints( Bool32 largePoints_ )
3139 {
3140 largePoints = largePoints_;
3141 return *this;
3142 }
3143
3144 PhysicalDeviceFeatures& setAlphaToOne( Bool32 alphaToOne_ )
3145 {
3146 alphaToOne = alphaToOne_;
3147 return *this;
3148 }
3149
3150 PhysicalDeviceFeatures& setMultiViewport( Bool32 multiViewport_ )
3151 {
3152 multiViewport = multiViewport_;
3153 return *this;
3154 }
3155
3156 PhysicalDeviceFeatures& setSamplerAnisotropy( Bool32 samplerAnisotropy_ )
3157 {
3158 samplerAnisotropy = samplerAnisotropy_;
3159 return *this;
3160 }
3161
3162 PhysicalDeviceFeatures& setTextureCompressionETC2( Bool32 textureCompressionETC2_ )
3163 {
3164 textureCompressionETC2 = textureCompressionETC2_;
3165 return *this;
3166 }
3167
3168 PhysicalDeviceFeatures& setTextureCompressionASTC_LDR( Bool32 textureCompressionASTC_LDR_ )
3169 {
3170 textureCompressionASTC_LDR = textureCompressionASTC_LDR_;
3171 return *this;
3172 }
3173
3174 PhysicalDeviceFeatures& setTextureCompressionBC( Bool32 textureCompressionBC_ )
3175 {
3176 textureCompressionBC = textureCompressionBC_;
3177 return *this;
3178 }
3179
3180 PhysicalDeviceFeatures& setOcclusionQueryPrecise( Bool32 occlusionQueryPrecise_ )
3181 {
3182 occlusionQueryPrecise = occlusionQueryPrecise_;
3183 return *this;
3184 }
3185
3186 PhysicalDeviceFeatures& setPipelineStatisticsQuery( Bool32 pipelineStatisticsQuery_ )
3187 {
3188 pipelineStatisticsQuery = pipelineStatisticsQuery_;
3189 return *this;
3190 }
3191
3192 PhysicalDeviceFeatures& setVertexPipelineStoresAndAtomics( Bool32 vertexPipelineStoresAndAtomics_ )
3193 {
3194 vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics_;
3195 return *this;
3196 }
3197
3198 PhysicalDeviceFeatures& setFragmentStoresAndAtomics( Bool32 fragmentStoresAndAtomics_ )
3199 {
3200 fragmentStoresAndAtomics = fragmentStoresAndAtomics_;
3201 return *this;
3202 }
3203
3204 PhysicalDeviceFeatures& setShaderTessellationAndGeometryPointSize( Bool32 shaderTessellationAndGeometryPointSize_ )
3205 {
3206 shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize_;
3207 return *this;
3208 }
3209
3210 PhysicalDeviceFeatures& setShaderImageGatherExtended( Bool32 shaderImageGatherExtended_ )
3211 {
3212 shaderImageGatherExtended = shaderImageGatherExtended_;
3213 return *this;
3214 }
3215
3216 PhysicalDeviceFeatures& setShaderStorageImageExtendedFormats( Bool32 shaderStorageImageExtendedFormats_ )
3217 {
3218 shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats_;
3219 return *this;
3220 }
3221
3222 PhysicalDeviceFeatures& setShaderStorageImageMultisample( Bool32 shaderStorageImageMultisample_ )
3223 {
3224 shaderStorageImageMultisample = shaderStorageImageMultisample_;
3225 return *this;
3226 }
3227
3228 PhysicalDeviceFeatures& setShaderStorageImageReadWithoutFormat( Bool32 shaderStorageImageReadWithoutFormat_ )
3229 {
3230 shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat_;
3231 return *this;
3232 }
3233
3234 PhysicalDeviceFeatures& setShaderStorageImageWriteWithoutFormat( Bool32 shaderStorageImageWriteWithoutFormat_ )
3235 {
3236 shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat_;
3237 return *this;
3238 }
3239
3240 PhysicalDeviceFeatures& setShaderUniformBufferArrayDynamicIndexing( Bool32 shaderUniformBufferArrayDynamicIndexing_ )
3241 {
3242 shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing_;
3243 return *this;
3244 }
3245
3246 PhysicalDeviceFeatures& setShaderSampledImageArrayDynamicIndexing( Bool32 shaderSampledImageArrayDynamicIndexing_ )
3247 {
3248 shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing_;
3249 return *this;
3250 }
3251
3252 PhysicalDeviceFeatures& setShaderStorageBufferArrayDynamicIndexing( Bool32 shaderStorageBufferArrayDynamicIndexing_ )
3253 {
3254 shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing_;
3255 return *this;
3256 }
3257
3258 PhysicalDeviceFeatures& setShaderStorageImageArrayDynamicIndexing( Bool32 shaderStorageImageArrayDynamicIndexing_ )
3259 {
3260 shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing_;
3261 return *this;
3262 }
3263
3264 PhysicalDeviceFeatures& setShaderClipDistance( Bool32 shaderClipDistance_ )
3265 {
3266 shaderClipDistance = shaderClipDistance_;
3267 return *this;
3268 }
3269
3270 PhysicalDeviceFeatures& setShaderCullDistance( Bool32 shaderCullDistance_ )
3271 {
3272 shaderCullDistance = shaderCullDistance_;
3273 return *this;
3274 }
3275
3276 PhysicalDeviceFeatures& setShaderFloat64( Bool32 shaderFloat64_ )
3277 {
3278 shaderFloat64 = shaderFloat64_;
3279 return *this;
3280 }
3281
3282 PhysicalDeviceFeatures& setShaderInt64( Bool32 shaderInt64_ )
3283 {
3284 shaderInt64 = shaderInt64_;
3285 return *this;
3286 }
3287
3288 PhysicalDeviceFeatures& setShaderInt16( Bool32 shaderInt16_ )
3289 {
3290 shaderInt16 = shaderInt16_;
3291 return *this;
3292 }
3293
3294 PhysicalDeviceFeatures& setShaderResourceResidency( Bool32 shaderResourceResidency_ )
3295 {
3296 shaderResourceResidency = shaderResourceResidency_;
3297 return *this;
3298 }
3299
3300 PhysicalDeviceFeatures& setShaderResourceMinLod( Bool32 shaderResourceMinLod_ )
3301 {
3302 shaderResourceMinLod = shaderResourceMinLod_;
3303 return *this;
3304 }
3305
3306 PhysicalDeviceFeatures& setSparseBinding( Bool32 sparseBinding_ )
3307 {
3308 sparseBinding = sparseBinding_;
3309 return *this;
3310 }
3311
3312 PhysicalDeviceFeatures& setSparseResidencyBuffer( Bool32 sparseResidencyBuffer_ )
3313 {
3314 sparseResidencyBuffer = sparseResidencyBuffer_;
3315 return *this;
3316 }
3317
3318 PhysicalDeviceFeatures& setSparseResidencyImage2D( Bool32 sparseResidencyImage2D_ )
3319 {
3320 sparseResidencyImage2D = sparseResidencyImage2D_;
3321 return *this;
3322 }
3323
3324 PhysicalDeviceFeatures& setSparseResidencyImage3D( Bool32 sparseResidencyImage3D_ )
3325 {
3326 sparseResidencyImage3D = sparseResidencyImage3D_;
3327 return *this;
3328 }
3329
3330 PhysicalDeviceFeatures& setSparseResidency2Samples( Bool32 sparseResidency2Samples_ )
3331 {
3332 sparseResidency2Samples = sparseResidency2Samples_;
3333 return *this;
3334 }
3335
3336 PhysicalDeviceFeatures& setSparseResidency4Samples( Bool32 sparseResidency4Samples_ )
3337 {
3338 sparseResidency4Samples = sparseResidency4Samples_;
3339 return *this;
3340 }
3341
3342 PhysicalDeviceFeatures& setSparseResidency8Samples( Bool32 sparseResidency8Samples_ )
3343 {
3344 sparseResidency8Samples = sparseResidency8Samples_;
3345 return *this;
3346 }
3347
3348 PhysicalDeviceFeatures& setSparseResidency16Samples( Bool32 sparseResidency16Samples_ )
3349 {
3350 sparseResidency16Samples = sparseResidency16Samples_;
3351 return *this;
3352 }
3353
3354 PhysicalDeviceFeatures& setSparseResidencyAliased( Bool32 sparseResidencyAliased_ )
3355 {
3356 sparseResidencyAliased = sparseResidencyAliased_;
3357 return *this;
3358 }
3359
3360 PhysicalDeviceFeatures& setVariableMultisampleRate( Bool32 variableMultisampleRate_ )
3361 {
3362 variableMultisampleRate = variableMultisampleRate_;
3363 return *this;
3364 }
3365
3366 PhysicalDeviceFeatures& setInheritedQueries( Bool32 inheritedQueries_ )
3367 {
3368 inheritedQueries = inheritedQueries_;
3369 return *this;
3370 }
3371
3372 operator const VkPhysicalDeviceFeatures&() const
3373 {
3374 return *reinterpret_cast<const VkPhysicalDeviceFeatures*>(this);
3375 }
3376
3377 bool operator==( PhysicalDeviceFeatures const& rhs ) const
3378 {
3379 return ( robustBufferAccess == rhs.robustBufferAccess )
3380 && ( fullDrawIndexUint32 == rhs.fullDrawIndexUint32 )
3381 && ( imageCubeArray == rhs.imageCubeArray )
3382 && ( independentBlend == rhs.independentBlend )
3383 && ( geometryShader == rhs.geometryShader )
3384 && ( tessellationShader == rhs.tessellationShader )
3385 && ( sampleRateShading == rhs.sampleRateShading )
3386 && ( dualSrcBlend == rhs.dualSrcBlend )
3387 && ( logicOp == rhs.logicOp )
3388 && ( multiDrawIndirect == rhs.multiDrawIndirect )
3389 && ( drawIndirectFirstInstance == rhs.drawIndirectFirstInstance )
3390 && ( depthClamp == rhs.depthClamp )
3391 && ( depthBiasClamp == rhs.depthBiasClamp )
3392 && ( fillModeNonSolid == rhs.fillModeNonSolid )
3393 && ( depthBounds == rhs.depthBounds )
3394 && ( wideLines == rhs.wideLines )
3395 && ( largePoints == rhs.largePoints )
3396 && ( alphaToOne == rhs.alphaToOne )
3397 && ( multiViewport == rhs.multiViewport )
3398 && ( samplerAnisotropy == rhs.samplerAnisotropy )
3399 && ( textureCompressionETC2 == rhs.textureCompressionETC2 )
3400 && ( textureCompressionASTC_LDR == rhs.textureCompressionASTC_LDR )
3401 && ( textureCompressionBC == rhs.textureCompressionBC )
3402 && ( occlusionQueryPrecise == rhs.occlusionQueryPrecise )
3403 && ( pipelineStatisticsQuery == rhs.pipelineStatisticsQuery )
3404 && ( vertexPipelineStoresAndAtomics == rhs.vertexPipelineStoresAndAtomics )
3405 && ( fragmentStoresAndAtomics == rhs.fragmentStoresAndAtomics )
3406 && ( shaderTessellationAndGeometryPointSize == rhs.shaderTessellationAndGeometryPointSize )
3407 && ( shaderImageGatherExtended == rhs.shaderImageGatherExtended )
3408 && ( shaderStorageImageExtendedFormats == rhs.shaderStorageImageExtendedFormats )
3409 && ( shaderStorageImageMultisample == rhs.shaderStorageImageMultisample )
3410 && ( shaderStorageImageReadWithoutFormat == rhs.shaderStorageImageReadWithoutFormat )
3411 && ( shaderStorageImageWriteWithoutFormat == rhs.shaderStorageImageWriteWithoutFormat )
3412 && ( shaderUniformBufferArrayDynamicIndexing == rhs.shaderUniformBufferArrayDynamicIndexing )
3413 && ( shaderSampledImageArrayDynamicIndexing == rhs.shaderSampledImageArrayDynamicIndexing )
3414 && ( shaderStorageBufferArrayDynamicIndexing == rhs.shaderStorageBufferArrayDynamicIndexing )
3415 && ( shaderStorageImageArrayDynamicIndexing == rhs.shaderStorageImageArrayDynamicIndexing )
3416 && ( shaderClipDistance == rhs.shaderClipDistance )
3417 && ( shaderCullDistance == rhs.shaderCullDistance )
3418 && ( shaderFloat64 == rhs.shaderFloat64 )
3419 && ( shaderInt64 == rhs.shaderInt64 )
3420 && ( shaderInt16 == rhs.shaderInt16 )
3421 && ( shaderResourceResidency == rhs.shaderResourceResidency )
3422 && ( shaderResourceMinLod == rhs.shaderResourceMinLod )
3423 && ( sparseBinding == rhs.sparseBinding )
3424 && ( sparseResidencyBuffer == rhs.sparseResidencyBuffer )
3425 && ( sparseResidencyImage2D == rhs.sparseResidencyImage2D )
3426 && ( sparseResidencyImage3D == rhs.sparseResidencyImage3D )
3427 && ( sparseResidency2Samples == rhs.sparseResidency2Samples )
3428 && ( sparseResidency4Samples == rhs.sparseResidency4Samples )
3429 && ( sparseResidency8Samples == rhs.sparseResidency8Samples )
3430 && ( sparseResidency16Samples == rhs.sparseResidency16Samples )
3431 && ( sparseResidencyAliased == rhs.sparseResidencyAliased )
3432 && ( variableMultisampleRate == rhs.variableMultisampleRate )
3433 && ( inheritedQueries == rhs.inheritedQueries );
3434 }
3435
3436 bool operator!=( PhysicalDeviceFeatures const& rhs ) const
3437 {
3438 return !operator==( rhs );
3439 }
3440
3441 Bool32 robustBufferAccess;
3442 Bool32 fullDrawIndexUint32;
3443 Bool32 imageCubeArray;
3444 Bool32 independentBlend;
3445 Bool32 geometryShader;
3446 Bool32 tessellationShader;
3447 Bool32 sampleRateShading;
3448 Bool32 dualSrcBlend;
3449 Bool32 logicOp;
3450 Bool32 multiDrawIndirect;
3451 Bool32 drawIndirectFirstInstance;
3452 Bool32 depthClamp;
3453 Bool32 depthBiasClamp;
3454 Bool32 fillModeNonSolid;
3455 Bool32 depthBounds;
3456 Bool32 wideLines;
3457 Bool32 largePoints;
3458 Bool32 alphaToOne;
3459 Bool32 multiViewport;
3460 Bool32 samplerAnisotropy;
3461 Bool32 textureCompressionETC2;
3462 Bool32 textureCompressionASTC_LDR;
3463 Bool32 textureCompressionBC;
3464 Bool32 occlusionQueryPrecise;
3465 Bool32 pipelineStatisticsQuery;
3466 Bool32 vertexPipelineStoresAndAtomics;
3467 Bool32 fragmentStoresAndAtomics;
3468 Bool32 shaderTessellationAndGeometryPointSize;
3469 Bool32 shaderImageGatherExtended;
3470 Bool32 shaderStorageImageExtendedFormats;
3471 Bool32 shaderStorageImageMultisample;
3472 Bool32 shaderStorageImageReadWithoutFormat;
3473 Bool32 shaderStorageImageWriteWithoutFormat;
3474 Bool32 shaderUniformBufferArrayDynamicIndexing;
3475 Bool32 shaderSampledImageArrayDynamicIndexing;
3476 Bool32 shaderStorageBufferArrayDynamicIndexing;
3477 Bool32 shaderStorageImageArrayDynamicIndexing;
3478 Bool32 shaderClipDistance;
3479 Bool32 shaderCullDistance;
3480 Bool32 shaderFloat64;
3481 Bool32 shaderInt64;
3482 Bool32 shaderInt16;
3483 Bool32 shaderResourceResidency;
3484 Bool32 shaderResourceMinLod;
3485 Bool32 sparseBinding;
3486 Bool32 sparseResidencyBuffer;
3487 Bool32 sparseResidencyImage2D;
3488 Bool32 sparseResidencyImage3D;
3489 Bool32 sparseResidency2Samples;
3490 Bool32 sparseResidency4Samples;
3491 Bool32 sparseResidency8Samples;
3492 Bool32 sparseResidency16Samples;
3493 Bool32 sparseResidencyAliased;
3494 Bool32 variableMultisampleRate;
3495 Bool32 inheritedQueries;
3496 };
3497 static_assert( sizeof( PhysicalDeviceFeatures ) == sizeof( VkPhysicalDeviceFeatures ), "struct and wrapper have different size!" );
3498
3499 struct PhysicalDeviceSparseProperties
3500 {
3501 operator const VkPhysicalDeviceSparseProperties&() const
3502 {
3503 return *reinterpret_cast<const VkPhysicalDeviceSparseProperties*>(this);
3504 }
3505
3506 bool operator==( PhysicalDeviceSparseProperties const& rhs ) const
3507 {
3508 return ( residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape )
3509 && ( residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape )
3510 && ( residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape )
3511 && ( residencyAlignedMipSize == rhs.residencyAlignedMipSize )
3512 && ( residencyNonResidentStrict == rhs.residencyNonResidentStrict );
3513 }
3514
3515 bool operator!=( PhysicalDeviceSparseProperties const& rhs ) const
3516 {
3517 return !operator==( rhs );
3518 }
3519
3520 Bool32 residencyStandard2DBlockShape;
3521 Bool32 residencyStandard2DMultisampleBlockShape;
3522 Bool32 residencyStandard3DBlockShape;
3523 Bool32 residencyAlignedMipSize;
3524 Bool32 residencyNonResidentStrict;
3525 };
3526 static_assert( sizeof( PhysicalDeviceSparseProperties ) == sizeof( VkPhysicalDeviceSparseProperties ), "struct and wrapper have different size!" );
3527
3528 struct DrawIndirectCommand
3529 {
3530 DrawIndirectCommand( uint32_t vertexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstVertex_ = 0, uint32_t firstInstance_ = 0 )
3531 : vertexCount( vertexCount_ )
3532 , instanceCount( instanceCount_ )
3533 , firstVertex( firstVertex_ )
3534 , firstInstance( firstInstance_ )
3535 {
3536 }
3537
3538 DrawIndirectCommand( VkDrawIndirectCommand const & rhs )
3539 {
3540 memcpy( this, &rhs, sizeof(DrawIndirectCommand) );
3541 }
3542
3543 DrawIndirectCommand& operator=( VkDrawIndirectCommand const & rhs )
3544 {
3545 memcpy( this, &rhs, sizeof(DrawIndirectCommand) );
3546 return *this;
3547 }
3548
3549 DrawIndirectCommand& setVertexCount( uint32_t vertexCount_ )
3550 {
3551 vertexCount = vertexCount_;
3552 return *this;
3553 }
3554
3555 DrawIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
3556 {
3557 instanceCount = instanceCount_;
3558 return *this;
3559 }
3560
3561 DrawIndirectCommand& setFirstVertex( uint32_t firstVertex_ )
3562 {
3563 firstVertex = firstVertex_;
3564 return *this;
3565 }
3566
3567 DrawIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
3568 {
3569 firstInstance = firstInstance_;
3570 return *this;
3571 }
3572
3573 operator const VkDrawIndirectCommand&() const
3574 {
3575 return *reinterpret_cast<const VkDrawIndirectCommand*>(this);
3576 }
3577
3578 bool operator==( DrawIndirectCommand const& rhs ) const
3579 {
3580 return ( vertexCount == rhs.vertexCount )
3581 && ( instanceCount == rhs.instanceCount )
3582 && ( firstVertex == rhs.firstVertex )
3583 && ( firstInstance == rhs.firstInstance );
3584 }
3585
3586 bool operator!=( DrawIndirectCommand const& rhs ) const
3587 {
3588 return !operator==( rhs );
3589 }
3590
3591 uint32_t vertexCount;
3592 uint32_t instanceCount;
3593 uint32_t firstVertex;
3594 uint32_t firstInstance;
3595 };
3596 static_assert( sizeof( DrawIndirectCommand ) == sizeof( VkDrawIndirectCommand ), "struct and wrapper have different size!" );
3597
3598 struct DrawIndexedIndirectCommand
3599 {
3600 DrawIndexedIndirectCommand( uint32_t indexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstIndex_ = 0, int32_t vertexOffset_ = 0, uint32_t firstInstance_ = 0 )
3601 : indexCount( indexCount_ )
3602 , instanceCount( instanceCount_ )
3603 , firstIndex( firstIndex_ )
3604 , vertexOffset( vertexOffset_ )
3605 , firstInstance( firstInstance_ )
3606 {
3607 }
3608
3609 DrawIndexedIndirectCommand( VkDrawIndexedIndirectCommand const & rhs )
3610 {
3611 memcpy( this, &rhs, sizeof(DrawIndexedIndirectCommand) );
3612 }
3613
3614 DrawIndexedIndirectCommand& operator=( VkDrawIndexedIndirectCommand const & rhs )
3615 {
3616 memcpy( this, &rhs, sizeof(DrawIndexedIndirectCommand) );
3617 return *this;
3618 }
3619
3620 DrawIndexedIndirectCommand& setIndexCount( uint32_t indexCount_ )
3621 {
3622 indexCount = indexCount_;
3623 return *this;
3624 }
3625
3626 DrawIndexedIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
3627 {
3628 instanceCount = instanceCount_;
3629 return *this;
3630 }
3631
3632 DrawIndexedIndirectCommand& setFirstIndex( uint32_t firstIndex_ )
3633 {
3634 firstIndex = firstIndex_;
3635 return *this;
3636 }
3637
3638 DrawIndexedIndirectCommand& setVertexOffset( int32_t vertexOffset_ )
3639 {
3640 vertexOffset = vertexOffset_;
3641 return *this;
3642 }
3643
3644 DrawIndexedIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
3645 {
3646 firstInstance = firstInstance_;
3647 return *this;
3648 }
3649
3650 operator const VkDrawIndexedIndirectCommand&() const
3651 {
3652 return *reinterpret_cast<const VkDrawIndexedIndirectCommand*>(this);
3653 }
3654
3655 bool operator==( DrawIndexedIndirectCommand const& rhs ) const
3656 {
3657 return ( indexCount == rhs.indexCount )
3658 && ( instanceCount == rhs.instanceCount )
3659 && ( firstIndex == rhs.firstIndex )
3660 && ( vertexOffset == rhs.vertexOffset )
3661 && ( firstInstance == rhs.firstInstance );
3662 }
3663
3664 bool operator!=( DrawIndexedIndirectCommand const& rhs ) const
3665 {
3666 return !operator==( rhs );
3667 }
3668
3669 uint32_t indexCount;
3670 uint32_t instanceCount;
3671 uint32_t firstIndex;
3672 int32_t vertexOffset;
3673 uint32_t firstInstance;
3674 };
3675 static_assert( sizeof( DrawIndexedIndirectCommand ) == sizeof( VkDrawIndexedIndirectCommand ), "struct and wrapper have different size!" );
3676
3677 struct DispatchIndirectCommand
3678 {
3679 DispatchIndirectCommand( uint32_t x_ = 0, uint32_t y_ = 0, uint32_t z_ = 0 )
3680 : x( x_ )
3681 , y( y_ )
3682 , z( z_ )
3683 {
3684 }
3685
3686 DispatchIndirectCommand( VkDispatchIndirectCommand const & rhs )
3687 {
3688 memcpy( this, &rhs, sizeof(DispatchIndirectCommand) );
3689 }
3690
3691 DispatchIndirectCommand& operator=( VkDispatchIndirectCommand const & rhs )
3692 {
3693 memcpy( this, &rhs, sizeof(DispatchIndirectCommand) );
3694 return *this;
3695 }
3696
3697 DispatchIndirectCommand& setX( uint32_t x_ )
3698 {
3699 x = x_;
3700 return *this;
3701 }
3702
3703 DispatchIndirectCommand& setY( uint32_t y_ )
3704 {
3705 y = y_;
3706 return *this;
3707 }
3708
3709 DispatchIndirectCommand& setZ( uint32_t z_ )
3710 {
3711 z = z_;
3712 return *this;
3713 }
3714
3715 operator const VkDispatchIndirectCommand&() const
3716 {
3717 return *reinterpret_cast<const VkDispatchIndirectCommand*>(this);
3718 }
3719
3720 bool operator==( DispatchIndirectCommand const& rhs ) const
3721 {
3722 return ( x == rhs.x )
3723 && ( y == rhs.y )
3724 && ( z == rhs.z );
3725 }
3726
3727 bool operator!=( DispatchIndirectCommand const& rhs ) const
3728 {
3729 return !operator==( rhs );
3730 }
3731
3732 uint32_t x;
3733 uint32_t y;
3734 uint32_t z;
3735 };
3736 static_assert( sizeof( DispatchIndirectCommand ) == sizeof( VkDispatchIndirectCommand ), "struct and wrapper have different size!" );
3737
3738 struct DisplayPlanePropertiesKHR
3739 {
3740 DisplayPlanePropertiesKHR( DisplayKHR currentDisplay_ = DisplayKHR(), uint32_t currentStackIndex_ = 0 )
3741 : currentDisplay( currentDisplay_ )
3742 , currentStackIndex( currentStackIndex_ )
3743 {
3744 }
3745
3746 DisplayPlanePropertiesKHR( VkDisplayPlanePropertiesKHR const & rhs )
3747 {
3748 memcpy( this, &rhs, sizeof(DisplayPlanePropertiesKHR) );
3749 }
3750
3751 DisplayPlanePropertiesKHR& operator=( VkDisplayPlanePropertiesKHR const & rhs )
3752 {
3753 memcpy( this, &rhs, sizeof(DisplayPlanePropertiesKHR) );
3754 return *this;
3755 }
3756
3757 DisplayPlanePropertiesKHR& setCurrentDisplay( DisplayKHR currentDisplay_ )
3758 {
3759 currentDisplay = currentDisplay_;
3760 return *this;
3761 }
3762
3763 DisplayPlanePropertiesKHR& setCurrentStackIndex( uint32_t currentStackIndex_ )
3764 {
3765 currentStackIndex = currentStackIndex_;
3766 return *this;
3767 }
3768
3769 operator const VkDisplayPlanePropertiesKHR&() const
3770 {
3771 return *reinterpret_cast<const VkDisplayPlanePropertiesKHR*>(this);
3772 }
3773
3774 bool operator==( DisplayPlanePropertiesKHR const& rhs ) const
3775 {
3776 return ( currentDisplay == rhs.currentDisplay )
3777 && ( currentStackIndex == rhs.currentStackIndex );
3778 }
3779
3780 bool operator!=( DisplayPlanePropertiesKHR const& rhs ) const
3781 {
3782 return !operator==( rhs );
3783 }
3784
3785 DisplayKHR currentDisplay;
3786 uint32_t currentStackIndex;
3787 };
3788 static_assert( sizeof( DisplayPlanePropertiesKHR ) == sizeof( VkDisplayPlanePropertiesKHR ), "struct and wrapper have different size!" );
3789
3790 struct DisplayModeParametersKHR
3791 {
3792 DisplayModeParametersKHR( Extent2D visibleRegion_ = Extent2D(), uint32_t refreshRate_ = 0 )
3793 : visibleRegion( visibleRegion_ )
3794 , refreshRate( refreshRate_ )
3795 {
3796 }
3797
3798 DisplayModeParametersKHR( VkDisplayModeParametersKHR const & rhs )
3799 {
3800 memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
3801 }
3802
3803 DisplayModeParametersKHR& operator=( VkDisplayModeParametersKHR const & rhs )
3804 {
3805 memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
3806 return *this;
3807 }
3808
3809 DisplayModeParametersKHR& setVisibleRegion( Extent2D visibleRegion_ )
3810 {
3811 visibleRegion = visibleRegion_;
3812 return *this;
3813 }
3814
3815 DisplayModeParametersKHR& setRefreshRate( uint32_t refreshRate_ )
3816 {
3817 refreshRate = refreshRate_;
3818 return *this;
3819 }
3820
3821 operator const VkDisplayModeParametersKHR&() const
3822 {
3823 return *reinterpret_cast<const VkDisplayModeParametersKHR*>(this);
3824 }
3825
3826 bool operator==( DisplayModeParametersKHR const& rhs ) const
3827 {
3828 return ( visibleRegion == rhs.visibleRegion )
3829 && ( refreshRate == rhs.refreshRate );
3830 }
3831
3832 bool operator!=( DisplayModeParametersKHR const& rhs ) const
3833 {
3834 return !operator==( rhs );
3835 }
3836
3837 Extent2D visibleRegion;
3838 uint32_t refreshRate;
3839 };
3840 static_assert( sizeof( DisplayModeParametersKHR ) == sizeof( VkDisplayModeParametersKHR ), "struct and wrapper have different size!" );
3841
3842 struct DisplayModePropertiesKHR
3843 {
3844 DisplayModePropertiesKHR( DisplayModeKHR displayMode_ = DisplayModeKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
3845 : displayMode( displayMode_ )
3846 , parameters( parameters_ )
3847 {
3848 }
3849
3850 DisplayModePropertiesKHR( VkDisplayModePropertiesKHR const & rhs )
3851 {
3852 memcpy( this, &rhs, sizeof(DisplayModePropertiesKHR) );
3853 }
3854
3855 DisplayModePropertiesKHR& operator=( VkDisplayModePropertiesKHR const & rhs )
3856 {
3857 memcpy( this, &rhs, sizeof(DisplayModePropertiesKHR) );
3858 return *this;
3859 }
3860
3861 DisplayModePropertiesKHR& setDisplayMode( DisplayModeKHR displayMode_ )
3862 {
3863 displayMode = displayMode_;
3864 return *this;
3865 }
3866
3867 DisplayModePropertiesKHR& setParameters( DisplayModeParametersKHR parameters_ )
3868 {
3869 parameters = parameters_;
3870 return *this;
3871 }
3872
3873 operator const VkDisplayModePropertiesKHR&() const
3874 {
3875 return *reinterpret_cast<const VkDisplayModePropertiesKHR*>(this);
3876 }
3877
3878 bool operator==( DisplayModePropertiesKHR const& rhs ) const
3879 {
3880 return ( displayMode == rhs.displayMode )
3881 && ( parameters == rhs.parameters );
3882 }
3883
3884 bool operator!=( DisplayModePropertiesKHR const& rhs ) const
3885 {
3886 return !operator==( rhs );
3887 }
3888
3889 DisplayModeKHR displayMode;
3890 DisplayModeParametersKHR parameters;
3891 };
3892 static_assert( sizeof( DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ), "struct and wrapper have different size!" );
3893
3894 enum class ImageLayout
3895 {
3896 eUndefined = VK_IMAGE_LAYOUT_UNDEFINED,
3897 eGeneral = VK_IMAGE_LAYOUT_GENERAL,
3898 eColorAttachmentOptimal = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
3899 eDepthStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
3900 eDepthStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
3901 eShaderReadOnlyOptimal = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
3902 eTransferSrcOptimal = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
3903 eTransferDstOptimal = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
3904 ePreinitialized = VK_IMAGE_LAYOUT_PREINITIALIZED,
3905 ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
3906 };
3907
3908 struct DescriptorImageInfo
3909 {
3910 DescriptorImageInfo( Sampler sampler_ = Sampler(), ImageView imageView_ = ImageView(), ImageLayout imageLayout_ = ImageLayout::eUndefined )
3911 : sampler( sampler_ )
3912 , imageView( imageView_ )
3913 , imageLayout( imageLayout_ )
3914 {
3915 }
3916
3917 DescriptorImageInfo( VkDescriptorImageInfo const & rhs )
3918 {
3919 memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
3920 }
3921
3922 DescriptorImageInfo& operator=( VkDescriptorImageInfo const & rhs )
3923 {
3924 memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
3925 return *this;
3926 }
3927
3928 DescriptorImageInfo& setSampler( Sampler sampler_ )
3929 {
3930 sampler = sampler_;
3931 return *this;
3932 }
3933
3934 DescriptorImageInfo& setImageView( ImageView imageView_ )
3935 {
3936 imageView = imageView_;
3937 return *this;
3938 }
3939
3940 DescriptorImageInfo& setImageLayout( ImageLayout imageLayout_ )
3941 {
3942 imageLayout = imageLayout_;
3943 return *this;
3944 }
3945
3946 operator const VkDescriptorImageInfo&() const
3947 {
3948 return *reinterpret_cast<const VkDescriptorImageInfo*>(this);
3949 }
3950
3951 bool operator==( DescriptorImageInfo const& rhs ) const
3952 {
3953 return ( sampler == rhs.sampler )
3954 && ( imageView == rhs.imageView )
3955 && ( imageLayout == rhs.imageLayout );
3956 }
3957
3958 bool operator!=( DescriptorImageInfo const& rhs ) const
3959 {
3960 return !operator==( rhs );
3961 }
3962
3963 Sampler sampler;
3964 ImageView imageView;
3965 ImageLayout imageLayout;
3966 };
3967 static_assert( sizeof( DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ), "struct and wrapper have different size!" );
3968
3969 struct AttachmentReference
3970 {
3971 AttachmentReference( uint32_t attachment_ = 0, ImageLayout layout_ = ImageLayout::eUndefined )
3972 : attachment( attachment_ )
3973 , layout( layout_ )
3974 {
3975 }
3976
3977 AttachmentReference( VkAttachmentReference const & rhs )
3978 {
3979 memcpy( this, &rhs, sizeof(AttachmentReference) );
3980 }
3981
3982 AttachmentReference& operator=( VkAttachmentReference const & rhs )
3983 {
3984 memcpy( this, &rhs, sizeof(AttachmentReference) );
3985 return *this;
3986 }
3987
3988 AttachmentReference& setAttachment( uint32_t attachment_ )
3989 {
3990 attachment = attachment_;
3991 return *this;
3992 }
3993
3994 AttachmentReference& setLayout( ImageLayout layout_ )
3995 {
3996 layout = layout_;
3997 return *this;
3998 }
3999
4000 operator const VkAttachmentReference&() const
4001 {
4002 return *reinterpret_cast<const VkAttachmentReference*>(this);
4003 }
4004
4005 bool operator==( AttachmentReference const& rhs ) const
4006 {
4007 return ( attachment == rhs.attachment )
4008 && ( layout == rhs.layout );
4009 }
4010
4011 bool operator!=( AttachmentReference const& rhs ) const
4012 {
4013 return !operator==( rhs );
4014 }
4015
4016 uint32_t attachment;
4017 ImageLayout layout;
4018 };
4019 static_assert( sizeof( AttachmentReference ) == sizeof( VkAttachmentReference ), "struct and wrapper have different size!" );
4020
4021 enum class AttachmentLoadOp
4022 {
4023 eLoad = VK_ATTACHMENT_LOAD_OP_LOAD,
4024 eClear = VK_ATTACHMENT_LOAD_OP_CLEAR,
4025 eDontCare = VK_ATTACHMENT_LOAD_OP_DONT_CARE
4026 };
4027
4028 enum class AttachmentStoreOp
4029 {
4030 eStore = VK_ATTACHMENT_STORE_OP_STORE,
4031 eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE
4032 };
4033
4034 enum class ImageType
4035 {
4036 e1D = VK_IMAGE_TYPE_1D,
4037 e2D = VK_IMAGE_TYPE_2D,
4038 e3D = VK_IMAGE_TYPE_3D
4039 };
4040
4041 enum class ImageTiling
4042 {
4043 eOptimal = VK_IMAGE_TILING_OPTIMAL,
4044 eLinear = VK_IMAGE_TILING_LINEAR
4045 };
4046
4047 enum class ImageViewType
4048 {
4049 e1D = VK_IMAGE_VIEW_TYPE_1D,
4050 e2D = VK_IMAGE_VIEW_TYPE_2D,
4051 e3D = VK_IMAGE_VIEW_TYPE_3D,
4052 eCube = VK_IMAGE_VIEW_TYPE_CUBE,
4053 e1DArray = VK_IMAGE_VIEW_TYPE_1D_ARRAY,
4054 e2DArray = VK_IMAGE_VIEW_TYPE_2D_ARRAY,
4055 eCubeArray = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
4056 };
4057
4058 enum class CommandBufferLevel
4059 {
4060 ePrimary = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
4061 eSecondary = VK_COMMAND_BUFFER_LEVEL_SECONDARY
4062 };
4063
4064 enum class ComponentSwizzle
4065 {
4066 eIdentity = VK_COMPONENT_SWIZZLE_IDENTITY,
4067 eZero = VK_COMPONENT_SWIZZLE_ZERO,
4068 eOne = VK_COMPONENT_SWIZZLE_ONE,
4069 eR = VK_COMPONENT_SWIZZLE_R,
4070 eG = VK_COMPONENT_SWIZZLE_G,
4071 eB = VK_COMPONENT_SWIZZLE_B,
4072 eA = VK_COMPONENT_SWIZZLE_A
4073 };
4074
4075 struct ComponentMapping
4076 {
4077 ComponentMapping( ComponentSwizzle r_ = ComponentSwizzle::eIdentity, ComponentSwizzle g_ = ComponentSwizzle::eIdentity, ComponentSwizzle b_ = ComponentSwizzle::eIdentity, ComponentSwizzle a_ = ComponentSwizzle::eIdentity )
4078 : r( r_ )
4079 , g( g_ )
4080 , b( b_ )
4081 , a( a_ )
4082 {
4083 }
4084
4085 ComponentMapping( VkComponentMapping const & rhs )
4086 {
4087 memcpy( this, &rhs, sizeof(ComponentMapping) );
4088 }
4089
4090 ComponentMapping& operator=( VkComponentMapping const & rhs )
4091 {
4092 memcpy( this, &rhs, sizeof(ComponentMapping) );
4093 return *this;
4094 }
4095
4096 ComponentMapping& setR( ComponentSwizzle r_ )
4097 {
4098 r = r_;
4099 return *this;
4100 }
4101
4102 ComponentMapping& setG( ComponentSwizzle g_ )
4103 {
4104 g = g_;
4105 return *this;
4106 }
4107
4108 ComponentMapping& setB( ComponentSwizzle b_ )
4109 {
4110 b = b_;
4111 return *this;
4112 }
4113
4114 ComponentMapping& setA( ComponentSwizzle a_ )
4115 {
4116 a = a_;
4117 return *this;
4118 }
4119
4120 operator const VkComponentMapping&() const
4121 {
4122 return *reinterpret_cast<const VkComponentMapping*>(this);
4123 }
4124
4125 bool operator==( ComponentMapping const& rhs ) const
4126 {
4127 return ( r == rhs.r )
4128 && ( g == rhs.g )
4129 && ( b == rhs.b )
4130 && ( a == rhs.a );
4131 }
4132
4133 bool operator!=( ComponentMapping const& rhs ) const
4134 {
4135 return !operator==( rhs );
4136 }
4137
4138 ComponentSwizzle r;
4139 ComponentSwizzle g;
4140 ComponentSwizzle b;
4141 ComponentSwizzle a;
4142 };
4143 static_assert( sizeof( ComponentMapping ) == sizeof( VkComponentMapping ), "struct and wrapper have different size!" );
4144
4145 enum class DescriptorType
4146 {
4147 eSampler = VK_DESCRIPTOR_TYPE_SAMPLER,
4148 eCombinedImageSampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
4149 eSampledImage = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
4150 eStorageImage = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
4151 eUniformTexelBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
4152 eStorageTexelBuffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
4153 eUniformBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
4154 eStorageBuffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
4155 eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
4156 eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
4157 eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
4158 };
4159
4160 struct DescriptorPoolSize
4161 {
4162 DescriptorPoolSize( DescriptorType type_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0 )
4163 : type( type_ )
4164 , descriptorCount( descriptorCount_ )
4165 {
4166 }
4167
4168 DescriptorPoolSize( VkDescriptorPoolSize const & rhs )
4169 {
4170 memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4171 }
4172
4173 DescriptorPoolSize& operator=( VkDescriptorPoolSize const & rhs )
4174 {
4175 memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4176 return *this;
4177 }
4178
4179 DescriptorPoolSize& setType( DescriptorType type_ )
4180 {
4181 type = type_;
4182 return *this;
4183 }
4184
4185 DescriptorPoolSize& setDescriptorCount( uint32_t descriptorCount_ )
4186 {
4187 descriptorCount = descriptorCount_;
4188 return *this;
4189 }
4190
4191 operator const VkDescriptorPoolSize&() const
4192 {
4193 return *reinterpret_cast<const VkDescriptorPoolSize*>(this);
4194 }
4195
4196 bool operator==( DescriptorPoolSize const& rhs ) const
4197 {
4198 return ( type == rhs.type )
4199 && ( descriptorCount == rhs.descriptorCount );
4200 }
4201
4202 bool operator!=( DescriptorPoolSize const& rhs ) const
4203 {
4204 return !operator==( rhs );
4205 }
4206
4207 DescriptorType type;
4208 uint32_t descriptorCount;
4209 };
4210 static_assert( sizeof( DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ), "struct and wrapper have different size!" );
4211
4212 enum class QueryType
4213 {
4214 eOcclusion = VK_QUERY_TYPE_OCCLUSION,
4215 ePipelineStatistics = VK_QUERY_TYPE_PIPELINE_STATISTICS,
4216 eTimestamp = VK_QUERY_TYPE_TIMESTAMP
4217 };
4218
4219 enum class BorderColor
4220 {
4221 eFloatTransparentBlack = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
4222 eIntTransparentBlack = VK_BORDER_COLOR_INT_TRANSPARENT_BLACK,
4223 eFloatOpaqueBlack = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
4224 eIntOpaqueBlack = VK_BORDER_COLOR_INT_OPAQUE_BLACK,
4225 eFloatOpaqueWhite = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE,
4226 eIntOpaqueWhite = VK_BORDER_COLOR_INT_OPAQUE_WHITE
4227 };
4228
4229 enum class PipelineBindPoint
4230 {
4231 eGraphics = VK_PIPELINE_BIND_POINT_GRAPHICS,
4232 eCompute = VK_PIPELINE_BIND_POINT_COMPUTE
4233 };
4234
4235 struct SubpassDescription
4236 {
4237 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 )
4238 : flags( flags_ )
4239 , pipelineBindPoint( pipelineBindPoint_ )
4240 , inputAttachmentCount( inputAttachmentCount_ )
4241 , pInputAttachments( pInputAttachments_ )
4242 , colorAttachmentCount( colorAttachmentCount_ )
4243 , pColorAttachments( pColorAttachments_ )
4244 , pResolveAttachments( pResolveAttachments_ )
4245 , pDepthStencilAttachment( pDepthStencilAttachment_ )
4246 , preserveAttachmentCount( preserveAttachmentCount_ )
4247 , pPreserveAttachments( pPreserveAttachments_ )
4248 {
4249 }
4250
4251 SubpassDescription( VkSubpassDescription const & rhs )
4252 {
4253 memcpy( this, &rhs, sizeof(SubpassDescription) );
4254 }
4255
4256 SubpassDescription& operator=( VkSubpassDescription const & rhs )
4257 {
4258 memcpy( this, &rhs, sizeof(SubpassDescription) );
4259 return *this;
4260 }
4261
4262 SubpassDescription& setFlags( SubpassDescriptionFlags flags_ )
4263 {
4264 flags = flags_;
4265 return *this;
4266 }
4267
4268 SubpassDescription& setPipelineBindPoint( PipelineBindPoint pipelineBindPoint_ )
4269 {
4270 pipelineBindPoint = pipelineBindPoint_;
4271 return *this;
4272 }
4273
4274 SubpassDescription& setInputAttachmentCount( uint32_t inputAttachmentCount_ )
4275 {
4276 inputAttachmentCount = inputAttachmentCount_;
4277 return *this;
4278 }
4279
4280 SubpassDescription& setPInputAttachments( const AttachmentReference* pInputAttachments_ )
4281 {
4282 pInputAttachments = pInputAttachments_;
4283 return *this;
4284 }
4285
4286 SubpassDescription& setColorAttachmentCount( uint32_t colorAttachmentCount_ )
4287 {
4288 colorAttachmentCount = colorAttachmentCount_;
4289 return *this;
4290 }
4291
4292 SubpassDescription& setPColorAttachments( const AttachmentReference* pColorAttachments_ )
4293 {
4294 pColorAttachments = pColorAttachments_;
4295 return *this;
4296 }
4297
4298 SubpassDescription& setPResolveAttachments( const AttachmentReference* pResolveAttachments_ )
4299 {
4300 pResolveAttachments = pResolveAttachments_;
4301 return *this;
4302 }
4303
4304 SubpassDescription& setPDepthStencilAttachment( const AttachmentReference* pDepthStencilAttachment_ )
4305 {
4306 pDepthStencilAttachment = pDepthStencilAttachment_;
4307 return *this;
4308 }
4309
4310 SubpassDescription& setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ )
4311 {
4312 preserveAttachmentCount = preserveAttachmentCount_;
4313 return *this;
4314 }
4315
4316 SubpassDescription& setPPreserveAttachments( const uint32_t* pPreserveAttachments_ )
4317 {
4318 pPreserveAttachments = pPreserveAttachments_;
4319 return *this;
4320 }
4321
4322 operator const VkSubpassDescription&() const
4323 {
4324 return *reinterpret_cast<const VkSubpassDescription*>(this);
4325 }
4326
4327 bool operator==( SubpassDescription const& rhs ) const
4328 {
4329 return ( flags == rhs.flags )
4330 && ( pipelineBindPoint == rhs.pipelineBindPoint )
4331 && ( inputAttachmentCount == rhs.inputAttachmentCount )
4332 && ( pInputAttachments == rhs.pInputAttachments )
4333 && ( colorAttachmentCount == rhs.colorAttachmentCount )
4334 && ( pColorAttachments == rhs.pColorAttachments )
4335 && ( pResolveAttachments == rhs.pResolveAttachments )
4336 && ( pDepthStencilAttachment == rhs.pDepthStencilAttachment )
4337 && ( preserveAttachmentCount == rhs.preserveAttachmentCount )
4338 && ( pPreserveAttachments == rhs.pPreserveAttachments );
4339 }
4340
4341 bool operator!=( SubpassDescription const& rhs ) const
4342 {
4343 return !operator==( rhs );
4344 }
4345
4346 SubpassDescriptionFlags flags;
4347 PipelineBindPoint pipelineBindPoint;
4348 uint32_t inputAttachmentCount;
4349 const AttachmentReference* pInputAttachments;
4350 uint32_t colorAttachmentCount;
4351 const AttachmentReference* pColorAttachments;
4352 const AttachmentReference* pResolveAttachments;
4353 const AttachmentReference* pDepthStencilAttachment;
4354 uint32_t preserveAttachmentCount;
4355 const uint32_t* pPreserveAttachments;
4356 };
4357 static_assert( sizeof( SubpassDescription ) == sizeof( VkSubpassDescription ), "struct and wrapper have different size!" );
4358
4359 enum class PipelineCacheHeaderVersion
4360 {
4361 eOne = VK_PIPELINE_CACHE_HEADER_VERSION_ONE
4362 };
4363
4364 enum class PrimitiveTopology
4365 {
4366 ePointList = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
4367 eLineList = VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
4368 eLineStrip = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
4369 eTriangleList = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
4370 eTriangleStrip = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
4371 eTriangleFan = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
4372 eLineListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
4373 eLineStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
4374 eTriangleListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
4375 eTriangleStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY,
4376 ePatchList = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
4377 };
4378
4379 enum class SharingMode
4380 {
4381 eExclusive = VK_SHARING_MODE_EXCLUSIVE,
4382 eConcurrent = VK_SHARING_MODE_CONCURRENT
4383 };
4384
4385 enum class IndexType
4386 {
4387 eUint16 = VK_INDEX_TYPE_UINT16,
4388 eUint32 = VK_INDEX_TYPE_UINT32
4389 };
4390
4391 enum class Filter
4392 {
4393 eNearest = VK_FILTER_NEAREST,
4394 eLinear = VK_FILTER_LINEAR,
4395 eCubicIMG = VK_FILTER_CUBIC_IMG
4396 };
4397
4398 enum class SamplerMipmapMode
4399 {
4400 eNearest = VK_SAMPLER_MIPMAP_MODE_NEAREST,
4401 eLinear = VK_SAMPLER_MIPMAP_MODE_LINEAR
4402 };
4403
4404 enum class SamplerAddressMode
4405 {
4406 eRepeat = VK_SAMPLER_ADDRESS_MODE_REPEAT,
4407 eMirroredRepeat = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
4408 eClampToEdge = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
4409 eClampToBorder = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
4410 eMirrorClampToEdge = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
4411 };
4412
4413 enum class CompareOp
4414 {
4415 eNever = VK_COMPARE_OP_NEVER,
4416 eLess = VK_COMPARE_OP_LESS,
4417 eEqual = VK_COMPARE_OP_EQUAL,
4418 eLessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL,
4419 eGreater = VK_COMPARE_OP_GREATER,
4420 eNotEqual = VK_COMPARE_OP_NOT_EQUAL,
4421 eGreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL,
4422 eAlways = VK_COMPARE_OP_ALWAYS
4423 };
4424
4425 enum class PolygonMode
4426 {
4427 eFill = VK_POLYGON_MODE_FILL,
4428 eLine = VK_POLYGON_MODE_LINE,
4429 ePoint = VK_POLYGON_MODE_POINT
4430 };
4431
4432 enum class CullModeFlagBits
4433 {
4434 eNone = VK_CULL_MODE_NONE,
4435 eFront = VK_CULL_MODE_FRONT_BIT,
4436 eBack = VK_CULL_MODE_BACK_BIT,
4437 eFrontAndBack = VK_CULL_MODE_FRONT_AND_BACK
4438 };
4439
4440 using CullModeFlags = Flags<CullModeFlagBits, VkCullModeFlags>;
4441
4442 inline CullModeFlags operator|( CullModeFlagBits bit0, CullModeFlagBits bit1 )
4443 {
4444 return CullModeFlags( bit0 ) | bit1;
4445 }
4446
4447 enum class FrontFace
4448 {
4449 eCounterClockwise = VK_FRONT_FACE_COUNTER_CLOCKWISE,
4450 eClockwise = VK_FRONT_FACE_CLOCKWISE
4451 };
4452
4453 enum class BlendFactor
4454 {
4455 eZero = VK_BLEND_FACTOR_ZERO,
4456 eOne = VK_BLEND_FACTOR_ONE,
4457 eSrcColor = VK_BLEND_FACTOR_SRC_COLOR,
4458 eOneMinusSrcColor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
4459 eDstColor = VK_BLEND_FACTOR_DST_COLOR,
4460 eOneMinusDstColor = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR,
4461 eSrcAlpha = VK_BLEND_FACTOR_SRC_ALPHA,
4462 eOneMinusSrcAlpha = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
4463 eDstAlpha = VK_BLEND_FACTOR_DST_ALPHA,
4464 eOneMinusDstAlpha = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA,
4465 eConstantColor = VK_BLEND_FACTOR_CONSTANT_COLOR,
4466 eOneMinusConstantColor = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
4467 eConstantAlpha = VK_BLEND_FACTOR_CONSTANT_ALPHA,
4468 eOneMinusConstantAlpha = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
4469 eSrcAlphaSaturate = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE,
4470 eSrc1Color = VK_BLEND_FACTOR_SRC1_COLOR,
4471 eOneMinusSrc1Color = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
4472 eSrc1Alpha = VK_BLEND_FACTOR_SRC1_ALPHA,
4473 eOneMinusSrc1Alpha = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
4474 };
4475
4476 enum class BlendOp
4477 {
4478 eAdd = VK_BLEND_OP_ADD,
4479 eSubtract = VK_BLEND_OP_SUBTRACT,
4480 eReverseSubtract = VK_BLEND_OP_REVERSE_SUBTRACT,
4481 eMin = VK_BLEND_OP_MIN,
4482 eMax = VK_BLEND_OP_MAX
4483 };
4484
4485 enum class StencilOp
4486 {
4487 eKeep = VK_STENCIL_OP_KEEP,
4488 eZero = VK_STENCIL_OP_ZERO,
4489 eReplace = VK_STENCIL_OP_REPLACE,
4490 eIncrementAndClamp = VK_STENCIL_OP_INCREMENT_AND_CLAMP,
4491 eDecrementAndClamp = VK_STENCIL_OP_DECREMENT_AND_CLAMP,
4492 eInvert = VK_STENCIL_OP_INVERT,
4493 eIncrementAndWrap = VK_STENCIL_OP_INCREMENT_AND_WRAP,
4494 eDecrementAndWrap = VK_STENCIL_OP_DECREMENT_AND_WRAP
4495 };
4496
4497 struct StencilOpState
4498 {
4499 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 )
4500 : failOp( failOp_ )
4501 , passOp( passOp_ )
4502 , depthFailOp( depthFailOp_ )
4503 , compareOp( compareOp_ )
4504 , compareMask( compareMask_ )
4505 , writeMask( writeMask_ )
4506 , reference( reference_ )
4507 {
4508 }
4509
4510 StencilOpState( VkStencilOpState const & rhs )
4511 {
4512 memcpy( this, &rhs, sizeof(StencilOpState) );
4513 }
4514
4515 StencilOpState& operator=( VkStencilOpState const & rhs )
4516 {
4517 memcpy( this, &rhs, sizeof(StencilOpState) );
4518 return *this;
4519 }
4520
4521 StencilOpState& setFailOp( StencilOp failOp_ )
4522 {
4523 failOp = failOp_;
4524 return *this;
4525 }
4526
4527 StencilOpState& setPassOp( StencilOp passOp_ )
4528 {
4529 passOp = passOp_;
4530 return *this;
4531 }
4532
4533 StencilOpState& setDepthFailOp( StencilOp depthFailOp_ )
4534 {
4535 depthFailOp = depthFailOp_;
4536 return *this;
4537 }
4538
4539 StencilOpState& setCompareOp( CompareOp compareOp_ )
4540 {
4541 compareOp = compareOp_;
4542 return *this;
4543 }
4544
4545 StencilOpState& setCompareMask( uint32_t compareMask_ )
4546 {
4547 compareMask = compareMask_;
4548 return *this;
4549 }
4550
4551 StencilOpState& setWriteMask( uint32_t writeMask_ )
4552 {
4553 writeMask = writeMask_;
4554 return *this;
4555 }
4556
4557 StencilOpState& setReference( uint32_t reference_ )
4558 {
4559 reference = reference_;
4560 return *this;
4561 }
4562
4563 operator const VkStencilOpState&() const
4564 {
4565 return *reinterpret_cast<const VkStencilOpState*>(this);
4566 }
4567
4568 bool operator==( StencilOpState const& rhs ) const
4569 {
4570 return ( failOp == rhs.failOp )
4571 && ( passOp == rhs.passOp )
4572 && ( depthFailOp == rhs.depthFailOp )
4573 && ( compareOp == rhs.compareOp )
4574 && ( compareMask == rhs.compareMask )
4575 && ( writeMask == rhs.writeMask )
4576 && ( reference == rhs.reference );
4577 }
4578
4579 bool operator!=( StencilOpState const& rhs ) const
4580 {
4581 return !operator==( rhs );
4582 }
4583
4584 StencilOp failOp;
4585 StencilOp passOp;
4586 StencilOp depthFailOp;
4587 CompareOp compareOp;
4588 uint32_t compareMask;
4589 uint32_t writeMask;
4590 uint32_t reference;
4591 };
4592 static_assert( sizeof( StencilOpState ) == sizeof( VkStencilOpState ), "struct and wrapper have different size!" );
4593
4594 enum class LogicOp
4595 {
4596 eClear = VK_LOGIC_OP_CLEAR,
4597 eAnd = VK_LOGIC_OP_AND,
4598 eAndReverse = VK_LOGIC_OP_AND_REVERSE,
4599 eCopy = VK_LOGIC_OP_COPY,
4600 eAndInverted = VK_LOGIC_OP_AND_INVERTED,
4601 eNoOp = VK_LOGIC_OP_NO_OP,
4602 eXor = VK_LOGIC_OP_XOR,
4603 eOr = VK_LOGIC_OP_OR,
4604 eNor = VK_LOGIC_OP_NOR,
4605 eEquivalent = VK_LOGIC_OP_EQUIVALENT,
4606 eInvert = VK_LOGIC_OP_INVERT,
4607 eOrReverse = VK_LOGIC_OP_OR_REVERSE,
4608 eCopyInverted = VK_LOGIC_OP_COPY_INVERTED,
4609 eOrInverted = VK_LOGIC_OP_OR_INVERTED,
4610 eNand = VK_LOGIC_OP_NAND,
4611 eSet = VK_LOGIC_OP_SET
4612 };
4613
4614 enum class InternalAllocationType
4615 {
4616 eExecutable = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE
4617 };
4618
4619 enum class SystemAllocationScope
4620 {
4621 eCommand = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
4622 eObject = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT,
4623 eCache = VK_SYSTEM_ALLOCATION_SCOPE_CACHE,
4624 eDevice = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE,
4625 eInstance = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE
4626 };
4627
4628 enum class PhysicalDeviceType
4629 {
4630 eOther = VK_PHYSICAL_DEVICE_TYPE_OTHER,
4631 eIntegratedGpu = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
4632 eDiscreteGpu = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
4633 eVirtualGpu = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU,
4634 eCpu = VK_PHYSICAL_DEVICE_TYPE_CPU
4635 };
4636
4637 enum class VertexInputRate
4638 {
4639 eVertex = VK_VERTEX_INPUT_RATE_VERTEX,
4640 eInstance = VK_VERTEX_INPUT_RATE_INSTANCE
4641 };
4642
4643 struct VertexInputBindingDescription
4644 {
4645 VertexInputBindingDescription( uint32_t binding_ = 0, uint32_t stride_ = 0, VertexInputRate inputRate_ = VertexInputRate::eVertex )
4646 : binding( binding_ )
4647 , stride( stride_ )
4648 , inputRate( inputRate_ )
4649 {
4650 }
4651
4652 VertexInputBindingDescription( VkVertexInputBindingDescription const & rhs )
4653 {
4654 memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
4655 }
4656
4657 VertexInputBindingDescription& operator=( VkVertexInputBindingDescription const & rhs )
4658 {
4659 memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
4660 return *this;
4661 }
4662
4663 VertexInputBindingDescription& setBinding( uint32_t binding_ )
4664 {
4665 binding = binding_;
4666 return *this;
4667 }
4668
4669 VertexInputBindingDescription& setStride( uint32_t stride_ )
4670 {
4671 stride = stride_;
4672 return *this;
4673 }
4674
4675 VertexInputBindingDescription& setInputRate( VertexInputRate inputRate_ )
4676 {
4677 inputRate = inputRate_;
4678 return *this;
4679 }
4680
4681 operator const VkVertexInputBindingDescription&() const
4682 {
4683 return *reinterpret_cast<const VkVertexInputBindingDescription*>(this);
4684 }
4685
4686 bool operator==( VertexInputBindingDescription const& rhs ) const
4687 {
4688 return ( binding == rhs.binding )
4689 && ( stride == rhs.stride )
4690 && ( inputRate == rhs.inputRate );
4691 }
4692
4693 bool operator!=( VertexInputBindingDescription const& rhs ) const
4694 {
4695 return !operator==( rhs );
4696 }
4697
4698 uint32_t binding;
4699 uint32_t stride;
4700 VertexInputRate inputRate;
4701 };
4702 static_assert( sizeof( VertexInputBindingDescription ) == sizeof( VkVertexInputBindingDescription ), "struct and wrapper have different size!" );
4703
4704 enum class Format
4705 {
4706 eUndefined = VK_FORMAT_UNDEFINED,
4707 eR4G4UnormPack8 = VK_FORMAT_R4G4_UNORM_PACK8,
4708 eR4G4B4A4UnormPack16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16,
4709 eB4G4R4A4UnormPack16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16,
4710 eR5G6B5UnormPack16 = VK_FORMAT_R5G6B5_UNORM_PACK16,
4711 eB5G6R5UnormPack16 = VK_FORMAT_B5G6R5_UNORM_PACK16,
4712 eR5G5B5A1UnormPack16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16,
4713 eB5G5R5A1UnormPack16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16,
4714 eA1R5G5B5UnormPack16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16,
4715 eR8Unorm = VK_FORMAT_R8_UNORM,
4716 eR8Snorm = VK_FORMAT_R8_SNORM,
4717 eR8Uscaled = VK_FORMAT_R8_USCALED,
4718 eR8Sscaled = VK_FORMAT_R8_SSCALED,
4719 eR8Uint = VK_FORMAT_R8_UINT,
4720 eR8Sint = VK_FORMAT_R8_SINT,
4721 eR8Srgb = VK_FORMAT_R8_SRGB,
4722 eR8G8Unorm = VK_FORMAT_R8G8_UNORM,
4723 eR8G8Snorm = VK_FORMAT_R8G8_SNORM,
4724 eR8G8Uscaled = VK_FORMAT_R8G8_USCALED,
4725 eR8G8Sscaled = VK_FORMAT_R8G8_SSCALED,
4726 eR8G8Uint = VK_FORMAT_R8G8_UINT,
4727 eR8G8Sint = VK_FORMAT_R8G8_SINT,
4728 eR8G8Srgb = VK_FORMAT_R8G8_SRGB,
4729 eR8G8B8Unorm = VK_FORMAT_R8G8B8_UNORM,
4730 eR8G8B8Snorm = VK_FORMAT_R8G8B8_SNORM,
4731 eR8G8B8Uscaled = VK_FORMAT_R8G8B8_USCALED,
4732 eR8G8B8Sscaled = VK_FORMAT_R8G8B8_SSCALED,
4733 eR8G8B8Uint = VK_FORMAT_R8G8B8_UINT,
4734 eR8G8B8Sint = VK_FORMAT_R8G8B8_SINT,
4735 eR8G8B8Srgb = VK_FORMAT_R8G8B8_SRGB,
4736 eB8G8R8Unorm = VK_FORMAT_B8G8R8_UNORM,
4737 eB8G8R8Snorm = VK_FORMAT_B8G8R8_SNORM,
4738 eB8G8R8Uscaled = VK_FORMAT_B8G8R8_USCALED,
4739 eB8G8R8Sscaled = VK_FORMAT_B8G8R8_SSCALED,
4740 eB8G8R8Uint = VK_FORMAT_B8G8R8_UINT,
4741 eB8G8R8Sint = VK_FORMAT_B8G8R8_SINT,
4742 eB8G8R8Srgb = VK_FORMAT_B8G8R8_SRGB,
4743 eR8G8B8A8Unorm = VK_FORMAT_R8G8B8A8_UNORM,
4744 eR8G8B8A8Snorm = VK_FORMAT_R8G8B8A8_SNORM,
4745 eR8G8B8A8Uscaled = VK_FORMAT_R8G8B8A8_USCALED,
4746 eR8G8B8A8Sscaled = VK_FORMAT_R8G8B8A8_SSCALED,
4747 eR8G8B8A8Uint = VK_FORMAT_R8G8B8A8_UINT,
4748 eR8G8B8A8Sint = VK_FORMAT_R8G8B8A8_SINT,
4749 eR8G8B8A8Srgb = VK_FORMAT_R8G8B8A8_SRGB,
4750 eB8G8R8A8Unorm = VK_FORMAT_B8G8R8A8_UNORM,
4751 eB8G8R8A8Snorm = VK_FORMAT_B8G8R8A8_SNORM,
4752 eB8G8R8A8Uscaled = VK_FORMAT_B8G8R8A8_USCALED,
4753 eB8G8R8A8Sscaled = VK_FORMAT_B8G8R8A8_SSCALED,
4754 eB8G8R8A8Uint = VK_FORMAT_B8G8R8A8_UINT,
4755 eB8G8R8A8Sint = VK_FORMAT_B8G8R8A8_SINT,
4756 eB8G8R8A8Srgb = VK_FORMAT_B8G8R8A8_SRGB,
4757 eA8B8G8R8UnormPack32 = VK_FORMAT_A8B8G8R8_UNORM_PACK32,
4758 eA8B8G8R8SnormPack32 = VK_FORMAT_A8B8G8R8_SNORM_PACK32,
4759 eA8B8G8R8UscaledPack32 = VK_FORMAT_A8B8G8R8_USCALED_PACK32,
4760 eA8B8G8R8SscaledPack32 = VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
4761 eA8B8G8R8UintPack32 = VK_FORMAT_A8B8G8R8_UINT_PACK32,
4762 eA8B8G8R8SintPack32 = VK_FORMAT_A8B8G8R8_SINT_PACK32,
4763 eA8B8G8R8SrgbPack32 = VK_FORMAT_A8B8G8R8_SRGB_PACK32,
4764 eA2R10G10B10UnormPack32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32,
4765 eA2R10G10B10SnormPack32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32,
4766 eA2R10G10B10UscaledPack32 = VK_FORMAT_A2R10G10B10_USCALED_PACK32,
4767 eA2R10G10B10SscaledPack32 = VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
4768 eA2R10G10B10UintPack32 = VK_FORMAT_A2R10G10B10_UINT_PACK32,
4769 eA2R10G10B10SintPack32 = VK_FORMAT_A2R10G10B10_SINT_PACK32,
4770 eA2B10G10R10UnormPack32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32,
4771 eA2B10G10R10SnormPack32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32,
4772 eA2B10G10R10UscaledPack32 = VK_FORMAT_A2B10G10R10_USCALED_PACK32,
4773 eA2B10G10R10SscaledPack32 = VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
4774 eA2B10G10R10UintPack32 = VK_FORMAT_A2B10G10R10_UINT_PACK32,
4775 eA2B10G10R10SintPack32 = VK_FORMAT_A2B10G10R10_SINT_PACK32,
4776 eR16Unorm = VK_FORMAT_R16_UNORM,
4777 eR16Snorm = VK_FORMAT_R16_SNORM,
4778 eR16Uscaled = VK_FORMAT_R16_USCALED,
4779 eR16Sscaled = VK_FORMAT_R16_SSCALED,
4780 eR16Uint = VK_FORMAT_R16_UINT,
4781 eR16Sint = VK_FORMAT_R16_SINT,
4782 eR16Sfloat = VK_FORMAT_R16_SFLOAT,
4783 eR16G16Unorm = VK_FORMAT_R16G16_UNORM,
4784 eR16G16Snorm = VK_FORMAT_R16G16_SNORM,
4785 eR16G16Uscaled = VK_FORMAT_R16G16_USCALED,
4786 eR16G16Sscaled = VK_FORMAT_R16G16_SSCALED,
4787 eR16G16Uint = VK_FORMAT_R16G16_UINT,
4788 eR16G16Sint = VK_FORMAT_R16G16_SINT,
4789 eR16G16Sfloat = VK_FORMAT_R16G16_SFLOAT,
4790 eR16G16B16Unorm = VK_FORMAT_R16G16B16_UNORM,
4791 eR16G16B16Snorm = VK_FORMAT_R16G16B16_SNORM,
4792 eR16G16B16Uscaled = VK_FORMAT_R16G16B16_USCALED,
4793 eR16G16B16Sscaled = VK_FORMAT_R16G16B16_SSCALED,
4794 eR16G16B16Uint = VK_FORMAT_R16G16B16_UINT,
4795 eR16G16B16Sint = VK_FORMAT_R16G16B16_SINT,
4796 eR16G16B16Sfloat = VK_FORMAT_R16G16B16_SFLOAT,
4797 eR16G16B16A16Unorm = VK_FORMAT_R16G16B16A16_UNORM,
4798 eR16G16B16A16Snorm = VK_FORMAT_R16G16B16A16_SNORM,
4799 eR16G16B16A16Uscaled = VK_FORMAT_R16G16B16A16_USCALED,
4800 eR16G16B16A16Sscaled = VK_FORMAT_R16G16B16A16_SSCALED,
4801 eR16G16B16A16Uint = VK_FORMAT_R16G16B16A16_UINT,
4802 eR16G16B16A16Sint = VK_FORMAT_R16G16B16A16_SINT,
4803 eR16G16B16A16Sfloat = VK_FORMAT_R16G16B16A16_SFLOAT,
4804 eR32Uint = VK_FORMAT_R32_UINT,
4805 eR32Sint = VK_FORMAT_R32_SINT,
4806 eR32Sfloat = VK_FORMAT_R32_SFLOAT,
4807 eR32G32Uint = VK_FORMAT_R32G32_UINT,
4808 eR32G32Sint = VK_FORMAT_R32G32_SINT,
4809 eR32G32Sfloat = VK_FORMAT_R32G32_SFLOAT,
4810 eR32G32B32Uint = VK_FORMAT_R32G32B32_UINT,
4811 eR32G32B32Sint = VK_FORMAT_R32G32B32_SINT,
4812 eR32G32B32Sfloat = VK_FORMAT_R32G32B32_SFLOAT,
4813 eR32G32B32A32Uint = VK_FORMAT_R32G32B32A32_UINT,
4814 eR32G32B32A32Sint = VK_FORMAT_R32G32B32A32_SINT,
4815 eR32G32B32A32Sfloat = VK_FORMAT_R32G32B32A32_SFLOAT,
4816 eR64Uint = VK_FORMAT_R64_UINT,
4817 eR64Sint = VK_FORMAT_R64_SINT,
4818 eR64Sfloat = VK_FORMAT_R64_SFLOAT,
4819 eR64G64Uint = VK_FORMAT_R64G64_UINT,
4820 eR64G64Sint = VK_FORMAT_R64G64_SINT,
4821 eR64G64Sfloat = VK_FORMAT_R64G64_SFLOAT,
4822 eR64G64B64Uint = VK_FORMAT_R64G64B64_UINT,
4823 eR64G64B64Sint = VK_FORMAT_R64G64B64_SINT,
4824 eR64G64B64Sfloat = VK_FORMAT_R64G64B64_SFLOAT,
4825 eR64G64B64A64Uint = VK_FORMAT_R64G64B64A64_UINT,
4826 eR64G64B64A64Sint = VK_FORMAT_R64G64B64A64_SINT,
4827 eR64G64B64A64Sfloat = VK_FORMAT_R64G64B64A64_SFLOAT,
4828 eB10G11R11UfloatPack32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32,
4829 eE5B9G9R9UfloatPack32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
4830 eD16Unorm = VK_FORMAT_D16_UNORM,
4831 eX8D24UnormPack32 = VK_FORMAT_X8_D24_UNORM_PACK32,
4832 eD32Sfloat = VK_FORMAT_D32_SFLOAT,
4833 eS8Uint = VK_FORMAT_S8_UINT,
4834 eD16UnormS8Uint = VK_FORMAT_D16_UNORM_S8_UINT,
4835 eD24UnormS8Uint = VK_FORMAT_D24_UNORM_S8_UINT,
4836 eD32SfloatS8Uint = VK_FORMAT_D32_SFLOAT_S8_UINT,
4837 eBc1RgbUnormBlock = VK_FORMAT_BC1_RGB_UNORM_BLOCK,
4838 eBc1RgbSrgbBlock = VK_FORMAT_BC1_RGB_SRGB_BLOCK,
4839 eBc1RgbaUnormBlock = VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
4840 eBc1RgbaSrgbBlock = VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
4841 eBc2UnormBlock = VK_FORMAT_BC2_UNORM_BLOCK,
4842 eBc2SrgbBlock = VK_FORMAT_BC2_SRGB_BLOCK,
4843 eBc3UnormBlock = VK_FORMAT_BC3_UNORM_BLOCK,
4844 eBc3SrgbBlock = VK_FORMAT_BC3_SRGB_BLOCK,
4845 eBc4UnormBlock = VK_FORMAT_BC4_UNORM_BLOCK,
4846 eBc4SnormBlock = VK_FORMAT_BC4_SNORM_BLOCK,
4847 eBc5UnormBlock = VK_FORMAT_BC5_UNORM_BLOCK,
4848 eBc5SnormBlock = VK_FORMAT_BC5_SNORM_BLOCK,
4849 eBc6HUfloatBlock = VK_FORMAT_BC6H_UFLOAT_BLOCK,
4850 eBc6HSfloatBlock = VK_FORMAT_BC6H_SFLOAT_BLOCK,
4851 eBc7UnormBlock = VK_FORMAT_BC7_UNORM_BLOCK,
4852 eBc7SrgbBlock = VK_FORMAT_BC7_SRGB_BLOCK,
4853 eEtc2R8G8B8UnormBlock = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
4854 eEtc2R8G8B8SrgbBlock = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
4855 eEtc2R8G8B8A1UnormBlock = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
4856 eEtc2R8G8B8A1SrgbBlock = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
4857 eEtc2R8G8B8A8UnormBlock = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
4858 eEtc2R8G8B8A8SrgbBlock = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
4859 eEacR11UnormBlock = VK_FORMAT_EAC_R11_UNORM_BLOCK,
4860 eEacR11SnormBlock = VK_FORMAT_EAC_R11_SNORM_BLOCK,
4861 eEacR11G11UnormBlock = VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
4862 eEacR11G11SnormBlock = VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
4863 eAstc4x4UnormBlock = VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
4864 eAstc4x4SrgbBlock = VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
4865 eAstc5x4UnormBlock = VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
4866 eAstc5x4SrgbBlock = VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
4867 eAstc5x5UnormBlock = VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
4868 eAstc5x5SrgbBlock = VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
4869 eAstc6x5UnormBlock = VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
4870 eAstc6x5SrgbBlock = VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
4871 eAstc6x6UnormBlock = VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
4872 eAstc6x6SrgbBlock = VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
4873 eAstc8x5UnormBlock = VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
4874 eAstc8x5SrgbBlock = VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
4875 eAstc8x6UnormBlock = VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
4876 eAstc8x6SrgbBlock = VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
4877 eAstc8x8UnormBlock = VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
4878 eAstc8x8SrgbBlock = VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
4879 eAstc10x5UnormBlock = VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
4880 eAstc10x5SrgbBlock = VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
4881 eAstc10x6UnormBlock = VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
4882 eAstc10x6SrgbBlock = VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
4883 eAstc10x8UnormBlock = VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
4884 eAstc10x8SrgbBlock = VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
4885 eAstc10x10UnormBlock = VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
4886 eAstc10x10SrgbBlock = VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
4887 eAstc12x10UnormBlock = VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
4888 eAstc12x10SrgbBlock = VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
4889 eAstc12x12UnormBlock = VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
4890 eAstc12x12SrgbBlock = VK_FORMAT_ASTC_12x12_SRGB_BLOCK
4891 };
4892
4893 struct VertexInputAttributeDescription
4894 {
4895 VertexInputAttributeDescription( uint32_t location_ = 0, uint32_t binding_ = 0, Format format_ = Format::eUndefined, uint32_t offset_ = 0 )
4896 : location( location_ )
4897 , binding( binding_ )
4898 , format( format_ )
4899 , offset( offset_ )
4900 {
4901 }
4902
4903 VertexInputAttributeDescription( VkVertexInputAttributeDescription const & rhs )
4904 {
4905 memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
4906 }
4907
4908 VertexInputAttributeDescription& operator=( VkVertexInputAttributeDescription const & rhs )
4909 {
4910 memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
4911 return *this;
4912 }
4913
4914 VertexInputAttributeDescription& setLocation( uint32_t location_ )
4915 {
4916 location = location_;
4917 return *this;
4918 }
4919
4920 VertexInputAttributeDescription& setBinding( uint32_t binding_ )
4921 {
4922 binding = binding_;
4923 return *this;
4924 }
4925
4926 VertexInputAttributeDescription& setFormat( Format format_ )
4927 {
4928 format = format_;
4929 return *this;
4930 }
4931
4932 VertexInputAttributeDescription& setOffset( uint32_t offset_ )
4933 {
4934 offset = offset_;
4935 return *this;
4936 }
4937
4938 operator const VkVertexInputAttributeDescription&() const
4939 {
4940 return *reinterpret_cast<const VkVertexInputAttributeDescription*>(this);
4941 }
4942
4943 bool operator==( VertexInputAttributeDescription const& rhs ) const
4944 {
4945 return ( location == rhs.location )
4946 && ( binding == rhs.binding )
4947 && ( format == rhs.format )
4948 && ( offset == rhs.offset );
4949 }
4950
4951 bool operator!=( VertexInputAttributeDescription const& rhs ) const
4952 {
4953 return !operator==( rhs );
4954 }
4955
4956 uint32_t location;
4957 uint32_t binding;
4958 Format format;
4959 uint32_t offset;
4960 };
4961 static_assert( sizeof( VertexInputAttributeDescription ) == sizeof( VkVertexInputAttributeDescription ), "struct and wrapper have different size!" );
4962
4963 enum class StructureType
4964 {
4965 eApplicationInfo = VK_STRUCTURE_TYPE_APPLICATION_INFO,
4966 eInstanceCreateInfo = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
4967 eDeviceQueueCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
4968 eDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
4969 eSubmitInfo = VK_STRUCTURE_TYPE_SUBMIT_INFO,
4970 eMemoryAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
4971 eMappedMemoryRange = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
4972 eBindSparseInfo = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
4973 eFenceCreateInfo = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
4974 eSemaphoreCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
4975 eEventCreateInfo = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO,
4976 eQueryPoolCreateInfo = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
4977 eBufferCreateInfo = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
4978 eBufferViewCreateInfo = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO,
4979 eImageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
4980 eImageViewCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
4981 eShaderModuleCreateInfo = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
4982 ePipelineCacheCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,
4983 ePipelineShaderStageCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
4984 ePipelineVertexInputStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
4985 ePipelineInputAssemblyStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
4986 ePipelineTessellationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
4987 ePipelineViewportStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
4988 ePipelineRasterizationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
4989 ePipelineMultisampleStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
4990 ePipelineDepthStencilStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
4991 ePipelineColorBlendStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
4992 ePipelineDynamicStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
4993 eGraphicsPipelineCreateInfo = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
4994 eComputePipelineCreateInfo = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
4995 ePipelineLayoutCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
4996 eSamplerCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
4997 eDescriptorSetLayoutCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
4998 eDescriptorPoolCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
4999 eDescriptorSetAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
5000 eWriteDescriptorSet = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
5001 eCopyDescriptorSet = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
5002 eFramebufferCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
5003 eRenderPassCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
5004 eCommandPoolCreateInfo = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
5005 eCommandBufferAllocateInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
5006 eCommandBufferInheritanceInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
5007 eCommandBufferBeginInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
5008 eRenderPassBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
5009 eBufferMemoryBarrier = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
5010 eImageMemoryBarrier = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
5011 eMemoryBarrier = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
5012 eLoaderInstanceCreateInfo = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
5013 eLoaderDeviceCreateInfo = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
5014 eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
5015 ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
5016 eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
5017 eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
5018 eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
5019 eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
5020 eXcbSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
5021 eWaylandSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
5022 eMirSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR,
5023 eAndroidSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
5024 eWin32SurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
5025 eDebugReportCallbackCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
5026 ePipelineRasterizationStateRasterizationOrderAMD = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD,
5027 eDebugMarkerObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
5028 eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
5029 eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
5030 eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
5031 eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
5032 eDedicatedAllocationMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV
5033 };
5034
5035 struct ApplicationInfo
5036 {
5037 ApplicationInfo( const char* pApplicationName_ = nullptr, uint32_t applicationVersion_ = 0, const char* pEngineName_ = nullptr, uint32_t engineVersion_ = 0, uint32_t apiVersion_ = 0 )
5038 : sType( StructureType::eApplicationInfo )
5039 , pNext( nullptr )
5040 , pApplicationName( pApplicationName_ )
5041 , applicationVersion( applicationVersion_ )
5042 , pEngineName( pEngineName_ )
5043 , engineVersion( engineVersion_ )
5044 , apiVersion( apiVersion_ )
5045 {
5046 }
5047
5048 ApplicationInfo( VkApplicationInfo const & rhs )
5049 {
5050 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5051 }
5052
5053 ApplicationInfo& operator=( VkApplicationInfo const & rhs )
5054 {
5055 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5056 return *this;
5057 }
5058
5059 ApplicationInfo& setSType( StructureType sType_ )
5060 {
5061 sType = sType_;
5062 return *this;
5063 }
5064
5065 ApplicationInfo& setPNext( const void* pNext_ )
5066 {
5067 pNext = pNext_;
5068 return *this;
5069 }
5070
5071 ApplicationInfo& setPApplicationName( const char* pApplicationName_ )
5072 {
5073 pApplicationName = pApplicationName_;
5074 return *this;
5075 }
5076
5077 ApplicationInfo& setApplicationVersion( uint32_t applicationVersion_ )
5078 {
5079 applicationVersion = applicationVersion_;
5080 return *this;
5081 }
5082
5083 ApplicationInfo& setPEngineName( const char* pEngineName_ )
5084 {
5085 pEngineName = pEngineName_;
5086 return *this;
5087 }
5088
5089 ApplicationInfo& setEngineVersion( uint32_t engineVersion_ )
5090 {
5091 engineVersion = engineVersion_;
5092 return *this;
5093 }
5094
5095 ApplicationInfo& setApiVersion( uint32_t apiVersion_ )
5096 {
5097 apiVersion = apiVersion_;
5098 return *this;
5099 }
5100
5101 operator const VkApplicationInfo&() const
5102 {
5103 return *reinterpret_cast<const VkApplicationInfo*>(this);
5104 }
5105
5106 bool operator==( ApplicationInfo const& rhs ) const
5107 {
5108 return ( sType == rhs.sType )
5109 && ( pNext == rhs.pNext )
5110 && ( pApplicationName == rhs.pApplicationName )
5111 && ( applicationVersion == rhs.applicationVersion )
5112 && ( pEngineName == rhs.pEngineName )
5113 && ( engineVersion == rhs.engineVersion )
5114 && ( apiVersion == rhs.apiVersion );
5115 }
5116
5117 bool operator!=( ApplicationInfo const& rhs ) const
5118 {
5119 return !operator==( rhs );
5120 }
5121
5122 private:
5123 StructureType sType;
5124
5125 public:
5126 const void* pNext;
5127 const char* pApplicationName;
5128 uint32_t applicationVersion;
5129 const char* pEngineName;
5130 uint32_t engineVersion;
5131 uint32_t apiVersion;
5132 };
5133 static_assert( sizeof( ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" );
5134
5135 struct DeviceQueueCreateInfo
5136 {
5137 DeviceQueueCreateInfo( DeviceQueueCreateFlags flags_ = DeviceQueueCreateFlags(), uint32_t queueFamilyIndex_ = 0, uint32_t queueCount_ = 0, const float* pQueuePriorities_ = nullptr )
5138 : sType( StructureType::eDeviceQueueCreateInfo )
5139 , pNext( nullptr )
5140 , flags( flags_ )
5141 , queueFamilyIndex( queueFamilyIndex_ )
5142 , queueCount( queueCount_ )
5143 , pQueuePriorities( pQueuePriorities_ )
5144 {
5145 }
5146
5147 DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs )
5148 {
5149 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5150 }
5151
5152 DeviceQueueCreateInfo& operator=( VkDeviceQueueCreateInfo const & rhs )
5153 {
5154 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5155 return *this;
5156 }
5157
5158 DeviceQueueCreateInfo& setSType( StructureType sType_ )
5159 {
5160 sType = sType_;
5161 return *this;
5162 }
5163
5164 DeviceQueueCreateInfo& setPNext( const void* pNext_ )
5165 {
5166 pNext = pNext_;
5167 return *this;
5168 }
5169
5170 DeviceQueueCreateInfo& setFlags( DeviceQueueCreateFlags flags_ )
5171 {
5172 flags = flags_;
5173 return *this;
5174 }
5175
5176 DeviceQueueCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
5177 {
5178 queueFamilyIndex = queueFamilyIndex_;
5179 return *this;
5180 }
5181
5182 DeviceQueueCreateInfo& setQueueCount( uint32_t queueCount_ )
5183 {
5184 queueCount = queueCount_;
5185 return *this;
5186 }
5187
5188 DeviceQueueCreateInfo& setPQueuePriorities( const float* pQueuePriorities_ )
5189 {
5190 pQueuePriorities = pQueuePriorities_;
5191 return *this;
5192 }
5193
5194 operator const VkDeviceQueueCreateInfo&() const
5195 {
5196 return *reinterpret_cast<const VkDeviceQueueCreateInfo*>(this);
5197 }
5198
5199 bool operator==( DeviceQueueCreateInfo const& rhs ) const
5200 {
5201 return ( sType == rhs.sType )
5202 && ( pNext == rhs.pNext )
5203 && ( flags == rhs.flags )
5204 && ( queueFamilyIndex == rhs.queueFamilyIndex )
5205 && ( queueCount == rhs.queueCount )
5206 && ( pQueuePriorities == rhs.pQueuePriorities );
5207 }
5208
5209 bool operator!=( DeviceQueueCreateInfo const& rhs ) const
5210 {
5211 return !operator==( rhs );
5212 }
5213
5214 private:
5215 StructureType sType;
5216
5217 public:
5218 const void* pNext;
5219 DeviceQueueCreateFlags flags;
5220 uint32_t queueFamilyIndex;
5221 uint32_t queueCount;
5222 const float* pQueuePriorities;
5223 };
5224 static_assert( sizeof( DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ), "struct and wrapper have different size!" );
5225
5226 struct DeviceCreateInfo
5227 {
5228 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 )
5229 : sType( StructureType::eDeviceCreateInfo )
5230 , pNext( nullptr )
5231 , flags( flags_ )
5232 , queueCreateInfoCount( queueCreateInfoCount_ )
5233 , pQueueCreateInfos( pQueueCreateInfos_ )
5234 , enabledLayerCount( enabledLayerCount_ )
5235 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5236 , enabledExtensionCount( enabledExtensionCount_ )
5237 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5238 , pEnabledFeatures( pEnabledFeatures_ )
5239 {
5240 }
5241
5242 DeviceCreateInfo( VkDeviceCreateInfo const & rhs )
5243 {
5244 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5245 }
5246
5247 DeviceCreateInfo& operator=( VkDeviceCreateInfo const & rhs )
5248 {
5249 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5250 return *this;
5251 }
5252
5253 DeviceCreateInfo& setSType( StructureType sType_ )
5254 {
5255 sType = sType_;
5256 return *this;
5257 }
5258
5259 DeviceCreateInfo& setPNext( const void* pNext_ )
5260 {
5261 pNext = pNext_;
5262 return *this;
5263 }
5264
5265 DeviceCreateInfo& setFlags( DeviceCreateFlags flags_ )
5266 {
5267 flags = flags_;
5268 return *this;
5269 }
5270
5271 DeviceCreateInfo& setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ )
5272 {
5273 queueCreateInfoCount = queueCreateInfoCount_;
5274 return *this;
5275 }
5276
5277 DeviceCreateInfo& setPQueueCreateInfos( const DeviceQueueCreateInfo* pQueueCreateInfos_ )
5278 {
5279 pQueueCreateInfos = pQueueCreateInfos_;
5280 return *this;
5281 }
5282
5283 DeviceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5284 {
5285 enabledLayerCount = enabledLayerCount_;
5286 return *this;
5287 }
5288
5289 DeviceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5290 {
5291 ppEnabledLayerNames = ppEnabledLayerNames_;
5292 return *this;
5293 }
5294
5295 DeviceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5296 {
5297 enabledExtensionCount = enabledExtensionCount_;
5298 return *this;
5299 }
5300
5301 DeviceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5302 {
5303 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5304 return *this;
5305 }
5306
5307 DeviceCreateInfo& setPEnabledFeatures( const PhysicalDeviceFeatures* pEnabledFeatures_ )
5308 {
5309 pEnabledFeatures = pEnabledFeatures_;
5310 return *this;
5311 }
5312
5313 operator const VkDeviceCreateInfo&() const
5314 {
5315 return *reinterpret_cast<const VkDeviceCreateInfo*>(this);
5316 }
5317
5318 bool operator==( DeviceCreateInfo const& rhs ) const
5319 {
5320 return ( sType == rhs.sType )
5321 && ( pNext == rhs.pNext )
5322 && ( flags == rhs.flags )
5323 && ( queueCreateInfoCount == rhs.queueCreateInfoCount )
5324 && ( pQueueCreateInfos == rhs.pQueueCreateInfos )
5325 && ( enabledLayerCount == rhs.enabledLayerCount )
5326 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5327 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5328 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames )
5329 && ( pEnabledFeatures == rhs.pEnabledFeatures );
5330 }
5331
5332 bool operator!=( DeviceCreateInfo const& rhs ) const
5333 {
5334 return !operator==( rhs );
5335 }
5336
5337 private:
5338 StructureType sType;
5339
5340 public:
5341 const void* pNext;
5342 DeviceCreateFlags flags;
5343 uint32_t queueCreateInfoCount;
5344 const DeviceQueueCreateInfo* pQueueCreateInfos;
5345 uint32_t enabledLayerCount;
5346 const char* const* ppEnabledLayerNames;
5347 uint32_t enabledExtensionCount;
5348 const char* const* ppEnabledExtensionNames;
5349 const PhysicalDeviceFeatures* pEnabledFeatures;
5350 };
5351 static_assert( sizeof( DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ), "struct and wrapper have different size!" );
5352
5353 struct InstanceCreateInfo
5354 {
5355 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 )
5356 : sType( StructureType::eInstanceCreateInfo )
5357 , pNext( nullptr )
5358 , flags( flags_ )
5359 , pApplicationInfo( pApplicationInfo_ )
5360 , enabledLayerCount( enabledLayerCount_ )
5361 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5362 , enabledExtensionCount( enabledExtensionCount_ )
5363 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5364 {
5365 }
5366
5367 InstanceCreateInfo( VkInstanceCreateInfo const & rhs )
5368 {
5369 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5370 }
5371
5372 InstanceCreateInfo& operator=( VkInstanceCreateInfo const & rhs )
5373 {
5374 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5375 return *this;
5376 }
5377
5378 InstanceCreateInfo& setSType( StructureType sType_ )
5379 {
5380 sType = sType_;
5381 return *this;
5382 }
5383
5384 InstanceCreateInfo& setPNext( const void* pNext_ )
5385 {
5386 pNext = pNext_;
5387 return *this;
5388 }
5389
5390 InstanceCreateInfo& setFlags( InstanceCreateFlags flags_ )
5391 {
5392 flags = flags_;
5393 return *this;
5394 }
5395
5396 InstanceCreateInfo& setPApplicationInfo( const ApplicationInfo* pApplicationInfo_ )
5397 {
5398 pApplicationInfo = pApplicationInfo_;
5399 return *this;
5400 }
5401
5402 InstanceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5403 {
5404 enabledLayerCount = enabledLayerCount_;
5405 return *this;
5406 }
5407
5408 InstanceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5409 {
5410 ppEnabledLayerNames = ppEnabledLayerNames_;
5411 return *this;
5412 }
5413
5414 InstanceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5415 {
5416 enabledExtensionCount = enabledExtensionCount_;
5417 return *this;
5418 }
5419
5420 InstanceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5421 {
5422 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5423 return *this;
5424 }
5425
5426 operator const VkInstanceCreateInfo&() const
5427 {
5428 return *reinterpret_cast<const VkInstanceCreateInfo*>(this);
5429 }
5430
5431 bool operator==( InstanceCreateInfo const& rhs ) const
5432 {
5433 return ( sType == rhs.sType )
5434 && ( pNext == rhs.pNext )
5435 && ( flags == rhs.flags )
5436 && ( pApplicationInfo == rhs.pApplicationInfo )
5437 && ( enabledLayerCount == rhs.enabledLayerCount )
5438 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5439 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5440 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames );
5441 }
5442
5443 bool operator!=( InstanceCreateInfo const& rhs ) const
5444 {
5445 return !operator==( rhs );
5446 }
5447
5448 private:
5449 StructureType sType;
5450
5451 public:
5452 const void* pNext;
5453 InstanceCreateFlags flags;
5454 const ApplicationInfo* pApplicationInfo;
5455 uint32_t enabledLayerCount;
5456 const char* const* ppEnabledLayerNames;
5457 uint32_t enabledExtensionCount;
5458 const char* const* ppEnabledExtensionNames;
5459 };
5460 static_assert( sizeof( InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ), "struct and wrapper have different size!" );
5461
5462 struct MemoryAllocateInfo
5463 {
5464 MemoryAllocateInfo( DeviceSize allocationSize_ = 0, uint32_t memoryTypeIndex_ = 0 )
5465 : sType( StructureType::eMemoryAllocateInfo )
5466 , pNext( nullptr )
5467 , allocationSize( allocationSize_ )
5468 , memoryTypeIndex( memoryTypeIndex_ )
5469 {
5470 }
5471
5472 MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs )
5473 {
5474 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5475 }
5476
5477 MemoryAllocateInfo& operator=( VkMemoryAllocateInfo const & rhs )
5478 {
5479 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5480 return *this;
5481 }
5482
5483 MemoryAllocateInfo& setSType( StructureType sType_ )
5484 {
5485 sType = sType_;
5486 return *this;
5487 }
5488
5489 MemoryAllocateInfo& setPNext( const void* pNext_ )
5490 {
5491 pNext = pNext_;
5492 return *this;
5493 }
5494
5495 MemoryAllocateInfo& setAllocationSize( DeviceSize allocationSize_ )
5496 {
5497 allocationSize = allocationSize_;
5498 return *this;
5499 }
5500
5501 MemoryAllocateInfo& setMemoryTypeIndex( uint32_t memoryTypeIndex_ )
5502 {
5503 memoryTypeIndex = memoryTypeIndex_;
5504 return *this;
5505 }
5506
5507 operator const VkMemoryAllocateInfo&() const
5508 {
5509 return *reinterpret_cast<const VkMemoryAllocateInfo*>(this);
5510 }
5511
5512 bool operator==( MemoryAllocateInfo const& rhs ) const
5513 {
5514 return ( sType == rhs.sType )
5515 && ( pNext == rhs.pNext )
5516 && ( allocationSize == rhs.allocationSize )
5517 && ( memoryTypeIndex == rhs.memoryTypeIndex );
5518 }
5519
5520 bool operator!=( MemoryAllocateInfo const& rhs ) const
5521 {
5522 return !operator==( rhs );
5523 }
5524
5525 private:
5526 StructureType sType;
5527
5528 public:
5529 const void* pNext;
5530 DeviceSize allocationSize;
5531 uint32_t memoryTypeIndex;
5532 };
5533 static_assert( sizeof( MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ), "struct and wrapper have different size!" );
5534
5535 struct MappedMemoryRange
5536 {
5537 MappedMemoryRange( DeviceMemory memory_ = DeviceMemory(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
5538 : sType( StructureType::eMappedMemoryRange )
5539 , pNext( nullptr )
5540 , memory( memory_ )
5541 , offset( offset_ )
5542 , size( size_ )
5543 {
5544 }
5545
5546 MappedMemoryRange( VkMappedMemoryRange const & rhs )
5547 {
5548 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5549 }
5550
5551 MappedMemoryRange& operator=( VkMappedMemoryRange const & rhs )
5552 {
5553 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5554 return *this;
5555 }
5556
5557 MappedMemoryRange& setSType( StructureType sType_ )
5558 {
5559 sType = sType_;
5560 return *this;
5561 }
5562
5563 MappedMemoryRange& setPNext( const void* pNext_ )
5564 {
5565 pNext = pNext_;
5566 return *this;
5567 }
5568
5569 MappedMemoryRange& setMemory( DeviceMemory memory_ )
5570 {
5571 memory = memory_;
5572 return *this;
5573 }
5574
5575 MappedMemoryRange& setOffset( DeviceSize offset_ )
5576 {
5577 offset = offset_;
5578 return *this;
5579 }
5580
5581 MappedMemoryRange& setSize( DeviceSize size_ )
5582 {
5583 size = size_;
5584 return *this;
5585 }
5586
5587 operator const VkMappedMemoryRange&() const
5588 {
5589 return *reinterpret_cast<const VkMappedMemoryRange*>(this);
5590 }
5591
5592 bool operator==( MappedMemoryRange const& rhs ) const
5593 {
5594 return ( sType == rhs.sType )
5595 && ( pNext == rhs.pNext )
5596 && ( memory == rhs.memory )
5597 && ( offset == rhs.offset )
5598 && ( size == rhs.size );
5599 }
5600
5601 bool operator!=( MappedMemoryRange const& rhs ) const
5602 {
5603 return !operator==( rhs );
5604 }
5605
5606 private:
5607 StructureType sType;
5608
5609 public:
5610 const void* pNext;
5611 DeviceMemory memory;
5612 DeviceSize offset;
5613 DeviceSize size;
5614 };
5615 static_assert( sizeof( MappedMemoryRange ) == sizeof( VkMappedMemoryRange ), "struct and wrapper have different size!" );
5616
5617 struct WriteDescriptorSet
5618 {
5619 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 )
5620 : sType( StructureType::eWriteDescriptorSet )
5621 , pNext( nullptr )
5622 , dstSet( dstSet_ )
5623 , dstBinding( dstBinding_ )
5624 , dstArrayElement( dstArrayElement_ )
5625 , descriptorCount( descriptorCount_ )
5626 , descriptorType( descriptorType_ )
5627 , pImageInfo( pImageInfo_ )
5628 , pBufferInfo( pBufferInfo_ )
5629 , pTexelBufferView( pTexelBufferView_ )
5630 {
5631 }
5632
5633 WriteDescriptorSet( VkWriteDescriptorSet const & rhs )
5634 {
5635 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
5636 }
5637
5638 WriteDescriptorSet& operator=( VkWriteDescriptorSet const & rhs )
5639 {
5640 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
5641 return *this;
5642 }
5643
5644 WriteDescriptorSet& setSType( StructureType sType_ )
5645 {
5646 sType = sType_;
5647 return *this;
5648 }
5649
5650 WriteDescriptorSet& setPNext( const void* pNext_ )
5651 {
5652 pNext = pNext_;
5653 return *this;
5654 }
5655
5656 WriteDescriptorSet& setDstSet( DescriptorSet dstSet_ )
5657 {
5658 dstSet = dstSet_;
5659 return *this;
5660 }
5661
5662 WriteDescriptorSet& setDstBinding( uint32_t dstBinding_ )
5663 {
5664 dstBinding = dstBinding_;
5665 return *this;
5666 }
5667
5668 WriteDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
5669 {
5670 dstArrayElement = dstArrayElement_;
5671 return *this;
5672 }
5673
5674 WriteDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
5675 {
5676 descriptorCount = descriptorCount_;
5677 return *this;
5678 }
5679
5680 WriteDescriptorSet& setDescriptorType( DescriptorType descriptorType_ )
5681 {
5682 descriptorType = descriptorType_;
5683 return *this;
5684 }
5685
5686 WriteDescriptorSet& setPImageInfo( const DescriptorImageInfo* pImageInfo_ )
5687 {
5688 pImageInfo = pImageInfo_;
5689 return *this;
5690 }
5691
5692 WriteDescriptorSet& setPBufferInfo( const DescriptorBufferInfo* pBufferInfo_ )
5693 {
5694 pBufferInfo = pBufferInfo_;
5695 return *this;
5696 }
5697
5698 WriteDescriptorSet& setPTexelBufferView( const BufferView* pTexelBufferView_ )
5699 {
5700 pTexelBufferView = pTexelBufferView_;
5701 return *this;
5702 }
5703
5704 operator const VkWriteDescriptorSet&() const
5705 {
5706 return *reinterpret_cast<const VkWriteDescriptorSet*>(this);
5707 }
5708
5709 bool operator==( WriteDescriptorSet const& rhs ) const
5710 {
5711 return ( sType == rhs.sType )
5712 && ( pNext == rhs.pNext )
5713 && ( dstSet == rhs.dstSet )
5714 && ( dstBinding == rhs.dstBinding )
5715 && ( dstArrayElement == rhs.dstArrayElement )
5716 && ( descriptorCount == rhs.descriptorCount )
5717 && ( descriptorType == rhs.descriptorType )
5718 && ( pImageInfo == rhs.pImageInfo )
5719 && ( pBufferInfo == rhs.pBufferInfo )
5720 && ( pTexelBufferView == rhs.pTexelBufferView );
5721 }
5722
5723 bool operator!=( WriteDescriptorSet const& rhs ) const
5724 {
5725 return !operator==( rhs );
5726 }
5727
5728 private:
5729 StructureType sType;
5730
5731 public:
5732 const void* pNext;
5733 DescriptorSet dstSet;
5734 uint32_t dstBinding;
5735 uint32_t dstArrayElement;
5736 uint32_t descriptorCount;
5737 DescriptorType descriptorType;
5738 const DescriptorImageInfo* pImageInfo;
5739 const DescriptorBufferInfo* pBufferInfo;
5740 const BufferView* pTexelBufferView;
5741 };
5742 static_assert( sizeof( WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ), "struct and wrapper have different size!" );
5743
5744 struct CopyDescriptorSet
5745 {
5746 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 )
5747 : sType( StructureType::eCopyDescriptorSet )
5748 , pNext( nullptr )
5749 , srcSet( srcSet_ )
5750 , srcBinding( srcBinding_ )
5751 , srcArrayElement( srcArrayElement_ )
5752 , dstSet( dstSet_ )
5753 , dstBinding( dstBinding_ )
5754 , dstArrayElement( dstArrayElement_ )
5755 , descriptorCount( descriptorCount_ )
5756 {
5757 }
5758
5759 CopyDescriptorSet( VkCopyDescriptorSet const & rhs )
5760 {
5761 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
5762 }
5763
5764 CopyDescriptorSet& operator=( VkCopyDescriptorSet const & rhs )
5765 {
5766 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
5767 return *this;
5768 }
5769
5770 CopyDescriptorSet& setSType( StructureType sType_ )
5771 {
5772 sType = sType_;
5773 return *this;
5774 }
5775
5776 CopyDescriptorSet& setPNext( const void* pNext_ )
5777 {
5778 pNext = pNext_;
5779 return *this;
5780 }
5781
5782 CopyDescriptorSet& setSrcSet( DescriptorSet srcSet_ )
5783 {
5784 srcSet = srcSet_;
5785 return *this;
5786 }
5787
5788 CopyDescriptorSet& setSrcBinding( uint32_t srcBinding_ )
5789 {
5790 srcBinding = srcBinding_;
5791 return *this;
5792 }
5793
5794 CopyDescriptorSet& setSrcArrayElement( uint32_t srcArrayElement_ )
5795 {
5796 srcArrayElement = srcArrayElement_;
5797 return *this;
5798 }
5799
5800 CopyDescriptorSet& setDstSet( DescriptorSet dstSet_ )
5801 {
5802 dstSet = dstSet_;
5803 return *this;
5804 }
5805
5806 CopyDescriptorSet& setDstBinding( uint32_t dstBinding_ )
5807 {
5808 dstBinding = dstBinding_;
5809 return *this;
5810 }
5811
5812 CopyDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
5813 {
5814 dstArrayElement = dstArrayElement_;
5815 return *this;
5816 }
5817
5818 CopyDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
5819 {
5820 descriptorCount = descriptorCount_;
5821 return *this;
5822 }
5823
5824 operator const VkCopyDescriptorSet&() const
5825 {
5826 return *reinterpret_cast<const VkCopyDescriptorSet*>(this);
5827 }
5828
5829 bool operator==( CopyDescriptorSet const& rhs ) const
5830 {
5831 return ( sType == rhs.sType )
5832 && ( pNext == rhs.pNext )
5833 && ( srcSet == rhs.srcSet )
5834 && ( srcBinding == rhs.srcBinding )
5835 && ( srcArrayElement == rhs.srcArrayElement )
5836 && ( dstSet == rhs.dstSet )
5837 && ( dstBinding == rhs.dstBinding )
5838 && ( dstArrayElement == rhs.dstArrayElement )
5839 && ( descriptorCount == rhs.descriptorCount );
5840 }
5841
5842 bool operator!=( CopyDescriptorSet const& rhs ) const
5843 {
5844 return !operator==( rhs );
5845 }
5846
5847 private:
5848 StructureType sType;
5849
5850 public:
5851 const void* pNext;
5852 DescriptorSet srcSet;
5853 uint32_t srcBinding;
5854 uint32_t srcArrayElement;
5855 DescriptorSet dstSet;
5856 uint32_t dstBinding;
5857 uint32_t dstArrayElement;
5858 uint32_t descriptorCount;
5859 };
5860 static_assert( sizeof( CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ), "struct and wrapper have different size!" );
5861
5862 struct BufferViewCreateInfo
5863 {
5864 BufferViewCreateInfo( BufferViewCreateFlags flags_ = BufferViewCreateFlags(), Buffer buffer_ = Buffer(), Format format_ = Format::eUndefined, DeviceSize offset_ = 0, DeviceSize range_ = 0 )
5865 : sType( StructureType::eBufferViewCreateInfo )
5866 , pNext( nullptr )
5867 , flags( flags_ )
5868 , buffer( buffer_ )
5869 , format( format_ )
5870 , offset( offset_ )
5871 , range( range_ )
5872 {
5873 }
5874
5875 BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs )
5876 {
5877 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
5878 }
5879
5880 BufferViewCreateInfo& operator=( VkBufferViewCreateInfo const & rhs )
5881 {
5882 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
5883 return *this;
5884 }
5885
5886 BufferViewCreateInfo& setSType( StructureType sType_ )
5887 {
5888 sType = sType_;
5889 return *this;
5890 }
5891
5892 BufferViewCreateInfo& setPNext( const void* pNext_ )
5893 {
5894 pNext = pNext_;
5895 return *this;
5896 }
5897
5898 BufferViewCreateInfo& setFlags( BufferViewCreateFlags flags_ )
5899 {
5900 flags = flags_;
5901 return *this;
5902 }
5903
5904 BufferViewCreateInfo& setBuffer( Buffer buffer_ )
5905 {
5906 buffer = buffer_;
5907 return *this;
5908 }
5909
5910 BufferViewCreateInfo& setFormat( Format format_ )
5911 {
5912 format = format_;
5913 return *this;
5914 }
5915
5916 BufferViewCreateInfo& setOffset( DeviceSize offset_ )
5917 {
5918 offset = offset_;
5919 return *this;
5920 }
5921
5922 BufferViewCreateInfo& setRange( DeviceSize range_ )
5923 {
5924 range = range_;
5925 return *this;
5926 }
5927
5928 operator const VkBufferViewCreateInfo&() const
5929 {
5930 return *reinterpret_cast<const VkBufferViewCreateInfo*>(this);
5931 }
5932
5933 bool operator==( BufferViewCreateInfo const& rhs ) const
5934 {
5935 return ( sType == rhs.sType )
5936 && ( pNext == rhs.pNext )
5937 && ( flags == rhs.flags )
5938 && ( buffer == rhs.buffer )
5939 && ( format == rhs.format )
5940 && ( offset == rhs.offset )
5941 && ( range == rhs.range );
5942 }
5943
5944 bool operator!=( BufferViewCreateInfo const& rhs ) const
5945 {
5946 return !operator==( rhs );
5947 }
5948
5949 private:
5950 StructureType sType;
5951
5952 public:
5953 const void* pNext;
5954 BufferViewCreateFlags flags;
5955 Buffer buffer;
5956 Format format;
5957 DeviceSize offset;
5958 DeviceSize range;
5959 };
5960 static_assert( sizeof( BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ), "struct and wrapper have different size!" );
5961
5962 struct ShaderModuleCreateInfo
5963 {
5964 ShaderModuleCreateInfo( ShaderModuleCreateFlags flags_ = ShaderModuleCreateFlags(), size_t codeSize_ = 0, const uint32_t* pCode_ = nullptr )
5965 : sType( StructureType::eShaderModuleCreateInfo )
5966 , pNext( nullptr )
5967 , flags( flags_ )
5968 , codeSize( codeSize_ )
5969 , pCode( pCode_ )
5970 {
5971 }
5972
5973 ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs )
5974 {
5975 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
5976 }
5977
5978 ShaderModuleCreateInfo& operator=( VkShaderModuleCreateInfo const & rhs )
5979 {
5980 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
5981 return *this;
5982 }
5983
5984 ShaderModuleCreateInfo& setSType( StructureType sType_ )
5985 {
5986 sType = sType_;
5987 return *this;
5988 }
5989
5990 ShaderModuleCreateInfo& setPNext( const void* pNext_ )
5991 {
5992 pNext = pNext_;
5993 return *this;
5994 }
5995
5996 ShaderModuleCreateInfo& setFlags( ShaderModuleCreateFlags flags_ )
5997 {
5998 flags = flags_;
5999 return *this;
6000 }
6001
6002 ShaderModuleCreateInfo& setCodeSize( size_t codeSize_ )
6003 {
6004 codeSize = codeSize_;
6005 return *this;
6006 }
6007
6008 ShaderModuleCreateInfo& setPCode( const uint32_t* pCode_ )
6009 {
6010 pCode = pCode_;
6011 return *this;
6012 }
6013
6014 operator const VkShaderModuleCreateInfo&() const
6015 {
6016 return *reinterpret_cast<const VkShaderModuleCreateInfo*>(this);
6017 }
6018
6019 bool operator==( ShaderModuleCreateInfo const& rhs ) const
6020 {
6021 return ( sType == rhs.sType )
6022 && ( pNext == rhs.pNext )
6023 && ( flags == rhs.flags )
6024 && ( codeSize == rhs.codeSize )
6025 && ( pCode == rhs.pCode );
6026 }
6027
6028 bool operator!=( ShaderModuleCreateInfo const& rhs ) const
6029 {
6030 return !operator==( rhs );
6031 }
6032
6033 private:
6034 StructureType sType;
6035
6036 public:
6037 const void* pNext;
6038 ShaderModuleCreateFlags flags;
6039 size_t codeSize;
6040 const uint32_t* pCode;
6041 };
6042 static_assert( sizeof( ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ), "struct and wrapper have different size!" );
6043
6044 struct DescriptorSetAllocateInfo
6045 {
6046 DescriptorSetAllocateInfo( DescriptorPool descriptorPool_ = DescriptorPool(), uint32_t descriptorSetCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr )
6047 : sType( StructureType::eDescriptorSetAllocateInfo )
6048 , pNext( nullptr )
6049 , descriptorPool( descriptorPool_ )
6050 , descriptorSetCount( descriptorSetCount_ )
6051 , pSetLayouts( pSetLayouts_ )
6052 {
6053 }
6054
6055 DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs )
6056 {
6057 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6058 }
6059
6060 DescriptorSetAllocateInfo& operator=( VkDescriptorSetAllocateInfo const & rhs )
6061 {
6062 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6063 return *this;
6064 }
6065
6066 DescriptorSetAllocateInfo& setSType( StructureType sType_ )
6067 {
6068 sType = sType_;
6069 return *this;
6070 }
6071
6072 DescriptorSetAllocateInfo& setPNext( const void* pNext_ )
6073 {
6074 pNext = pNext_;
6075 return *this;
6076 }
6077
6078 DescriptorSetAllocateInfo& setDescriptorPool( DescriptorPool descriptorPool_ )
6079 {
6080 descriptorPool = descriptorPool_;
6081 return *this;
6082 }
6083
6084 DescriptorSetAllocateInfo& setDescriptorSetCount( uint32_t descriptorSetCount_ )
6085 {
6086 descriptorSetCount = descriptorSetCount_;
6087 return *this;
6088 }
6089
6090 DescriptorSetAllocateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
6091 {
6092 pSetLayouts = pSetLayouts_;
6093 return *this;
6094 }
6095
6096 operator const VkDescriptorSetAllocateInfo&() const
6097 {
6098 return *reinterpret_cast<const VkDescriptorSetAllocateInfo*>(this);
6099 }
6100
6101 bool operator==( DescriptorSetAllocateInfo const& rhs ) const
6102 {
6103 return ( sType == rhs.sType )
6104 && ( pNext == rhs.pNext )
6105 && ( descriptorPool == rhs.descriptorPool )
6106 && ( descriptorSetCount == rhs.descriptorSetCount )
6107 && ( pSetLayouts == rhs.pSetLayouts );
6108 }
6109
6110 bool operator!=( DescriptorSetAllocateInfo const& rhs ) const
6111 {
6112 return !operator==( rhs );
6113 }
6114
6115 private:
6116 StructureType sType;
6117
6118 public:
6119 const void* pNext;
6120 DescriptorPool descriptorPool;
6121 uint32_t descriptorSetCount;
6122 const DescriptorSetLayout* pSetLayouts;
6123 };
6124 static_assert( sizeof( DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ), "struct and wrapper have different size!" );
6125
6126 struct PipelineVertexInputStateCreateInfo
6127 {
6128 PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateFlags flags_ = PipelineVertexInputStateCreateFlags(), uint32_t vertexBindingDescriptionCount_ = 0, const VertexInputBindingDescription* pVertexBindingDescriptions_ = nullptr, uint32_t vertexAttributeDescriptionCount_ = 0, const VertexInputAttributeDescription* pVertexAttributeDescriptions_ = nullptr )
6129 : sType( StructureType::ePipelineVertexInputStateCreateInfo )
6130 , pNext( nullptr )
6131 , flags( flags_ )
6132 , vertexBindingDescriptionCount( vertexBindingDescriptionCount_ )
6133 , pVertexBindingDescriptions( pVertexBindingDescriptions_ )
6134 , vertexAttributeDescriptionCount( vertexAttributeDescriptionCount_ )
6135 , pVertexAttributeDescriptions( pVertexAttributeDescriptions_ )
6136 {
6137 }
6138
6139 PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs )
6140 {
6141 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6142 }
6143
6144 PipelineVertexInputStateCreateInfo& operator=( VkPipelineVertexInputStateCreateInfo const & rhs )
6145 {
6146 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6147 return *this;
6148 }
6149
6150 PipelineVertexInputStateCreateInfo& setSType( StructureType sType_ )
6151 {
6152 sType = sType_;
6153 return *this;
6154 }
6155
6156 PipelineVertexInputStateCreateInfo& setPNext( const void* pNext_ )
6157 {
6158 pNext = pNext_;
6159 return *this;
6160 }
6161
6162 PipelineVertexInputStateCreateInfo& setFlags( PipelineVertexInputStateCreateFlags flags_ )
6163 {
6164 flags = flags_;
6165 return *this;
6166 }
6167
6168 PipelineVertexInputStateCreateInfo& setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ )
6169 {
6170 vertexBindingDescriptionCount = vertexBindingDescriptionCount_;
6171 return *this;
6172 }
6173
6174 PipelineVertexInputStateCreateInfo& setPVertexBindingDescriptions( const VertexInputBindingDescription* pVertexBindingDescriptions_ )
6175 {
6176 pVertexBindingDescriptions = pVertexBindingDescriptions_;
6177 return *this;
6178 }
6179
6180 PipelineVertexInputStateCreateInfo& setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ )
6181 {
6182 vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_;
6183 return *this;
6184 }
6185
6186 PipelineVertexInputStateCreateInfo& setPVertexAttributeDescriptions( const VertexInputAttributeDescription* pVertexAttributeDescriptions_ )
6187 {
6188 pVertexAttributeDescriptions = pVertexAttributeDescriptions_;
6189 return *this;
6190 }
6191
6192 operator const VkPipelineVertexInputStateCreateInfo&() const
6193 {
6194 return *reinterpret_cast<const VkPipelineVertexInputStateCreateInfo*>(this);
6195 }
6196
6197 bool operator==( PipelineVertexInputStateCreateInfo const& rhs ) const
6198 {
6199 return ( sType == rhs.sType )
6200 && ( pNext == rhs.pNext )
6201 && ( flags == rhs.flags )
6202 && ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount )
6203 && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions )
6204 && ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount )
6205 && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions );
6206 }
6207
6208 bool operator!=( PipelineVertexInputStateCreateInfo const& rhs ) const
6209 {
6210 return !operator==( rhs );
6211 }
6212
6213 private:
6214 StructureType sType;
6215
6216 public:
6217 const void* pNext;
6218 PipelineVertexInputStateCreateFlags flags;
6219 uint32_t vertexBindingDescriptionCount;
6220 const VertexInputBindingDescription* pVertexBindingDescriptions;
6221 uint32_t vertexAttributeDescriptionCount;
6222 const VertexInputAttributeDescription* pVertexAttributeDescriptions;
6223 };
6224 static_assert( sizeof( PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ), "struct and wrapper have different size!" );
6225
6226 struct PipelineInputAssemblyStateCreateInfo
6227 {
6228 PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateFlags flags_ = PipelineInputAssemblyStateCreateFlags(), PrimitiveTopology topology_ = PrimitiveTopology::ePointList, Bool32 primitiveRestartEnable_ = 0 )
6229 : sType( StructureType::ePipelineInputAssemblyStateCreateInfo )
6230 , pNext( nullptr )
6231 , flags( flags_ )
6232 , topology( topology_ )
6233 , primitiveRestartEnable( primitiveRestartEnable_ )
6234 {
6235 }
6236
6237 PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6238 {
6239 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6240 }
6241
6242 PipelineInputAssemblyStateCreateInfo& operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6243 {
6244 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6245 return *this;
6246 }
6247
6248 PipelineInputAssemblyStateCreateInfo& setSType( StructureType sType_ )
6249 {
6250 sType = sType_;
6251 return *this;
6252 }
6253
6254 PipelineInputAssemblyStateCreateInfo& setPNext( const void* pNext_ )
6255 {
6256 pNext = pNext_;
6257 return *this;
6258 }
6259
6260 PipelineInputAssemblyStateCreateInfo& setFlags( PipelineInputAssemblyStateCreateFlags flags_ )
6261 {
6262 flags = flags_;
6263 return *this;
6264 }
6265
6266 PipelineInputAssemblyStateCreateInfo& setTopology( PrimitiveTopology topology_ )
6267 {
6268 topology = topology_;
6269 return *this;
6270 }
6271
6272 PipelineInputAssemblyStateCreateInfo& setPrimitiveRestartEnable( Bool32 primitiveRestartEnable_ )
6273 {
6274 primitiveRestartEnable = primitiveRestartEnable_;
6275 return *this;
6276 }
6277
6278 operator const VkPipelineInputAssemblyStateCreateInfo&() const
6279 {
6280 return *reinterpret_cast<const VkPipelineInputAssemblyStateCreateInfo*>(this);
6281 }
6282
6283 bool operator==( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6284 {
6285 return ( sType == rhs.sType )
6286 && ( pNext == rhs.pNext )
6287 && ( flags == rhs.flags )
6288 && ( topology == rhs.topology )
6289 && ( primitiveRestartEnable == rhs.primitiveRestartEnable );
6290 }
6291
6292 bool operator!=( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6293 {
6294 return !operator==( rhs );
6295 }
6296
6297 private:
6298 StructureType sType;
6299
6300 public:
6301 const void* pNext;
6302 PipelineInputAssemblyStateCreateFlags flags;
6303 PrimitiveTopology topology;
6304 Bool32 primitiveRestartEnable;
6305 };
6306 static_assert( sizeof( PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ), "struct and wrapper have different size!" );
6307
6308 struct PipelineTessellationStateCreateInfo
6309 {
6310 PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateFlags flags_ = PipelineTessellationStateCreateFlags(), uint32_t patchControlPoints_ = 0 )
6311 : sType( StructureType::ePipelineTessellationStateCreateInfo )
6312 , pNext( nullptr )
6313 , flags( flags_ )
6314 , patchControlPoints( patchControlPoints_ )
6315 {
6316 }
6317
6318 PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs )
6319 {
6320 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6321 }
6322
6323 PipelineTessellationStateCreateInfo& operator=( VkPipelineTessellationStateCreateInfo const & rhs )
6324 {
6325 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6326 return *this;
6327 }
6328
6329 PipelineTessellationStateCreateInfo& setSType( StructureType sType_ )
6330 {
6331 sType = sType_;
6332 return *this;
6333 }
6334
6335 PipelineTessellationStateCreateInfo& setPNext( const void* pNext_ )
6336 {
6337 pNext = pNext_;
6338 return *this;
6339 }
6340
6341 PipelineTessellationStateCreateInfo& setFlags( PipelineTessellationStateCreateFlags flags_ )
6342 {
6343 flags = flags_;
6344 return *this;
6345 }
6346
6347 PipelineTessellationStateCreateInfo& setPatchControlPoints( uint32_t patchControlPoints_ )
6348 {
6349 patchControlPoints = patchControlPoints_;
6350 return *this;
6351 }
6352
6353 operator const VkPipelineTessellationStateCreateInfo&() const
6354 {
6355 return *reinterpret_cast<const VkPipelineTessellationStateCreateInfo*>(this);
6356 }
6357
6358 bool operator==( PipelineTessellationStateCreateInfo const& rhs ) const
6359 {
6360 return ( sType == rhs.sType )
6361 && ( pNext == rhs.pNext )
6362 && ( flags == rhs.flags )
6363 && ( patchControlPoints == rhs.patchControlPoints );
6364 }
6365
6366 bool operator!=( PipelineTessellationStateCreateInfo const& rhs ) const
6367 {
6368 return !operator==( rhs );
6369 }
6370
6371 private:
6372 StructureType sType;
6373
6374 public:
6375 const void* pNext;
6376 PipelineTessellationStateCreateFlags flags;
6377 uint32_t patchControlPoints;
6378 };
6379 static_assert( sizeof( PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ), "struct and wrapper have different size!" );
6380
6381 struct PipelineViewportStateCreateInfo
6382 {
6383 PipelineViewportStateCreateInfo( PipelineViewportStateCreateFlags flags_ = PipelineViewportStateCreateFlags(), uint32_t viewportCount_ = 0, const Viewport* pViewports_ = nullptr, uint32_t scissorCount_ = 0, const Rect2D* pScissors_ = nullptr )
6384 : sType( StructureType::ePipelineViewportStateCreateInfo )
6385 , pNext( nullptr )
6386 , flags( flags_ )
6387 , viewportCount( viewportCount_ )
6388 , pViewports( pViewports_ )
6389 , scissorCount( scissorCount_ )
6390 , pScissors( pScissors_ )
6391 {
6392 }
6393
6394 PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs )
6395 {
6396 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6397 }
6398
6399 PipelineViewportStateCreateInfo& operator=( VkPipelineViewportStateCreateInfo const & rhs )
6400 {
6401 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6402 return *this;
6403 }
6404
6405 PipelineViewportStateCreateInfo& setSType( StructureType sType_ )
6406 {
6407 sType = sType_;
6408 return *this;
6409 }
6410
6411 PipelineViewportStateCreateInfo& setPNext( const void* pNext_ )
6412 {
6413 pNext = pNext_;
6414 return *this;
6415 }
6416
6417 PipelineViewportStateCreateInfo& setFlags( PipelineViewportStateCreateFlags flags_ )
6418 {
6419 flags = flags_;
6420 return *this;
6421 }
6422
6423 PipelineViewportStateCreateInfo& setViewportCount( uint32_t viewportCount_ )
6424 {
6425 viewportCount = viewportCount_;
6426 return *this;
6427 }
6428
6429 PipelineViewportStateCreateInfo& setPViewports( const Viewport* pViewports_ )
6430 {
6431 pViewports = pViewports_;
6432 return *this;
6433 }
6434
6435 PipelineViewportStateCreateInfo& setScissorCount( uint32_t scissorCount_ )
6436 {
6437 scissorCount = scissorCount_;
6438 return *this;
6439 }
6440
6441 PipelineViewportStateCreateInfo& setPScissors( const Rect2D* pScissors_ )
6442 {
6443 pScissors = pScissors_;
6444 return *this;
6445 }
6446
6447 operator const VkPipelineViewportStateCreateInfo&() const
6448 {
6449 return *reinterpret_cast<const VkPipelineViewportStateCreateInfo*>(this);
6450 }
6451
6452 bool operator==( PipelineViewportStateCreateInfo const& rhs ) const
6453 {
6454 return ( sType == rhs.sType )
6455 && ( pNext == rhs.pNext )
6456 && ( flags == rhs.flags )
6457 && ( viewportCount == rhs.viewportCount )
6458 && ( pViewports == rhs.pViewports )
6459 && ( scissorCount == rhs.scissorCount )
6460 && ( pScissors == rhs.pScissors );
6461 }
6462
6463 bool operator!=( PipelineViewportStateCreateInfo const& rhs ) const
6464 {
6465 return !operator==( rhs );
6466 }
6467
6468 private:
6469 StructureType sType;
6470
6471 public:
6472 const void* pNext;
6473 PipelineViewportStateCreateFlags flags;
6474 uint32_t viewportCount;
6475 const Viewport* pViewports;
6476 uint32_t scissorCount;
6477 const Rect2D* pScissors;
6478 };
6479 static_assert( sizeof( PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ), "struct and wrapper have different size!" );
6480
6481 struct PipelineRasterizationStateCreateInfo
6482 {
6483 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 )
6484 : sType( StructureType::ePipelineRasterizationStateCreateInfo )
6485 , pNext( nullptr )
6486 , flags( flags_ )
6487 , depthClampEnable( depthClampEnable_ )
6488 , rasterizerDiscardEnable( rasterizerDiscardEnable_ )
6489 , polygonMode( polygonMode_ )
6490 , cullMode( cullMode_ )
6491 , frontFace( frontFace_ )
6492 , depthBiasEnable( depthBiasEnable_ )
6493 , depthBiasConstantFactor( depthBiasConstantFactor_ )
6494 , depthBiasClamp( depthBiasClamp_ )
6495 , depthBiasSlopeFactor( depthBiasSlopeFactor_ )
6496 , lineWidth( lineWidth_ )
6497 {
6498 }
6499
6500 PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs )
6501 {
6502 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6503 }
6504
6505 PipelineRasterizationStateCreateInfo& operator=( VkPipelineRasterizationStateCreateInfo const & rhs )
6506 {
6507 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6508 return *this;
6509 }
6510
6511 PipelineRasterizationStateCreateInfo& setSType( StructureType sType_ )
6512 {
6513 sType = sType_;
6514 return *this;
6515 }
6516
6517 PipelineRasterizationStateCreateInfo& setPNext( const void* pNext_ )
6518 {
6519 pNext = pNext_;
6520 return *this;
6521 }
6522
6523 PipelineRasterizationStateCreateInfo& setFlags( PipelineRasterizationStateCreateFlags flags_ )
6524 {
6525 flags = flags_;
6526 return *this;
6527 }
6528
6529 PipelineRasterizationStateCreateInfo& setDepthClampEnable( Bool32 depthClampEnable_ )
6530 {
6531 depthClampEnable = depthClampEnable_;
6532 return *this;
6533 }
6534
6535 PipelineRasterizationStateCreateInfo& setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable_ )
6536 {
6537 rasterizerDiscardEnable = rasterizerDiscardEnable_;
6538 return *this;
6539 }
6540
6541 PipelineRasterizationStateCreateInfo& setPolygonMode( PolygonMode polygonMode_ )
6542 {
6543 polygonMode = polygonMode_;
6544 return *this;
6545 }
6546
6547 PipelineRasterizationStateCreateInfo& setCullMode( CullModeFlags cullMode_ )
6548 {
6549 cullMode = cullMode_;
6550 return *this;
6551 }
6552
6553 PipelineRasterizationStateCreateInfo& setFrontFace( FrontFace frontFace_ )
6554 {
6555 frontFace = frontFace_;
6556 return *this;
6557 }
6558
6559 PipelineRasterizationStateCreateInfo& setDepthBiasEnable( Bool32 depthBiasEnable_ )
6560 {
6561 depthBiasEnable = depthBiasEnable_;
6562 return *this;
6563 }
6564
6565 PipelineRasterizationStateCreateInfo& setDepthBiasConstantFactor( float depthBiasConstantFactor_ )
6566 {
6567 depthBiasConstantFactor = depthBiasConstantFactor_;
6568 return *this;
6569 }
6570
6571 PipelineRasterizationStateCreateInfo& setDepthBiasClamp( float depthBiasClamp_ )
6572 {
6573 depthBiasClamp = depthBiasClamp_;
6574 return *this;
6575 }
6576
6577 PipelineRasterizationStateCreateInfo& setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ )
6578 {
6579 depthBiasSlopeFactor = depthBiasSlopeFactor_;
6580 return *this;
6581 }
6582
6583 PipelineRasterizationStateCreateInfo& setLineWidth( float lineWidth_ )
6584 {
6585 lineWidth = lineWidth_;
6586 return *this;
6587 }
6588
6589 operator const VkPipelineRasterizationStateCreateInfo&() const
6590 {
6591 return *reinterpret_cast<const VkPipelineRasterizationStateCreateInfo*>(this);
6592 }
6593
6594 bool operator==( PipelineRasterizationStateCreateInfo const& rhs ) const
6595 {
6596 return ( sType == rhs.sType )
6597 && ( pNext == rhs.pNext )
6598 && ( flags == rhs.flags )
6599 && ( depthClampEnable == rhs.depthClampEnable )
6600 && ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable )
6601 && ( polygonMode == rhs.polygonMode )
6602 && ( cullMode == rhs.cullMode )
6603 && ( frontFace == rhs.frontFace )
6604 && ( depthBiasEnable == rhs.depthBiasEnable )
6605 && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor )
6606 && ( depthBiasClamp == rhs.depthBiasClamp )
6607 && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor )
6608 && ( lineWidth == rhs.lineWidth );
6609 }
6610
6611 bool operator!=( PipelineRasterizationStateCreateInfo const& rhs ) const
6612 {
6613 return !operator==( rhs );
6614 }
6615
6616 private:
6617 StructureType sType;
6618
6619 public:
6620 const void* pNext;
6621 PipelineRasterizationStateCreateFlags flags;
6622 Bool32 depthClampEnable;
6623 Bool32 rasterizerDiscardEnable;
6624 PolygonMode polygonMode;
6625 CullModeFlags cullMode;
6626 FrontFace frontFace;
6627 Bool32 depthBiasEnable;
6628 float depthBiasConstantFactor;
6629 float depthBiasClamp;
6630 float depthBiasSlopeFactor;
6631 float lineWidth;
6632 };
6633 static_assert( sizeof( PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ), "struct and wrapper have different size!" );
6634
6635 struct PipelineDepthStencilStateCreateInfo
6636 {
6637 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 )
6638 : sType( StructureType::ePipelineDepthStencilStateCreateInfo )
6639 , pNext( nullptr )
6640 , flags( flags_ )
6641 , depthTestEnable( depthTestEnable_ )
6642 , depthWriteEnable( depthWriteEnable_ )
6643 , depthCompareOp( depthCompareOp_ )
6644 , depthBoundsTestEnable( depthBoundsTestEnable_ )
6645 , stencilTestEnable( stencilTestEnable_ )
6646 , front( front_ )
6647 , back( back_ )
6648 , minDepthBounds( minDepthBounds_ )
6649 , maxDepthBounds( maxDepthBounds_ )
6650 {
6651 }
6652
6653 PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs )
6654 {
6655 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
6656 }
6657
6658 PipelineDepthStencilStateCreateInfo& operator=( VkPipelineDepthStencilStateCreateInfo const & rhs )
6659 {
6660 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
6661 return *this;
6662 }
6663
6664 PipelineDepthStencilStateCreateInfo& setSType( StructureType sType_ )
6665 {
6666 sType = sType_;
6667 return *this;
6668 }
6669
6670 PipelineDepthStencilStateCreateInfo& setPNext( const void* pNext_ )
6671 {
6672 pNext = pNext_;
6673 return *this;
6674 }
6675
6676 PipelineDepthStencilStateCreateInfo& setFlags( PipelineDepthStencilStateCreateFlags flags_ )
6677 {
6678 flags = flags_;
6679 return *this;
6680 }
6681
6682 PipelineDepthStencilStateCreateInfo& setDepthTestEnable( Bool32 depthTestEnable_ )
6683 {
6684 depthTestEnable = depthTestEnable_;
6685 return *this;
6686 }
6687
6688 PipelineDepthStencilStateCreateInfo& setDepthWriteEnable( Bool32 depthWriteEnable_ )
6689 {
6690 depthWriteEnable = depthWriteEnable_;
6691 return *this;
6692 }
6693
6694 PipelineDepthStencilStateCreateInfo& setDepthCompareOp( CompareOp depthCompareOp_ )
6695 {
6696 depthCompareOp = depthCompareOp_;
6697 return *this;
6698 }
6699
6700 PipelineDepthStencilStateCreateInfo& setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable_ )
6701 {
6702 depthBoundsTestEnable = depthBoundsTestEnable_;
6703 return *this;
6704 }
6705
6706 PipelineDepthStencilStateCreateInfo& setStencilTestEnable( Bool32 stencilTestEnable_ )
6707 {
6708 stencilTestEnable = stencilTestEnable_;
6709 return *this;
6710 }
6711
6712 PipelineDepthStencilStateCreateInfo& setFront( StencilOpState front_ )
6713 {
6714 front = front_;
6715 return *this;
6716 }
6717
6718 PipelineDepthStencilStateCreateInfo& setBack( StencilOpState back_ )
6719 {
6720 back = back_;
6721 return *this;
6722 }
6723
6724 PipelineDepthStencilStateCreateInfo& setMinDepthBounds( float minDepthBounds_ )
6725 {
6726 minDepthBounds = minDepthBounds_;
6727 return *this;
6728 }
6729
6730 PipelineDepthStencilStateCreateInfo& setMaxDepthBounds( float maxDepthBounds_ )
6731 {
6732 maxDepthBounds = maxDepthBounds_;
6733 return *this;
6734 }
6735
6736 operator const VkPipelineDepthStencilStateCreateInfo&() const
6737 {
6738 return *reinterpret_cast<const VkPipelineDepthStencilStateCreateInfo*>(this);
6739 }
6740
6741 bool operator==( PipelineDepthStencilStateCreateInfo const& rhs ) const
6742 {
6743 return ( sType == rhs.sType )
6744 && ( pNext == rhs.pNext )
6745 && ( flags == rhs.flags )
6746 && ( depthTestEnable == rhs.depthTestEnable )
6747 && ( depthWriteEnable == rhs.depthWriteEnable )
6748 && ( depthCompareOp == rhs.depthCompareOp )
6749 && ( depthBoundsTestEnable == rhs.depthBoundsTestEnable )
6750 && ( stencilTestEnable == rhs.stencilTestEnable )
6751 && ( front == rhs.front )
6752 && ( back == rhs.back )
6753 && ( minDepthBounds == rhs.minDepthBounds )
6754 && ( maxDepthBounds == rhs.maxDepthBounds );
6755 }
6756
6757 bool operator!=( PipelineDepthStencilStateCreateInfo const& rhs ) const
6758 {
6759 return !operator==( rhs );
6760 }
6761
6762 private:
6763 StructureType sType;
6764
6765 public:
6766 const void* pNext;
6767 PipelineDepthStencilStateCreateFlags flags;
6768 Bool32 depthTestEnable;
6769 Bool32 depthWriteEnable;
6770 CompareOp depthCompareOp;
6771 Bool32 depthBoundsTestEnable;
6772 Bool32 stencilTestEnable;
6773 StencilOpState front;
6774 StencilOpState back;
6775 float minDepthBounds;
6776 float maxDepthBounds;
6777 };
6778 static_assert( sizeof( PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ), "struct and wrapper have different size!" );
6779
6780 struct PipelineCacheCreateInfo
6781 {
6782 PipelineCacheCreateInfo( PipelineCacheCreateFlags flags_ = PipelineCacheCreateFlags(), size_t initialDataSize_ = 0, const void* pInitialData_ = nullptr )
6783 : sType( StructureType::ePipelineCacheCreateInfo )
6784 , pNext( nullptr )
6785 , flags( flags_ )
6786 , initialDataSize( initialDataSize_ )
6787 , pInitialData( pInitialData_ )
6788 {
6789 }
6790
6791 PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs )
6792 {
6793 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
6794 }
6795
6796 PipelineCacheCreateInfo& operator=( VkPipelineCacheCreateInfo const & rhs )
6797 {
6798 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
6799 return *this;
6800 }
6801
6802 PipelineCacheCreateInfo& setSType( StructureType sType_ )
6803 {
6804 sType = sType_;
6805 return *this;
6806 }
6807
6808 PipelineCacheCreateInfo& setPNext( const void* pNext_ )
6809 {
6810 pNext = pNext_;
6811 return *this;
6812 }
6813
6814 PipelineCacheCreateInfo& setFlags( PipelineCacheCreateFlags flags_ )
6815 {
6816 flags = flags_;
6817 return *this;
6818 }
6819
6820 PipelineCacheCreateInfo& setInitialDataSize( size_t initialDataSize_ )
6821 {
6822 initialDataSize = initialDataSize_;
6823 return *this;
6824 }
6825
6826 PipelineCacheCreateInfo& setPInitialData( const void* pInitialData_ )
6827 {
6828 pInitialData = pInitialData_;
6829 return *this;
6830 }
6831
6832 operator const VkPipelineCacheCreateInfo&() const
6833 {
6834 return *reinterpret_cast<const VkPipelineCacheCreateInfo*>(this);
6835 }
6836
6837 bool operator==( PipelineCacheCreateInfo const& rhs ) const
6838 {
6839 return ( sType == rhs.sType )
6840 && ( pNext == rhs.pNext )
6841 && ( flags == rhs.flags )
6842 && ( initialDataSize == rhs.initialDataSize )
6843 && ( pInitialData == rhs.pInitialData );
6844 }
6845
6846 bool operator!=( PipelineCacheCreateInfo const& rhs ) const
6847 {
6848 return !operator==( rhs );
6849 }
6850
6851 private:
6852 StructureType sType;
6853
6854 public:
6855 const void* pNext;
6856 PipelineCacheCreateFlags flags;
6857 size_t initialDataSize;
6858 const void* pInitialData;
6859 };
6860 static_assert( sizeof( PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ), "struct and wrapper have different size!" );
6861
6862 struct SamplerCreateInfo
6863 {
6864 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 )
6865 : sType( StructureType::eSamplerCreateInfo )
6866 , pNext( nullptr )
6867 , flags( flags_ )
6868 , magFilter( magFilter_ )
6869 , minFilter( minFilter_ )
6870 , mipmapMode( mipmapMode_ )
6871 , addressModeU( addressModeU_ )
6872 , addressModeV( addressModeV_ )
6873 , addressModeW( addressModeW_ )
6874 , mipLodBias( mipLodBias_ )
6875 , anisotropyEnable( anisotropyEnable_ )
6876 , maxAnisotropy( maxAnisotropy_ )
6877 , compareEnable( compareEnable_ )
6878 , compareOp( compareOp_ )
6879 , minLod( minLod_ )
6880 , maxLod( maxLod_ )
6881 , borderColor( borderColor_ )
6882 , unnormalizedCoordinates( unnormalizedCoordinates_ )
6883 {
6884 }
6885
6886 SamplerCreateInfo( VkSamplerCreateInfo const & rhs )
6887 {
6888 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
6889 }
6890
6891 SamplerCreateInfo& operator=( VkSamplerCreateInfo const & rhs )
6892 {
6893 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
6894 return *this;
6895 }
6896
6897 SamplerCreateInfo& setSType( StructureType sType_ )
6898 {
6899 sType = sType_;
6900 return *this;
6901 }
6902
6903 SamplerCreateInfo& setPNext( const void* pNext_ )
6904 {
6905 pNext = pNext_;
6906 return *this;
6907 }
6908
6909 SamplerCreateInfo& setFlags( SamplerCreateFlags flags_ )
6910 {
6911 flags = flags_;
6912 return *this;
6913 }
6914
6915 SamplerCreateInfo& setMagFilter( Filter magFilter_ )
6916 {
6917 magFilter = magFilter_;
6918 return *this;
6919 }
6920
6921 SamplerCreateInfo& setMinFilter( Filter minFilter_ )
6922 {
6923 minFilter = minFilter_;
6924 return *this;
6925 }
6926
6927 SamplerCreateInfo& setMipmapMode( SamplerMipmapMode mipmapMode_ )
6928 {
6929 mipmapMode = mipmapMode_;
6930 return *this;
6931 }
6932
6933 SamplerCreateInfo& setAddressModeU( SamplerAddressMode addressModeU_ )
6934 {
6935 addressModeU = addressModeU_;
6936 return *this;
6937 }
6938
6939 SamplerCreateInfo& setAddressModeV( SamplerAddressMode addressModeV_ )
6940 {
6941 addressModeV = addressModeV_;
6942 return *this;
6943 }
6944
6945 SamplerCreateInfo& setAddressModeW( SamplerAddressMode addressModeW_ )
6946 {
6947 addressModeW = addressModeW_;
6948 return *this;
6949 }
6950
6951 SamplerCreateInfo& setMipLodBias( float mipLodBias_ )
6952 {
6953 mipLodBias = mipLodBias_;
6954 return *this;
6955 }
6956
6957 SamplerCreateInfo& setAnisotropyEnable( Bool32 anisotropyEnable_ )
6958 {
6959 anisotropyEnable = anisotropyEnable_;
6960 return *this;
6961 }
6962
6963 SamplerCreateInfo& setMaxAnisotropy( float maxAnisotropy_ )
6964 {
6965 maxAnisotropy = maxAnisotropy_;
6966 return *this;
6967 }
6968
6969 SamplerCreateInfo& setCompareEnable( Bool32 compareEnable_ )
6970 {
6971 compareEnable = compareEnable_;
6972 return *this;
6973 }
6974
6975 SamplerCreateInfo& setCompareOp( CompareOp compareOp_ )
6976 {
6977 compareOp = compareOp_;
6978 return *this;
6979 }
6980
6981 SamplerCreateInfo& setMinLod( float minLod_ )
6982 {
6983 minLod = minLod_;
6984 return *this;
6985 }
6986
6987 SamplerCreateInfo& setMaxLod( float maxLod_ )
6988 {
6989 maxLod = maxLod_;
6990 return *this;
6991 }
6992
6993 SamplerCreateInfo& setBorderColor( BorderColor borderColor_ )
6994 {
6995 borderColor = borderColor_;
6996 return *this;
6997 }
6998
6999 SamplerCreateInfo& setUnnormalizedCoordinates( Bool32 unnormalizedCoordinates_ )
7000 {
7001 unnormalizedCoordinates = unnormalizedCoordinates_;
7002 return *this;
7003 }
7004
7005 operator const VkSamplerCreateInfo&() const
7006 {
7007 return *reinterpret_cast<const VkSamplerCreateInfo*>(this);
7008 }
7009
7010 bool operator==( SamplerCreateInfo const& rhs ) const
7011 {
7012 return ( sType == rhs.sType )
7013 && ( pNext == rhs.pNext )
7014 && ( flags == rhs.flags )
7015 && ( magFilter == rhs.magFilter )
7016 && ( minFilter == rhs.minFilter )
7017 && ( mipmapMode == rhs.mipmapMode )
7018 && ( addressModeU == rhs.addressModeU )
7019 && ( addressModeV == rhs.addressModeV )
7020 && ( addressModeW == rhs.addressModeW )
7021 && ( mipLodBias == rhs.mipLodBias )
7022 && ( anisotropyEnable == rhs.anisotropyEnable )
7023 && ( maxAnisotropy == rhs.maxAnisotropy )
7024 && ( compareEnable == rhs.compareEnable )
7025 && ( compareOp == rhs.compareOp )
7026 && ( minLod == rhs.minLod )
7027 && ( maxLod == rhs.maxLod )
7028 && ( borderColor == rhs.borderColor )
7029 && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates );
7030 }
7031
7032 bool operator!=( SamplerCreateInfo const& rhs ) const
7033 {
7034 return !operator==( rhs );
7035 }
7036
7037 private:
7038 StructureType sType;
7039
7040 public:
7041 const void* pNext;
7042 SamplerCreateFlags flags;
7043 Filter magFilter;
7044 Filter minFilter;
7045 SamplerMipmapMode mipmapMode;
7046 SamplerAddressMode addressModeU;
7047 SamplerAddressMode addressModeV;
7048 SamplerAddressMode addressModeW;
7049 float mipLodBias;
7050 Bool32 anisotropyEnable;
7051 float maxAnisotropy;
7052 Bool32 compareEnable;
7053 CompareOp compareOp;
7054 float minLod;
7055 float maxLod;
7056 BorderColor borderColor;
7057 Bool32 unnormalizedCoordinates;
7058 };
7059 static_assert( sizeof( SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ), "struct and wrapper have different size!" );
7060
7061 struct CommandBufferAllocateInfo
7062 {
7063 CommandBufferAllocateInfo( CommandPool commandPool_ = CommandPool(), CommandBufferLevel level_ = CommandBufferLevel::ePrimary, uint32_t commandBufferCount_ = 0 )
7064 : sType( StructureType::eCommandBufferAllocateInfo )
7065 , pNext( nullptr )
7066 , commandPool( commandPool_ )
7067 , level( level_ )
7068 , commandBufferCount( commandBufferCount_ )
7069 {
7070 }
7071
7072 CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs )
7073 {
7074 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7075 }
7076
7077 CommandBufferAllocateInfo& operator=( VkCommandBufferAllocateInfo const & rhs )
7078 {
7079 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7080 return *this;
7081 }
7082
7083 CommandBufferAllocateInfo& setSType( StructureType sType_ )
7084 {
7085 sType = sType_;
7086 return *this;
7087 }
7088
7089 CommandBufferAllocateInfo& setPNext( const void* pNext_ )
7090 {
7091 pNext = pNext_;
7092 return *this;
7093 }
7094
7095 CommandBufferAllocateInfo& setCommandPool( CommandPool commandPool_ )
7096 {
7097 commandPool = commandPool_;
7098 return *this;
7099 }
7100
7101 CommandBufferAllocateInfo& setLevel( CommandBufferLevel level_ )
7102 {
7103 level = level_;
7104 return *this;
7105 }
7106
7107 CommandBufferAllocateInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
7108 {
7109 commandBufferCount = commandBufferCount_;
7110 return *this;
7111 }
7112
7113 operator const VkCommandBufferAllocateInfo&() const
7114 {
7115 return *reinterpret_cast<const VkCommandBufferAllocateInfo*>(this);
7116 }
7117
7118 bool operator==( CommandBufferAllocateInfo const& rhs ) const
7119 {
7120 return ( sType == rhs.sType )
7121 && ( pNext == rhs.pNext )
7122 && ( commandPool == rhs.commandPool )
7123 && ( level == rhs.level )
7124 && ( commandBufferCount == rhs.commandBufferCount );
7125 }
7126
7127 bool operator!=( CommandBufferAllocateInfo const& rhs ) const
7128 {
7129 return !operator==( rhs );
7130 }
7131
7132 private:
7133 StructureType sType;
7134
7135 public:
7136 const void* pNext;
7137 CommandPool commandPool;
7138 CommandBufferLevel level;
7139 uint32_t commandBufferCount;
7140 };
7141 static_assert( sizeof( CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ), "struct and wrapper have different size!" );
7142
7143 struct RenderPassBeginInfo
7144 {
7145 RenderPassBeginInfo( RenderPass renderPass_ = RenderPass(), Framebuffer framebuffer_ = Framebuffer(), Rect2D renderArea_ = Rect2D(), uint32_t clearValueCount_ = 0, const ClearValue* pClearValues_ = nullptr )
7146 : sType( StructureType::eRenderPassBeginInfo )
7147 , pNext( nullptr )
7148 , renderPass( renderPass_ )
7149 , framebuffer( framebuffer_ )
7150 , renderArea( renderArea_ )
7151 , clearValueCount( clearValueCount_ )
7152 , pClearValues( pClearValues_ )
7153 {
7154 }
7155
7156 RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs )
7157 {
7158 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7159 }
7160
7161 RenderPassBeginInfo& operator=( VkRenderPassBeginInfo const & rhs )
7162 {
7163 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7164 return *this;
7165 }
7166
7167 RenderPassBeginInfo& setSType( StructureType sType_ )
7168 {
7169 sType = sType_;
7170 return *this;
7171 }
7172
7173 RenderPassBeginInfo& setPNext( const void* pNext_ )
7174 {
7175 pNext = pNext_;
7176 return *this;
7177 }
7178
7179 RenderPassBeginInfo& setRenderPass( RenderPass renderPass_ )
7180 {
7181 renderPass = renderPass_;
7182 return *this;
7183 }
7184
7185 RenderPassBeginInfo& setFramebuffer( Framebuffer framebuffer_ )
7186 {
7187 framebuffer = framebuffer_;
7188 return *this;
7189 }
7190
7191 RenderPassBeginInfo& setRenderArea( Rect2D renderArea_ )
7192 {
7193 renderArea = renderArea_;
7194 return *this;
7195 }
7196
7197 RenderPassBeginInfo& setClearValueCount( uint32_t clearValueCount_ )
7198 {
7199 clearValueCount = clearValueCount_;
7200 return *this;
7201 }
7202
7203 RenderPassBeginInfo& setPClearValues( const ClearValue* pClearValues_ )
7204 {
7205 pClearValues = pClearValues_;
7206 return *this;
7207 }
7208
7209 operator const VkRenderPassBeginInfo&() const
7210 {
7211 return *reinterpret_cast<const VkRenderPassBeginInfo*>(this);
7212 }
7213
7214 bool operator==( RenderPassBeginInfo const& rhs ) const
7215 {
7216 return ( sType == rhs.sType )
7217 && ( pNext == rhs.pNext )
7218 && ( renderPass == rhs.renderPass )
7219 && ( framebuffer == rhs.framebuffer )
7220 && ( renderArea == rhs.renderArea )
7221 && ( clearValueCount == rhs.clearValueCount )
7222 && ( pClearValues == rhs.pClearValues );
7223 }
7224
7225 bool operator!=( RenderPassBeginInfo const& rhs ) const
7226 {
7227 return !operator==( rhs );
7228 }
7229
7230 private:
7231 StructureType sType;
7232
7233 public:
7234 const void* pNext;
7235 RenderPass renderPass;
7236 Framebuffer framebuffer;
7237 Rect2D renderArea;
7238 uint32_t clearValueCount;
7239 const ClearValue* pClearValues;
7240 };
7241 static_assert( sizeof( RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ), "struct and wrapper have different size!" );
7242
7243 struct EventCreateInfo
7244 {
7245 EventCreateInfo( EventCreateFlags flags_ = EventCreateFlags() )
7246 : sType( StructureType::eEventCreateInfo )
7247 , pNext( nullptr )
7248 , flags( flags_ )
7249 {
7250 }
7251
7252 EventCreateInfo( VkEventCreateInfo const & rhs )
7253 {
7254 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7255 }
7256
7257 EventCreateInfo& operator=( VkEventCreateInfo const & rhs )
7258 {
7259 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7260 return *this;
7261 }
7262
7263 EventCreateInfo& setSType( StructureType sType_ )
7264 {
7265 sType = sType_;
7266 return *this;
7267 }
7268
7269 EventCreateInfo& setPNext( const void* pNext_ )
7270 {
7271 pNext = pNext_;
7272 return *this;
7273 }
7274
7275 EventCreateInfo& setFlags( EventCreateFlags flags_ )
7276 {
7277 flags = flags_;
7278 return *this;
7279 }
7280
7281 operator const VkEventCreateInfo&() const
7282 {
7283 return *reinterpret_cast<const VkEventCreateInfo*>(this);
7284 }
7285
7286 bool operator==( EventCreateInfo const& rhs ) const
7287 {
7288 return ( sType == rhs.sType )
7289 && ( pNext == rhs.pNext )
7290 && ( flags == rhs.flags );
7291 }
7292
7293 bool operator!=( EventCreateInfo const& rhs ) const
7294 {
7295 return !operator==( rhs );
7296 }
7297
7298 private:
7299 StructureType sType;
7300
7301 public:
7302 const void* pNext;
7303 EventCreateFlags flags;
7304 };
7305 static_assert( sizeof( EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" );
7306
7307 struct SemaphoreCreateInfo
7308 {
7309 SemaphoreCreateInfo( SemaphoreCreateFlags flags_ = SemaphoreCreateFlags() )
7310 : sType( StructureType::eSemaphoreCreateInfo )
7311 , pNext( nullptr )
7312 , flags( flags_ )
7313 {
7314 }
7315
7316 SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs )
7317 {
7318 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7319 }
7320
7321 SemaphoreCreateInfo& operator=( VkSemaphoreCreateInfo const & rhs )
7322 {
7323 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7324 return *this;
7325 }
7326
7327 SemaphoreCreateInfo& setSType( StructureType sType_ )
7328 {
7329 sType = sType_;
7330 return *this;
7331 }
7332
7333 SemaphoreCreateInfo& setPNext( const void* pNext_ )
7334 {
7335 pNext = pNext_;
7336 return *this;
7337 }
7338
7339 SemaphoreCreateInfo& setFlags( SemaphoreCreateFlags flags_ )
7340 {
7341 flags = flags_;
7342 return *this;
7343 }
7344
7345 operator const VkSemaphoreCreateInfo&() const
7346 {
7347 return *reinterpret_cast<const VkSemaphoreCreateInfo*>(this);
7348 }
7349
7350 bool operator==( SemaphoreCreateInfo const& rhs ) const
7351 {
7352 return ( sType == rhs.sType )
7353 && ( pNext == rhs.pNext )
7354 && ( flags == rhs.flags );
7355 }
7356
7357 bool operator!=( SemaphoreCreateInfo const& rhs ) const
7358 {
7359 return !operator==( rhs );
7360 }
7361
7362 private:
7363 StructureType sType;
7364
7365 public:
7366 const void* pNext;
7367 SemaphoreCreateFlags flags;
7368 };
7369 static_assert( sizeof( SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ), "struct and wrapper have different size!" );
7370
7371 struct FramebufferCreateInfo
7372 {
7373 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 )
7374 : sType( StructureType::eFramebufferCreateInfo )
7375 , pNext( nullptr )
7376 , flags( flags_ )
7377 , renderPass( renderPass_ )
7378 , attachmentCount( attachmentCount_ )
7379 , pAttachments( pAttachments_ )
7380 , width( width_ )
7381 , height( height_ )
7382 , layers( layers_ )
7383 {
7384 }
7385
7386 FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs )
7387 {
7388 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7389 }
7390
7391 FramebufferCreateInfo& operator=( VkFramebufferCreateInfo const & rhs )
7392 {
7393 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7394 return *this;
7395 }
7396
7397 FramebufferCreateInfo& setSType( StructureType sType_ )
7398 {
7399 sType = sType_;
7400 return *this;
7401 }
7402
7403 FramebufferCreateInfo& setPNext( const void* pNext_ )
7404 {
7405 pNext = pNext_;
7406 return *this;
7407 }
7408
7409 FramebufferCreateInfo& setFlags( FramebufferCreateFlags flags_ )
7410 {
7411 flags = flags_;
7412 return *this;
7413 }
7414
7415 FramebufferCreateInfo& setRenderPass( RenderPass renderPass_ )
7416 {
7417 renderPass = renderPass_;
7418 return *this;
7419 }
7420
7421 FramebufferCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
7422 {
7423 attachmentCount = attachmentCount_;
7424 return *this;
7425 }
7426
7427 FramebufferCreateInfo& setPAttachments( const ImageView* pAttachments_ )
7428 {
7429 pAttachments = pAttachments_;
7430 return *this;
7431 }
7432
7433 FramebufferCreateInfo& setWidth( uint32_t width_ )
7434 {
7435 width = width_;
7436 return *this;
7437 }
7438
7439 FramebufferCreateInfo& setHeight( uint32_t height_ )
7440 {
7441 height = height_;
7442 return *this;
7443 }
7444
7445 FramebufferCreateInfo& setLayers( uint32_t layers_ )
7446 {
7447 layers = layers_;
7448 return *this;
7449 }
7450
7451 operator const VkFramebufferCreateInfo&() const
7452 {
7453 return *reinterpret_cast<const VkFramebufferCreateInfo*>(this);
7454 }
7455
7456 bool operator==( FramebufferCreateInfo const& rhs ) const
7457 {
7458 return ( sType == rhs.sType )
7459 && ( pNext == rhs.pNext )
7460 && ( flags == rhs.flags )
7461 && ( renderPass == rhs.renderPass )
7462 && ( attachmentCount == rhs.attachmentCount )
7463 && ( pAttachments == rhs.pAttachments )
7464 && ( width == rhs.width )
7465 && ( height == rhs.height )
7466 && ( layers == rhs.layers );
7467 }
7468
7469 bool operator!=( FramebufferCreateInfo const& rhs ) const
7470 {
7471 return !operator==( rhs );
7472 }
7473
7474 private:
7475 StructureType sType;
7476
7477 public:
7478 const void* pNext;
7479 FramebufferCreateFlags flags;
7480 RenderPass renderPass;
7481 uint32_t attachmentCount;
7482 const ImageView* pAttachments;
7483 uint32_t width;
7484 uint32_t height;
7485 uint32_t layers;
7486 };
7487 static_assert( sizeof( FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ), "struct and wrapper have different size!" );
7488
7489 struct DisplayModeCreateInfoKHR
7490 {
7491 DisplayModeCreateInfoKHR( DisplayModeCreateFlagsKHR flags_ = DisplayModeCreateFlagsKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
7492 : sType( StructureType::eDisplayModeCreateInfoKHR )
7493 , pNext( nullptr )
7494 , flags( flags_ )
7495 , parameters( parameters_ )
7496 {
7497 }
7498
7499 DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs )
7500 {
7501 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7502 }
7503
7504 DisplayModeCreateInfoKHR& operator=( VkDisplayModeCreateInfoKHR const & rhs )
7505 {
7506 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7507 return *this;
7508 }
7509
7510 DisplayModeCreateInfoKHR& setSType( StructureType sType_ )
7511 {
7512 sType = sType_;
7513 return *this;
7514 }
7515
7516 DisplayModeCreateInfoKHR& setPNext( const void* pNext_ )
7517 {
7518 pNext = pNext_;
7519 return *this;
7520 }
7521
7522 DisplayModeCreateInfoKHR& setFlags( DisplayModeCreateFlagsKHR flags_ )
7523 {
7524 flags = flags_;
7525 return *this;
7526 }
7527
7528 DisplayModeCreateInfoKHR& setParameters( DisplayModeParametersKHR parameters_ )
7529 {
7530 parameters = parameters_;
7531 return *this;
7532 }
7533
7534 operator const VkDisplayModeCreateInfoKHR&() const
7535 {
7536 return *reinterpret_cast<const VkDisplayModeCreateInfoKHR*>(this);
7537 }
7538
7539 bool operator==( DisplayModeCreateInfoKHR const& rhs ) const
7540 {
7541 return ( sType == rhs.sType )
7542 && ( pNext == rhs.pNext )
7543 && ( flags == rhs.flags )
7544 && ( parameters == rhs.parameters );
7545 }
7546
7547 bool operator!=( DisplayModeCreateInfoKHR const& rhs ) const
7548 {
7549 return !operator==( rhs );
7550 }
7551
7552 private:
7553 StructureType sType;
7554
7555 public:
7556 const void* pNext;
7557 DisplayModeCreateFlagsKHR flags;
7558 DisplayModeParametersKHR parameters;
7559 };
7560 static_assert( sizeof( DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ), "struct and wrapper have different size!" );
7561
7562 struct DisplayPresentInfoKHR
7563 {
7564 DisplayPresentInfoKHR( Rect2D srcRect_ = Rect2D(), Rect2D dstRect_ = Rect2D(), Bool32 persistent_ = 0 )
7565 : sType( StructureType::eDisplayPresentInfoKHR )
7566 , pNext( nullptr )
7567 , srcRect( srcRect_ )
7568 , dstRect( dstRect_ )
7569 , persistent( persistent_ )
7570 {
7571 }
7572
7573 DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs )
7574 {
7575 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7576 }
7577
7578 DisplayPresentInfoKHR& operator=( VkDisplayPresentInfoKHR const & rhs )
7579 {
7580 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7581 return *this;
7582 }
7583
7584 DisplayPresentInfoKHR& setSType( StructureType sType_ )
7585 {
7586 sType = sType_;
7587 return *this;
7588 }
7589
7590 DisplayPresentInfoKHR& setPNext( const void* pNext_ )
7591 {
7592 pNext = pNext_;
7593 return *this;
7594 }
7595
7596 DisplayPresentInfoKHR& setSrcRect( Rect2D srcRect_ )
7597 {
7598 srcRect = srcRect_;
7599 return *this;
7600 }
7601
7602 DisplayPresentInfoKHR& setDstRect( Rect2D dstRect_ )
7603 {
7604 dstRect = dstRect_;
7605 return *this;
7606 }
7607
7608 DisplayPresentInfoKHR& setPersistent( Bool32 persistent_ )
7609 {
7610 persistent = persistent_;
7611 return *this;
7612 }
7613
7614 operator const VkDisplayPresentInfoKHR&() const
7615 {
7616 return *reinterpret_cast<const VkDisplayPresentInfoKHR*>(this);
7617 }
7618
7619 bool operator==( DisplayPresentInfoKHR const& rhs ) const
7620 {
7621 return ( sType == rhs.sType )
7622 && ( pNext == rhs.pNext )
7623 && ( srcRect == rhs.srcRect )
7624 && ( dstRect == rhs.dstRect )
7625 && ( persistent == rhs.persistent );
7626 }
7627
7628 bool operator!=( DisplayPresentInfoKHR const& rhs ) const
7629 {
7630 return !operator==( rhs );
7631 }
7632
7633 private:
7634 StructureType sType;
7635
7636 public:
7637 const void* pNext;
7638 Rect2D srcRect;
7639 Rect2D dstRect;
7640 Bool32 persistent;
7641 };
7642 static_assert( sizeof( DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ), "struct and wrapper have different size!" );
7643
7644#ifdef VK_USE_PLATFORM_ANDROID_KHR
7645 struct AndroidSurfaceCreateInfoKHR
7646 {
7647 AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateFlagsKHR flags_ = AndroidSurfaceCreateFlagsKHR(), ANativeWindow* window_ = nullptr )
7648 : sType( StructureType::eAndroidSurfaceCreateInfoKHR )
7649 , pNext( nullptr )
7650 , flags( flags_ )
7651 , window( window_ )
7652 {
7653 }
7654
7655 AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs )
7656 {
7657 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
7658 }
7659
7660 AndroidSurfaceCreateInfoKHR& operator=( VkAndroidSurfaceCreateInfoKHR const & rhs )
7661 {
7662 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
7663 return *this;
7664 }
7665
7666 AndroidSurfaceCreateInfoKHR& setSType( StructureType sType_ )
7667 {
7668 sType = sType_;
7669 return *this;
7670 }
7671
7672 AndroidSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
7673 {
7674 pNext = pNext_;
7675 return *this;
7676 }
7677
7678 AndroidSurfaceCreateInfoKHR& setFlags( AndroidSurfaceCreateFlagsKHR flags_ )
7679 {
7680 flags = flags_;
7681 return *this;
7682 }
7683
7684 AndroidSurfaceCreateInfoKHR& setWindow( ANativeWindow* window_ )
7685 {
7686 window = window_;
7687 return *this;
7688 }
7689
7690 operator const VkAndroidSurfaceCreateInfoKHR&() const
7691 {
7692 return *reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>(this);
7693 }
7694
7695 bool operator==( AndroidSurfaceCreateInfoKHR const& rhs ) const
7696 {
7697 return ( sType == rhs.sType )
7698 && ( pNext == rhs.pNext )
7699 && ( flags == rhs.flags )
7700 && ( window == rhs.window );
7701 }
7702
7703 bool operator!=( AndroidSurfaceCreateInfoKHR const& rhs ) const
7704 {
7705 return !operator==( rhs );
7706 }
7707
7708 private:
7709 StructureType sType;
7710
7711 public:
7712 const void* pNext;
7713 AndroidSurfaceCreateFlagsKHR flags;
7714 ANativeWindow* window;
7715 };
7716 static_assert( sizeof( AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
7717#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
7718
7719#ifdef VK_USE_PLATFORM_MIR_KHR
7720 struct MirSurfaceCreateInfoKHR
7721 {
7722 MirSurfaceCreateInfoKHR( MirSurfaceCreateFlagsKHR flags_ = MirSurfaceCreateFlagsKHR(), MirConnection* connection_ = nullptr, MirSurface* mirSurface_ = nullptr )
7723 : sType( StructureType::eMirSurfaceCreateInfoKHR )
7724 , pNext( nullptr )
7725 , flags( flags_ )
7726 , connection( connection_ )
7727 , mirSurface( mirSurface_ )
7728 {
7729 }
7730
7731 MirSurfaceCreateInfoKHR( VkMirSurfaceCreateInfoKHR const & rhs )
7732 {
7733 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
7734 }
7735
7736 MirSurfaceCreateInfoKHR& operator=( VkMirSurfaceCreateInfoKHR const & rhs )
7737 {
7738 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
7739 return *this;
7740 }
7741
7742 MirSurfaceCreateInfoKHR& setSType( StructureType sType_ )
7743 {
7744 sType = sType_;
7745 return *this;
7746 }
7747
7748 MirSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
7749 {
7750 pNext = pNext_;
7751 return *this;
7752 }
7753
7754 MirSurfaceCreateInfoKHR& setFlags( MirSurfaceCreateFlagsKHR flags_ )
7755 {
7756 flags = flags_;
7757 return *this;
7758 }
7759
7760 MirSurfaceCreateInfoKHR& setConnection( MirConnection* connection_ )
7761 {
7762 connection = connection_;
7763 return *this;
7764 }
7765
7766 MirSurfaceCreateInfoKHR& setMirSurface( MirSurface* mirSurface_ )
7767 {
7768 mirSurface = mirSurface_;
7769 return *this;
7770 }
7771
7772 operator const VkMirSurfaceCreateInfoKHR&() const
7773 {
7774 return *reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>(this);
7775 }
7776
7777 bool operator==( MirSurfaceCreateInfoKHR const& rhs ) const
7778 {
7779 return ( sType == rhs.sType )
7780 && ( pNext == rhs.pNext )
7781 && ( flags == rhs.flags )
7782 && ( connection == rhs.connection )
7783 && ( mirSurface == rhs.mirSurface );
7784 }
7785
7786 bool operator!=( MirSurfaceCreateInfoKHR const& rhs ) const
7787 {
7788 return !operator==( rhs );
7789 }
7790
7791 private:
7792 StructureType sType;
7793
7794 public:
7795 const void* pNext;
7796 MirSurfaceCreateFlagsKHR flags;
7797 MirConnection* connection;
7798 MirSurface* mirSurface;
7799 };
7800 static_assert( sizeof( MirSurfaceCreateInfoKHR ) == sizeof( VkMirSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
7801#endif /*VK_USE_PLATFORM_MIR_KHR*/
7802
7803#ifdef VK_USE_PLATFORM_WAYLAND_KHR
7804 struct WaylandSurfaceCreateInfoKHR
7805 {
7806 WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateFlagsKHR flags_ = WaylandSurfaceCreateFlagsKHR(), struct wl_display* display_ = nullptr, struct wl_surface* surface_ = nullptr )
7807 : sType( StructureType::eWaylandSurfaceCreateInfoKHR )
7808 , pNext( nullptr )
7809 , flags( flags_ )
7810 , display( display_ )
7811 , surface( surface_ )
7812 {
7813 }
7814
7815 WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs )
7816 {
7817 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
7818 }
7819
7820 WaylandSurfaceCreateInfoKHR& operator=( VkWaylandSurfaceCreateInfoKHR const & rhs )
7821 {
7822 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
7823 return *this;
7824 }
7825
7826 WaylandSurfaceCreateInfoKHR& setSType( StructureType sType_ )
7827 {
7828 sType = sType_;
7829 return *this;
7830 }
7831
7832 WaylandSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
7833 {
7834 pNext = pNext_;
7835 return *this;
7836 }
7837
7838 WaylandSurfaceCreateInfoKHR& setFlags( WaylandSurfaceCreateFlagsKHR flags_ )
7839 {
7840 flags = flags_;
7841 return *this;
7842 }
7843
7844 WaylandSurfaceCreateInfoKHR& setDisplay( struct wl_display* display_ )
7845 {
7846 display = display_;
7847 return *this;
7848 }
7849
7850 WaylandSurfaceCreateInfoKHR& setSurface( struct wl_surface* surface_ )
7851 {
7852 surface = surface_;
7853 return *this;
7854 }
7855
7856 operator const VkWaylandSurfaceCreateInfoKHR&() const
7857 {
7858 return *reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>(this);
7859 }
7860
7861 bool operator==( WaylandSurfaceCreateInfoKHR const& rhs ) const
7862 {
7863 return ( sType == rhs.sType )
7864 && ( pNext == rhs.pNext )
7865 && ( flags == rhs.flags )
7866 && ( display == rhs.display )
7867 && ( surface == rhs.surface );
7868 }
7869
7870 bool operator!=( WaylandSurfaceCreateInfoKHR const& rhs ) const
7871 {
7872 return !operator==( rhs );
7873 }
7874
7875 private:
7876 StructureType sType;
7877
7878 public:
7879 const void* pNext;
7880 WaylandSurfaceCreateFlagsKHR flags;
7881 struct wl_display* display;
7882 struct wl_surface* surface;
7883 };
7884 static_assert( sizeof( WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
7885#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
7886
7887#ifdef VK_USE_PLATFORM_WIN32_KHR
7888 struct Win32SurfaceCreateInfoKHR
7889 {
7890 Win32SurfaceCreateInfoKHR( Win32SurfaceCreateFlagsKHR flags_ = Win32SurfaceCreateFlagsKHR(), HINSTANCE hinstance_ = 0, HWND hwnd_ = 0 )
7891 : sType( StructureType::eWin32SurfaceCreateInfoKHR )
7892 , pNext( nullptr )
7893 , flags( flags_ )
7894 , hinstance( hinstance_ )
7895 , hwnd( hwnd_ )
7896 {
7897 }
7898
7899 Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs )
7900 {
7901 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
7902 }
7903
7904 Win32SurfaceCreateInfoKHR& operator=( VkWin32SurfaceCreateInfoKHR const & rhs )
7905 {
7906 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
7907 return *this;
7908 }
7909
7910 Win32SurfaceCreateInfoKHR& setSType( StructureType sType_ )
7911 {
7912 sType = sType_;
7913 return *this;
7914 }
7915
7916 Win32SurfaceCreateInfoKHR& setPNext( const void* pNext_ )
7917 {
7918 pNext = pNext_;
7919 return *this;
7920 }
7921
7922 Win32SurfaceCreateInfoKHR& setFlags( Win32SurfaceCreateFlagsKHR flags_ )
7923 {
7924 flags = flags_;
7925 return *this;
7926 }
7927
7928 Win32SurfaceCreateInfoKHR& setHinstance( HINSTANCE hinstance_ )
7929 {
7930 hinstance = hinstance_;
7931 return *this;
7932 }
7933
7934 Win32SurfaceCreateInfoKHR& setHwnd( HWND hwnd_ )
7935 {
7936 hwnd = hwnd_;
7937 return *this;
7938 }
7939
7940 operator const VkWin32SurfaceCreateInfoKHR&() const
7941 {
7942 return *reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>(this);
7943 }
7944
7945 bool operator==( Win32SurfaceCreateInfoKHR const& rhs ) const
7946 {
7947 return ( sType == rhs.sType )
7948 && ( pNext == rhs.pNext )
7949 && ( flags == rhs.flags )
7950 && ( hinstance == rhs.hinstance )
7951 && ( hwnd == rhs.hwnd );
7952 }
7953
7954 bool operator!=( Win32SurfaceCreateInfoKHR const& rhs ) const
7955 {
7956 return !operator==( rhs );
7957 }
7958
7959 private:
7960 StructureType sType;
7961
7962 public:
7963 const void* pNext;
7964 Win32SurfaceCreateFlagsKHR flags;
7965 HINSTANCE hinstance;
7966 HWND hwnd;
7967 };
7968 static_assert( sizeof( Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
7969#endif /*VK_USE_PLATFORM_WIN32_KHR*/
7970
7971#ifdef VK_USE_PLATFORM_XLIB_KHR
7972 struct XlibSurfaceCreateInfoKHR
7973 {
7974 XlibSurfaceCreateInfoKHR( XlibSurfaceCreateFlagsKHR flags_ = XlibSurfaceCreateFlagsKHR(), Display* dpy_ = nullptr, Window window_ = 0 )
7975 : sType( StructureType::eXlibSurfaceCreateInfoKHR )
7976 , pNext( nullptr )
7977 , flags( flags_ )
7978 , dpy( dpy_ )
7979 , window( window_ )
7980 {
7981 }
7982
7983 XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs )
7984 {
7985 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
7986 }
7987
7988 XlibSurfaceCreateInfoKHR& operator=( VkXlibSurfaceCreateInfoKHR const & rhs )
7989 {
7990 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
7991 return *this;
7992 }
7993
7994 XlibSurfaceCreateInfoKHR& setSType( StructureType sType_ )
7995 {
7996 sType = sType_;
7997 return *this;
7998 }
7999
8000 XlibSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8001 {
8002 pNext = pNext_;
8003 return *this;
8004 }
8005
8006 XlibSurfaceCreateInfoKHR& setFlags( XlibSurfaceCreateFlagsKHR flags_ )
8007 {
8008 flags = flags_;
8009 return *this;
8010 }
8011
8012 XlibSurfaceCreateInfoKHR& setDpy( Display* dpy_ )
8013 {
8014 dpy = dpy_;
8015 return *this;
8016 }
8017
8018 XlibSurfaceCreateInfoKHR& setWindow( Window window_ )
8019 {
8020 window = window_;
8021 return *this;
8022 }
8023
8024 operator const VkXlibSurfaceCreateInfoKHR&() const
8025 {
8026 return *reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>(this);
8027 }
8028
8029 bool operator==( XlibSurfaceCreateInfoKHR const& rhs ) const
8030 {
8031 return ( sType == rhs.sType )
8032 && ( pNext == rhs.pNext )
8033 && ( flags == rhs.flags )
8034 && ( dpy == rhs.dpy )
8035 && ( window == rhs.window );
8036 }
8037
8038 bool operator!=( XlibSurfaceCreateInfoKHR const& rhs ) const
8039 {
8040 return !operator==( rhs );
8041 }
8042
8043 private:
8044 StructureType sType;
8045
8046 public:
8047 const void* pNext;
8048 XlibSurfaceCreateFlagsKHR flags;
8049 Display* dpy;
8050 Window window;
8051 };
8052 static_assert( sizeof( XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8053#endif /*VK_USE_PLATFORM_XLIB_KHR*/
8054
8055#ifdef VK_USE_PLATFORM_XCB_KHR
8056 struct XcbSurfaceCreateInfoKHR
8057 {
8058 XcbSurfaceCreateInfoKHR( XcbSurfaceCreateFlagsKHR flags_ = XcbSurfaceCreateFlagsKHR(), xcb_connection_t* connection_ = nullptr, xcb_window_t window_ = 0 )
8059 : sType( StructureType::eXcbSurfaceCreateInfoKHR )
8060 , pNext( nullptr )
8061 , flags( flags_ )
8062 , connection( connection_ )
8063 , window( window_ )
8064 {
8065 }
8066
8067 XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs )
8068 {
8069 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8070 }
8071
8072 XcbSurfaceCreateInfoKHR& operator=( VkXcbSurfaceCreateInfoKHR const & rhs )
8073 {
8074 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8075 return *this;
8076 }
8077
8078 XcbSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8079 {
8080 sType = sType_;
8081 return *this;
8082 }
8083
8084 XcbSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8085 {
8086 pNext = pNext_;
8087 return *this;
8088 }
8089
8090 XcbSurfaceCreateInfoKHR& setFlags( XcbSurfaceCreateFlagsKHR flags_ )
8091 {
8092 flags = flags_;
8093 return *this;
8094 }
8095
8096 XcbSurfaceCreateInfoKHR& setConnection( xcb_connection_t* connection_ )
8097 {
8098 connection = connection_;
8099 return *this;
8100 }
8101
8102 XcbSurfaceCreateInfoKHR& setWindow( xcb_window_t window_ )
8103 {
8104 window = window_;
8105 return *this;
8106 }
8107
8108 operator const VkXcbSurfaceCreateInfoKHR&() const
8109 {
8110 return *reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>(this);
8111 }
8112
8113 bool operator==( XcbSurfaceCreateInfoKHR const& rhs ) const
8114 {
8115 return ( sType == rhs.sType )
8116 && ( pNext == rhs.pNext )
8117 && ( flags == rhs.flags )
8118 && ( connection == rhs.connection )
8119 && ( window == rhs.window );
8120 }
8121
8122 bool operator!=( XcbSurfaceCreateInfoKHR const& rhs ) const
8123 {
8124 return !operator==( rhs );
8125 }
8126
8127 private:
8128 StructureType sType;
8129
8130 public:
8131 const void* pNext;
8132 XcbSurfaceCreateFlagsKHR flags;
8133 xcb_connection_t* connection;
8134 xcb_window_t window;
8135 };
8136 static_assert( sizeof( XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8137#endif /*VK_USE_PLATFORM_XCB_KHR*/
8138
8139 struct DebugMarkerMarkerInfoEXT
8140 {
8141 DebugMarkerMarkerInfoEXT( const char* pMarkerName_ = nullptr, std::array<float,4> const& color_ = { { 0, 0, 0, 0 } } )
8142 : sType( StructureType::eDebugMarkerMarkerInfoEXT )
8143 , pNext( nullptr )
8144 , pMarkerName( pMarkerName_ )
8145 {
8146 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8147 }
8148
8149 DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs )
8150 {
8151 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8152 }
8153
8154 DebugMarkerMarkerInfoEXT& operator=( VkDebugMarkerMarkerInfoEXT const & rhs )
8155 {
8156 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8157 return *this;
8158 }
8159
8160 DebugMarkerMarkerInfoEXT& setSType( StructureType sType_ )
8161 {
8162 sType = sType_;
8163 return *this;
8164 }
8165
8166 DebugMarkerMarkerInfoEXT& setPNext( const void* pNext_ )
8167 {
8168 pNext = pNext_;
8169 return *this;
8170 }
8171
8172 DebugMarkerMarkerInfoEXT& setPMarkerName( const char* pMarkerName_ )
8173 {
8174 pMarkerName = pMarkerName_;
8175 return *this;
8176 }
8177
8178 DebugMarkerMarkerInfoEXT& setColor( std::array<float,4> color_ )
8179 {
8180 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8181 return *this;
8182 }
8183
8184 operator const VkDebugMarkerMarkerInfoEXT&() const
8185 {
8186 return *reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>(this);
8187 }
8188
8189 bool operator==( DebugMarkerMarkerInfoEXT const& rhs ) const
8190 {
8191 return ( sType == rhs.sType )
8192 && ( pNext == rhs.pNext )
8193 && ( pMarkerName == rhs.pMarkerName )
8194 && ( memcmp( color, rhs.color, 4 * sizeof( float ) ) == 0 );
8195 }
8196
8197 bool operator!=( DebugMarkerMarkerInfoEXT const& rhs ) const
8198 {
8199 return !operator==( rhs );
8200 }
8201
8202 private:
8203 StructureType sType;
8204
8205 public:
8206 const void* pNext;
8207 const char* pMarkerName;
8208 float color[4];
8209 };
8210 static_assert( sizeof( DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ), "struct and wrapper have different size!" );
8211
8212 struct DedicatedAllocationImageCreateInfoNV
8213 {
8214 DedicatedAllocationImageCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8215 : sType( StructureType::eDedicatedAllocationImageCreateInfoNV )
8216 , pNext( nullptr )
8217 , dedicatedAllocation( dedicatedAllocation_ )
8218 {
8219 }
8220
8221 DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8222 {
8223 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8224 }
8225
8226 DedicatedAllocationImageCreateInfoNV& operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8227 {
8228 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8229 return *this;
8230 }
8231
8232 DedicatedAllocationImageCreateInfoNV& setSType( StructureType sType_ )
8233 {
8234 sType = sType_;
8235 return *this;
8236 }
8237
8238 DedicatedAllocationImageCreateInfoNV& setPNext( const void* pNext_ )
8239 {
8240 pNext = pNext_;
8241 return *this;
8242 }
8243
8244 DedicatedAllocationImageCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8245 {
8246 dedicatedAllocation = dedicatedAllocation_;
8247 return *this;
8248 }
8249
8250 operator const VkDedicatedAllocationImageCreateInfoNV&() const
8251 {
8252 return *reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(this);
8253 }
8254
8255 bool operator==( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8256 {
8257 return ( sType == rhs.sType )
8258 && ( pNext == rhs.pNext )
8259 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8260 }
8261
8262 bool operator!=( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8263 {
8264 return !operator==( rhs );
8265 }
8266
8267 private:
8268 StructureType sType;
8269
8270 public:
8271 const void* pNext;
8272 Bool32 dedicatedAllocation;
8273 };
8274 static_assert( sizeof( DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ), "struct and wrapper have different size!" );
8275
8276 struct DedicatedAllocationBufferCreateInfoNV
8277 {
8278 DedicatedAllocationBufferCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8279 : sType( StructureType::eDedicatedAllocationBufferCreateInfoNV )
8280 , pNext( nullptr )
8281 , dedicatedAllocation( dedicatedAllocation_ )
8282 {
8283 }
8284
8285 DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8286 {
8287 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8288 }
8289
8290 DedicatedAllocationBufferCreateInfoNV& operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8291 {
8292 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8293 return *this;
8294 }
8295
8296 DedicatedAllocationBufferCreateInfoNV& setSType( StructureType sType_ )
8297 {
8298 sType = sType_;
8299 return *this;
8300 }
8301
8302 DedicatedAllocationBufferCreateInfoNV& setPNext( const void* pNext_ )
8303 {
8304 pNext = pNext_;
8305 return *this;
8306 }
8307
8308 DedicatedAllocationBufferCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8309 {
8310 dedicatedAllocation = dedicatedAllocation_;
8311 return *this;
8312 }
8313
8314 operator const VkDedicatedAllocationBufferCreateInfoNV&() const
8315 {
8316 return *reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(this);
8317 }
8318
8319 bool operator==( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8320 {
8321 return ( sType == rhs.sType )
8322 && ( pNext == rhs.pNext )
8323 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8324 }
8325
8326 bool operator!=( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8327 {
8328 return !operator==( rhs );
8329 }
8330
8331 private:
8332 StructureType sType;
8333
8334 public:
8335 const void* pNext;
8336 Bool32 dedicatedAllocation;
8337 };
8338 static_assert( sizeof( DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ), "struct and wrapper have different size!" );
8339
8340 struct DedicatedAllocationMemoryAllocateInfoNV
8341 {
8342 DedicatedAllocationMemoryAllocateInfoNV( Image image_ = Image(), Buffer buffer_ = Buffer() )
8343 : sType( StructureType::eDedicatedAllocationMemoryAllocateInfoNV )
8344 , pNext( nullptr )
8345 , image( image_ )
8346 , buffer( buffer_ )
8347 {
8348 }
8349
8350 DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8351 {
8352 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8353 }
8354
8355 DedicatedAllocationMemoryAllocateInfoNV& operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8356 {
8357 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8358 return *this;
8359 }
8360
8361 DedicatedAllocationMemoryAllocateInfoNV& setSType( StructureType sType_ )
8362 {
8363 sType = sType_;
8364 return *this;
8365 }
8366
8367 DedicatedAllocationMemoryAllocateInfoNV& setPNext( const void* pNext_ )
8368 {
8369 pNext = pNext_;
8370 return *this;
8371 }
8372
8373 DedicatedAllocationMemoryAllocateInfoNV& setImage( Image image_ )
8374 {
8375 image = image_;
8376 return *this;
8377 }
8378
8379 DedicatedAllocationMemoryAllocateInfoNV& setBuffer( Buffer buffer_ )
8380 {
8381 buffer = buffer_;
8382 return *this;
8383 }
8384
8385 operator const VkDedicatedAllocationMemoryAllocateInfoNV&() const
8386 {
8387 return *reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(this);
8388 }
8389
8390 bool operator==( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8391 {
8392 return ( sType == rhs.sType )
8393 && ( pNext == rhs.pNext )
8394 && ( image == rhs.image )
8395 && ( buffer == rhs.buffer );
8396 }
8397
8398 bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8399 {
8400 return !operator==( rhs );
8401 }
8402
8403 private:
8404 StructureType sType;
8405
8406 public:
8407 const void* pNext;
8408 Image image;
8409 Buffer buffer;
8410 };
8411 static_assert( sizeof( DedicatedAllocationMemoryAllocateInfoNV ) == sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
8412
8413 enum class SubpassContents
8414 {
8415 eInline = VK_SUBPASS_CONTENTS_INLINE,
8416 eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
8417 };
8418
8419 struct PresentInfoKHR
8420 {
8421 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 )
8422 : sType( StructureType::ePresentInfoKHR )
8423 , pNext( nullptr )
8424 , waitSemaphoreCount( waitSemaphoreCount_ )
8425 , pWaitSemaphores( pWaitSemaphores_ )
8426 , swapchainCount( swapchainCount_ )
8427 , pSwapchains( pSwapchains_ )
8428 , pImageIndices( pImageIndices_ )
8429 , pResults( pResults_ )
8430 {
8431 }
8432
8433 PresentInfoKHR( VkPresentInfoKHR const & rhs )
8434 {
8435 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
8436 }
8437
8438 PresentInfoKHR& operator=( VkPresentInfoKHR const & rhs )
8439 {
8440 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
8441 return *this;
8442 }
8443
8444 PresentInfoKHR& setSType( StructureType sType_ )
8445 {
8446 sType = sType_;
8447 return *this;
8448 }
8449
8450 PresentInfoKHR& setPNext( const void* pNext_ )
8451 {
8452 pNext = pNext_;
8453 return *this;
8454 }
8455
8456 PresentInfoKHR& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
8457 {
8458 waitSemaphoreCount = waitSemaphoreCount_;
8459 return *this;
8460 }
8461
8462 PresentInfoKHR& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
8463 {
8464 pWaitSemaphores = pWaitSemaphores_;
8465 return *this;
8466 }
8467
8468 PresentInfoKHR& setSwapchainCount( uint32_t swapchainCount_ )
8469 {
8470 swapchainCount = swapchainCount_;
8471 return *this;
8472 }
8473
8474 PresentInfoKHR& setPSwapchains( const SwapchainKHR* pSwapchains_ )
8475 {
8476 pSwapchains = pSwapchains_;
8477 return *this;
8478 }
8479
8480 PresentInfoKHR& setPImageIndices( const uint32_t* pImageIndices_ )
8481 {
8482 pImageIndices = pImageIndices_;
8483 return *this;
8484 }
8485
8486 PresentInfoKHR& setPResults( Result* pResults_ )
8487 {
8488 pResults = pResults_;
8489 return *this;
8490 }
8491
8492 operator const VkPresentInfoKHR&() const
8493 {
8494 return *reinterpret_cast<const VkPresentInfoKHR*>(this);
8495 }
8496
8497 bool operator==( PresentInfoKHR const& rhs ) const
8498 {
8499 return ( sType == rhs.sType )
8500 && ( pNext == rhs.pNext )
8501 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
8502 && ( pWaitSemaphores == rhs.pWaitSemaphores )
8503 && ( swapchainCount == rhs.swapchainCount )
8504 && ( pSwapchains == rhs.pSwapchains )
8505 && ( pImageIndices == rhs.pImageIndices )
8506 && ( pResults == rhs.pResults );
8507 }
8508
8509 bool operator!=( PresentInfoKHR const& rhs ) const
8510 {
8511 return !operator==( rhs );
8512 }
8513
8514 private:
8515 StructureType sType;
8516
8517 public:
8518 const void* pNext;
8519 uint32_t waitSemaphoreCount;
8520 const Semaphore* pWaitSemaphores;
8521 uint32_t swapchainCount;
8522 const SwapchainKHR* pSwapchains;
8523 const uint32_t* pImageIndices;
8524 Result* pResults;
8525 };
8526 static_assert( sizeof( PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" );
8527
8528 enum class DynamicState
8529 {
8530 eViewport = VK_DYNAMIC_STATE_VIEWPORT,
8531 eScissor = VK_DYNAMIC_STATE_SCISSOR,
8532 eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH,
8533 eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS,
8534 eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS,
8535 eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS,
8536 eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
8537 eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
8538 eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE
8539 };
8540
8541 struct PipelineDynamicStateCreateInfo
8542 {
8543 PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateFlags flags_ = PipelineDynamicStateCreateFlags(), uint32_t dynamicStateCount_ = 0, const DynamicState* pDynamicStates_ = nullptr )
8544 : sType( StructureType::ePipelineDynamicStateCreateInfo )
8545 , pNext( nullptr )
8546 , flags( flags_ )
8547 , dynamicStateCount( dynamicStateCount_ )
8548 , pDynamicStates( pDynamicStates_ )
8549 {
8550 }
8551
8552 PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs )
8553 {
8554 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
8555 }
8556
8557 PipelineDynamicStateCreateInfo& operator=( VkPipelineDynamicStateCreateInfo const & rhs )
8558 {
8559 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
8560 return *this;
8561 }
8562
8563 PipelineDynamicStateCreateInfo& setSType( StructureType sType_ )
8564 {
8565 sType = sType_;
8566 return *this;
8567 }
8568
8569 PipelineDynamicStateCreateInfo& setPNext( const void* pNext_ )
8570 {
8571 pNext = pNext_;
8572 return *this;
8573 }
8574
8575 PipelineDynamicStateCreateInfo& setFlags( PipelineDynamicStateCreateFlags flags_ )
8576 {
8577 flags = flags_;
8578 return *this;
8579 }
8580
8581 PipelineDynamicStateCreateInfo& setDynamicStateCount( uint32_t dynamicStateCount_ )
8582 {
8583 dynamicStateCount = dynamicStateCount_;
8584 return *this;
8585 }
8586
8587 PipelineDynamicStateCreateInfo& setPDynamicStates( const DynamicState* pDynamicStates_ )
8588 {
8589 pDynamicStates = pDynamicStates_;
8590 return *this;
8591 }
8592
8593 operator const VkPipelineDynamicStateCreateInfo&() const
8594 {
8595 return *reinterpret_cast<const VkPipelineDynamicStateCreateInfo*>(this);
8596 }
8597
8598 bool operator==( PipelineDynamicStateCreateInfo const& rhs ) const
8599 {
8600 return ( sType == rhs.sType )
8601 && ( pNext == rhs.pNext )
8602 && ( flags == rhs.flags )
8603 && ( dynamicStateCount == rhs.dynamicStateCount )
8604 && ( pDynamicStates == rhs.pDynamicStates );
8605 }
8606
8607 bool operator!=( PipelineDynamicStateCreateInfo const& rhs ) const
8608 {
8609 return !operator==( rhs );
8610 }
8611
8612 private:
8613 StructureType sType;
8614
8615 public:
8616 const void* pNext;
8617 PipelineDynamicStateCreateFlags flags;
8618 uint32_t dynamicStateCount;
8619 const DynamicState* pDynamicStates;
8620 };
8621 static_assert( sizeof( PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ), "struct and wrapper have different size!" );
8622
8623 enum class QueueFlagBits
8624 {
8625 eGraphics = VK_QUEUE_GRAPHICS_BIT,
8626 eCompute = VK_QUEUE_COMPUTE_BIT,
8627 eTransfer = VK_QUEUE_TRANSFER_BIT,
8628 eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT
8629 };
8630
8631 using QueueFlags = Flags<QueueFlagBits, VkQueueFlags>;
8632
8633 inline QueueFlags operator|( QueueFlagBits bit0, QueueFlagBits bit1 )
8634 {
8635 return QueueFlags( bit0 ) | bit1;
8636 }
8637
8638 struct QueueFamilyProperties
8639 {
8640 operator const VkQueueFamilyProperties&() const
8641 {
8642 return *reinterpret_cast<const VkQueueFamilyProperties*>(this);
8643 }
8644
8645 bool operator==( QueueFamilyProperties const& rhs ) const
8646 {
8647 return ( queueFlags == rhs.queueFlags )
8648 && ( queueCount == rhs.queueCount )
8649 && ( timestampValidBits == rhs.timestampValidBits )
8650 && ( minImageTransferGranularity == rhs.minImageTransferGranularity );
8651 }
8652
8653 bool operator!=( QueueFamilyProperties const& rhs ) const
8654 {
8655 return !operator==( rhs );
8656 }
8657
8658 QueueFlags queueFlags;
8659 uint32_t queueCount;
8660 uint32_t timestampValidBits;
8661 Extent3D minImageTransferGranularity;
8662 };
8663 static_assert( sizeof( QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ), "struct and wrapper have different size!" );
8664
8665 enum class MemoryPropertyFlagBits
8666 {
8667 eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
8668 eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
8669 eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
8670 eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
8671 eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
8672 };
8673
8674 using MemoryPropertyFlags = Flags<MemoryPropertyFlagBits, VkMemoryPropertyFlags>;
8675
8676 inline MemoryPropertyFlags operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 )
8677 {
8678 return MemoryPropertyFlags( bit0 ) | bit1;
8679 }
8680
8681 struct MemoryType
8682 {
8683 operator const VkMemoryType&() const
8684 {
8685 return *reinterpret_cast<const VkMemoryType*>(this);
8686 }
8687
8688 bool operator==( MemoryType const& rhs ) const
8689 {
8690 return ( propertyFlags == rhs.propertyFlags )
8691 && ( heapIndex == rhs.heapIndex );
8692 }
8693
8694 bool operator!=( MemoryType const& rhs ) const
8695 {
8696 return !operator==( rhs );
8697 }
8698
8699 MemoryPropertyFlags propertyFlags;
8700 uint32_t heapIndex;
8701 };
8702 static_assert( sizeof( MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" );
8703
8704 enum class MemoryHeapFlagBits
8705 {
8706 eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
8707 };
8708
8709 using MemoryHeapFlags = Flags<MemoryHeapFlagBits, VkMemoryHeapFlags>;
8710
8711 inline MemoryHeapFlags operator|( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 )
8712 {
8713 return MemoryHeapFlags( bit0 ) | bit1;
8714 }
8715
8716 struct MemoryHeap
8717 {
8718 operator const VkMemoryHeap&() const
8719 {
8720 return *reinterpret_cast<const VkMemoryHeap*>(this);
8721 }
8722
8723 bool operator==( MemoryHeap const& rhs ) const
8724 {
8725 return ( size == rhs.size )
8726 && ( flags == rhs.flags );
8727 }
8728
8729 bool operator!=( MemoryHeap const& rhs ) const
8730 {
8731 return !operator==( rhs );
8732 }
8733
8734 DeviceSize size;
8735 MemoryHeapFlags flags;
8736 };
8737 static_assert( sizeof( MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" );
8738
8739 struct PhysicalDeviceMemoryProperties
8740 {
8741 operator const VkPhysicalDeviceMemoryProperties&() const
8742 {
8743 return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties*>(this);
8744 }
8745
8746 bool operator==( PhysicalDeviceMemoryProperties const& rhs ) const
8747 {
8748 return ( memoryTypeCount == rhs.memoryTypeCount )
8749 && ( memcmp( memoryTypes, rhs.memoryTypes, VK_MAX_MEMORY_TYPES * sizeof( MemoryType ) ) == 0 )
8750 && ( memoryHeapCount == rhs.memoryHeapCount )
8751 && ( memcmp( memoryHeaps, rhs.memoryHeaps, VK_MAX_MEMORY_HEAPS * sizeof( MemoryHeap ) ) == 0 );
8752 }
8753
8754 bool operator!=( PhysicalDeviceMemoryProperties const& rhs ) const
8755 {
8756 return !operator==( rhs );
8757 }
8758
8759 uint32_t memoryTypeCount;
8760 MemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
8761 uint32_t memoryHeapCount;
8762 MemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
8763 };
8764 static_assert( sizeof( PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ), "struct and wrapper have different size!" );
8765
8766 enum class AccessFlagBits
8767 {
8768 eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
8769 eIndexRead = VK_ACCESS_INDEX_READ_BIT,
8770 eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
8771 eUniformRead = VK_ACCESS_UNIFORM_READ_BIT,
8772 eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
8773 eShaderRead = VK_ACCESS_SHADER_READ_BIT,
8774 eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT,
8775 eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
8776 eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
8777 eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
8778 eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
8779 eTransferRead = VK_ACCESS_TRANSFER_READ_BIT,
8780 eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT,
8781 eHostRead = VK_ACCESS_HOST_READ_BIT,
8782 eHostWrite = VK_ACCESS_HOST_WRITE_BIT,
8783 eMemoryRead = VK_ACCESS_MEMORY_READ_BIT,
8784 eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT
8785 };
8786
8787 using AccessFlags = Flags<AccessFlagBits, VkAccessFlags>;
8788
8789 inline AccessFlags operator|( AccessFlagBits bit0, AccessFlagBits bit1 )
8790 {
8791 return AccessFlags( bit0 ) | bit1;
8792 }
8793
8794 struct MemoryBarrier
8795 {
8796 MemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags() )
8797 : sType( StructureType::eMemoryBarrier )
8798 , pNext( nullptr )
8799 , srcAccessMask( srcAccessMask_ )
8800 , dstAccessMask( dstAccessMask_ )
8801 {
8802 }
8803
8804 MemoryBarrier( VkMemoryBarrier const & rhs )
8805 {
8806 memcpy( this, &rhs, sizeof(MemoryBarrier) );
8807 }
8808
8809 MemoryBarrier& operator=( VkMemoryBarrier const & rhs )
8810 {
8811 memcpy( this, &rhs, sizeof(MemoryBarrier) );
8812 return *this;
8813 }
8814
8815 MemoryBarrier& setSType( StructureType sType_ )
8816 {
8817 sType = sType_;
8818 return *this;
8819 }
8820
8821 MemoryBarrier& setPNext( const void* pNext_ )
8822 {
8823 pNext = pNext_;
8824 return *this;
8825 }
8826
8827 MemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
8828 {
8829 srcAccessMask = srcAccessMask_;
8830 return *this;
8831 }
8832
8833 MemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
8834 {
8835 dstAccessMask = dstAccessMask_;
8836 return *this;
8837 }
8838
8839 operator const VkMemoryBarrier&() const
8840 {
8841 return *reinterpret_cast<const VkMemoryBarrier*>(this);
8842 }
8843
8844 bool operator==( MemoryBarrier const& rhs ) const
8845 {
8846 return ( sType == rhs.sType )
8847 && ( pNext == rhs.pNext )
8848 && ( srcAccessMask == rhs.srcAccessMask )
8849 && ( dstAccessMask == rhs.dstAccessMask );
8850 }
8851
8852 bool operator!=( MemoryBarrier const& rhs ) const
8853 {
8854 return !operator==( rhs );
8855 }
8856
8857 private:
8858 StructureType sType;
8859
8860 public:
8861 const void* pNext;
8862 AccessFlags srcAccessMask;
8863 AccessFlags dstAccessMask;
8864 };
8865 static_assert( sizeof( MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" );
8866
8867 struct BufferMemoryBarrier
8868 {
8869 BufferMemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), uint32_t srcQueueFamilyIndex_ = 0, uint32_t dstQueueFamilyIndex_ = 0, Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
8870 : sType( StructureType::eBufferMemoryBarrier )
8871 , pNext( nullptr )
8872 , srcAccessMask( srcAccessMask_ )
8873 , dstAccessMask( dstAccessMask_ )
8874 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
8875 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
8876 , buffer( buffer_ )
8877 , offset( offset_ )
8878 , size( size_ )
8879 {
8880 }
8881
8882 BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs )
8883 {
8884 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
8885 }
8886
8887 BufferMemoryBarrier& operator=( VkBufferMemoryBarrier const & rhs )
8888 {
8889 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
8890 return *this;
8891 }
8892
8893 BufferMemoryBarrier& setSType( StructureType sType_ )
8894 {
8895 sType = sType_;
8896 return *this;
8897 }
8898
8899 BufferMemoryBarrier& setPNext( const void* pNext_ )
8900 {
8901 pNext = pNext_;
8902 return *this;
8903 }
8904
8905 BufferMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
8906 {
8907 srcAccessMask = srcAccessMask_;
8908 return *this;
8909 }
8910
8911 BufferMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
8912 {
8913 dstAccessMask = dstAccessMask_;
8914 return *this;
8915 }
8916
8917 BufferMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
8918 {
8919 srcQueueFamilyIndex = srcQueueFamilyIndex_;
8920 return *this;
8921 }
8922
8923 BufferMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
8924 {
8925 dstQueueFamilyIndex = dstQueueFamilyIndex_;
8926 return *this;
8927 }
8928
8929 BufferMemoryBarrier& setBuffer( Buffer buffer_ )
8930 {
8931 buffer = buffer_;
8932 return *this;
8933 }
8934
8935 BufferMemoryBarrier& setOffset( DeviceSize offset_ )
8936 {
8937 offset = offset_;
8938 return *this;
8939 }
8940
8941 BufferMemoryBarrier& setSize( DeviceSize size_ )
8942 {
8943 size = size_;
8944 return *this;
8945 }
8946
8947 operator const VkBufferMemoryBarrier&() const
8948 {
8949 return *reinterpret_cast<const VkBufferMemoryBarrier*>(this);
8950 }
8951
8952 bool operator==( BufferMemoryBarrier const& rhs ) const
8953 {
8954 return ( sType == rhs.sType )
8955 && ( pNext == rhs.pNext )
8956 && ( srcAccessMask == rhs.srcAccessMask )
8957 && ( dstAccessMask == rhs.dstAccessMask )
8958 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
8959 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
8960 && ( buffer == rhs.buffer )
8961 && ( offset == rhs.offset )
8962 && ( size == rhs.size );
8963 }
8964
8965 bool operator!=( BufferMemoryBarrier const& rhs ) const
8966 {
8967 return !operator==( rhs );
8968 }
8969
8970 private:
8971 StructureType sType;
8972
8973 public:
8974 const void* pNext;
8975 AccessFlags srcAccessMask;
8976 AccessFlags dstAccessMask;
8977 uint32_t srcQueueFamilyIndex;
8978 uint32_t dstQueueFamilyIndex;
8979 Buffer buffer;
8980 DeviceSize offset;
8981 DeviceSize size;
8982 };
8983 static_assert( sizeof( BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ), "struct and wrapper have different size!" );
8984
8985 enum class BufferUsageFlagBits
8986 {
8987 eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
8988 eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
8989 eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,
8990 eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,
8991 eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
8992 eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
8993 eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
8994 eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
8995 eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
8996 };
8997
8998 using BufferUsageFlags = Flags<BufferUsageFlagBits, VkBufferUsageFlags>;
8999
9000 inline BufferUsageFlags operator|( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 )
9001 {
9002 return BufferUsageFlags( bit0 ) | bit1;
9003 }
9004
9005 enum class BufferCreateFlagBits
9006 {
9007 eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
9008 eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
9009 eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
9010 };
9011
9012 using BufferCreateFlags = Flags<BufferCreateFlagBits, VkBufferCreateFlags>;
9013
9014 inline BufferCreateFlags operator|( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 )
9015 {
9016 return BufferCreateFlags( bit0 ) | bit1;
9017 }
9018
9019 struct BufferCreateInfo
9020 {
9021 BufferCreateInfo( BufferCreateFlags flags_ = BufferCreateFlags(), DeviceSize size_ = 0, BufferUsageFlags usage_ = BufferUsageFlags(), SharingMode sharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr )
9022 : sType( StructureType::eBufferCreateInfo )
9023 , pNext( nullptr )
9024 , flags( flags_ )
9025 , size( size_ )
9026 , usage( usage_ )
9027 , sharingMode( sharingMode_ )
9028 , queueFamilyIndexCount( queueFamilyIndexCount_ )
9029 , pQueueFamilyIndices( pQueueFamilyIndices_ )
9030 {
9031 }
9032
9033 BufferCreateInfo( VkBufferCreateInfo const & rhs )
9034 {
9035 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9036 }
9037
9038 BufferCreateInfo& operator=( VkBufferCreateInfo const & rhs )
9039 {
9040 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9041 return *this;
9042 }
9043
9044 BufferCreateInfo& setSType( StructureType sType_ )
9045 {
9046 sType = sType_;
9047 return *this;
9048 }
9049
9050 BufferCreateInfo& setPNext( const void* pNext_ )
9051 {
9052 pNext = pNext_;
9053 return *this;
9054 }
9055
9056 BufferCreateInfo& setFlags( BufferCreateFlags flags_ )
9057 {
9058 flags = flags_;
9059 return *this;
9060 }
9061
9062 BufferCreateInfo& setSize( DeviceSize size_ )
9063 {
9064 size = size_;
9065 return *this;
9066 }
9067
9068 BufferCreateInfo& setUsage( BufferUsageFlags usage_ )
9069 {
9070 usage = usage_;
9071 return *this;
9072 }
9073
9074 BufferCreateInfo& setSharingMode( SharingMode sharingMode_ )
9075 {
9076 sharingMode = sharingMode_;
9077 return *this;
9078 }
9079
9080 BufferCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
9081 {
9082 queueFamilyIndexCount = queueFamilyIndexCount_;
9083 return *this;
9084 }
9085
9086 BufferCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
9087 {
9088 pQueueFamilyIndices = pQueueFamilyIndices_;
9089 return *this;
9090 }
9091
9092 operator const VkBufferCreateInfo&() const
9093 {
9094 return *reinterpret_cast<const VkBufferCreateInfo*>(this);
9095 }
9096
9097 bool operator==( BufferCreateInfo const& rhs ) const
9098 {
9099 return ( sType == rhs.sType )
9100 && ( pNext == rhs.pNext )
9101 && ( flags == rhs.flags )
9102 && ( size == rhs.size )
9103 && ( usage == rhs.usage )
9104 && ( sharingMode == rhs.sharingMode )
9105 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
9106 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
9107 }
9108
9109 bool operator!=( BufferCreateInfo const& rhs ) const
9110 {
9111 return !operator==( rhs );
9112 }
9113
9114 private:
9115 StructureType sType;
9116
9117 public:
9118 const void* pNext;
9119 BufferCreateFlags flags;
9120 DeviceSize size;
9121 BufferUsageFlags usage;
9122 SharingMode sharingMode;
9123 uint32_t queueFamilyIndexCount;
9124 const uint32_t* pQueueFamilyIndices;
9125 };
9126 static_assert( sizeof( BufferCreateInfo ) == sizeof( VkBufferCreateInfo ), "struct and wrapper have different size!" );
9127
9128 enum class ShaderStageFlagBits
9129 {
9130 eVertex = VK_SHADER_STAGE_VERTEX_BIT,
9131 eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
9132 eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
9133 eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT,
9134 eFragment = VK_SHADER_STAGE_FRAGMENT_BIT,
9135 eCompute = VK_SHADER_STAGE_COMPUTE_BIT,
9136 eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS,
9137 eAll = VK_SHADER_STAGE_ALL
9138 };
9139
9140 using ShaderStageFlags = Flags<ShaderStageFlagBits, VkShaderStageFlags>;
9141
9142 inline ShaderStageFlags operator|( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 )
9143 {
9144 return ShaderStageFlags( bit0 ) | bit1;
9145 }
9146
9147 struct DescriptorSetLayoutBinding
9148 {
9149 DescriptorSetLayoutBinding( uint32_t binding_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0, ShaderStageFlags stageFlags_ = ShaderStageFlags(), const Sampler* pImmutableSamplers_ = nullptr )
9150 : binding( binding_ )
9151 , descriptorType( descriptorType_ )
9152 , descriptorCount( descriptorCount_ )
9153 , stageFlags( stageFlags_ )
9154 , pImmutableSamplers( pImmutableSamplers_ )
9155 {
9156 }
9157
9158 DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs )
9159 {
9160 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9161 }
9162
9163 DescriptorSetLayoutBinding& operator=( VkDescriptorSetLayoutBinding const & rhs )
9164 {
9165 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9166 return *this;
9167 }
9168
9169 DescriptorSetLayoutBinding& setBinding( uint32_t binding_ )
9170 {
9171 binding = binding_;
9172 return *this;
9173 }
9174
9175 DescriptorSetLayoutBinding& setDescriptorType( DescriptorType descriptorType_ )
9176 {
9177 descriptorType = descriptorType_;
9178 return *this;
9179 }
9180
9181 DescriptorSetLayoutBinding& setDescriptorCount( uint32_t descriptorCount_ )
9182 {
9183 descriptorCount = descriptorCount_;
9184 return *this;
9185 }
9186
9187 DescriptorSetLayoutBinding& setStageFlags( ShaderStageFlags stageFlags_ )
9188 {
9189 stageFlags = stageFlags_;
9190 return *this;
9191 }
9192
9193 DescriptorSetLayoutBinding& setPImmutableSamplers( const Sampler* pImmutableSamplers_ )
9194 {
9195 pImmutableSamplers = pImmutableSamplers_;
9196 return *this;
9197 }
9198
9199 operator const VkDescriptorSetLayoutBinding&() const
9200 {
9201 return *reinterpret_cast<const VkDescriptorSetLayoutBinding*>(this);
9202 }
9203
9204 bool operator==( DescriptorSetLayoutBinding const& rhs ) const
9205 {
9206 return ( binding == rhs.binding )
9207 && ( descriptorType == rhs.descriptorType )
9208 && ( descriptorCount == rhs.descriptorCount )
9209 && ( stageFlags == rhs.stageFlags )
9210 && ( pImmutableSamplers == rhs.pImmutableSamplers );
9211 }
9212
9213 bool operator!=( DescriptorSetLayoutBinding const& rhs ) const
9214 {
9215 return !operator==( rhs );
9216 }
9217
9218 uint32_t binding;
9219 DescriptorType descriptorType;
9220 uint32_t descriptorCount;
9221 ShaderStageFlags stageFlags;
9222 const Sampler* pImmutableSamplers;
9223 };
9224 static_assert( sizeof( DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ), "struct and wrapper have different size!" );
9225
9226 struct DescriptorSetLayoutCreateInfo
9227 {
9228 DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateFlags flags_ = DescriptorSetLayoutCreateFlags(), uint32_t bindingCount_ = 0, const DescriptorSetLayoutBinding* pBindings_ = nullptr )
9229 : sType( StructureType::eDescriptorSetLayoutCreateInfo )
9230 , pNext( nullptr )
9231 , flags( flags_ )
9232 , bindingCount( bindingCount_ )
9233 , pBindings( pBindings_ )
9234 {
9235 }
9236
9237 DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs )
9238 {
9239 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9240 }
9241
9242 DescriptorSetLayoutCreateInfo& operator=( VkDescriptorSetLayoutCreateInfo const & rhs )
9243 {
9244 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9245 return *this;
9246 }
9247
9248 DescriptorSetLayoutCreateInfo& setSType( StructureType sType_ )
9249 {
9250 sType = sType_;
9251 return *this;
9252 }
9253
9254 DescriptorSetLayoutCreateInfo& setPNext( const void* pNext_ )
9255 {
9256 pNext = pNext_;
9257 return *this;
9258 }
9259
9260 DescriptorSetLayoutCreateInfo& setFlags( DescriptorSetLayoutCreateFlags flags_ )
9261 {
9262 flags = flags_;
9263 return *this;
9264 }
9265
9266 DescriptorSetLayoutCreateInfo& setBindingCount( uint32_t bindingCount_ )
9267 {
9268 bindingCount = bindingCount_;
9269 return *this;
9270 }
9271
9272 DescriptorSetLayoutCreateInfo& setPBindings( const DescriptorSetLayoutBinding* pBindings_ )
9273 {
9274 pBindings = pBindings_;
9275 return *this;
9276 }
9277
9278 operator const VkDescriptorSetLayoutCreateInfo&() const
9279 {
9280 return *reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>(this);
9281 }
9282
9283 bool operator==( DescriptorSetLayoutCreateInfo const& rhs ) const
9284 {
9285 return ( sType == rhs.sType )
9286 && ( pNext == rhs.pNext )
9287 && ( flags == rhs.flags )
9288 && ( bindingCount == rhs.bindingCount )
9289 && ( pBindings == rhs.pBindings );
9290 }
9291
9292 bool operator!=( DescriptorSetLayoutCreateInfo const& rhs ) const
9293 {
9294 return !operator==( rhs );
9295 }
9296
9297 private:
9298 StructureType sType;
9299
9300 public:
9301 const void* pNext;
9302 DescriptorSetLayoutCreateFlags flags;
9303 uint32_t bindingCount;
9304 const DescriptorSetLayoutBinding* pBindings;
9305 };
9306 static_assert( sizeof( DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ), "struct and wrapper have different size!" );
9307
9308 struct PipelineShaderStageCreateInfo
9309 {
9310 PipelineShaderStageCreateInfo( PipelineShaderStageCreateFlags flags_ = PipelineShaderStageCreateFlags(), ShaderStageFlagBits stage_ = ShaderStageFlagBits::eVertex, ShaderModule module_ = ShaderModule(), const char* pName_ = nullptr, const SpecializationInfo* pSpecializationInfo_ = nullptr )
9311 : sType( StructureType::ePipelineShaderStageCreateInfo )
9312 , pNext( nullptr )
9313 , flags( flags_ )
9314 , stage( stage_ )
9315 , module( module_ )
9316 , pName( pName_ )
9317 , pSpecializationInfo( pSpecializationInfo_ )
9318 {
9319 }
9320
9321 PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs )
9322 {
9323 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9324 }
9325
9326 PipelineShaderStageCreateInfo& operator=( VkPipelineShaderStageCreateInfo const & rhs )
9327 {
9328 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9329 return *this;
9330 }
9331
9332 PipelineShaderStageCreateInfo& setSType( StructureType sType_ )
9333 {
9334 sType = sType_;
9335 return *this;
9336 }
9337
9338 PipelineShaderStageCreateInfo& setPNext( const void* pNext_ )
9339 {
9340 pNext = pNext_;
9341 return *this;
9342 }
9343
9344 PipelineShaderStageCreateInfo& setFlags( PipelineShaderStageCreateFlags flags_ )
9345 {
9346 flags = flags_;
9347 return *this;
9348 }
9349
9350 PipelineShaderStageCreateInfo& setStage( ShaderStageFlagBits stage_ )
9351 {
9352 stage = stage_;
9353 return *this;
9354 }
9355
9356 PipelineShaderStageCreateInfo& setModule( ShaderModule module_ )
9357 {
9358 module = module_;
9359 return *this;
9360 }
9361
9362 PipelineShaderStageCreateInfo& setPName( const char* pName_ )
9363 {
9364 pName = pName_;
9365 return *this;
9366 }
9367
9368 PipelineShaderStageCreateInfo& setPSpecializationInfo( const SpecializationInfo* pSpecializationInfo_ )
9369 {
9370 pSpecializationInfo = pSpecializationInfo_;
9371 return *this;
9372 }
9373
9374 operator const VkPipelineShaderStageCreateInfo&() const
9375 {
9376 return *reinterpret_cast<const VkPipelineShaderStageCreateInfo*>(this);
9377 }
9378
9379 bool operator==( PipelineShaderStageCreateInfo const& rhs ) const
9380 {
9381 return ( sType == rhs.sType )
9382 && ( pNext == rhs.pNext )
9383 && ( flags == rhs.flags )
9384 && ( stage == rhs.stage )
9385 && ( module == rhs.module )
9386 && ( pName == rhs.pName )
9387 && ( pSpecializationInfo == rhs.pSpecializationInfo );
9388 }
9389
9390 bool operator!=( PipelineShaderStageCreateInfo const& rhs ) const
9391 {
9392 return !operator==( rhs );
9393 }
9394
9395 private:
9396 StructureType sType;
9397
9398 public:
9399 const void* pNext;
9400 PipelineShaderStageCreateFlags flags;
9401 ShaderStageFlagBits stage;
9402 ShaderModule module;
9403 const char* pName;
9404 const SpecializationInfo* pSpecializationInfo;
9405 };
9406 static_assert( sizeof( PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ), "struct and wrapper have different size!" );
9407
9408 struct PushConstantRange
9409 {
9410 PushConstantRange( ShaderStageFlags stageFlags_ = ShaderStageFlags(), uint32_t offset_ = 0, uint32_t size_ = 0 )
9411 : stageFlags( stageFlags_ )
9412 , offset( offset_ )
9413 , size( size_ )
9414 {
9415 }
9416
9417 PushConstantRange( VkPushConstantRange const & rhs )
9418 {
9419 memcpy( this, &rhs, sizeof(PushConstantRange) );
9420 }
9421
9422 PushConstantRange& operator=( VkPushConstantRange const & rhs )
9423 {
9424 memcpy( this, &rhs, sizeof(PushConstantRange) );
9425 return *this;
9426 }
9427
9428 PushConstantRange& setStageFlags( ShaderStageFlags stageFlags_ )
9429 {
9430 stageFlags = stageFlags_;
9431 return *this;
9432 }
9433
9434 PushConstantRange& setOffset( uint32_t offset_ )
9435 {
9436 offset = offset_;
9437 return *this;
9438 }
9439
9440 PushConstantRange& setSize( uint32_t size_ )
9441 {
9442 size = size_;
9443 return *this;
9444 }
9445
9446 operator const VkPushConstantRange&() const
9447 {
9448 return *reinterpret_cast<const VkPushConstantRange*>(this);
9449 }
9450
9451 bool operator==( PushConstantRange const& rhs ) const
9452 {
9453 return ( stageFlags == rhs.stageFlags )
9454 && ( offset == rhs.offset )
9455 && ( size == rhs.size );
9456 }
9457
9458 bool operator!=( PushConstantRange const& rhs ) const
9459 {
9460 return !operator==( rhs );
9461 }
9462
9463 ShaderStageFlags stageFlags;
9464 uint32_t offset;
9465 uint32_t size;
9466 };
9467 static_assert( sizeof( PushConstantRange ) == sizeof( VkPushConstantRange ), "struct and wrapper have different size!" );
9468
9469 struct PipelineLayoutCreateInfo
9470 {
9471 PipelineLayoutCreateInfo( PipelineLayoutCreateFlags flags_ = PipelineLayoutCreateFlags(), uint32_t setLayoutCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr, uint32_t pushConstantRangeCount_ = 0, const PushConstantRange* pPushConstantRanges_ = nullptr )
9472 : sType( StructureType::ePipelineLayoutCreateInfo )
9473 , pNext( nullptr )
9474 , flags( flags_ )
9475 , setLayoutCount( setLayoutCount_ )
9476 , pSetLayouts( pSetLayouts_ )
9477 , pushConstantRangeCount( pushConstantRangeCount_ )
9478 , pPushConstantRanges( pPushConstantRanges_ )
9479 {
9480 }
9481
9482 PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs )
9483 {
9484 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
9485 }
9486
9487 PipelineLayoutCreateInfo& operator=( VkPipelineLayoutCreateInfo const & rhs )
9488 {
9489 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
9490 return *this;
9491 }
9492
9493 PipelineLayoutCreateInfo& setSType( StructureType sType_ )
9494 {
9495 sType = sType_;
9496 return *this;
9497 }
9498
9499 PipelineLayoutCreateInfo& setPNext( const void* pNext_ )
9500 {
9501 pNext = pNext_;
9502 return *this;
9503 }
9504
9505 PipelineLayoutCreateInfo& setFlags( PipelineLayoutCreateFlags flags_ )
9506 {
9507 flags = flags_;
9508 return *this;
9509 }
9510
9511 PipelineLayoutCreateInfo& setSetLayoutCount( uint32_t setLayoutCount_ )
9512 {
9513 setLayoutCount = setLayoutCount_;
9514 return *this;
9515 }
9516
9517 PipelineLayoutCreateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
9518 {
9519 pSetLayouts = pSetLayouts_;
9520 return *this;
9521 }
9522
9523 PipelineLayoutCreateInfo& setPushConstantRangeCount( uint32_t pushConstantRangeCount_ )
9524 {
9525 pushConstantRangeCount = pushConstantRangeCount_;
9526 return *this;
9527 }
9528
9529 PipelineLayoutCreateInfo& setPPushConstantRanges( const PushConstantRange* pPushConstantRanges_ )
9530 {
9531 pPushConstantRanges = pPushConstantRanges_;
9532 return *this;
9533 }
9534
9535 operator const VkPipelineLayoutCreateInfo&() const
9536 {
9537 return *reinterpret_cast<const VkPipelineLayoutCreateInfo*>(this);
9538 }
9539
9540 bool operator==( PipelineLayoutCreateInfo const& rhs ) const
9541 {
9542 return ( sType == rhs.sType )
9543 && ( pNext == rhs.pNext )
9544 && ( flags == rhs.flags )
9545 && ( setLayoutCount == rhs.setLayoutCount )
9546 && ( pSetLayouts == rhs.pSetLayouts )
9547 && ( pushConstantRangeCount == rhs.pushConstantRangeCount )
9548 && ( pPushConstantRanges == rhs.pPushConstantRanges );
9549 }
9550
9551 bool operator!=( PipelineLayoutCreateInfo const& rhs ) const
9552 {
9553 return !operator==( rhs );
9554 }
9555
9556 private:
9557 StructureType sType;
9558
9559 public:
9560 const void* pNext;
9561 PipelineLayoutCreateFlags flags;
9562 uint32_t setLayoutCount;
9563 const DescriptorSetLayout* pSetLayouts;
9564 uint32_t pushConstantRangeCount;
9565 const PushConstantRange* pPushConstantRanges;
9566 };
9567 static_assert( sizeof( PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ), "struct and wrapper have different size!" );
9568
9569 enum class ImageUsageFlagBits
9570 {
9571 eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
9572 eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT,
9573 eSampled = VK_IMAGE_USAGE_SAMPLED_BIT,
9574 eStorage = VK_IMAGE_USAGE_STORAGE_BIT,
9575 eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
9576 eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
9577 eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
9578 eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
9579 };
9580
9581 using ImageUsageFlags = Flags<ImageUsageFlagBits, VkImageUsageFlags>;
9582
9583 inline ImageUsageFlags operator|( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 )
9584 {
9585 return ImageUsageFlags( bit0 ) | bit1;
9586 }
9587
9588 enum class ImageCreateFlagBits
9589 {
9590 eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
9591 eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
9592 eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,
9593 eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
9594 eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
9595 };
9596
9597 using ImageCreateFlags = Flags<ImageCreateFlagBits, VkImageCreateFlags>;
9598
9599 inline ImageCreateFlags operator|( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 )
9600 {
9601 return ImageCreateFlags( bit0 ) | bit1;
9602 }
9603
9604 enum class PipelineCreateFlagBits
9605 {
9606 eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
9607 eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
9608 eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT
9609 };
9610
9611 using PipelineCreateFlags = Flags<PipelineCreateFlagBits, VkPipelineCreateFlags>;
9612
9613 inline PipelineCreateFlags operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 )
9614 {
9615 return PipelineCreateFlags( bit0 ) | bit1;
9616 }
9617
9618 struct ComputePipelineCreateInfo
9619 {
9620 ComputePipelineCreateInfo( PipelineCreateFlags flags_ = PipelineCreateFlags(), PipelineShaderStageCreateInfo stage_ = PipelineShaderStageCreateInfo(), PipelineLayout layout_ = PipelineLayout(), Pipeline basePipelineHandle_ = Pipeline(), int32_t basePipelineIndex_ = 0 )
9621 : sType( StructureType::eComputePipelineCreateInfo )
9622 , pNext( nullptr )
9623 , flags( flags_ )
9624 , stage( stage_ )
9625 , layout( layout_ )
9626 , basePipelineHandle( basePipelineHandle_ )
9627 , basePipelineIndex( basePipelineIndex_ )
9628 {
9629 }
9630
9631 ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs )
9632 {
9633 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
9634 }
9635
9636 ComputePipelineCreateInfo& operator=( VkComputePipelineCreateInfo const & rhs )
9637 {
9638 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
9639 return *this;
9640 }
9641
9642 ComputePipelineCreateInfo& setSType( StructureType sType_ )
9643 {
9644 sType = sType_;
9645 return *this;
9646 }
9647
9648 ComputePipelineCreateInfo& setPNext( const void* pNext_ )
9649 {
9650 pNext = pNext_;
9651 return *this;
9652 }
9653
9654 ComputePipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
9655 {
9656 flags = flags_;
9657 return *this;
9658 }
9659
9660 ComputePipelineCreateInfo& setStage( PipelineShaderStageCreateInfo stage_ )
9661 {
9662 stage = stage_;
9663 return *this;
9664 }
9665
9666 ComputePipelineCreateInfo& setLayout( PipelineLayout layout_ )
9667 {
9668 layout = layout_;
9669 return *this;
9670 }
9671
9672 ComputePipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
9673 {
9674 basePipelineHandle = basePipelineHandle_;
9675 return *this;
9676 }
9677
9678 ComputePipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
9679 {
9680 basePipelineIndex = basePipelineIndex_;
9681 return *this;
9682 }
9683
9684 operator const VkComputePipelineCreateInfo&() const
9685 {
9686 return *reinterpret_cast<const VkComputePipelineCreateInfo*>(this);
9687 }
9688
9689 bool operator==( ComputePipelineCreateInfo const& rhs ) const
9690 {
9691 return ( sType == rhs.sType )
9692 && ( pNext == rhs.pNext )
9693 && ( flags == rhs.flags )
9694 && ( stage == rhs.stage )
9695 && ( layout == rhs.layout )
9696 && ( basePipelineHandle == rhs.basePipelineHandle )
9697 && ( basePipelineIndex == rhs.basePipelineIndex );
9698 }
9699
9700 bool operator!=( ComputePipelineCreateInfo const& rhs ) const
9701 {
9702 return !operator==( rhs );
9703 }
9704
9705 private:
9706 StructureType sType;
9707
9708 public:
9709 const void* pNext;
9710 PipelineCreateFlags flags;
9711 PipelineShaderStageCreateInfo stage;
9712 PipelineLayout layout;
9713 Pipeline basePipelineHandle;
9714 int32_t basePipelineIndex;
9715 };
9716 static_assert( sizeof( ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ), "struct and wrapper have different size!" );
9717
9718 enum class ColorComponentFlagBits
9719 {
9720 eR = VK_COLOR_COMPONENT_R_BIT,
9721 eG = VK_COLOR_COMPONENT_G_BIT,
9722 eB = VK_COLOR_COMPONENT_B_BIT,
9723 eA = VK_COLOR_COMPONENT_A_BIT
9724 };
9725
9726 using ColorComponentFlags = Flags<ColorComponentFlagBits, VkColorComponentFlags>;
9727
9728 inline ColorComponentFlags operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 )
9729 {
9730 return ColorComponentFlags( bit0 ) | bit1;
9731 }
9732
9733 struct PipelineColorBlendAttachmentState
9734 {
9735 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() )
9736 : blendEnable( blendEnable_ )
9737 , srcColorBlendFactor( srcColorBlendFactor_ )
9738 , dstColorBlendFactor( dstColorBlendFactor_ )
9739 , colorBlendOp( colorBlendOp_ )
9740 , srcAlphaBlendFactor( srcAlphaBlendFactor_ )
9741 , dstAlphaBlendFactor( dstAlphaBlendFactor_ )
9742 , alphaBlendOp( alphaBlendOp_ )
9743 , colorWriteMask( colorWriteMask_ )
9744 {
9745 }
9746
9747 PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs )
9748 {
9749 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
9750 }
9751
9752 PipelineColorBlendAttachmentState& operator=( VkPipelineColorBlendAttachmentState const & rhs )
9753 {
9754 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
9755 return *this;
9756 }
9757
9758 PipelineColorBlendAttachmentState& setBlendEnable( Bool32 blendEnable_ )
9759 {
9760 blendEnable = blendEnable_;
9761 return *this;
9762 }
9763
9764 PipelineColorBlendAttachmentState& setSrcColorBlendFactor( BlendFactor srcColorBlendFactor_ )
9765 {
9766 srcColorBlendFactor = srcColorBlendFactor_;
9767 return *this;
9768 }
9769
9770 PipelineColorBlendAttachmentState& setDstColorBlendFactor( BlendFactor dstColorBlendFactor_ )
9771 {
9772 dstColorBlendFactor = dstColorBlendFactor_;
9773 return *this;
9774 }
9775
9776 PipelineColorBlendAttachmentState& setColorBlendOp( BlendOp colorBlendOp_ )
9777 {
9778 colorBlendOp = colorBlendOp_;
9779 return *this;
9780 }
9781
9782 PipelineColorBlendAttachmentState& setSrcAlphaBlendFactor( BlendFactor srcAlphaBlendFactor_ )
9783 {
9784 srcAlphaBlendFactor = srcAlphaBlendFactor_;
9785 return *this;
9786 }
9787
9788 PipelineColorBlendAttachmentState& setDstAlphaBlendFactor( BlendFactor dstAlphaBlendFactor_ )
9789 {
9790 dstAlphaBlendFactor = dstAlphaBlendFactor_;
9791 return *this;
9792 }
9793
9794 PipelineColorBlendAttachmentState& setAlphaBlendOp( BlendOp alphaBlendOp_ )
9795 {
9796 alphaBlendOp = alphaBlendOp_;
9797 return *this;
9798 }
9799
9800 PipelineColorBlendAttachmentState& setColorWriteMask( ColorComponentFlags colorWriteMask_ )
9801 {
9802 colorWriteMask = colorWriteMask_;
9803 return *this;
9804 }
9805
9806 operator const VkPipelineColorBlendAttachmentState&() const
9807 {
9808 return *reinterpret_cast<const VkPipelineColorBlendAttachmentState*>(this);
9809 }
9810
9811 bool operator==( PipelineColorBlendAttachmentState const& rhs ) const
9812 {
9813 return ( blendEnable == rhs.blendEnable )
9814 && ( srcColorBlendFactor == rhs.srcColorBlendFactor )
9815 && ( dstColorBlendFactor == rhs.dstColorBlendFactor )
9816 && ( colorBlendOp == rhs.colorBlendOp )
9817 && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor )
9818 && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor )
9819 && ( alphaBlendOp == rhs.alphaBlendOp )
9820 && ( colorWriteMask == rhs.colorWriteMask );
9821 }
9822
9823 bool operator!=( PipelineColorBlendAttachmentState const& rhs ) const
9824 {
9825 return !operator==( rhs );
9826 }
9827
9828 Bool32 blendEnable;
9829 BlendFactor srcColorBlendFactor;
9830 BlendFactor dstColorBlendFactor;
9831 BlendOp colorBlendOp;
9832 BlendFactor srcAlphaBlendFactor;
9833 BlendFactor dstAlphaBlendFactor;
9834 BlendOp alphaBlendOp;
9835 ColorComponentFlags colorWriteMask;
9836 };
9837 static_assert( sizeof( PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ), "struct and wrapper have different size!" );
9838
9839 struct PipelineColorBlendStateCreateInfo
9840 {
9841 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 } } )
9842 : sType( StructureType::ePipelineColorBlendStateCreateInfo )
9843 , pNext( nullptr )
9844 , flags( flags_ )
9845 , logicOpEnable( logicOpEnable_ )
9846 , logicOp( logicOp_ )
9847 , attachmentCount( attachmentCount_ )
9848 , pAttachments( pAttachments_ )
9849 {
9850 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
9851 }
9852
9853 PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs )
9854 {
9855 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
9856 }
9857
9858 PipelineColorBlendStateCreateInfo& operator=( VkPipelineColorBlendStateCreateInfo const & rhs )
9859 {
9860 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
9861 return *this;
9862 }
9863
9864 PipelineColorBlendStateCreateInfo& setSType( StructureType sType_ )
9865 {
9866 sType = sType_;
9867 return *this;
9868 }
9869
9870 PipelineColorBlendStateCreateInfo& setPNext( const void* pNext_ )
9871 {
9872 pNext = pNext_;
9873 return *this;
9874 }
9875
9876 PipelineColorBlendStateCreateInfo& setFlags( PipelineColorBlendStateCreateFlags flags_ )
9877 {
9878 flags = flags_;
9879 return *this;
9880 }
9881
9882 PipelineColorBlendStateCreateInfo& setLogicOpEnable( Bool32 logicOpEnable_ )
9883 {
9884 logicOpEnable = logicOpEnable_;
9885 return *this;
9886 }
9887
9888 PipelineColorBlendStateCreateInfo& setLogicOp( LogicOp logicOp_ )
9889 {
9890 logicOp = logicOp_;
9891 return *this;
9892 }
9893
9894 PipelineColorBlendStateCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
9895 {
9896 attachmentCount = attachmentCount_;
9897 return *this;
9898 }
9899
9900 PipelineColorBlendStateCreateInfo& setPAttachments( const PipelineColorBlendAttachmentState* pAttachments_ )
9901 {
9902 pAttachments = pAttachments_;
9903 return *this;
9904 }
9905
9906 PipelineColorBlendStateCreateInfo& setBlendConstants( std::array<float,4> blendConstants_ )
9907 {
9908 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
9909 return *this;
9910 }
9911
9912 operator const VkPipelineColorBlendStateCreateInfo&() const
9913 {
9914 return *reinterpret_cast<const VkPipelineColorBlendStateCreateInfo*>(this);
9915 }
9916
9917 bool operator==( PipelineColorBlendStateCreateInfo const& rhs ) const
9918 {
9919 return ( sType == rhs.sType )
9920 && ( pNext == rhs.pNext )
9921 && ( flags == rhs.flags )
9922 && ( logicOpEnable == rhs.logicOpEnable )
9923 && ( logicOp == rhs.logicOp )
9924 && ( attachmentCount == rhs.attachmentCount )
9925 && ( pAttachments == rhs.pAttachments )
9926 && ( memcmp( blendConstants, rhs.blendConstants, 4 * sizeof( float ) ) == 0 );
9927 }
9928
9929 bool operator!=( PipelineColorBlendStateCreateInfo const& rhs ) const
9930 {
9931 return !operator==( rhs );
9932 }
9933
9934 private:
9935 StructureType sType;
9936
9937 public:
9938 const void* pNext;
9939 PipelineColorBlendStateCreateFlags flags;
9940 Bool32 logicOpEnable;
9941 LogicOp logicOp;
9942 uint32_t attachmentCount;
9943 const PipelineColorBlendAttachmentState* pAttachments;
9944 float blendConstants[4];
9945 };
9946 static_assert( sizeof( PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ), "struct and wrapper have different size!" );
9947
9948 enum class FenceCreateFlagBits
9949 {
9950 eSignaled = VK_FENCE_CREATE_SIGNALED_BIT
9951 };
9952
9953 using FenceCreateFlags = Flags<FenceCreateFlagBits, VkFenceCreateFlags>;
9954
9955 inline FenceCreateFlags operator|( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 )
9956 {
9957 return FenceCreateFlags( bit0 ) | bit1;
9958 }
9959
9960 struct FenceCreateInfo
9961 {
9962 FenceCreateInfo( FenceCreateFlags flags_ = FenceCreateFlags() )
9963 : sType( StructureType::eFenceCreateInfo )
9964 , pNext( nullptr )
9965 , flags( flags_ )
9966 {
9967 }
9968
9969 FenceCreateInfo( VkFenceCreateInfo const & rhs )
9970 {
9971 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
9972 }
9973
9974 FenceCreateInfo& operator=( VkFenceCreateInfo const & rhs )
9975 {
9976 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
9977 return *this;
9978 }
9979
9980 FenceCreateInfo& setSType( StructureType sType_ )
9981 {
9982 sType = sType_;
9983 return *this;
9984 }
9985
9986 FenceCreateInfo& setPNext( const void* pNext_ )
9987 {
9988 pNext = pNext_;
9989 return *this;
9990 }
9991
9992 FenceCreateInfo& setFlags( FenceCreateFlags flags_ )
9993 {
9994 flags = flags_;
9995 return *this;
9996 }
9997
9998 operator const VkFenceCreateInfo&() const
9999 {
10000 return *reinterpret_cast<const VkFenceCreateInfo*>(this);
10001 }
10002
10003 bool operator==( FenceCreateInfo const& rhs ) const
10004 {
10005 return ( sType == rhs.sType )
10006 && ( pNext == rhs.pNext )
10007 && ( flags == rhs.flags );
10008 }
10009
10010 bool operator!=( FenceCreateInfo const& rhs ) const
10011 {
10012 return !operator==( rhs );
10013 }
10014
10015 private:
10016 StructureType sType;
10017
10018 public:
10019 const void* pNext;
10020 FenceCreateFlags flags;
10021 };
10022 static_assert( sizeof( FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" );
10023
10024 enum class FormatFeatureFlagBits
10025 {
10026 eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
10027 eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
10028 eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,
10029 eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,
10030 eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,
10031 eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,
10032 eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,
10033 eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
10034 eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,
10035 eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,
10036 eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT,
10037 eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT,
10038 eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
10039 eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
10040 };
10041
10042 using FormatFeatureFlags = Flags<FormatFeatureFlagBits, VkFormatFeatureFlags>;
10043
10044 inline FormatFeatureFlags operator|( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 )
10045 {
10046 return FormatFeatureFlags( bit0 ) | bit1;
10047 }
10048
10049 struct FormatProperties
10050 {
10051 operator const VkFormatProperties&() const
10052 {
10053 return *reinterpret_cast<const VkFormatProperties*>(this);
10054 }
10055
10056 bool operator==( FormatProperties const& rhs ) const
10057 {
10058 return ( linearTilingFeatures == rhs.linearTilingFeatures )
10059 && ( optimalTilingFeatures == rhs.optimalTilingFeatures )
10060 && ( bufferFeatures == rhs.bufferFeatures );
10061 }
10062
10063 bool operator!=( FormatProperties const& rhs ) const
10064 {
10065 return !operator==( rhs );
10066 }
10067
10068 FormatFeatureFlags linearTilingFeatures;
10069 FormatFeatureFlags optimalTilingFeatures;
10070 FormatFeatureFlags bufferFeatures;
10071 };
10072 static_assert( sizeof( FormatProperties ) == sizeof( VkFormatProperties ), "struct and wrapper have different size!" );
10073
10074 enum class QueryControlFlagBits
10075 {
10076 ePrecise = VK_QUERY_CONTROL_PRECISE_BIT
10077 };
10078
10079 using QueryControlFlags = Flags<QueryControlFlagBits, VkQueryControlFlags>;
10080
10081 inline QueryControlFlags operator|( QueryControlFlagBits bit0, QueryControlFlagBits bit1 )
10082 {
10083 return QueryControlFlags( bit0 ) | bit1;
10084 }
10085
10086 enum class QueryResultFlagBits
10087 {
10088 e64 = VK_QUERY_RESULT_64_BIT,
10089 eWait = VK_QUERY_RESULT_WAIT_BIT,
10090 eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
10091 ePartial = VK_QUERY_RESULT_PARTIAL_BIT
10092 };
10093
10094 using QueryResultFlags = Flags<QueryResultFlagBits, VkQueryResultFlags>;
10095
10096 inline QueryResultFlags operator|( QueryResultFlagBits bit0, QueryResultFlagBits bit1 )
10097 {
10098 return QueryResultFlags( bit0 ) | bit1;
10099 }
10100
10101 enum class CommandBufferUsageFlagBits
10102 {
10103 eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
10104 eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
10105 eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
10106 };
10107
10108 using CommandBufferUsageFlags = Flags<CommandBufferUsageFlagBits, VkCommandBufferUsageFlags>;
10109
10110 inline CommandBufferUsageFlags operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 )
10111 {
10112 return CommandBufferUsageFlags( bit0 ) | bit1;
10113 }
10114
10115 enum class QueryPipelineStatisticFlagBits
10116 {
10117 eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,
10118 eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,
10119 eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,
10120 eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,
10121 eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,
10122 eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,
10123 eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,
10124 eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,
10125 eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,
10126 eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,
10127 eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
10128 };
10129
10130 using QueryPipelineStatisticFlags = Flags<QueryPipelineStatisticFlagBits, VkQueryPipelineStatisticFlags>;
10131
10132 inline QueryPipelineStatisticFlags operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 )
10133 {
10134 return QueryPipelineStatisticFlags( bit0 ) | bit1;
10135 }
10136
10137 struct CommandBufferInheritanceInfo
10138 {
10139 CommandBufferInheritanceInfo( RenderPass renderPass_ = RenderPass(), uint32_t subpass_ = 0, Framebuffer framebuffer_ = Framebuffer(), Bool32 occlusionQueryEnable_ = 0, QueryControlFlags queryFlags_ = QueryControlFlags(), QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10140 : sType( StructureType::eCommandBufferInheritanceInfo )
10141 , pNext( nullptr )
10142 , renderPass( renderPass_ )
10143 , subpass( subpass_ )
10144 , framebuffer( framebuffer_ )
10145 , occlusionQueryEnable( occlusionQueryEnable_ )
10146 , queryFlags( queryFlags_ )
10147 , pipelineStatistics( pipelineStatistics_ )
10148 {
10149 }
10150
10151 CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs )
10152 {
10153 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10154 }
10155
10156 CommandBufferInheritanceInfo& operator=( VkCommandBufferInheritanceInfo const & rhs )
10157 {
10158 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10159 return *this;
10160 }
10161
10162 CommandBufferInheritanceInfo& setSType( StructureType sType_ )
10163 {
10164 sType = sType_;
10165 return *this;
10166 }
10167
10168 CommandBufferInheritanceInfo& setPNext( const void* pNext_ )
10169 {
10170 pNext = pNext_;
10171 return *this;
10172 }
10173
10174 CommandBufferInheritanceInfo& setRenderPass( RenderPass renderPass_ )
10175 {
10176 renderPass = renderPass_;
10177 return *this;
10178 }
10179
10180 CommandBufferInheritanceInfo& setSubpass( uint32_t subpass_ )
10181 {
10182 subpass = subpass_;
10183 return *this;
10184 }
10185
10186 CommandBufferInheritanceInfo& setFramebuffer( Framebuffer framebuffer_ )
10187 {
10188 framebuffer = framebuffer_;
10189 return *this;
10190 }
10191
10192 CommandBufferInheritanceInfo& setOcclusionQueryEnable( Bool32 occlusionQueryEnable_ )
10193 {
10194 occlusionQueryEnable = occlusionQueryEnable_;
10195 return *this;
10196 }
10197
10198 CommandBufferInheritanceInfo& setQueryFlags( QueryControlFlags queryFlags_ )
10199 {
10200 queryFlags = queryFlags_;
10201 return *this;
10202 }
10203
10204 CommandBufferInheritanceInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10205 {
10206 pipelineStatistics = pipelineStatistics_;
10207 return *this;
10208 }
10209
10210 operator const VkCommandBufferInheritanceInfo&() const
10211 {
10212 return *reinterpret_cast<const VkCommandBufferInheritanceInfo*>(this);
10213 }
10214
10215 bool operator==( CommandBufferInheritanceInfo const& rhs ) const
10216 {
10217 return ( sType == rhs.sType )
10218 && ( pNext == rhs.pNext )
10219 && ( renderPass == rhs.renderPass )
10220 && ( subpass == rhs.subpass )
10221 && ( framebuffer == rhs.framebuffer )
10222 && ( occlusionQueryEnable == rhs.occlusionQueryEnable )
10223 && ( queryFlags == rhs.queryFlags )
10224 && ( pipelineStatistics == rhs.pipelineStatistics );
10225 }
10226
10227 bool operator!=( CommandBufferInheritanceInfo const& rhs ) const
10228 {
10229 return !operator==( rhs );
10230 }
10231
10232 private:
10233 StructureType sType;
10234
10235 public:
10236 const void* pNext;
10237 RenderPass renderPass;
10238 uint32_t subpass;
10239 Framebuffer framebuffer;
10240 Bool32 occlusionQueryEnable;
10241 QueryControlFlags queryFlags;
10242 QueryPipelineStatisticFlags pipelineStatistics;
10243 };
10244 static_assert( sizeof( CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ), "struct and wrapper have different size!" );
10245
10246 struct CommandBufferBeginInfo
10247 {
10248 CommandBufferBeginInfo( CommandBufferUsageFlags flags_ = CommandBufferUsageFlags(), const CommandBufferInheritanceInfo* pInheritanceInfo_ = nullptr )
10249 : sType( StructureType::eCommandBufferBeginInfo )
10250 , pNext( nullptr )
10251 , flags( flags_ )
10252 , pInheritanceInfo( pInheritanceInfo_ )
10253 {
10254 }
10255
10256 CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs )
10257 {
10258 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10259 }
10260
10261 CommandBufferBeginInfo& operator=( VkCommandBufferBeginInfo const & rhs )
10262 {
10263 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10264 return *this;
10265 }
10266
10267 CommandBufferBeginInfo& setSType( StructureType sType_ )
10268 {
10269 sType = sType_;
10270 return *this;
10271 }
10272
10273 CommandBufferBeginInfo& setPNext( const void* pNext_ )
10274 {
10275 pNext = pNext_;
10276 return *this;
10277 }
10278
10279 CommandBufferBeginInfo& setFlags( CommandBufferUsageFlags flags_ )
10280 {
10281 flags = flags_;
10282 return *this;
10283 }
10284
10285 CommandBufferBeginInfo& setPInheritanceInfo( const CommandBufferInheritanceInfo* pInheritanceInfo_ )
10286 {
10287 pInheritanceInfo = pInheritanceInfo_;
10288 return *this;
10289 }
10290
10291 operator const VkCommandBufferBeginInfo&() const
10292 {
10293 return *reinterpret_cast<const VkCommandBufferBeginInfo*>(this);
10294 }
10295
10296 bool operator==( CommandBufferBeginInfo const& rhs ) const
10297 {
10298 return ( sType == rhs.sType )
10299 && ( pNext == rhs.pNext )
10300 && ( flags == rhs.flags )
10301 && ( pInheritanceInfo == rhs.pInheritanceInfo );
10302 }
10303
10304 bool operator!=( CommandBufferBeginInfo const& rhs ) const
10305 {
10306 return !operator==( rhs );
10307 }
10308
10309 private:
10310 StructureType sType;
10311
10312 public:
10313 const void* pNext;
10314 CommandBufferUsageFlags flags;
10315 const CommandBufferInheritanceInfo* pInheritanceInfo;
10316 };
10317 static_assert( sizeof( CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ), "struct and wrapper have different size!" );
10318
10319 struct QueryPoolCreateInfo
10320 {
10321 QueryPoolCreateInfo( QueryPoolCreateFlags flags_ = QueryPoolCreateFlags(), QueryType queryType_ = QueryType::eOcclusion, uint32_t queryCount_ = 0, QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10322 : sType( StructureType::eQueryPoolCreateInfo )
10323 , pNext( nullptr )
10324 , flags( flags_ )
10325 , queryType( queryType_ )
10326 , queryCount( queryCount_ )
10327 , pipelineStatistics( pipelineStatistics_ )
10328 {
10329 }
10330
10331 QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs )
10332 {
10333 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10334 }
10335
10336 QueryPoolCreateInfo& operator=( VkQueryPoolCreateInfo const & rhs )
10337 {
10338 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10339 return *this;
10340 }
10341
10342 QueryPoolCreateInfo& setSType( StructureType sType_ )
10343 {
10344 sType = sType_;
10345 return *this;
10346 }
10347
10348 QueryPoolCreateInfo& setPNext( const void* pNext_ )
10349 {
10350 pNext = pNext_;
10351 return *this;
10352 }
10353
10354 QueryPoolCreateInfo& setFlags( QueryPoolCreateFlags flags_ )
10355 {
10356 flags = flags_;
10357 return *this;
10358 }
10359
10360 QueryPoolCreateInfo& setQueryType( QueryType queryType_ )
10361 {
10362 queryType = queryType_;
10363 return *this;
10364 }
10365
10366 QueryPoolCreateInfo& setQueryCount( uint32_t queryCount_ )
10367 {
10368 queryCount = queryCount_;
10369 return *this;
10370 }
10371
10372 QueryPoolCreateInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10373 {
10374 pipelineStatistics = pipelineStatistics_;
10375 return *this;
10376 }
10377
10378 operator const VkQueryPoolCreateInfo&() const
10379 {
10380 return *reinterpret_cast<const VkQueryPoolCreateInfo*>(this);
10381 }
10382
10383 bool operator==( QueryPoolCreateInfo const& rhs ) const
10384 {
10385 return ( sType == rhs.sType )
10386 && ( pNext == rhs.pNext )
10387 && ( flags == rhs.flags )
10388 && ( queryType == rhs.queryType )
10389 && ( queryCount == rhs.queryCount )
10390 && ( pipelineStatistics == rhs.pipelineStatistics );
10391 }
10392
10393 bool operator!=( QueryPoolCreateInfo const& rhs ) const
10394 {
10395 return !operator==( rhs );
10396 }
10397
10398 private:
10399 StructureType sType;
10400
10401 public:
10402 const void* pNext;
10403 QueryPoolCreateFlags flags;
10404 QueryType queryType;
10405 uint32_t queryCount;
10406 QueryPipelineStatisticFlags pipelineStatistics;
10407 };
10408 static_assert( sizeof( QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ), "struct and wrapper have different size!" );
10409
10410 enum class ImageAspectFlagBits
10411 {
10412 eColor = VK_IMAGE_ASPECT_COLOR_BIT,
10413 eDepth = VK_IMAGE_ASPECT_DEPTH_BIT,
10414 eStencil = VK_IMAGE_ASPECT_STENCIL_BIT,
10415 eMetadata = VK_IMAGE_ASPECT_METADATA_BIT
10416 };
10417
10418 using ImageAspectFlags = Flags<ImageAspectFlagBits, VkImageAspectFlags>;
10419
10420 inline ImageAspectFlags operator|( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 )
10421 {
10422 return ImageAspectFlags( bit0 ) | bit1;
10423 }
10424
10425 struct ImageSubresource
10426 {
10427 ImageSubresource( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t arrayLayer_ = 0 )
10428 : aspectMask( aspectMask_ )
10429 , mipLevel( mipLevel_ )
10430 , arrayLayer( arrayLayer_ )
10431 {
10432 }
10433
10434 ImageSubresource( VkImageSubresource const & rhs )
10435 {
10436 memcpy( this, &rhs, sizeof(ImageSubresource) );
10437 }
10438
10439 ImageSubresource& operator=( VkImageSubresource const & rhs )
10440 {
10441 memcpy( this, &rhs, sizeof(ImageSubresource) );
10442 return *this;
10443 }
10444
10445 ImageSubresource& setAspectMask( ImageAspectFlags aspectMask_ )
10446 {
10447 aspectMask = aspectMask_;
10448 return *this;
10449 }
10450
10451 ImageSubresource& setMipLevel( uint32_t mipLevel_ )
10452 {
10453 mipLevel = mipLevel_;
10454 return *this;
10455 }
10456
10457 ImageSubresource& setArrayLayer( uint32_t arrayLayer_ )
10458 {
10459 arrayLayer = arrayLayer_;
10460 return *this;
10461 }
10462
10463 operator const VkImageSubresource&() const
10464 {
10465 return *reinterpret_cast<const VkImageSubresource*>(this);
10466 }
10467
10468 bool operator==( ImageSubresource const& rhs ) const
10469 {
10470 return ( aspectMask == rhs.aspectMask )
10471 && ( mipLevel == rhs.mipLevel )
10472 && ( arrayLayer == rhs.arrayLayer );
10473 }
10474
10475 bool operator!=( ImageSubresource const& rhs ) const
10476 {
10477 return !operator==( rhs );
10478 }
10479
10480 ImageAspectFlags aspectMask;
10481 uint32_t mipLevel;
10482 uint32_t arrayLayer;
10483 };
10484 static_assert( sizeof( ImageSubresource ) == sizeof( VkImageSubresource ), "struct and wrapper have different size!" );
10485
10486 struct ImageSubresourceLayers
10487 {
10488 ImageSubresourceLayers( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
10489 : aspectMask( aspectMask_ )
10490 , mipLevel( mipLevel_ )
10491 , baseArrayLayer( baseArrayLayer_ )
10492 , layerCount( layerCount_ )
10493 {
10494 }
10495
10496 ImageSubresourceLayers( VkImageSubresourceLayers const & rhs )
10497 {
10498 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
10499 }
10500
10501 ImageSubresourceLayers& operator=( VkImageSubresourceLayers const & rhs )
10502 {
10503 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
10504 return *this;
10505 }
10506
10507 ImageSubresourceLayers& setAspectMask( ImageAspectFlags aspectMask_ )
10508 {
10509 aspectMask = aspectMask_;
10510 return *this;
10511 }
10512
10513 ImageSubresourceLayers& setMipLevel( uint32_t mipLevel_ )
10514 {
10515 mipLevel = mipLevel_;
10516 return *this;
10517 }
10518
10519 ImageSubresourceLayers& setBaseArrayLayer( uint32_t baseArrayLayer_ )
10520 {
10521 baseArrayLayer = baseArrayLayer_;
10522 return *this;
10523 }
10524
10525 ImageSubresourceLayers& setLayerCount( uint32_t layerCount_ )
10526 {
10527 layerCount = layerCount_;
10528 return *this;
10529 }
10530
10531 operator const VkImageSubresourceLayers&() const
10532 {
10533 return *reinterpret_cast<const VkImageSubresourceLayers*>(this);
10534 }
10535
10536 bool operator==( ImageSubresourceLayers const& rhs ) const
10537 {
10538 return ( aspectMask == rhs.aspectMask )
10539 && ( mipLevel == rhs.mipLevel )
10540 && ( baseArrayLayer == rhs.baseArrayLayer )
10541 && ( layerCount == rhs.layerCount );
10542 }
10543
10544 bool operator!=( ImageSubresourceLayers const& rhs ) const
10545 {
10546 return !operator==( rhs );
10547 }
10548
10549 ImageAspectFlags aspectMask;
10550 uint32_t mipLevel;
10551 uint32_t baseArrayLayer;
10552 uint32_t layerCount;
10553 };
10554 static_assert( sizeof( ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ), "struct and wrapper have different size!" );
10555
10556 struct ImageSubresourceRange
10557 {
10558 ImageSubresourceRange( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t baseMipLevel_ = 0, uint32_t levelCount_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
10559 : aspectMask( aspectMask_ )
10560 , baseMipLevel( baseMipLevel_ )
10561 , levelCount( levelCount_ )
10562 , baseArrayLayer( baseArrayLayer_ )
10563 , layerCount( layerCount_ )
10564 {
10565 }
10566
10567 ImageSubresourceRange( VkImageSubresourceRange const & rhs )
10568 {
10569 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
10570 }
10571
10572 ImageSubresourceRange& operator=( VkImageSubresourceRange const & rhs )
10573 {
10574 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
10575 return *this;
10576 }
10577
10578 ImageSubresourceRange& setAspectMask( ImageAspectFlags aspectMask_ )
10579 {
10580 aspectMask = aspectMask_;
10581 return *this;
10582 }
10583
10584 ImageSubresourceRange& setBaseMipLevel( uint32_t baseMipLevel_ )
10585 {
10586 baseMipLevel = baseMipLevel_;
10587 return *this;
10588 }
10589
10590 ImageSubresourceRange& setLevelCount( uint32_t levelCount_ )
10591 {
10592 levelCount = levelCount_;
10593 return *this;
10594 }
10595
10596 ImageSubresourceRange& setBaseArrayLayer( uint32_t baseArrayLayer_ )
10597 {
10598 baseArrayLayer = baseArrayLayer_;
10599 return *this;
10600 }
10601
10602 ImageSubresourceRange& setLayerCount( uint32_t layerCount_ )
10603 {
10604 layerCount = layerCount_;
10605 return *this;
10606 }
10607
10608 operator const VkImageSubresourceRange&() const
10609 {
10610 return *reinterpret_cast<const VkImageSubresourceRange*>(this);
10611 }
10612
10613 bool operator==( ImageSubresourceRange const& rhs ) const
10614 {
10615 return ( aspectMask == rhs.aspectMask )
10616 && ( baseMipLevel == rhs.baseMipLevel )
10617 && ( levelCount == rhs.levelCount )
10618 && ( baseArrayLayer == rhs.baseArrayLayer )
10619 && ( layerCount == rhs.layerCount );
10620 }
10621
10622 bool operator!=( ImageSubresourceRange const& rhs ) const
10623 {
10624 return !operator==( rhs );
10625 }
10626
10627 ImageAspectFlags aspectMask;
10628 uint32_t baseMipLevel;
10629 uint32_t levelCount;
10630 uint32_t baseArrayLayer;
10631 uint32_t layerCount;
10632 };
10633 static_assert( sizeof( ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ), "struct and wrapper have different size!" );
10634
10635 struct ImageMemoryBarrier
10636 {
10637 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() )
10638 : sType( StructureType::eImageMemoryBarrier )
10639 , pNext( nullptr )
10640 , srcAccessMask( srcAccessMask_ )
10641 , dstAccessMask( dstAccessMask_ )
10642 , oldLayout( oldLayout_ )
10643 , newLayout( newLayout_ )
10644 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
10645 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
10646 , image( image_ )
10647 , subresourceRange( subresourceRange_ )
10648 {
10649 }
10650
10651 ImageMemoryBarrier( VkImageMemoryBarrier const & rhs )
10652 {
10653 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
10654 }
10655
10656 ImageMemoryBarrier& operator=( VkImageMemoryBarrier const & rhs )
10657 {
10658 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
10659 return *this;
10660 }
10661
10662 ImageMemoryBarrier& setSType( StructureType sType_ )
10663 {
10664 sType = sType_;
10665 return *this;
10666 }
10667
10668 ImageMemoryBarrier& setPNext( const void* pNext_ )
10669 {
10670 pNext = pNext_;
10671 return *this;
10672 }
10673
10674 ImageMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
10675 {
10676 srcAccessMask = srcAccessMask_;
10677 return *this;
10678 }
10679
10680 ImageMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
10681 {
10682 dstAccessMask = dstAccessMask_;
10683 return *this;
10684 }
10685
10686 ImageMemoryBarrier& setOldLayout( ImageLayout oldLayout_ )
10687 {
10688 oldLayout = oldLayout_;
10689 return *this;
10690 }
10691
10692 ImageMemoryBarrier& setNewLayout( ImageLayout newLayout_ )
10693 {
10694 newLayout = newLayout_;
10695 return *this;
10696 }
10697
10698 ImageMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
10699 {
10700 srcQueueFamilyIndex = srcQueueFamilyIndex_;
10701 return *this;
10702 }
10703
10704 ImageMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
10705 {
10706 dstQueueFamilyIndex = dstQueueFamilyIndex_;
10707 return *this;
10708 }
10709
10710 ImageMemoryBarrier& setImage( Image image_ )
10711 {
10712 image = image_;
10713 return *this;
10714 }
10715
10716 ImageMemoryBarrier& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
10717 {
10718 subresourceRange = subresourceRange_;
10719 return *this;
10720 }
10721
10722 operator const VkImageMemoryBarrier&() const
10723 {
10724 return *reinterpret_cast<const VkImageMemoryBarrier*>(this);
10725 }
10726
10727 bool operator==( ImageMemoryBarrier const& rhs ) const
10728 {
10729 return ( sType == rhs.sType )
10730 && ( pNext == rhs.pNext )
10731 && ( srcAccessMask == rhs.srcAccessMask )
10732 && ( dstAccessMask == rhs.dstAccessMask )
10733 && ( oldLayout == rhs.oldLayout )
10734 && ( newLayout == rhs.newLayout )
10735 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
10736 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
10737 && ( image == rhs.image )
10738 && ( subresourceRange == rhs.subresourceRange );
10739 }
10740
10741 bool operator!=( ImageMemoryBarrier const& rhs ) const
10742 {
10743 return !operator==( rhs );
10744 }
10745
10746 private:
10747 StructureType sType;
10748
10749 public:
10750 const void* pNext;
10751 AccessFlags srcAccessMask;
10752 AccessFlags dstAccessMask;
10753 ImageLayout oldLayout;
10754 ImageLayout newLayout;
10755 uint32_t srcQueueFamilyIndex;
10756 uint32_t dstQueueFamilyIndex;
10757 Image image;
10758 ImageSubresourceRange subresourceRange;
10759 };
10760 static_assert( sizeof( ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ), "struct and wrapper have different size!" );
10761
10762 struct ImageViewCreateInfo
10763 {
10764 ImageViewCreateInfo( ImageViewCreateFlags flags_ = ImageViewCreateFlags(), Image image_ = Image(), ImageViewType viewType_ = ImageViewType::e1D, Format format_ = Format::eUndefined, ComponentMapping components_ = ComponentMapping(), ImageSubresourceRange subresourceRange_ = ImageSubresourceRange() )
10765 : sType( StructureType::eImageViewCreateInfo )
10766 , pNext( nullptr )
10767 , flags( flags_ )
10768 , image( image_ )
10769 , viewType( viewType_ )
10770 , format( format_ )
10771 , components( components_ )
10772 , subresourceRange( subresourceRange_ )
10773 {
10774 }
10775
10776 ImageViewCreateInfo( VkImageViewCreateInfo const & rhs )
10777 {
10778 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
10779 }
10780
10781 ImageViewCreateInfo& operator=( VkImageViewCreateInfo const & rhs )
10782 {
10783 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
10784 return *this;
10785 }
10786
10787 ImageViewCreateInfo& setSType( StructureType sType_ )
10788 {
10789 sType = sType_;
10790 return *this;
10791 }
10792
10793 ImageViewCreateInfo& setPNext( const void* pNext_ )
10794 {
10795 pNext = pNext_;
10796 return *this;
10797 }
10798
10799 ImageViewCreateInfo& setFlags( ImageViewCreateFlags flags_ )
10800 {
10801 flags = flags_;
10802 return *this;
10803 }
10804
10805 ImageViewCreateInfo& setImage( Image image_ )
10806 {
10807 image = image_;
10808 return *this;
10809 }
10810
10811 ImageViewCreateInfo& setViewType( ImageViewType viewType_ )
10812 {
10813 viewType = viewType_;
10814 return *this;
10815 }
10816
10817 ImageViewCreateInfo& setFormat( Format format_ )
10818 {
10819 format = format_;
10820 return *this;
10821 }
10822
10823 ImageViewCreateInfo& setComponents( ComponentMapping components_ )
10824 {
10825 components = components_;
10826 return *this;
10827 }
10828
10829 ImageViewCreateInfo& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
10830 {
10831 subresourceRange = subresourceRange_;
10832 return *this;
10833 }
10834
10835 operator const VkImageViewCreateInfo&() const
10836 {
10837 return *reinterpret_cast<const VkImageViewCreateInfo*>(this);
10838 }
10839
10840 bool operator==( ImageViewCreateInfo const& rhs ) const
10841 {
10842 return ( sType == rhs.sType )
10843 && ( pNext == rhs.pNext )
10844 && ( flags == rhs.flags )
10845 && ( image == rhs.image )
10846 && ( viewType == rhs.viewType )
10847 && ( format == rhs.format )
10848 && ( components == rhs.components )
10849 && ( subresourceRange == rhs.subresourceRange );
10850 }
10851
10852 bool operator!=( ImageViewCreateInfo const& rhs ) const
10853 {
10854 return !operator==( rhs );
10855 }
10856
10857 private:
10858 StructureType sType;
10859
10860 public:
10861 const void* pNext;
10862 ImageViewCreateFlags flags;
10863 Image image;
10864 ImageViewType viewType;
10865 Format format;
10866 ComponentMapping components;
10867 ImageSubresourceRange subresourceRange;
10868 };
10869 static_assert( sizeof( ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ), "struct and wrapper have different size!" );
10870
10871 struct ImageCopy
10872 {
10873 ImageCopy( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
10874 : srcSubresource( srcSubresource_ )
10875 , srcOffset( srcOffset_ )
10876 , dstSubresource( dstSubresource_ )
10877 , dstOffset( dstOffset_ )
10878 , extent( extent_ )
10879 {
10880 }
10881
10882 ImageCopy( VkImageCopy const & rhs )
10883 {
10884 memcpy( this, &rhs, sizeof(ImageCopy) );
10885 }
10886
10887 ImageCopy& operator=( VkImageCopy const & rhs )
10888 {
10889 memcpy( this, &rhs, sizeof(ImageCopy) );
10890 return *this;
10891 }
10892
10893 ImageCopy& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
10894 {
10895 srcSubresource = srcSubresource_;
10896 return *this;
10897 }
10898
10899 ImageCopy& setSrcOffset( Offset3D srcOffset_ )
10900 {
10901 srcOffset = srcOffset_;
10902 return *this;
10903 }
10904
10905 ImageCopy& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
10906 {
10907 dstSubresource = dstSubresource_;
10908 return *this;
10909 }
10910
10911 ImageCopy& setDstOffset( Offset3D dstOffset_ )
10912 {
10913 dstOffset = dstOffset_;
10914 return *this;
10915 }
10916
10917 ImageCopy& setExtent( Extent3D extent_ )
10918 {
10919 extent = extent_;
10920 return *this;
10921 }
10922
10923 operator const VkImageCopy&() const
10924 {
10925 return *reinterpret_cast<const VkImageCopy*>(this);
10926 }
10927
10928 bool operator==( ImageCopy const& rhs ) const
10929 {
10930 return ( srcSubresource == rhs.srcSubresource )
10931 && ( srcOffset == rhs.srcOffset )
10932 && ( dstSubresource == rhs.dstSubresource )
10933 && ( dstOffset == rhs.dstOffset )
10934 && ( extent == rhs.extent );
10935 }
10936
10937 bool operator!=( ImageCopy const& rhs ) const
10938 {
10939 return !operator==( rhs );
10940 }
10941
10942 ImageSubresourceLayers srcSubresource;
10943 Offset3D srcOffset;
10944 ImageSubresourceLayers dstSubresource;
10945 Offset3D dstOffset;
10946 Extent3D extent;
10947 };
10948 static_assert( sizeof( ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" );
10949
10950 struct ImageBlit
10951 {
10952 ImageBlit( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& srcOffsets_ = { { Offset3D(), Offset3D() } }, ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& dstOffsets_ = { { Offset3D(), Offset3D() } } )
10953 : srcSubresource( srcSubresource_ )
10954 , dstSubresource( dstSubresource_ )
10955 {
10956 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
10957 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
10958 }
10959
10960 ImageBlit( VkImageBlit const & rhs )
10961 {
10962 memcpy( this, &rhs, sizeof(ImageBlit) );
10963 }
10964
10965 ImageBlit& operator=( VkImageBlit const & rhs )
10966 {
10967 memcpy( this, &rhs, sizeof(ImageBlit) );
10968 return *this;
10969 }
10970
10971 ImageBlit& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
10972 {
10973 srcSubresource = srcSubresource_;
10974 return *this;
10975 }
10976
10977 ImageBlit& setSrcOffsets( std::array<Offset3D,2> srcOffsets_ )
10978 {
10979 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
10980 return *this;
10981 }
10982
10983 ImageBlit& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
10984 {
10985 dstSubresource = dstSubresource_;
10986 return *this;
10987 }
10988
10989 ImageBlit& setDstOffsets( std::array<Offset3D,2> dstOffsets_ )
10990 {
10991 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
10992 return *this;
10993 }
10994
10995 operator const VkImageBlit&() const
10996 {
10997 return *reinterpret_cast<const VkImageBlit*>(this);
10998 }
10999
11000 bool operator==( ImageBlit const& rhs ) const
11001 {
11002 return ( srcSubresource == rhs.srcSubresource )
11003 && ( memcmp( srcOffsets, rhs.srcOffsets, 2 * sizeof( Offset3D ) ) == 0 )
11004 && ( dstSubresource == rhs.dstSubresource )
11005 && ( memcmp( dstOffsets, rhs.dstOffsets, 2 * sizeof( Offset3D ) ) == 0 );
11006 }
11007
11008 bool operator!=( ImageBlit const& rhs ) const
11009 {
11010 return !operator==( rhs );
11011 }
11012
11013 ImageSubresourceLayers srcSubresource;
11014 Offset3D srcOffsets[2];
11015 ImageSubresourceLayers dstSubresource;
11016 Offset3D dstOffsets[2];
11017 };
11018 static_assert( sizeof( ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" );
11019
11020 struct BufferImageCopy
11021 {
11022 BufferImageCopy( DeviceSize bufferOffset_ = 0, uint32_t bufferRowLength_ = 0, uint32_t bufferImageHeight_ = 0, ImageSubresourceLayers imageSubresource_ = ImageSubresourceLayers(), Offset3D imageOffset_ = Offset3D(), Extent3D imageExtent_ = Extent3D() )
11023 : bufferOffset( bufferOffset_ )
11024 , bufferRowLength( bufferRowLength_ )
11025 , bufferImageHeight( bufferImageHeight_ )
11026 , imageSubresource( imageSubresource_ )
11027 , imageOffset( imageOffset_ )
11028 , imageExtent( imageExtent_ )
11029 {
11030 }
11031
11032 BufferImageCopy( VkBufferImageCopy const & rhs )
11033 {
11034 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11035 }
11036
11037 BufferImageCopy& operator=( VkBufferImageCopy const & rhs )
11038 {
11039 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11040 return *this;
11041 }
11042
11043 BufferImageCopy& setBufferOffset( DeviceSize bufferOffset_ )
11044 {
11045 bufferOffset = bufferOffset_;
11046 return *this;
11047 }
11048
11049 BufferImageCopy& setBufferRowLength( uint32_t bufferRowLength_ )
11050 {
11051 bufferRowLength = bufferRowLength_;
11052 return *this;
11053 }
11054
11055 BufferImageCopy& setBufferImageHeight( uint32_t bufferImageHeight_ )
11056 {
11057 bufferImageHeight = bufferImageHeight_;
11058 return *this;
11059 }
11060
11061 BufferImageCopy& setImageSubresource( ImageSubresourceLayers imageSubresource_ )
11062 {
11063 imageSubresource = imageSubresource_;
11064 return *this;
11065 }
11066
11067 BufferImageCopy& setImageOffset( Offset3D imageOffset_ )
11068 {
11069 imageOffset = imageOffset_;
11070 return *this;
11071 }
11072
11073 BufferImageCopy& setImageExtent( Extent3D imageExtent_ )
11074 {
11075 imageExtent = imageExtent_;
11076 return *this;
11077 }
11078
11079 operator const VkBufferImageCopy&() const
11080 {
11081 return *reinterpret_cast<const VkBufferImageCopy*>(this);
11082 }
11083
11084 bool operator==( BufferImageCopy const& rhs ) const
11085 {
11086 return ( bufferOffset == rhs.bufferOffset )
11087 && ( bufferRowLength == rhs.bufferRowLength )
11088 && ( bufferImageHeight == rhs.bufferImageHeight )
11089 && ( imageSubresource == rhs.imageSubresource )
11090 && ( imageOffset == rhs.imageOffset )
11091 && ( imageExtent == rhs.imageExtent );
11092 }
11093
11094 bool operator!=( BufferImageCopy const& rhs ) const
11095 {
11096 return !operator==( rhs );
11097 }
11098
11099 DeviceSize bufferOffset;
11100 uint32_t bufferRowLength;
11101 uint32_t bufferImageHeight;
11102 ImageSubresourceLayers imageSubresource;
11103 Offset3D imageOffset;
11104 Extent3D imageExtent;
11105 };
11106 static_assert( sizeof( BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" );
11107
11108 struct ImageResolve
11109 {
11110 ImageResolve( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11111 : srcSubresource( srcSubresource_ )
11112 , srcOffset( srcOffset_ )
11113 , dstSubresource( dstSubresource_ )
11114 , dstOffset( dstOffset_ )
11115 , extent( extent_ )
11116 {
11117 }
11118
11119 ImageResolve( VkImageResolve const & rhs )
11120 {
11121 memcpy( this, &rhs, sizeof(ImageResolve) );
11122 }
11123
11124 ImageResolve& operator=( VkImageResolve const & rhs )
11125 {
11126 memcpy( this, &rhs, sizeof(ImageResolve) );
11127 return *this;
11128 }
11129
11130 ImageResolve& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11131 {
11132 srcSubresource = srcSubresource_;
11133 return *this;
11134 }
11135
11136 ImageResolve& setSrcOffset( Offset3D srcOffset_ )
11137 {
11138 srcOffset = srcOffset_;
11139 return *this;
11140 }
11141
11142 ImageResolve& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11143 {
11144 dstSubresource = dstSubresource_;
11145 return *this;
11146 }
11147
11148 ImageResolve& setDstOffset( Offset3D dstOffset_ )
11149 {
11150 dstOffset = dstOffset_;
11151 return *this;
11152 }
11153
11154 ImageResolve& setExtent( Extent3D extent_ )
11155 {
11156 extent = extent_;
11157 return *this;
11158 }
11159
11160 operator const VkImageResolve&() const
11161 {
11162 return *reinterpret_cast<const VkImageResolve*>(this);
11163 }
11164
11165 bool operator==( ImageResolve const& rhs ) const
11166 {
11167 return ( srcSubresource == rhs.srcSubresource )
11168 && ( srcOffset == rhs.srcOffset )
11169 && ( dstSubresource == rhs.dstSubresource )
11170 && ( dstOffset == rhs.dstOffset )
11171 && ( extent == rhs.extent );
11172 }
11173
11174 bool operator!=( ImageResolve const& rhs ) const
11175 {
11176 return !operator==( rhs );
11177 }
11178
11179 ImageSubresourceLayers srcSubresource;
11180 Offset3D srcOffset;
11181 ImageSubresourceLayers dstSubresource;
11182 Offset3D dstOffset;
11183 Extent3D extent;
11184 };
11185 static_assert( sizeof( ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" );
11186
11187 struct ClearAttachment
11188 {
11189 ClearAttachment( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t colorAttachment_ = 0, ClearValue clearValue_ = ClearValue() )
11190 : aspectMask( aspectMask_ )
11191 , colorAttachment( colorAttachment_ )
11192 , clearValue( clearValue_ )
11193 {
11194 }
11195
11196 ClearAttachment( VkClearAttachment const & rhs )
11197 {
11198 memcpy( this, &rhs, sizeof(ClearAttachment) );
11199 }
11200
11201 ClearAttachment& operator=( VkClearAttachment const & rhs )
11202 {
11203 memcpy( this, &rhs, sizeof(ClearAttachment) );
11204 return *this;
11205 }
11206
11207 ClearAttachment& setAspectMask( ImageAspectFlags aspectMask_ )
11208 {
11209 aspectMask = aspectMask_;
11210 return *this;
11211 }
11212
11213 ClearAttachment& setColorAttachment( uint32_t colorAttachment_ )
11214 {
11215 colorAttachment = colorAttachment_;
11216 return *this;
11217 }
11218
11219 ClearAttachment& setClearValue( ClearValue clearValue_ )
11220 {
11221 clearValue = clearValue_;
11222 return *this;
11223 }
11224
11225 operator const VkClearAttachment&() const
11226 {
11227 return *reinterpret_cast<const VkClearAttachment*>(this);
11228 }
11229
11230 ImageAspectFlags aspectMask;
11231 uint32_t colorAttachment;
11232 ClearValue clearValue;
11233 };
11234 static_assert( sizeof( ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" );
11235
11236 enum class SparseImageFormatFlagBits
11237 {
11238 eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,
11239 eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,
11240 eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
11241 };
11242
11243 using SparseImageFormatFlags = Flags<SparseImageFormatFlagBits, VkSparseImageFormatFlags>;
11244
11245 inline SparseImageFormatFlags operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 )
11246 {
11247 return SparseImageFormatFlags( bit0 ) | bit1;
11248 }
11249
11250 struct SparseImageFormatProperties
11251 {
11252 operator const VkSparseImageFormatProperties&() const
11253 {
11254 return *reinterpret_cast<const VkSparseImageFormatProperties*>(this);
11255 }
11256
11257 bool operator==( SparseImageFormatProperties const& rhs ) const
11258 {
11259 return ( aspectMask == rhs.aspectMask )
11260 && ( imageGranularity == rhs.imageGranularity )
11261 && ( flags == rhs.flags );
11262 }
11263
11264 bool operator!=( SparseImageFormatProperties const& rhs ) const
11265 {
11266 return !operator==( rhs );
11267 }
11268
11269 ImageAspectFlags aspectMask;
11270 Extent3D imageGranularity;
11271 SparseImageFormatFlags flags;
11272 };
11273 static_assert( sizeof( SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ), "struct and wrapper have different size!" );
11274
11275 struct SparseImageMemoryRequirements
11276 {
11277 operator const VkSparseImageMemoryRequirements&() const
11278 {
11279 return *reinterpret_cast<const VkSparseImageMemoryRequirements*>(this);
11280 }
11281
11282 bool operator==( SparseImageMemoryRequirements const& rhs ) const
11283 {
11284 return ( formatProperties == rhs.formatProperties )
11285 && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod )
11286 && ( imageMipTailSize == rhs.imageMipTailSize )
11287 && ( imageMipTailOffset == rhs.imageMipTailOffset )
11288 && ( imageMipTailStride == rhs.imageMipTailStride );
11289 }
11290
11291 bool operator!=( SparseImageMemoryRequirements const& rhs ) const
11292 {
11293 return !operator==( rhs );
11294 }
11295
11296 SparseImageFormatProperties formatProperties;
11297 uint32_t imageMipTailFirstLod;
11298 DeviceSize imageMipTailSize;
11299 DeviceSize imageMipTailOffset;
11300 DeviceSize imageMipTailStride;
11301 };
11302 static_assert( sizeof( SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ), "struct and wrapper have different size!" );
11303
11304 enum class SparseMemoryBindFlagBits
11305 {
11306 eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT
11307 };
11308
11309 using SparseMemoryBindFlags = Flags<SparseMemoryBindFlagBits, VkSparseMemoryBindFlags>;
11310
11311 inline SparseMemoryBindFlags operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 )
11312 {
11313 return SparseMemoryBindFlags( bit0 ) | bit1;
11314 }
11315
11316 struct SparseMemoryBind
11317 {
11318 SparseMemoryBind( DeviceSize resourceOffset_ = 0, DeviceSize size_ = 0, DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11319 : resourceOffset( resourceOffset_ )
11320 , size( size_ )
11321 , memory( memory_ )
11322 , memoryOffset( memoryOffset_ )
11323 , flags( flags_ )
11324 {
11325 }
11326
11327 SparseMemoryBind( VkSparseMemoryBind const & rhs )
11328 {
11329 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11330 }
11331
11332 SparseMemoryBind& operator=( VkSparseMemoryBind const & rhs )
11333 {
11334 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11335 return *this;
11336 }
11337
11338 SparseMemoryBind& setResourceOffset( DeviceSize resourceOffset_ )
11339 {
11340 resourceOffset = resourceOffset_;
11341 return *this;
11342 }
11343
11344 SparseMemoryBind& setSize( DeviceSize size_ )
11345 {
11346 size = size_;
11347 return *this;
11348 }
11349
11350 SparseMemoryBind& setMemory( DeviceMemory memory_ )
11351 {
11352 memory = memory_;
11353 return *this;
11354 }
11355
11356 SparseMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
11357 {
11358 memoryOffset = memoryOffset_;
11359 return *this;
11360 }
11361
11362 SparseMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
11363 {
11364 flags = flags_;
11365 return *this;
11366 }
11367
11368 operator const VkSparseMemoryBind&() const
11369 {
11370 return *reinterpret_cast<const VkSparseMemoryBind*>(this);
11371 }
11372
11373 bool operator==( SparseMemoryBind const& rhs ) const
11374 {
11375 return ( resourceOffset == rhs.resourceOffset )
11376 && ( size == rhs.size )
11377 && ( memory == rhs.memory )
11378 && ( memoryOffset == rhs.memoryOffset )
11379 && ( flags == rhs.flags );
11380 }
11381
11382 bool operator!=( SparseMemoryBind const& rhs ) const
11383 {
11384 return !operator==( rhs );
11385 }
11386
11387 DeviceSize resourceOffset;
11388 DeviceSize size;
11389 DeviceMemory memory;
11390 DeviceSize memoryOffset;
11391 SparseMemoryBindFlags flags;
11392 };
11393 static_assert( sizeof( SparseMemoryBind ) == sizeof( VkSparseMemoryBind ), "struct and wrapper have different size!" );
11394
11395 struct SparseImageMemoryBind
11396 {
11397 SparseImageMemoryBind( ImageSubresource subresource_ = ImageSubresource(), Offset3D offset_ = Offset3D(), Extent3D extent_ = Extent3D(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11398 : subresource( subresource_ )
11399 , offset( offset_ )
11400 , extent( extent_ )
11401 , memory( memory_ )
11402 , memoryOffset( memoryOffset_ )
11403 , flags( flags_ )
11404 {
11405 }
11406
11407 SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs )
11408 {
11409 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
11410 }
11411
11412 SparseImageMemoryBind& operator=( VkSparseImageMemoryBind const & rhs )
11413 {
11414 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
11415 return *this;
11416 }
11417
11418 SparseImageMemoryBind& setSubresource( ImageSubresource subresource_ )
11419 {
11420 subresource = subresource_;
11421 return *this;
11422 }
11423
11424 SparseImageMemoryBind& setOffset( Offset3D offset_ )
11425 {
11426 offset = offset_;
11427 return *this;
11428 }
11429
11430 SparseImageMemoryBind& setExtent( Extent3D extent_ )
11431 {
11432 extent = extent_;
11433 return *this;
11434 }
11435
11436 SparseImageMemoryBind& setMemory( DeviceMemory memory_ )
11437 {
11438 memory = memory_;
11439 return *this;
11440 }
11441
11442 SparseImageMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
11443 {
11444 memoryOffset = memoryOffset_;
11445 return *this;
11446 }
11447
11448 SparseImageMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
11449 {
11450 flags = flags_;
11451 return *this;
11452 }
11453
11454 operator const VkSparseImageMemoryBind&() const
11455 {
11456 return *reinterpret_cast<const VkSparseImageMemoryBind*>(this);
11457 }
11458
11459 bool operator==( SparseImageMemoryBind const& rhs ) const
11460 {
11461 return ( subresource == rhs.subresource )
11462 && ( offset == rhs.offset )
11463 && ( extent == rhs.extent )
11464 && ( memory == rhs.memory )
11465 && ( memoryOffset == rhs.memoryOffset )
11466 && ( flags == rhs.flags );
11467 }
11468
11469 bool operator!=( SparseImageMemoryBind const& rhs ) const
11470 {
11471 return !operator==( rhs );
11472 }
11473
11474 ImageSubresource subresource;
11475 Offset3D offset;
11476 Extent3D extent;
11477 DeviceMemory memory;
11478 DeviceSize memoryOffset;
11479 SparseMemoryBindFlags flags;
11480 };
11481 static_assert( sizeof( SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ), "struct and wrapper have different size!" );
11482
11483 struct SparseBufferMemoryBindInfo
11484 {
11485 SparseBufferMemoryBindInfo( Buffer buffer_ = Buffer(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
11486 : buffer( buffer_ )
11487 , bindCount( bindCount_ )
11488 , pBinds( pBinds_ )
11489 {
11490 }
11491
11492 SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs )
11493 {
11494 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
11495 }
11496
11497 SparseBufferMemoryBindInfo& operator=( VkSparseBufferMemoryBindInfo const & rhs )
11498 {
11499 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
11500 return *this;
11501 }
11502
11503 SparseBufferMemoryBindInfo& setBuffer( Buffer buffer_ )
11504 {
11505 buffer = buffer_;
11506 return *this;
11507 }
11508
11509 SparseBufferMemoryBindInfo& setBindCount( uint32_t bindCount_ )
11510 {
11511 bindCount = bindCount_;
11512 return *this;
11513 }
11514
11515 SparseBufferMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
11516 {
11517 pBinds = pBinds_;
11518 return *this;
11519 }
11520
11521 operator const VkSparseBufferMemoryBindInfo&() const
11522 {
11523 return *reinterpret_cast<const VkSparseBufferMemoryBindInfo*>(this);
11524 }
11525
11526 bool operator==( SparseBufferMemoryBindInfo const& rhs ) const
11527 {
11528 return ( buffer == rhs.buffer )
11529 && ( bindCount == rhs.bindCount )
11530 && ( pBinds == rhs.pBinds );
11531 }
11532
11533 bool operator!=( SparseBufferMemoryBindInfo const& rhs ) const
11534 {
11535 return !operator==( rhs );
11536 }
11537
11538 Buffer buffer;
11539 uint32_t bindCount;
11540 const SparseMemoryBind* pBinds;
11541 };
11542 static_assert( sizeof( SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ), "struct and wrapper have different size!" );
11543
11544 struct SparseImageOpaqueMemoryBindInfo
11545 {
11546 SparseImageOpaqueMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
11547 : image( image_ )
11548 , bindCount( bindCount_ )
11549 , pBinds( pBinds_ )
11550 {
11551 }
11552
11553 SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs )
11554 {
11555 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
11556 }
11557
11558 SparseImageOpaqueMemoryBindInfo& operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs )
11559 {
11560 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
11561 return *this;
11562 }
11563
11564 SparseImageOpaqueMemoryBindInfo& setImage( Image image_ )
11565 {
11566 image = image_;
11567 return *this;
11568 }
11569
11570 SparseImageOpaqueMemoryBindInfo& setBindCount( uint32_t bindCount_ )
11571 {
11572 bindCount = bindCount_;
11573 return *this;
11574 }
11575
11576 SparseImageOpaqueMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
11577 {
11578 pBinds = pBinds_;
11579 return *this;
11580 }
11581
11582 operator const VkSparseImageOpaqueMemoryBindInfo&() const
11583 {
11584 return *reinterpret_cast<const VkSparseImageOpaqueMemoryBindInfo*>(this);
11585 }
11586
11587 bool operator==( SparseImageOpaqueMemoryBindInfo const& rhs ) const
11588 {
11589 return ( image == rhs.image )
11590 && ( bindCount == rhs.bindCount )
11591 && ( pBinds == rhs.pBinds );
11592 }
11593
11594 bool operator!=( SparseImageOpaqueMemoryBindInfo const& rhs ) const
11595 {
11596 return !operator==( rhs );
11597 }
11598
11599 Image image;
11600 uint32_t bindCount;
11601 const SparseMemoryBind* pBinds;
11602 };
11603 static_assert( sizeof( SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ), "struct and wrapper have different size!" );
11604
11605 struct SparseImageMemoryBindInfo
11606 {
11607 SparseImageMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseImageMemoryBind* pBinds_ = nullptr )
11608 : image( image_ )
11609 , bindCount( bindCount_ )
11610 , pBinds( pBinds_ )
11611 {
11612 }
11613
11614 SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs )
11615 {
11616 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
11617 }
11618
11619 SparseImageMemoryBindInfo& operator=( VkSparseImageMemoryBindInfo const & rhs )
11620 {
11621 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
11622 return *this;
11623 }
11624
11625 SparseImageMemoryBindInfo& setImage( Image image_ )
11626 {
11627 image = image_;
11628 return *this;
11629 }
11630
11631 SparseImageMemoryBindInfo& setBindCount( uint32_t bindCount_ )
11632 {
11633 bindCount = bindCount_;
11634 return *this;
11635 }
11636
11637 SparseImageMemoryBindInfo& setPBinds( const SparseImageMemoryBind* pBinds_ )
11638 {
11639 pBinds = pBinds_;
11640 return *this;
11641 }
11642
11643 operator const VkSparseImageMemoryBindInfo&() const
11644 {
11645 return *reinterpret_cast<const VkSparseImageMemoryBindInfo*>(this);
11646 }
11647
11648 bool operator==( SparseImageMemoryBindInfo const& rhs ) const
11649 {
11650 return ( image == rhs.image )
11651 && ( bindCount == rhs.bindCount )
11652 && ( pBinds == rhs.pBinds );
11653 }
11654
11655 bool operator!=( SparseImageMemoryBindInfo const& rhs ) const
11656 {
11657 return !operator==( rhs );
11658 }
11659
11660 Image image;
11661 uint32_t bindCount;
11662 const SparseImageMemoryBind* pBinds;
11663 };
11664 static_assert( sizeof( SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ), "struct and wrapper have different size!" );
11665
11666 struct BindSparseInfo
11667 {
11668 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 )
11669 : sType( StructureType::eBindSparseInfo )
11670 , pNext( nullptr )
11671 , waitSemaphoreCount( waitSemaphoreCount_ )
11672 , pWaitSemaphores( pWaitSemaphores_ )
11673 , bufferBindCount( bufferBindCount_ )
11674 , pBufferBinds( pBufferBinds_ )
11675 , imageOpaqueBindCount( imageOpaqueBindCount_ )
11676 , pImageOpaqueBinds( pImageOpaqueBinds_ )
11677 , imageBindCount( imageBindCount_ )
11678 , pImageBinds( pImageBinds_ )
11679 , signalSemaphoreCount( signalSemaphoreCount_ )
11680 , pSignalSemaphores( pSignalSemaphores_ )
11681 {
11682 }
11683
11684 BindSparseInfo( VkBindSparseInfo const & rhs )
11685 {
11686 memcpy( this, &rhs, sizeof(BindSparseInfo) );
11687 }
11688
11689 BindSparseInfo& operator=( VkBindSparseInfo const & rhs )
11690 {
11691 memcpy( this, &rhs, sizeof(BindSparseInfo) );
11692 return *this;
11693 }
11694
11695 BindSparseInfo& setSType( StructureType sType_ )
11696 {
11697 sType = sType_;
11698 return *this;
11699 }
11700
11701 BindSparseInfo& setPNext( const void* pNext_ )
11702 {
11703 pNext = pNext_;
11704 return *this;
11705 }
11706
11707 BindSparseInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
11708 {
11709 waitSemaphoreCount = waitSemaphoreCount_;
11710 return *this;
11711 }
11712
11713 BindSparseInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
11714 {
11715 pWaitSemaphores = pWaitSemaphores_;
11716 return *this;
11717 }
11718
11719 BindSparseInfo& setBufferBindCount( uint32_t bufferBindCount_ )
11720 {
11721 bufferBindCount = bufferBindCount_;
11722 return *this;
11723 }
11724
11725 BindSparseInfo& setPBufferBinds( const SparseBufferMemoryBindInfo* pBufferBinds_ )
11726 {
11727 pBufferBinds = pBufferBinds_;
11728 return *this;
11729 }
11730
11731 BindSparseInfo& setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ )
11732 {
11733 imageOpaqueBindCount = imageOpaqueBindCount_;
11734 return *this;
11735 }
11736
11737 BindSparseInfo& setPImageOpaqueBinds( const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds_ )
11738 {
11739 pImageOpaqueBinds = pImageOpaqueBinds_;
11740 return *this;
11741 }
11742
11743 BindSparseInfo& setImageBindCount( uint32_t imageBindCount_ )
11744 {
11745 imageBindCount = imageBindCount_;
11746 return *this;
11747 }
11748
11749 BindSparseInfo& setPImageBinds( const SparseImageMemoryBindInfo* pImageBinds_ )
11750 {
11751 pImageBinds = pImageBinds_;
11752 return *this;
11753 }
11754
11755 BindSparseInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
11756 {
11757 signalSemaphoreCount = signalSemaphoreCount_;
11758 return *this;
11759 }
11760
11761 BindSparseInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
11762 {
11763 pSignalSemaphores = pSignalSemaphores_;
11764 return *this;
11765 }
11766
11767 operator const VkBindSparseInfo&() const
11768 {
11769 return *reinterpret_cast<const VkBindSparseInfo*>(this);
11770 }
11771
11772 bool operator==( BindSparseInfo const& rhs ) const
11773 {
11774 return ( sType == rhs.sType )
11775 && ( pNext == rhs.pNext )
11776 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
11777 && ( pWaitSemaphores == rhs.pWaitSemaphores )
11778 && ( bufferBindCount == rhs.bufferBindCount )
11779 && ( pBufferBinds == rhs.pBufferBinds )
11780 && ( imageOpaqueBindCount == rhs.imageOpaqueBindCount )
11781 && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds )
11782 && ( imageBindCount == rhs.imageBindCount )
11783 && ( pImageBinds == rhs.pImageBinds )
11784 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
11785 && ( pSignalSemaphores == rhs.pSignalSemaphores );
11786 }
11787
11788 bool operator!=( BindSparseInfo const& rhs ) const
11789 {
11790 return !operator==( rhs );
11791 }
11792
11793 private:
11794 StructureType sType;
11795
11796 public:
11797 const void* pNext;
11798 uint32_t waitSemaphoreCount;
11799 const Semaphore* pWaitSemaphores;
11800 uint32_t bufferBindCount;
11801 const SparseBufferMemoryBindInfo* pBufferBinds;
11802 uint32_t imageOpaqueBindCount;
11803 const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
11804 uint32_t imageBindCount;
11805 const SparseImageMemoryBindInfo* pImageBinds;
11806 uint32_t signalSemaphoreCount;
11807 const Semaphore* pSignalSemaphores;
11808 };
11809 static_assert( sizeof( BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" );
11810
11811 enum class PipelineStageFlagBits
11812 {
11813 eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
11814 eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
11815 eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
11816 eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
11817 eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
11818 eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
11819 eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
11820 eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
11821 eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
11822 eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
11823 eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
11824 eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
11825 eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT,
11826 eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
11827 eHost = VK_PIPELINE_STAGE_HOST_BIT,
11828 eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
11829 eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
11830 };
11831
11832 using PipelineStageFlags = Flags<PipelineStageFlagBits, VkPipelineStageFlags>;
11833
11834 inline PipelineStageFlags operator|( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 )
11835 {
11836 return PipelineStageFlags( bit0 ) | bit1;
11837 }
11838
11839 enum class CommandPoolCreateFlagBits
11840 {
11841 eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,
11842 eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
11843 };
11844
11845 using CommandPoolCreateFlags = Flags<CommandPoolCreateFlagBits, VkCommandPoolCreateFlags>;
11846
11847 inline CommandPoolCreateFlags operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 )
11848 {
11849 return CommandPoolCreateFlags( bit0 ) | bit1;
11850 }
11851
11852 struct CommandPoolCreateInfo
11853 {
11854 CommandPoolCreateInfo( CommandPoolCreateFlags flags_ = CommandPoolCreateFlags(), uint32_t queueFamilyIndex_ = 0 )
11855 : sType( StructureType::eCommandPoolCreateInfo )
11856 , pNext( nullptr )
11857 , flags( flags_ )
11858 , queueFamilyIndex( queueFamilyIndex_ )
11859 {
11860 }
11861
11862 CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs )
11863 {
11864 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
11865 }
11866
11867 CommandPoolCreateInfo& operator=( VkCommandPoolCreateInfo const & rhs )
11868 {
11869 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
11870 return *this;
11871 }
11872
11873 CommandPoolCreateInfo& setSType( StructureType sType_ )
11874 {
11875 sType = sType_;
11876 return *this;
11877 }
11878
11879 CommandPoolCreateInfo& setPNext( const void* pNext_ )
11880 {
11881 pNext = pNext_;
11882 return *this;
11883 }
11884
11885 CommandPoolCreateInfo& setFlags( CommandPoolCreateFlags flags_ )
11886 {
11887 flags = flags_;
11888 return *this;
11889 }
11890
11891 CommandPoolCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
11892 {
11893 queueFamilyIndex = queueFamilyIndex_;
11894 return *this;
11895 }
11896
11897 operator const VkCommandPoolCreateInfo&() const
11898 {
11899 return *reinterpret_cast<const VkCommandPoolCreateInfo*>(this);
11900 }
11901
11902 bool operator==( CommandPoolCreateInfo const& rhs ) const
11903 {
11904 return ( sType == rhs.sType )
11905 && ( pNext == rhs.pNext )
11906 && ( flags == rhs.flags )
11907 && ( queueFamilyIndex == rhs.queueFamilyIndex );
11908 }
11909
11910 bool operator!=( CommandPoolCreateInfo const& rhs ) const
11911 {
11912 return !operator==( rhs );
11913 }
11914
11915 private:
11916 StructureType sType;
11917
11918 public:
11919 const void* pNext;
11920 CommandPoolCreateFlags flags;
11921 uint32_t queueFamilyIndex;
11922 };
11923 static_assert( sizeof( CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ), "struct and wrapper have different size!" );
11924
11925 enum class CommandPoolResetFlagBits
11926 {
11927 eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
11928 };
11929
11930 using CommandPoolResetFlags = Flags<CommandPoolResetFlagBits, VkCommandPoolResetFlags>;
11931
11932 inline CommandPoolResetFlags operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 )
11933 {
11934 return CommandPoolResetFlags( bit0 ) | bit1;
11935 }
11936
11937 enum class CommandBufferResetFlagBits
11938 {
11939 eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
11940 };
11941
11942 using CommandBufferResetFlags = Flags<CommandBufferResetFlagBits, VkCommandBufferResetFlags>;
11943
11944 inline CommandBufferResetFlags operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 )
11945 {
11946 return CommandBufferResetFlags( bit0 ) | bit1;
11947 }
11948
11949 enum class SampleCountFlagBits
11950 {
11951 e1 = VK_SAMPLE_COUNT_1_BIT,
11952 e2 = VK_SAMPLE_COUNT_2_BIT,
11953 e4 = VK_SAMPLE_COUNT_4_BIT,
11954 e8 = VK_SAMPLE_COUNT_8_BIT,
11955 e16 = VK_SAMPLE_COUNT_16_BIT,
11956 e32 = VK_SAMPLE_COUNT_32_BIT,
11957 e64 = VK_SAMPLE_COUNT_64_BIT
11958 };
11959
11960 using SampleCountFlags = Flags<SampleCountFlagBits, VkSampleCountFlags>;
11961
11962 inline SampleCountFlags operator|( SampleCountFlagBits bit0, SampleCountFlagBits bit1 )
11963 {
11964 return SampleCountFlags( bit0 ) | bit1;
11965 }
11966
11967 struct ImageFormatProperties
11968 {
11969 operator const VkImageFormatProperties&() const
11970 {
11971 return *reinterpret_cast<const VkImageFormatProperties*>(this);
11972 }
11973
11974 bool operator==( ImageFormatProperties const& rhs ) const
11975 {
11976 return ( maxExtent == rhs.maxExtent )
11977 && ( maxMipLevels == rhs.maxMipLevels )
11978 && ( maxArrayLayers == rhs.maxArrayLayers )
11979 && ( sampleCounts == rhs.sampleCounts )
11980 && ( maxResourceSize == rhs.maxResourceSize );
11981 }
11982
11983 bool operator!=( ImageFormatProperties const& rhs ) const
11984 {
11985 return !operator==( rhs );
11986 }
11987
11988 Extent3D maxExtent;
11989 uint32_t maxMipLevels;
11990 uint32_t maxArrayLayers;
11991 SampleCountFlags sampleCounts;
11992 DeviceSize maxResourceSize;
11993 };
11994 static_assert( sizeof( ImageFormatProperties ) == sizeof( VkImageFormatProperties ), "struct and wrapper have different size!" );
11995
11996 struct ImageCreateInfo
11997 {
11998 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 )
11999 : sType( StructureType::eImageCreateInfo )
12000 , pNext( nullptr )
12001 , flags( flags_ )
12002 , imageType( imageType_ )
12003 , format( format_ )
12004 , extent( extent_ )
12005 , mipLevels( mipLevels_ )
12006 , arrayLayers( arrayLayers_ )
12007 , samples( samples_ )
12008 , tiling( tiling_ )
12009 , usage( usage_ )
12010 , sharingMode( sharingMode_ )
12011 , queueFamilyIndexCount( queueFamilyIndexCount_ )
12012 , pQueueFamilyIndices( pQueueFamilyIndices_ )
12013 , initialLayout( initialLayout_ )
12014 {
12015 }
12016
12017 ImageCreateInfo( VkImageCreateInfo const & rhs )
12018 {
12019 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12020 }
12021
12022 ImageCreateInfo& operator=( VkImageCreateInfo const & rhs )
12023 {
12024 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12025 return *this;
12026 }
12027
12028 ImageCreateInfo& setSType( StructureType sType_ )
12029 {
12030 sType = sType_;
12031 return *this;
12032 }
12033
12034 ImageCreateInfo& setPNext( const void* pNext_ )
12035 {
12036 pNext = pNext_;
12037 return *this;
12038 }
12039
12040 ImageCreateInfo& setFlags( ImageCreateFlags flags_ )
12041 {
12042 flags = flags_;
12043 return *this;
12044 }
12045
12046 ImageCreateInfo& setImageType( ImageType imageType_ )
12047 {
12048 imageType = imageType_;
12049 return *this;
12050 }
12051
12052 ImageCreateInfo& setFormat( Format format_ )
12053 {
12054 format = format_;
12055 return *this;
12056 }
12057
12058 ImageCreateInfo& setExtent( Extent3D extent_ )
12059 {
12060 extent = extent_;
12061 return *this;
12062 }
12063
12064 ImageCreateInfo& setMipLevels( uint32_t mipLevels_ )
12065 {
12066 mipLevels = mipLevels_;
12067 return *this;
12068 }
12069
12070 ImageCreateInfo& setArrayLayers( uint32_t arrayLayers_ )
12071 {
12072 arrayLayers = arrayLayers_;
12073 return *this;
12074 }
12075
12076 ImageCreateInfo& setSamples( SampleCountFlagBits samples_ )
12077 {
12078 samples = samples_;
12079 return *this;
12080 }
12081
12082 ImageCreateInfo& setTiling( ImageTiling tiling_ )
12083 {
12084 tiling = tiling_;
12085 return *this;
12086 }
12087
12088 ImageCreateInfo& setUsage( ImageUsageFlags usage_ )
12089 {
12090 usage = usage_;
12091 return *this;
12092 }
12093
12094 ImageCreateInfo& setSharingMode( SharingMode sharingMode_ )
12095 {
12096 sharingMode = sharingMode_;
12097 return *this;
12098 }
12099
12100 ImageCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
12101 {
12102 queueFamilyIndexCount = queueFamilyIndexCount_;
12103 return *this;
12104 }
12105
12106 ImageCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
12107 {
12108 pQueueFamilyIndices = pQueueFamilyIndices_;
12109 return *this;
12110 }
12111
12112 ImageCreateInfo& setInitialLayout( ImageLayout initialLayout_ )
12113 {
12114 initialLayout = initialLayout_;
12115 return *this;
12116 }
12117
12118 operator const VkImageCreateInfo&() const
12119 {
12120 return *reinterpret_cast<const VkImageCreateInfo*>(this);
12121 }
12122
12123 bool operator==( ImageCreateInfo const& rhs ) const
12124 {
12125 return ( sType == rhs.sType )
12126 && ( pNext == rhs.pNext )
12127 && ( flags == rhs.flags )
12128 && ( imageType == rhs.imageType )
12129 && ( format == rhs.format )
12130 && ( extent == rhs.extent )
12131 && ( mipLevels == rhs.mipLevels )
12132 && ( arrayLayers == rhs.arrayLayers )
12133 && ( samples == rhs.samples )
12134 && ( tiling == rhs.tiling )
12135 && ( usage == rhs.usage )
12136 && ( sharingMode == rhs.sharingMode )
12137 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
12138 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
12139 && ( initialLayout == rhs.initialLayout );
12140 }
12141
12142 bool operator!=( ImageCreateInfo const& rhs ) const
12143 {
12144 return !operator==( rhs );
12145 }
12146
12147 private:
12148 StructureType sType;
12149
12150 public:
12151 const void* pNext;
12152 ImageCreateFlags flags;
12153 ImageType imageType;
12154 Format format;
12155 Extent3D extent;
12156 uint32_t mipLevels;
12157 uint32_t arrayLayers;
12158 SampleCountFlagBits samples;
12159 ImageTiling tiling;
12160 ImageUsageFlags usage;
12161 SharingMode sharingMode;
12162 uint32_t queueFamilyIndexCount;
12163 const uint32_t* pQueueFamilyIndices;
12164 ImageLayout initialLayout;
12165 };
12166 static_assert( sizeof( ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" );
12167
12168 struct PipelineMultisampleStateCreateInfo
12169 {
12170 PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateFlags flags_ = PipelineMultisampleStateCreateFlags(), SampleCountFlagBits rasterizationSamples_ = SampleCountFlagBits::e1, Bool32 sampleShadingEnable_ = 0, float minSampleShading_ = 0, const SampleMask* pSampleMask_ = nullptr, Bool32 alphaToCoverageEnable_ = 0, Bool32 alphaToOneEnable_ = 0 )
12171 : sType( StructureType::ePipelineMultisampleStateCreateInfo )
12172 , pNext( nullptr )
12173 , flags( flags_ )
12174 , rasterizationSamples( rasterizationSamples_ )
12175 , sampleShadingEnable( sampleShadingEnable_ )
12176 , minSampleShading( minSampleShading_ )
12177 , pSampleMask( pSampleMask_ )
12178 , alphaToCoverageEnable( alphaToCoverageEnable_ )
12179 , alphaToOneEnable( alphaToOneEnable_ )
12180 {
12181 }
12182
12183 PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs )
12184 {
12185 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12186 }
12187
12188 PipelineMultisampleStateCreateInfo& operator=( VkPipelineMultisampleStateCreateInfo const & rhs )
12189 {
12190 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12191 return *this;
12192 }
12193
12194 PipelineMultisampleStateCreateInfo& setSType( StructureType sType_ )
12195 {
12196 sType = sType_;
12197 return *this;
12198 }
12199
12200 PipelineMultisampleStateCreateInfo& setPNext( const void* pNext_ )
12201 {
12202 pNext = pNext_;
12203 return *this;
12204 }
12205
12206 PipelineMultisampleStateCreateInfo& setFlags( PipelineMultisampleStateCreateFlags flags_ )
12207 {
12208 flags = flags_;
12209 return *this;
12210 }
12211
12212 PipelineMultisampleStateCreateInfo& setRasterizationSamples( SampleCountFlagBits rasterizationSamples_ )
12213 {
12214 rasterizationSamples = rasterizationSamples_;
12215 return *this;
12216 }
12217
12218 PipelineMultisampleStateCreateInfo& setSampleShadingEnable( Bool32 sampleShadingEnable_ )
12219 {
12220 sampleShadingEnable = sampleShadingEnable_;
12221 return *this;
12222 }
12223
12224 PipelineMultisampleStateCreateInfo& setMinSampleShading( float minSampleShading_ )
12225 {
12226 minSampleShading = minSampleShading_;
12227 return *this;
12228 }
12229
12230 PipelineMultisampleStateCreateInfo& setPSampleMask( const SampleMask* pSampleMask_ )
12231 {
12232 pSampleMask = pSampleMask_;
12233 return *this;
12234 }
12235
12236 PipelineMultisampleStateCreateInfo& setAlphaToCoverageEnable( Bool32 alphaToCoverageEnable_ )
12237 {
12238 alphaToCoverageEnable = alphaToCoverageEnable_;
12239 return *this;
12240 }
12241
12242 PipelineMultisampleStateCreateInfo& setAlphaToOneEnable( Bool32 alphaToOneEnable_ )
12243 {
12244 alphaToOneEnable = alphaToOneEnable_;
12245 return *this;
12246 }
12247
12248 operator const VkPipelineMultisampleStateCreateInfo&() const
12249 {
12250 return *reinterpret_cast<const VkPipelineMultisampleStateCreateInfo*>(this);
12251 }
12252
12253 bool operator==( PipelineMultisampleStateCreateInfo const& rhs ) const
12254 {
12255 return ( sType == rhs.sType )
12256 && ( pNext == rhs.pNext )
12257 && ( flags == rhs.flags )
12258 && ( rasterizationSamples == rhs.rasterizationSamples )
12259 && ( sampleShadingEnable == rhs.sampleShadingEnable )
12260 && ( minSampleShading == rhs.minSampleShading )
12261 && ( pSampleMask == rhs.pSampleMask )
12262 && ( alphaToCoverageEnable == rhs.alphaToCoverageEnable )
12263 && ( alphaToOneEnable == rhs.alphaToOneEnable );
12264 }
12265
12266 bool operator!=( PipelineMultisampleStateCreateInfo const& rhs ) const
12267 {
12268 return !operator==( rhs );
12269 }
12270
12271 private:
12272 StructureType sType;
12273
12274 public:
12275 const void* pNext;
12276 PipelineMultisampleStateCreateFlags flags;
12277 SampleCountFlagBits rasterizationSamples;
12278 Bool32 sampleShadingEnable;
12279 float minSampleShading;
12280 const SampleMask* pSampleMask;
12281 Bool32 alphaToCoverageEnable;
12282 Bool32 alphaToOneEnable;
12283 };
12284 static_assert( sizeof( PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ), "struct and wrapper have different size!" );
12285
12286 struct GraphicsPipelineCreateInfo
12287 {
12288 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 )
12289 : sType( StructureType::eGraphicsPipelineCreateInfo )
12290 , pNext( nullptr )
12291 , flags( flags_ )
12292 , stageCount( stageCount_ )
12293 , pStages( pStages_ )
12294 , pVertexInputState( pVertexInputState_ )
12295 , pInputAssemblyState( pInputAssemblyState_ )
12296 , pTessellationState( pTessellationState_ )
12297 , pViewportState( pViewportState_ )
12298 , pRasterizationState( pRasterizationState_ )
12299 , pMultisampleState( pMultisampleState_ )
12300 , pDepthStencilState( pDepthStencilState_ )
12301 , pColorBlendState( pColorBlendState_ )
12302 , pDynamicState( pDynamicState_ )
12303 , layout( layout_ )
12304 , renderPass( renderPass_ )
12305 , subpass( subpass_ )
12306 , basePipelineHandle( basePipelineHandle_ )
12307 , basePipelineIndex( basePipelineIndex_ )
12308 {
12309 }
12310
12311 GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs )
12312 {
12313 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12314 }
12315
12316 GraphicsPipelineCreateInfo& operator=( VkGraphicsPipelineCreateInfo const & rhs )
12317 {
12318 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12319 return *this;
12320 }
12321
12322 GraphicsPipelineCreateInfo& setSType( StructureType sType_ )
12323 {
12324 sType = sType_;
12325 return *this;
12326 }
12327
12328 GraphicsPipelineCreateInfo& setPNext( const void* pNext_ )
12329 {
12330 pNext = pNext_;
12331 return *this;
12332 }
12333
12334 GraphicsPipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
12335 {
12336 flags = flags_;
12337 return *this;
12338 }
12339
12340 GraphicsPipelineCreateInfo& setStageCount( uint32_t stageCount_ )
12341 {
12342 stageCount = stageCount_;
12343 return *this;
12344 }
12345
12346 GraphicsPipelineCreateInfo& setPStages( const PipelineShaderStageCreateInfo* pStages_ )
12347 {
12348 pStages = pStages_;
12349 return *this;
12350 }
12351
12352 GraphicsPipelineCreateInfo& setPVertexInputState( const PipelineVertexInputStateCreateInfo* pVertexInputState_ )
12353 {
12354 pVertexInputState = pVertexInputState_;
12355 return *this;
12356 }
12357
12358 GraphicsPipelineCreateInfo& setPInputAssemblyState( const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState_ )
12359 {
12360 pInputAssemblyState = pInputAssemblyState_;
12361 return *this;
12362 }
12363
12364 GraphicsPipelineCreateInfo& setPTessellationState( const PipelineTessellationStateCreateInfo* pTessellationState_ )
12365 {
12366 pTessellationState = pTessellationState_;
12367 return *this;
12368 }
12369
12370 GraphicsPipelineCreateInfo& setPViewportState( const PipelineViewportStateCreateInfo* pViewportState_ )
12371 {
12372 pViewportState = pViewportState_;
12373 return *this;
12374 }
12375
12376 GraphicsPipelineCreateInfo& setPRasterizationState( const PipelineRasterizationStateCreateInfo* pRasterizationState_ )
12377 {
12378 pRasterizationState = pRasterizationState_;
12379 return *this;
12380 }
12381
12382 GraphicsPipelineCreateInfo& setPMultisampleState( const PipelineMultisampleStateCreateInfo* pMultisampleState_ )
12383 {
12384 pMultisampleState = pMultisampleState_;
12385 return *this;
12386 }
12387
12388 GraphicsPipelineCreateInfo& setPDepthStencilState( const PipelineDepthStencilStateCreateInfo* pDepthStencilState_ )
12389 {
12390 pDepthStencilState = pDepthStencilState_;
12391 return *this;
12392 }
12393
12394 GraphicsPipelineCreateInfo& setPColorBlendState( const PipelineColorBlendStateCreateInfo* pColorBlendState_ )
12395 {
12396 pColorBlendState = pColorBlendState_;
12397 return *this;
12398 }
12399
12400 GraphicsPipelineCreateInfo& setPDynamicState( const PipelineDynamicStateCreateInfo* pDynamicState_ )
12401 {
12402 pDynamicState = pDynamicState_;
12403 return *this;
12404 }
12405
12406 GraphicsPipelineCreateInfo& setLayout( PipelineLayout layout_ )
12407 {
12408 layout = layout_;
12409 return *this;
12410 }
12411
12412 GraphicsPipelineCreateInfo& setRenderPass( RenderPass renderPass_ )
12413 {
12414 renderPass = renderPass_;
12415 return *this;
12416 }
12417
12418 GraphicsPipelineCreateInfo& setSubpass( uint32_t subpass_ )
12419 {
12420 subpass = subpass_;
12421 return *this;
12422 }
12423
12424 GraphicsPipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
12425 {
12426 basePipelineHandle = basePipelineHandle_;
12427 return *this;
12428 }
12429
12430 GraphicsPipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
12431 {
12432 basePipelineIndex = basePipelineIndex_;
12433 return *this;
12434 }
12435
12436 operator const VkGraphicsPipelineCreateInfo&() const
12437 {
12438 return *reinterpret_cast<const VkGraphicsPipelineCreateInfo*>(this);
12439 }
12440
12441 bool operator==( GraphicsPipelineCreateInfo const& rhs ) const
12442 {
12443 return ( sType == rhs.sType )
12444 && ( pNext == rhs.pNext )
12445 && ( flags == rhs.flags )
12446 && ( stageCount == rhs.stageCount )
12447 && ( pStages == rhs.pStages )
12448 && ( pVertexInputState == rhs.pVertexInputState )
12449 && ( pInputAssemblyState == rhs.pInputAssemblyState )
12450 && ( pTessellationState == rhs.pTessellationState )
12451 && ( pViewportState == rhs.pViewportState )
12452 && ( pRasterizationState == rhs.pRasterizationState )
12453 && ( pMultisampleState == rhs.pMultisampleState )
12454 && ( pDepthStencilState == rhs.pDepthStencilState )
12455 && ( pColorBlendState == rhs.pColorBlendState )
12456 && ( pDynamicState == rhs.pDynamicState )
12457 && ( layout == rhs.layout )
12458 && ( renderPass == rhs.renderPass )
12459 && ( subpass == rhs.subpass )
12460 && ( basePipelineHandle == rhs.basePipelineHandle )
12461 && ( basePipelineIndex == rhs.basePipelineIndex );
12462 }
12463
12464 bool operator!=( GraphicsPipelineCreateInfo const& rhs ) const
12465 {
12466 return !operator==( rhs );
12467 }
12468
12469 private:
12470 StructureType sType;
12471
12472 public:
12473 const void* pNext;
12474 PipelineCreateFlags flags;
12475 uint32_t stageCount;
12476 const PipelineShaderStageCreateInfo* pStages;
12477 const PipelineVertexInputStateCreateInfo* pVertexInputState;
12478 const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
12479 const PipelineTessellationStateCreateInfo* pTessellationState;
12480 const PipelineViewportStateCreateInfo* pViewportState;
12481 const PipelineRasterizationStateCreateInfo* pRasterizationState;
12482 const PipelineMultisampleStateCreateInfo* pMultisampleState;
12483 const PipelineDepthStencilStateCreateInfo* pDepthStencilState;
12484 const PipelineColorBlendStateCreateInfo* pColorBlendState;
12485 const PipelineDynamicStateCreateInfo* pDynamicState;
12486 PipelineLayout layout;
12487 RenderPass renderPass;
12488 uint32_t subpass;
12489 Pipeline basePipelineHandle;
12490 int32_t basePipelineIndex;
12491 };
12492 static_assert( sizeof( GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ), "struct and wrapper have different size!" );
12493
12494 struct PhysicalDeviceLimits
12495 {
12496 operator const VkPhysicalDeviceLimits&() const
12497 {
12498 return *reinterpret_cast<const VkPhysicalDeviceLimits*>(this);
12499 }
12500
12501 bool operator==( PhysicalDeviceLimits const& rhs ) const
12502 {
12503 return ( maxImageDimension1D == rhs.maxImageDimension1D )
12504 && ( maxImageDimension2D == rhs.maxImageDimension2D )
12505 && ( maxImageDimension3D == rhs.maxImageDimension3D )
12506 && ( maxImageDimensionCube == rhs.maxImageDimensionCube )
12507 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
12508 && ( maxTexelBufferElements == rhs.maxTexelBufferElements )
12509 && ( maxUniformBufferRange == rhs.maxUniformBufferRange )
12510 && ( maxStorageBufferRange == rhs.maxStorageBufferRange )
12511 && ( maxPushConstantsSize == rhs.maxPushConstantsSize )
12512 && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount )
12513 && ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount )
12514 && ( bufferImageGranularity == rhs.bufferImageGranularity )
12515 && ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize )
12516 && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets )
12517 && ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers )
12518 && ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers )
12519 && ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers )
12520 && ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages )
12521 && ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages )
12522 && ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments )
12523 && ( maxPerStageResources == rhs.maxPerStageResources )
12524 && ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers )
12525 && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers )
12526 && ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic )
12527 && ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers )
12528 && ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic )
12529 && ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages )
12530 && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages )
12531 && ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments )
12532 && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes )
12533 && ( maxVertexInputBindings == rhs.maxVertexInputBindings )
12534 && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset )
12535 && ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride )
12536 && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents )
12537 && ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel )
12538 && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize )
12539 && ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents )
12540 && ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents )
12541 && ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents )
12542 && ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents )
12543 && ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents )
12544 && ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents )
12545 && ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations )
12546 && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents )
12547 && ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents )
12548 && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices )
12549 && ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents )
12550 && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents )
12551 && ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments )
12552 && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments )
12553 && ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources )
12554 && ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize )
12555 && ( memcmp( maxComputeWorkGroupCount, rhs.maxComputeWorkGroupCount, 3 * sizeof( uint32_t ) ) == 0 )
12556 && ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations )
12557 && ( memcmp( maxComputeWorkGroupSize, rhs.maxComputeWorkGroupSize, 3 * sizeof( uint32_t ) ) == 0 )
12558 && ( subPixelPrecisionBits == rhs.subPixelPrecisionBits )
12559 && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits )
12560 && ( mipmapPrecisionBits == rhs.mipmapPrecisionBits )
12561 && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue )
12562 && ( maxDrawIndirectCount == rhs.maxDrawIndirectCount )
12563 && ( maxSamplerLodBias == rhs.maxSamplerLodBias )
12564 && ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy )
12565 && ( maxViewports == rhs.maxViewports )
12566 && ( memcmp( maxViewportDimensions, rhs.maxViewportDimensions, 2 * sizeof( uint32_t ) ) == 0 )
12567 && ( memcmp( viewportBoundsRange, rhs.viewportBoundsRange, 2 * sizeof( float ) ) == 0 )
12568 && ( viewportSubPixelBits == rhs.viewportSubPixelBits )
12569 && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment )
12570 && ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment )
12571 && ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment )
12572 && ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment )
12573 && ( minTexelOffset == rhs.minTexelOffset )
12574 && ( maxTexelOffset == rhs.maxTexelOffset )
12575 && ( minTexelGatherOffset == rhs.minTexelGatherOffset )
12576 && ( maxTexelGatherOffset == rhs.maxTexelGatherOffset )
12577 && ( minInterpolationOffset == rhs.minInterpolationOffset )
12578 && ( maxInterpolationOffset == rhs.maxInterpolationOffset )
12579 && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits )
12580 && ( maxFramebufferWidth == rhs.maxFramebufferWidth )
12581 && ( maxFramebufferHeight == rhs.maxFramebufferHeight )
12582 && ( maxFramebufferLayers == rhs.maxFramebufferLayers )
12583 && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts )
12584 && ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts )
12585 && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts )
12586 && ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts )
12587 && ( maxColorAttachments == rhs.maxColorAttachments )
12588 && ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts )
12589 && ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts )
12590 && ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts )
12591 && ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts )
12592 && ( storageImageSampleCounts == rhs.storageImageSampleCounts )
12593 && ( maxSampleMaskWords == rhs.maxSampleMaskWords )
12594 && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics )
12595 && ( timestampPeriod == rhs.timestampPeriod )
12596 && ( maxClipDistances == rhs.maxClipDistances )
12597 && ( maxCullDistances == rhs.maxCullDistances )
12598 && ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances )
12599 && ( discreteQueuePriorities == rhs.discreteQueuePriorities )
12600 && ( memcmp( pointSizeRange, rhs.pointSizeRange, 2 * sizeof( float ) ) == 0 )
12601 && ( memcmp( lineWidthRange, rhs.lineWidthRange, 2 * sizeof( float ) ) == 0 )
12602 && ( pointSizeGranularity == rhs.pointSizeGranularity )
12603 && ( lineWidthGranularity == rhs.lineWidthGranularity )
12604 && ( strictLines == rhs.strictLines )
12605 && ( standardSampleLocations == rhs.standardSampleLocations )
12606 && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment )
12607 && ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment )
12608 && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize );
12609 }
12610
12611 bool operator!=( PhysicalDeviceLimits const& rhs ) const
12612 {
12613 return !operator==( rhs );
12614 }
12615
12616 uint32_t maxImageDimension1D;
12617 uint32_t maxImageDimension2D;
12618 uint32_t maxImageDimension3D;
12619 uint32_t maxImageDimensionCube;
12620 uint32_t maxImageArrayLayers;
12621 uint32_t maxTexelBufferElements;
12622 uint32_t maxUniformBufferRange;
12623 uint32_t maxStorageBufferRange;
12624 uint32_t maxPushConstantsSize;
12625 uint32_t maxMemoryAllocationCount;
12626 uint32_t maxSamplerAllocationCount;
12627 DeviceSize bufferImageGranularity;
12628 DeviceSize sparseAddressSpaceSize;
12629 uint32_t maxBoundDescriptorSets;
12630 uint32_t maxPerStageDescriptorSamplers;
12631 uint32_t maxPerStageDescriptorUniformBuffers;
12632 uint32_t maxPerStageDescriptorStorageBuffers;
12633 uint32_t maxPerStageDescriptorSampledImages;
12634 uint32_t maxPerStageDescriptorStorageImages;
12635 uint32_t maxPerStageDescriptorInputAttachments;
12636 uint32_t maxPerStageResources;
12637 uint32_t maxDescriptorSetSamplers;
12638 uint32_t maxDescriptorSetUniformBuffers;
12639 uint32_t maxDescriptorSetUniformBuffersDynamic;
12640 uint32_t maxDescriptorSetStorageBuffers;
12641 uint32_t maxDescriptorSetStorageBuffersDynamic;
12642 uint32_t maxDescriptorSetSampledImages;
12643 uint32_t maxDescriptorSetStorageImages;
12644 uint32_t maxDescriptorSetInputAttachments;
12645 uint32_t maxVertexInputAttributes;
12646 uint32_t maxVertexInputBindings;
12647 uint32_t maxVertexInputAttributeOffset;
12648 uint32_t maxVertexInputBindingStride;
12649 uint32_t maxVertexOutputComponents;
12650 uint32_t maxTessellationGenerationLevel;
12651 uint32_t maxTessellationPatchSize;
12652 uint32_t maxTessellationControlPerVertexInputComponents;
12653 uint32_t maxTessellationControlPerVertexOutputComponents;
12654 uint32_t maxTessellationControlPerPatchOutputComponents;
12655 uint32_t maxTessellationControlTotalOutputComponents;
12656 uint32_t maxTessellationEvaluationInputComponents;
12657 uint32_t maxTessellationEvaluationOutputComponents;
12658 uint32_t maxGeometryShaderInvocations;
12659 uint32_t maxGeometryInputComponents;
12660 uint32_t maxGeometryOutputComponents;
12661 uint32_t maxGeometryOutputVertices;
12662 uint32_t maxGeometryTotalOutputComponents;
12663 uint32_t maxFragmentInputComponents;
12664 uint32_t maxFragmentOutputAttachments;
12665 uint32_t maxFragmentDualSrcAttachments;
12666 uint32_t maxFragmentCombinedOutputResources;
12667 uint32_t maxComputeSharedMemorySize;
12668 uint32_t maxComputeWorkGroupCount[3];
12669 uint32_t maxComputeWorkGroupInvocations;
12670 uint32_t maxComputeWorkGroupSize[3];
12671 uint32_t subPixelPrecisionBits;
12672 uint32_t subTexelPrecisionBits;
12673 uint32_t mipmapPrecisionBits;
12674 uint32_t maxDrawIndexedIndexValue;
12675 uint32_t maxDrawIndirectCount;
12676 float maxSamplerLodBias;
12677 float maxSamplerAnisotropy;
12678 uint32_t maxViewports;
12679 uint32_t maxViewportDimensions[2];
12680 float viewportBoundsRange[2];
12681 uint32_t viewportSubPixelBits;
12682 size_t minMemoryMapAlignment;
12683 DeviceSize minTexelBufferOffsetAlignment;
12684 DeviceSize minUniformBufferOffsetAlignment;
12685 DeviceSize minStorageBufferOffsetAlignment;
12686 int32_t minTexelOffset;
12687 uint32_t maxTexelOffset;
12688 int32_t minTexelGatherOffset;
12689 uint32_t maxTexelGatherOffset;
12690 float minInterpolationOffset;
12691 float maxInterpolationOffset;
12692 uint32_t subPixelInterpolationOffsetBits;
12693 uint32_t maxFramebufferWidth;
12694 uint32_t maxFramebufferHeight;
12695 uint32_t maxFramebufferLayers;
12696 SampleCountFlags framebufferColorSampleCounts;
12697 SampleCountFlags framebufferDepthSampleCounts;
12698 SampleCountFlags framebufferStencilSampleCounts;
12699 SampleCountFlags framebufferNoAttachmentsSampleCounts;
12700 uint32_t maxColorAttachments;
12701 SampleCountFlags sampledImageColorSampleCounts;
12702 SampleCountFlags sampledImageIntegerSampleCounts;
12703 SampleCountFlags sampledImageDepthSampleCounts;
12704 SampleCountFlags sampledImageStencilSampleCounts;
12705 SampleCountFlags storageImageSampleCounts;
12706 uint32_t maxSampleMaskWords;
12707 Bool32 timestampComputeAndGraphics;
12708 float timestampPeriod;
12709 uint32_t maxClipDistances;
12710 uint32_t maxCullDistances;
12711 uint32_t maxCombinedClipAndCullDistances;
12712 uint32_t discreteQueuePriorities;
12713 float pointSizeRange[2];
12714 float lineWidthRange[2];
12715 float pointSizeGranularity;
12716 float lineWidthGranularity;
12717 Bool32 strictLines;
12718 Bool32 standardSampleLocations;
12719 DeviceSize optimalBufferCopyOffsetAlignment;
12720 DeviceSize optimalBufferCopyRowPitchAlignment;
12721 DeviceSize nonCoherentAtomSize;
12722 };
12723 static_assert( sizeof( PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ), "struct and wrapper have different size!" );
12724
12725 struct PhysicalDeviceProperties
12726 {
12727 operator const VkPhysicalDeviceProperties&() const
12728 {
12729 return *reinterpret_cast<const VkPhysicalDeviceProperties*>(this);
12730 }
12731
12732 bool operator==( PhysicalDeviceProperties const& rhs ) const
12733 {
12734 return ( apiVersion == rhs.apiVersion )
12735 && ( driverVersion == rhs.driverVersion )
12736 && ( vendorID == rhs.vendorID )
12737 && ( deviceID == rhs.deviceID )
12738 && ( deviceType == rhs.deviceType )
12739 && ( memcmp( deviceName, rhs.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof( char ) ) == 0 )
12740 && ( memcmp( pipelineCacheUUID, rhs.pipelineCacheUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
12741 && ( limits == rhs.limits )
12742 && ( sparseProperties == rhs.sparseProperties );
12743 }
12744
12745 bool operator!=( PhysicalDeviceProperties const& rhs ) const
12746 {
12747 return !operator==( rhs );
12748 }
12749
12750 uint32_t apiVersion;
12751 uint32_t driverVersion;
12752 uint32_t vendorID;
12753 uint32_t deviceID;
12754 PhysicalDeviceType deviceType;
12755 char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
12756 uint8_t pipelineCacheUUID[VK_UUID_SIZE];
12757 PhysicalDeviceLimits limits;
12758 PhysicalDeviceSparseProperties sparseProperties;
12759 };
12760 static_assert( sizeof( PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ), "struct and wrapper have different size!" );
12761
12762 enum class AttachmentDescriptionFlagBits
12763 {
12764 eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
12765 };
12766
12767 using AttachmentDescriptionFlags = Flags<AttachmentDescriptionFlagBits, VkAttachmentDescriptionFlags>;
12768
12769 inline AttachmentDescriptionFlags operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 )
12770 {
12771 return AttachmentDescriptionFlags( bit0 ) | bit1;
12772 }
12773
12774 struct AttachmentDescription
12775 {
12776 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 )
12777 : flags( flags_ )
12778 , format( format_ )
12779 , samples( samples_ )
12780 , loadOp( loadOp_ )
12781 , storeOp( storeOp_ )
12782 , stencilLoadOp( stencilLoadOp_ )
12783 , stencilStoreOp( stencilStoreOp_ )
12784 , initialLayout( initialLayout_ )
12785 , finalLayout( finalLayout_ )
12786 {
12787 }
12788
12789 AttachmentDescription( VkAttachmentDescription const & rhs )
12790 {
12791 memcpy( this, &rhs, sizeof(AttachmentDescription) );
12792 }
12793
12794 AttachmentDescription& operator=( VkAttachmentDescription const & rhs )
12795 {
12796 memcpy( this, &rhs, sizeof(AttachmentDescription) );
12797 return *this;
12798 }
12799
12800 AttachmentDescription& setFlags( AttachmentDescriptionFlags flags_ )
12801 {
12802 flags = flags_;
12803 return *this;
12804 }
12805
12806 AttachmentDescription& setFormat( Format format_ )
12807 {
12808 format = format_;
12809 return *this;
12810 }
12811
12812 AttachmentDescription& setSamples( SampleCountFlagBits samples_ )
12813 {
12814 samples = samples_;
12815 return *this;
12816 }
12817
12818 AttachmentDescription& setLoadOp( AttachmentLoadOp loadOp_ )
12819 {
12820 loadOp = loadOp_;
12821 return *this;
12822 }
12823
12824 AttachmentDescription& setStoreOp( AttachmentStoreOp storeOp_ )
12825 {
12826 storeOp = storeOp_;
12827 return *this;
12828 }
12829
12830 AttachmentDescription& setStencilLoadOp( AttachmentLoadOp stencilLoadOp_ )
12831 {
12832 stencilLoadOp = stencilLoadOp_;
12833 return *this;
12834 }
12835
12836 AttachmentDescription& setStencilStoreOp( AttachmentStoreOp stencilStoreOp_ )
12837 {
12838 stencilStoreOp = stencilStoreOp_;
12839 return *this;
12840 }
12841
12842 AttachmentDescription& setInitialLayout( ImageLayout initialLayout_ )
12843 {
12844 initialLayout = initialLayout_;
12845 return *this;
12846 }
12847
12848 AttachmentDescription& setFinalLayout( ImageLayout finalLayout_ )
12849 {
12850 finalLayout = finalLayout_;
12851 return *this;
12852 }
12853
12854 operator const VkAttachmentDescription&() const
12855 {
12856 return *reinterpret_cast<const VkAttachmentDescription*>(this);
12857 }
12858
12859 bool operator==( AttachmentDescription const& rhs ) const
12860 {
12861 return ( flags == rhs.flags )
12862 && ( format == rhs.format )
12863 && ( samples == rhs.samples )
12864 && ( loadOp == rhs.loadOp )
12865 && ( storeOp == rhs.storeOp )
12866 && ( stencilLoadOp == rhs.stencilLoadOp )
12867 && ( stencilStoreOp == rhs.stencilStoreOp )
12868 && ( initialLayout == rhs.initialLayout )
12869 && ( finalLayout == rhs.finalLayout );
12870 }
12871
12872 bool operator!=( AttachmentDescription const& rhs ) const
12873 {
12874 return !operator==( rhs );
12875 }
12876
12877 AttachmentDescriptionFlags flags;
12878 Format format;
12879 SampleCountFlagBits samples;
12880 AttachmentLoadOp loadOp;
12881 AttachmentStoreOp storeOp;
12882 AttachmentLoadOp stencilLoadOp;
12883 AttachmentStoreOp stencilStoreOp;
12884 ImageLayout initialLayout;
12885 ImageLayout finalLayout;
12886 };
12887 static_assert( sizeof( AttachmentDescription ) == sizeof( VkAttachmentDescription ), "struct and wrapper have different size!" );
12888
12889 enum class StencilFaceFlagBits
12890 {
12891 eFront = VK_STENCIL_FACE_FRONT_BIT,
12892 eBack = VK_STENCIL_FACE_BACK_BIT,
12893 eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK
12894 };
12895
12896 using StencilFaceFlags = Flags<StencilFaceFlagBits, VkStencilFaceFlags>;
12897
12898 inline StencilFaceFlags operator|( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 )
12899 {
12900 return StencilFaceFlags( bit0 ) | bit1;
12901 }
12902
12903 enum class DescriptorPoolCreateFlagBits
12904 {
12905 eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
12906 };
12907
12908 using DescriptorPoolCreateFlags = Flags<DescriptorPoolCreateFlagBits, VkDescriptorPoolCreateFlags>;
12909
12910 inline DescriptorPoolCreateFlags operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 )
12911 {
12912 return DescriptorPoolCreateFlags( bit0 ) | bit1;
12913 }
12914
12915 struct DescriptorPoolCreateInfo
12916 {
12917 DescriptorPoolCreateInfo( DescriptorPoolCreateFlags flags_ = DescriptorPoolCreateFlags(), uint32_t maxSets_ = 0, uint32_t poolSizeCount_ = 0, const DescriptorPoolSize* pPoolSizes_ = nullptr )
12918 : sType( StructureType::eDescriptorPoolCreateInfo )
12919 , pNext( nullptr )
12920 , flags( flags_ )
12921 , maxSets( maxSets_ )
12922 , poolSizeCount( poolSizeCount_ )
12923 , pPoolSizes( pPoolSizes_ )
12924 {
12925 }
12926
12927 DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs )
12928 {
12929 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
12930 }
12931
12932 DescriptorPoolCreateInfo& operator=( VkDescriptorPoolCreateInfo const & rhs )
12933 {
12934 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
12935 return *this;
12936 }
12937
12938 DescriptorPoolCreateInfo& setSType( StructureType sType_ )
12939 {
12940 sType = sType_;
12941 return *this;
12942 }
12943
12944 DescriptorPoolCreateInfo& setPNext( const void* pNext_ )
12945 {
12946 pNext = pNext_;
12947 return *this;
12948 }
12949
12950 DescriptorPoolCreateInfo& setFlags( DescriptorPoolCreateFlags flags_ )
12951 {
12952 flags = flags_;
12953 return *this;
12954 }
12955
12956 DescriptorPoolCreateInfo& setMaxSets( uint32_t maxSets_ )
12957 {
12958 maxSets = maxSets_;
12959 return *this;
12960 }
12961
12962 DescriptorPoolCreateInfo& setPoolSizeCount( uint32_t poolSizeCount_ )
12963 {
12964 poolSizeCount = poolSizeCount_;
12965 return *this;
12966 }
12967
12968 DescriptorPoolCreateInfo& setPPoolSizes( const DescriptorPoolSize* pPoolSizes_ )
12969 {
12970 pPoolSizes = pPoolSizes_;
12971 return *this;
12972 }
12973
12974 operator const VkDescriptorPoolCreateInfo&() const
12975 {
12976 return *reinterpret_cast<const VkDescriptorPoolCreateInfo*>(this);
12977 }
12978
12979 bool operator==( DescriptorPoolCreateInfo const& rhs ) const
12980 {
12981 return ( sType == rhs.sType )
12982 && ( pNext == rhs.pNext )
12983 && ( flags == rhs.flags )
12984 && ( maxSets == rhs.maxSets )
12985 && ( poolSizeCount == rhs.poolSizeCount )
12986 && ( pPoolSizes == rhs.pPoolSizes );
12987 }
12988
12989 bool operator!=( DescriptorPoolCreateInfo const& rhs ) const
12990 {
12991 return !operator==( rhs );
12992 }
12993
12994 private:
12995 StructureType sType;
12996
12997 public:
12998 const void* pNext;
12999 DescriptorPoolCreateFlags flags;
13000 uint32_t maxSets;
13001 uint32_t poolSizeCount;
13002 const DescriptorPoolSize* pPoolSizes;
13003 };
13004 static_assert( sizeof( DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ), "struct and wrapper have different size!" );
13005
13006 enum class DependencyFlagBits
13007 {
13008 eByRegion = VK_DEPENDENCY_BY_REGION_BIT
13009 };
13010
13011 using DependencyFlags = Flags<DependencyFlagBits, VkDependencyFlags>;
13012
13013 inline DependencyFlags operator|( DependencyFlagBits bit0, DependencyFlagBits bit1 )
13014 {
13015 return DependencyFlags( bit0 ) | bit1;
13016 }
13017
13018 class CommandBuffer
13019 {
13020 public:
13021 CommandBuffer()
13022 : m_commandBuffer(VK_NULL_HANDLE)
13023 {}
13024
13025#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
13026 CommandBuffer(VkCommandBuffer commandBuffer)
13027 : m_commandBuffer(commandBuffer)
13028 {}
13029
13030 CommandBuffer& operator=(VkCommandBuffer commandBuffer)
13031 {
13032 m_commandBuffer = commandBuffer;
13033 return *this;
13034 }
13035#endif
13036
13037 Result begin( const CommandBufferBeginInfo* pBeginInfo ) const
13038 {
13039 return static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( pBeginInfo ) ) );
13040 }
13041
13042#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13043 ResultValueType<void>::type begin( const CommandBufferBeginInfo & beginInfo ) const
13044 {
13045 Result result = static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( &beginInfo ) ) );
13046 return createResultValue( result, "vk::CommandBuffer::begin" );
13047 }
13048#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13049
13050#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13051 Result end( ) const
13052 {
13053 return static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13054 }
13055#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13056
13057#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13058 ResultValueType<void>::type end() const
13059 {
13060 Result result = static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13061 return createResultValue( result, "vk::CommandBuffer::end" );
13062 }
13063#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13064
13065#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13066 Result reset( CommandBufferResetFlags flags ) const
13067 {
13068 return static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13069 }
13070#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13071
13072#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13073 ResultValueType<void>::type reset( CommandBufferResetFlags flags ) const
13074 {
13075 Result result = static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13076 return createResultValue( result, "vk::CommandBuffer::reset" );
13077 }
13078#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13079
13080#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13081 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13082 {
13083 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13084 }
13085#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13086
13087#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13088 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13089 {
13090 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13091 }
13092#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13093
13094 void setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport* pViewports ) const
13095 {
13096 vkCmdSetViewport( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast<const VkViewport*>( pViewports ) );
13097 }
13098
13099#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13100 void setViewport( uint32_t firstViewport, ArrayProxy<const Viewport> viewports ) const
13101 {
13102 vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size() , reinterpret_cast<const VkViewport*>( viewports.data() ) );
13103 }
13104#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13105
13106 void setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D* pScissors ) const
13107 {
13108 vkCmdSetScissor( m_commandBuffer, firstScissor, scissorCount, reinterpret_cast<const VkRect2D*>( pScissors ) );
13109 }
13110
13111#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13112 void setScissor( uint32_t firstScissor, ArrayProxy<const Rect2D> scissors ) const
13113 {
13114 vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size() , reinterpret_cast<const VkRect2D*>( scissors.data() ) );
13115 }
13116#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13117
13118#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13119 void setLineWidth( float lineWidth ) const
13120 {
13121 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13122 }
13123#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13124
13125#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13126 void setLineWidth( float lineWidth ) const
13127 {
13128 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13129 }
13130#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13131
13132#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13133 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13134 {
13135 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13136 }
13137#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13138
13139#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13140 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13141 {
13142 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13143 }
13144#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13145
13146#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13147 void setBlendConstants( const float blendConstants[4] ) const
13148 {
13149 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13150 }
13151#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13152
13153#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13154 void setBlendConstants( const float blendConstants[4] ) const
13155 {
13156 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13157 }
13158#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13159
13160#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13161 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13162 {
13163 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13164 }
13165#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13166
13167#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13168 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13169 {
13170 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13171 }
13172#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13173
13174#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13175 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13176 {
13177 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13178 }
13179#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13180
13181#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13182 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13183 {
13184 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13185 }
13186#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13187
13188#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13189 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13190 {
13191 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13192 }
13193#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13194
13195#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13196 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13197 {
13198 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13199 }
13200#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13201
13202#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13203 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13204 {
13205 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13206 }
13207#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13208
13209#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13210 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13211 {
13212 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13213 }
13214#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13215
13216 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets ) const
13217 {
13218 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ), dynamicOffsetCount, pDynamicOffsets );
13219 }
13220
13221#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13222 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, ArrayProxy<const DescriptorSet> descriptorSets, ArrayProxy<const uint32_t> dynamicOffsets ) const
13223 {
13224 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ), dynamicOffsets.size() , dynamicOffsets.data() );
13225 }
13226#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13227
13228#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13229 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13230 {
13231 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13232 }
13233#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13234
13235#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13236 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13237 {
13238 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13239 }
13240#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13241
13242 void bindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const Buffer* pBuffers, const DeviceSize* pOffsets ) const
13243 {
13244 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, bindingCount, reinterpret_cast<const VkBuffer*>( pBuffers ), pOffsets );
13245 }
13246
13247#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13248 void bindVertexBuffers( uint32_t firstBinding, ArrayProxy<const Buffer> buffers, ArrayProxy<const DeviceSize> offsets ) const
13249 {
13250#ifdef VULKAN_HPP_NO_EXCEPTIONS
13251 assert( buffers.size() == offsets.size() );
13252#else
13253 if ( buffers.size() != offsets.size() )
13254 {
13255 throw std::logic_error( "vk::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" );
13256 }
13257#endif // VULKAN_HPP_NO_EXCEPTIONS
13258 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, buffers.size() , reinterpret_cast<const VkBuffer*>( buffers.data() ), offsets.data() );
13259 }
13260#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13261
13262#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13263 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13264 {
13265 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13266 }
13267#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13268
13269#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13270 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13271 {
13272 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13273 }
13274#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13275
13276#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13277 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13278 {
13279 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13280 }
13281#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13282
13283#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13284 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13285 {
13286 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13287 }
13288#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13289
13290#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13291 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13292 {
13293 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13294 }
13295#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13296
13297#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13298 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13299 {
13300 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13301 }
13302#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13303
13304#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13305 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13306 {
13307 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13308 }
13309#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13310
13311#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13312 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13313 {
13314 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13315 }
13316#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13317
13318#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13319 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13320 {
13321 vkCmdDispatch( m_commandBuffer, x, y, z );
13322 }
13323#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13324
13325#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13326 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13327 {
13328 vkCmdDispatch( m_commandBuffer, x, y, z );
13329 }
13330#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13331
13332#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13333 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13334 {
13335 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13336 }
13337#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13338
13339#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13340 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13341 {
13342 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13343 }
13344#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13345
13346 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy* pRegions ) const
13347 {
13348 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferCopy*>( pRegions ) );
13349 }
13350
13351#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13352 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy<const BufferCopy> regions ) const
13353 {
13354 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferCopy*>( regions.data() ) );
13355 }
13356#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13357
13358 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageCopy* pRegions ) const
13359 {
13360 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 ) );
13361 }
13362
13363#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13364 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageCopy> regions ) const
13365 {
13366 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() ) );
13367 }
13368#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13369
13370 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageBlit* pRegions, Filter filter ) const
13371 {
13372 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 ) );
13373 }
13374
13375#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13376 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageBlit> regions, Filter filter ) const
13377 {
13378 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 ) );
13379 }
13380#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13381
13382 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13383 {
13384 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13385 }
13386
13387#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13388 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const BufferImageCopy> regions ) const
13389 {
13390 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
13391 }
13392#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13393
13394 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13395 {
13396 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13397 }
13398
13399#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13400 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, ArrayProxy<const BufferImageCopy> regions ) const
13401 {
13402 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
13403 }
13404#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13405
13406 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void* pData ) const
13407 {
13408 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, dataSize, pData );
13409 }
13410
13411#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13412 template <typename T>
13413 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy<const T> data ) const
13414 {
13415 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, data.size() * sizeof( T ) , reinterpret_cast<const void*>( data.data() ) );
13416 }
13417#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13418
13419#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13420 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
13421 {
13422 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
13423 }
13424#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13425
13426#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13427 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
13428 {
13429 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
13430 }
13431#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13432
13433 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue* pColor, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
13434 {
13435 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( pColor ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
13436 }
13437
13438#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13439 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ArrayProxy<const ImageSubresourceRange> ranges ) const
13440 {
13441 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( &color ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
13442 }
13443#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13444
13445 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
13446 {
13447 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( pDepthStencil ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
13448 }
13449
13450#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13451 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ArrayProxy<const ImageSubresourceRange> ranges ) const
13452 {
13453 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( &depthStencil ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
13454 }
13455#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13456
13457 void clearAttachments( uint32_t attachmentCount, const ClearAttachment* pAttachments, uint32_t rectCount, const ClearRect* pRects ) const
13458 {
13459 vkCmdClearAttachments( m_commandBuffer, attachmentCount, reinterpret_cast<const VkClearAttachment*>( pAttachments ), rectCount, reinterpret_cast<const VkClearRect*>( pRects ) );
13460 }
13461
13462#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13463 void clearAttachments( ArrayProxy<const ClearAttachment> attachments, ArrayProxy<const ClearRect> rects ) const
13464 {
13465 vkCmdClearAttachments( m_commandBuffer, attachments.size() , reinterpret_cast<const VkClearAttachment*>( attachments.data() ), rects.size() , reinterpret_cast<const VkClearRect*>( rects.data() ) );
13466 }
13467#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13468
13469 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageResolve* pRegions ) const
13470 {
13471 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 ) );
13472 }
13473
13474#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13475 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageResolve> regions ) const
13476 {
13477 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() ) );
13478 }
13479#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13480
13481#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13482 void setEvent( Event event, PipelineStageFlags stageMask ) const
13483 {
13484 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
13485 }
13486#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13487
13488#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13489 void setEvent( Event event, PipelineStageFlags stageMask ) const
13490 {
13491 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
13492 }
13493#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13494
13495#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13496 void resetEvent( Event event, PipelineStageFlags stageMask ) const
13497 {
13498 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
13499 }
13500#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13501
13502#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13503 void resetEvent( Event event, PipelineStageFlags stageMask ) const
13504 {
13505 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
13506 }
13507#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13508
13509 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
13510 {
13511 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 ) );
13512 }
13513
13514#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13515 void waitEvents( ArrayProxy<const Event> events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
13516 {
13517 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() ) );
13518 }
13519#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13520
13521 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
13522 {
13523 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 ) );
13524 }
13525
13526#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13527 void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
13528 {
13529 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() ) );
13530 }
13531#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13532
13533#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13534 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
13535 {
13536 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
13537 }
13538#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13539
13540#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13541 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
13542 {
13543 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
13544 }
13545#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13546
13547#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13548 void endQuery( QueryPool queryPool, uint32_t query ) const
13549 {
13550 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
13551 }
13552#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13553
13554#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13555 void endQuery( QueryPool queryPool, uint32_t query ) const
13556 {
13557 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
13558 }
13559#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13560
13561#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13562 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
13563 {
13564 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
13565 }
13566#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13567
13568#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13569 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
13570 {
13571 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
13572 }
13573#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13574
13575#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13576 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
13577 {
13578 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
13579 }
13580#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13581
13582#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13583 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
13584 {
13585 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
13586 }
13587#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13588
13589#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13590 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
13591 {
13592 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
13593 }
13594#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13595
13596#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13597 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
13598 {
13599 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
13600 }
13601#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13602
13603 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues ) const
13604 {
13605 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, size, pValues );
13606 }
13607
13608#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13609 template <typename T>
13610 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, ArrayProxy<const T> values ) const
13611 {
13612 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, values.size() * sizeof( T ) , reinterpret_cast<const void*>( values.data() ) );
13613 }
13614#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13615
13616 void beginRenderPass( const RenderPassBeginInfo* pRenderPassBegin, SubpassContents contents ) const
13617 {
13618 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( pRenderPassBegin ), static_cast<VkSubpassContents>( contents ) );
13619 }
13620
13621#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13622 void beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents ) const
13623 {
13624 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( &renderPassBegin ), static_cast<VkSubpassContents>( contents ) );
13625 }
13626#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13627
13628#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13629 void nextSubpass( SubpassContents contents ) const
13630 {
13631 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
13632 }
13633#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13634
13635#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13636 void nextSubpass( SubpassContents contents ) const
13637 {
13638 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
13639 }
13640#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13641
13642#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13643 void endRenderPass( ) const
13644 {
13645 vkCmdEndRenderPass( m_commandBuffer );
13646 }
13647#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13648
13649#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13650 void endRenderPass() const
13651 {
13652 vkCmdEndRenderPass( m_commandBuffer );
13653 }
13654#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13655
13656 void executeCommands( uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
13657 {
13658 vkCmdExecuteCommands( m_commandBuffer, commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
13659 }
13660
13661#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13662 void executeCommands( ArrayProxy<const CommandBuffer> commandBuffers ) const
13663 {
13664 vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
13665 }
13666#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13667
13668 void debugMarkerBeginEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
13669 {
13670 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
13671 }
13672
13673#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13674 DebugMarkerMarkerInfoEXT debugMarkerBeginEXT() const
13675 {
13676 DebugMarkerMarkerInfoEXT markerInfo;
13677 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
13678 return markerInfo;
13679 }
13680#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13681
13682#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13683 void debugMarkerEndEXT( ) const
13684 {
13685 vkCmdDebugMarkerEndEXT( m_commandBuffer );
13686 }
13687#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13688
13689#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13690 void debugMarkerEndEXT() const
13691 {
13692 vkCmdDebugMarkerEndEXT( m_commandBuffer );
13693 }
13694#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13695
13696 void debugMarkerInsertEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
13697 {
13698 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
13699 }
13700
13701#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13702 DebugMarkerMarkerInfoEXT debugMarkerInsertEXT() const
13703 {
13704 DebugMarkerMarkerInfoEXT markerInfo;
13705 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
13706 return markerInfo;
13707 }
13708#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13709
13710#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
13711 explicit
13712#endif
13713 operator VkCommandBuffer() const
13714 {
13715 return m_commandBuffer;
13716 }
13717
13718 explicit operator bool() const
13719 {
13720 return m_commandBuffer != VK_NULL_HANDLE;
13721 }
13722
13723 bool operator!() const
13724 {
13725 return m_commandBuffer == VK_NULL_HANDLE;
13726 }
13727
13728 private:
13729 VkCommandBuffer m_commandBuffer;
13730 };
13731 static_assert( sizeof( CommandBuffer ) == sizeof( VkCommandBuffer ), "handle and wrapper have different size!" );
13732
13733 struct SubpassDependency
13734 {
13735 SubpassDependency( uint32_t srcSubpass_ = 0, uint32_t dstSubpass_ = 0, PipelineStageFlags srcStageMask_ = PipelineStageFlags(), PipelineStageFlags dstStageMask_ = PipelineStageFlags(), AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), DependencyFlags dependencyFlags_ = DependencyFlags() )
13736 : srcSubpass( srcSubpass_ )
13737 , dstSubpass( dstSubpass_ )
13738 , srcStageMask( srcStageMask_ )
13739 , dstStageMask( dstStageMask_ )
13740 , srcAccessMask( srcAccessMask_ )
13741 , dstAccessMask( dstAccessMask_ )
13742 , dependencyFlags( dependencyFlags_ )
13743 {
13744 }
13745
13746 SubpassDependency( VkSubpassDependency const & rhs )
13747 {
13748 memcpy( this, &rhs, sizeof(SubpassDependency) );
13749 }
13750
13751 SubpassDependency& operator=( VkSubpassDependency const & rhs )
13752 {
13753 memcpy( this, &rhs, sizeof(SubpassDependency) );
13754 return *this;
13755 }
13756
13757 SubpassDependency& setSrcSubpass( uint32_t srcSubpass_ )
13758 {
13759 srcSubpass = srcSubpass_;
13760 return *this;
13761 }
13762
13763 SubpassDependency& setDstSubpass( uint32_t dstSubpass_ )
13764 {
13765 dstSubpass = dstSubpass_;
13766 return *this;
13767 }
13768
13769 SubpassDependency& setSrcStageMask( PipelineStageFlags srcStageMask_ )
13770 {
13771 srcStageMask = srcStageMask_;
13772 return *this;
13773 }
13774
13775 SubpassDependency& setDstStageMask( PipelineStageFlags dstStageMask_ )
13776 {
13777 dstStageMask = dstStageMask_;
13778 return *this;
13779 }
13780
13781 SubpassDependency& setSrcAccessMask( AccessFlags srcAccessMask_ )
13782 {
13783 srcAccessMask = srcAccessMask_;
13784 return *this;
13785 }
13786
13787 SubpassDependency& setDstAccessMask( AccessFlags dstAccessMask_ )
13788 {
13789 dstAccessMask = dstAccessMask_;
13790 return *this;
13791 }
13792
13793 SubpassDependency& setDependencyFlags( DependencyFlags dependencyFlags_ )
13794 {
13795 dependencyFlags = dependencyFlags_;
13796 return *this;
13797 }
13798
13799 operator const VkSubpassDependency&() const
13800 {
13801 return *reinterpret_cast<const VkSubpassDependency*>(this);
13802 }
13803
13804 bool operator==( SubpassDependency const& rhs ) const
13805 {
13806 return ( srcSubpass == rhs.srcSubpass )
13807 && ( dstSubpass == rhs.dstSubpass )
13808 && ( srcStageMask == rhs.srcStageMask )
13809 && ( dstStageMask == rhs.dstStageMask )
13810 && ( srcAccessMask == rhs.srcAccessMask )
13811 && ( dstAccessMask == rhs.dstAccessMask )
13812 && ( dependencyFlags == rhs.dependencyFlags );
13813 }
13814
13815 bool operator!=( SubpassDependency const& rhs ) const
13816 {
13817 return !operator==( rhs );
13818 }
13819
13820 uint32_t srcSubpass;
13821 uint32_t dstSubpass;
13822 PipelineStageFlags srcStageMask;
13823 PipelineStageFlags dstStageMask;
13824 AccessFlags srcAccessMask;
13825 AccessFlags dstAccessMask;
13826 DependencyFlags dependencyFlags;
13827 };
13828 static_assert( sizeof( SubpassDependency ) == sizeof( VkSubpassDependency ), "struct and wrapper have different size!" );
13829
13830 struct RenderPassCreateInfo
13831 {
13832 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 )
13833 : sType( StructureType::eRenderPassCreateInfo )
13834 , pNext( nullptr )
13835 , flags( flags_ )
13836 , attachmentCount( attachmentCount_ )
13837 , pAttachments( pAttachments_ )
13838 , subpassCount( subpassCount_ )
13839 , pSubpasses( pSubpasses_ )
13840 , dependencyCount( dependencyCount_ )
13841 , pDependencies( pDependencies_ )
13842 {
13843 }
13844
13845 RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs )
13846 {
13847 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
13848 }
13849
13850 RenderPassCreateInfo& operator=( VkRenderPassCreateInfo const & rhs )
13851 {
13852 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
13853 return *this;
13854 }
13855
13856 RenderPassCreateInfo& setSType( StructureType sType_ )
13857 {
13858 sType = sType_;
13859 return *this;
13860 }
13861
13862 RenderPassCreateInfo& setPNext( const void* pNext_ )
13863 {
13864 pNext = pNext_;
13865 return *this;
13866 }
13867
13868 RenderPassCreateInfo& setFlags( RenderPassCreateFlags flags_ )
13869 {
13870 flags = flags_;
13871 return *this;
13872 }
13873
13874 RenderPassCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
13875 {
13876 attachmentCount = attachmentCount_;
13877 return *this;
13878 }
13879
13880 RenderPassCreateInfo& setPAttachments( const AttachmentDescription* pAttachments_ )
13881 {
13882 pAttachments = pAttachments_;
13883 return *this;
13884 }
13885
13886 RenderPassCreateInfo& setSubpassCount( uint32_t subpassCount_ )
13887 {
13888 subpassCount = subpassCount_;
13889 return *this;
13890 }
13891
13892 RenderPassCreateInfo& setPSubpasses( const SubpassDescription* pSubpasses_ )
13893 {
13894 pSubpasses = pSubpasses_;
13895 return *this;
13896 }
13897
13898 RenderPassCreateInfo& setDependencyCount( uint32_t dependencyCount_ )
13899 {
13900 dependencyCount = dependencyCount_;
13901 return *this;
13902 }
13903
13904 RenderPassCreateInfo& setPDependencies( const SubpassDependency* pDependencies_ )
13905 {
13906 pDependencies = pDependencies_;
13907 return *this;
13908 }
13909
13910 operator const VkRenderPassCreateInfo&() const
13911 {
13912 return *reinterpret_cast<const VkRenderPassCreateInfo*>(this);
13913 }
13914
13915 bool operator==( RenderPassCreateInfo const& rhs ) const
13916 {
13917 return ( sType == rhs.sType )
13918 && ( pNext == rhs.pNext )
13919 && ( flags == rhs.flags )
13920 && ( attachmentCount == rhs.attachmentCount )
13921 && ( pAttachments == rhs.pAttachments )
13922 && ( subpassCount == rhs.subpassCount )
13923 && ( pSubpasses == rhs.pSubpasses )
13924 && ( dependencyCount == rhs.dependencyCount )
13925 && ( pDependencies == rhs.pDependencies );
13926 }
13927
13928 bool operator!=( RenderPassCreateInfo const& rhs ) const
13929 {
13930 return !operator==( rhs );
13931 }
13932
13933 private:
13934 StructureType sType;
13935
13936 public:
13937 const void* pNext;
13938 RenderPassCreateFlags flags;
13939 uint32_t attachmentCount;
13940 const AttachmentDescription* pAttachments;
13941 uint32_t subpassCount;
13942 const SubpassDescription* pSubpasses;
13943 uint32_t dependencyCount;
13944 const SubpassDependency* pDependencies;
13945 };
13946 static_assert( sizeof( RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ), "struct and wrapper have different size!" );
13947
13948 struct SubmitInfo
13949 {
13950 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 )
13951 : sType( StructureType::eSubmitInfo )
13952 , pNext( nullptr )
13953 , waitSemaphoreCount( waitSemaphoreCount_ )
13954 , pWaitSemaphores( pWaitSemaphores_ )
13955 , pWaitDstStageMask( pWaitDstStageMask_ )
13956 , commandBufferCount( commandBufferCount_ )
13957 , pCommandBuffers( pCommandBuffers_ )
13958 , signalSemaphoreCount( signalSemaphoreCount_ )
13959 , pSignalSemaphores( pSignalSemaphores_ )
13960 {
13961 }
13962
13963 SubmitInfo( VkSubmitInfo const & rhs )
13964 {
13965 memcpy( this, &rhs, sizeof(SubmitInfo) );
13966 }
13967
13968 SubmitInfo& operator=( VkSubmitInfo const & rhs )
13969 {
13970 memcpy( this, &rhs, sizeof(SubmitInfo) );
13971 return *this;
13972 }
13973
13974 SubmitInfo& setSType( StructureType sType_ )
13975 {
13976 sType = sType_;
13977 return *this;
13978 }
13979
13980 SubmitInfo& setPNext( const void* pNext_ )
13981 {
13982 pNext = pNext_;
13983 return *this;
13984 }
13985
13986 SubmitInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
13987 {
13988 waitSemaphoreCount = waitSemaphoreCount_;
13989 return *this;
13990 }
13991
13992 SubmitInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
13993 {
13994 pWaitSemaphores = pWaitSemaphores_;
13995 return *this;
13996 }
13997
13998 SubmitInfo& setPWaitDstStageMask( const PipelineStageFlags* pWaitDstStageMask_ )
13999 {
14000 pWaitDstStageMask = pWaitDstStageMask_;
14001 return *this;
14002 }
14003
14004 SubmitInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
14005 {
14006 commandBufferCount = commandBufferCount_;
14007 return *this;
14008 }
14009
14010 SubmitInfo& setPCommandBuffers( const CommandBuffer* pCommandBuffers_ )
14011 {
14012 pCommandBuffers = pCommandBuffers_;
14013 return *this;
14014 }
14015
14016 SubmitInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
14017 {
14018 signalSemaphoreCount = signalSemaphoreCount_;
14019 return *this;
14020 }
14021
14022 SubmitInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
14023 {
14024 pSignalSemaphores = pSignalSemaphores_;
14025 return *this;
14026 }
14027
14028 operator const VkSubmitInfo&() const
14029 {
14030 return *reinterpret_cast<const VkSubmitInfo*>(this);
14031 }
14032
14033 bool operator==( SubmitInfo const& rhs ) const
14034 {
14035 return ( sType == rhs.sType )
14036 && ( pNext == rhs.pNext )
14037 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
14038 && ( pWaitSemaphores == rhs.pWaitSemaphores )
14039 && ( pWaitDstStageMask == rhs.pWaitDstStageMask )
14040 && ( commandBufferCount == rhs.commandBufferCount )
14041 && ( pCommandBuffers == rhs.pCommandBuffers )
14042 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
14043 && ( pSignalSemaphores == rhs.pSignalSemaphores );
14044 }
14045
14046 bool operator!=( SubmitInfo const& rhs ) const
14047 {
14048 return !operator==( rhs );
14049 }
14050
14051 private:
14052 StructureType sType;
14053
14054 public:
14055 const void* pNext;
14056 uint32_t waitSemaphoreCount;
14057 const Semaphore* pWaitSemaphores;
14058 const PipelineStageFlags* pWaitDstStageMask;
14059 uint32_t commandBufferCount;
14060 const CommandBuffer* pCommandBuffers;
14061 uint32_t signalSemaphoreCount;
14062 const Semaphore* pSignalSemaphores;
14063 };
14064 static_assert( sizeof( SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" );
14065
14066 class Queue
14067 {
14068 public:
14069 Queue()
14070 : m_queue(VK_NULL_HANDLE)
14071 {}
14072
14073#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14074 Queue(VkQueue queue)
14075 : m_queue(queue)
14076 {}
14077
14078 Queue& operator=(VkQueue queue)
14079 {
14080 m_queue = queue;
14081 return *this;
14082 }
14083#endif
14084
14085 Result submit( uint32_t submitCount, const SubmitInfo* pSubmits, Fence fence ) const
14086 {
14087 return static_cast<Result>( vkQueueSubmit( m_queue, submitCount, reinterpret_cast<const VkSubmitInfo*>( pSubmits ), static_cast<VkFence>( fence ) ) );
14088 }
14089
14090#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14091 ResultValueType<void>::type submit( ArrayProxy<const SubmitInfo> submits, Fence fence ) const
14092 {
14093 Result result = static_cast<Result>( vkQueueSubmit( m_queue, submits.size() , reinterpret_cast<const VkSubmitInfo*>( submits.data() ), static_cast<VkFence>( fence ) ) );
14094 return createResultValue( result, "vk::Queue::submit" );
14095 }
14096#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14097
14098#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14099 Result waitIdle( ) const
14100 {
14101 return static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14102 }
14103#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14104
14105#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14106 ResultValueType<void>::type waitIdle() const
14107 {
14108 Result result = static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14109 return createResultValue( result, "vk::Queue::waitIdle" );
14110 }
14111#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14112
14113 Result bindSparse( uint32_t bindInfoCount, const BindSparseInfo* pBindInfo, Fence fence ) const
14114 {
14115 return static_cast<Result>( vkQueueBindSparse( m_queue, bindInfoCount, reinterpret_cast<const VkBindSparseInfo*>( pBindInfo ), static_cast<VkFence>( fence ) ) );
14116 }
14117
14118#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14119 ResultValueType<void>::type bindSparse( ArrayProxy<const BindSparseInfo> bindInfo, Fence fence ) const
14120 {
14121 Result result = static_cast<Result>( vkQueueBindSparse( m_queue, bindInfo.size() , reinterpret_cast<const VkBindSparseInfo*>( bindInfo.data() ), static_cast<VkFence>( fence ) ) );
14122 return createResultValue( result, "vk::Queue::bindSparse" );
14123 }
14124#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14125
14126 Result presentKHR( const PresentInfoKHR* pPresentInfo ) const
14127 {
14128 return static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( pPresentInfo ) ) );
14129 }
14130
14131#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14132 Result presentKHR( const PresentInfoKHR & presentInfo ) const
14133 {
14134 Result result = static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( &presentInfo ) ) );
14135 return createResultValue( result, "vk::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } );
14136 }
14137#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14138
14139#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14140 explicit
14141#endif
14142 operator VkQueue() const
14143 {
14144 return m_queue;
14145 }
14146
14147 explicit operator bool() const
14148 {
14149 return m_queue != VK_NULL_HANDLE;
14150 }
14151
14152 bool operator!() const
14153 {
14154 return m_queue == VK_NULL_HANDLE;
14155 }
14156
14157 private:
14158 VkQueue m_queue;
14159 };
14160 static_assert( sizeof( Queue ) == sizeof( VkQueue ), "handle and wrapper have different size!" );
14161
14162 enum class PresentModeKHR
14163 {
14164 eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR,
14165 eMailbox = VK_PRESENT_MODE_MAILBOX_KHR,
14166 eFifo = VK_PRESENT_MODE_FIFO_KHR,
14167 eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR
14168 };
14169
14170 enum class ColorSpaceKHR
14171 {
14172 eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
14173 };
14174
14175 struct SurfaceFormatKHR
14176 {
14177 SurfaceFormatKHR( Format format_ = Format::eUndefined, ColorSpaceKHR colorSpace_ = ColorSpaceKHR::eSrgbNonlinear )
14178 : format( format_ )
14179 , colorSpace( colorSpace_ )
14180 {
14181 }
14182
14183 SurfaceFormatKHR( VkSurfaceFormatKHR const & rhs )
14184 {
14185 memcpy( this, &rhs, sizeof(SurfaceFormatKHR) );
14186 }
14187
14188 SurfaceFormatKHR& operator=( VkSurfaceFormatKHR const & rhs )
14189 {
14190 memcpy( this, &rhs, sizeof(SurfaceFormatKHR) );
14191 return *this;
14192 }
14193
14194 SurfaceFormatKHR& setFormat( Format format_ )
14195 {
14196 format = format_;
14197 return *this;
14198 }
14199
14200 SurfaceFormatKHR& setColorSpace( ColorSpaceKHR colorSpace_ )
14201 {
14202 colorSpace = colorSpace_;
14203 return *this;
14204 }
14205
14206 operator const VkSurfaceFormatKHR&() const
14207 {
14208 return *reinterpret_cast<const VkSurfaceFormatKHR*>(this);
14209 }
14210
14211 bool operator==( SurfaceFormatKHR const& rhs ) const
14212 {
14213 return ( format == rhs.format )
14214 && ( colorSpace == rhs.colorSpace );
14215 }
14216
14217 bool operator!=( SurfaceFormatKHR const& rhs ) const
14218 {
14219 return !operator==( rhs );
14220 }
14221
14222 Format format;
14223 ColorSpaceKHR colorSpace;
14224 };
14225 static_assert( sizeof( SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ), "struct and wrapper have different size!" );
14226
14227 enum class DisplayPlaneAlphaFlagBitsKHR
14228 {
14229 eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,
14230 eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,
14231 ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,
14232 ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
14233 };
14234
14235 using DisplayPlaneAlphaFlagsKHR = Flags<DisplayPlaneAlphaFlagBitsKHR, VkDisplayPlaneAlphaFlagsKHR>;
14236
14237 inline DisplayPlaneAlphaFlagsKHR operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 )
14238 {
14239 return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1;
14240 }
14241
14242 struct DisplayPlaneCapabilitiesKHR
14243 {
14244 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() )
14245 : supportedAlpha( supportedAlpha_ )
14246 , minSrcPosition( minSrcPosition_ )
14247 , maxSrcPosition( maxSrcPosition_ )
14248 , minSrcExtent( minSrcExtent_ )
14249 , maxSrcExtent( maxSrcExtent_ )
14250 , minDstPosition( minDstPosition_ )
14251 , maxDstPosition( maxDstPosition_ )
14252 , minDstExtent( minDstExtent_ )
14253 , maxDstExtent( maxDstExtent_ )
14254 {
14255 }
14256
14257 DisplayPlaneCapabilitiesKHR( VkDisplayPlaneCapabilitiesKHR const & rhs )
14258 {
14259 memcpy( this, &rhs, sizeof(DisplayPlaneCapabilitiesKHR) );
14260 }
14261
14262 DisplayPlaneCapabilitiesKHR& operator=( VkDisplayPlaneCapabilitiesKHR const & rhs )
14263 {
14264 memcpy( this, &rhs, sizeof(DisplayPlaneCapabilitiesKHR) );
14265 return *this;
14266 }
14267
14268 DisplayPlaneCapabilitiesKHR& setSupportedAlpha( DisplayPlaneAlphaFlagsKHR supportedAlpha_ )
14269 {
14270 supportedAlpha = supportedAlpha_;
14271 return *this;
14272 }
14273
14274 DisplayPlaneCapabilitiesKHR& setMinSrcPosition( Offset2D minSrcPosition_ )
14275 {
14276 minSrcPosition = minSrcPosition_;
14277 return *this;
14278 }
14279
14280 DisplayPlaneCapabilitiesKHR& setMaxSrcPosition( Offset2D maxSrcPosition_ )
14281 {
14282 maxSrcPosition = maxSrcPosition_;
14283 return *this;
14284 }
14285
14286 DisplayPlaneCapabilitiesKHR& setMinSrcExtent( Extent2D minSrcExtent_ )
14287 {
14288 minSrcExtent = minSrcExtent_;
14289 return *this;
14290 }
14291
14292 DisplayPlaneCapabilitiesKHR& setMaxSrcExtent( Extent2D maxSrcExtent_ )
14293 {
14294 maxSrcExtent = maxSrcExtent_;
14295 return *this;
14296 }
14297
14298 DisplayPlaneCapabilitiesKHR& setMinDstPosition( Offset2D minDstPosition_ )
14299 {
14300 minDstPosition = minDstPosition_;
14301 return *this;
14302 }
14303
14304 DisplayPlaneCapabilitiesKHR& setMaxDstPosition( Offset2D maxDstPosition_ )
14305 {
14306 maxDstPosition = maxDstPosition_;
14307 return *this;
14308 }
14309
14310 DisplayPlaneCapabilitiesKHR& setMinDstExtent( Extent2D minDstExtent_ )
14311 {
14312 minDstExtent = minDstExtent_;
14313 return *this;
14314 }
14315
14316 DisplayPlaneCapabilitiesKHR& setMaxDstExtent( Extent2D maxDstExtent_ )
14317 {
14318 maxDstExtent = maxDstExtent_;
14319 return *this;
14320 }
14321
14322 operator const VkDisplayPlaneCapabilitiesKHR&() const
14323 {
14324 return *reinterpret_cast<const VkDisplayPlaneCapabilitiesKHR*>(this);
14325 }
14326
14327 bool operator==( DisplayPlaneCapabilitiesKHR const& rhs ) const
14328 {
14329 return ( supportedAlpha == rhs.supportedAlpha )
14330 && ( minSrcPosition == rhs.minSrcPosition )
14331 && ( maxSrcPosition == rhs.maxSrcPosition )
14332 && ( minSrcExtent == rhs.minSrcExtent )
14333 && ( maxSrcExtent == rhs.maxSrcExtent )
14334 && ( minDstPosition == rhs.minDstPosition )
14335 && ( maxDstPosition == rhs.maxDstPosition )
14336 && ( minDstExtent == rhs.minDstExtent )
14337 && ( maxDstExtent == rhs.maxDstExtent );
14338 }
14339
14340 bool operator!=( DisplayPlaneCapabilitiesKHR const& rhs ) const
14341 {
14342 return !operator==( rhs );
14343 }
14344
14345 DisplayPlaneAlphaFlagsKHR supportedAlpha;
14346 Offset2D minSrcPosition;
14347 Offset2D maxSrcPosition;
14348 Extent2D minSrcExtent;
14349 Extent2D maxSrcExtent;
14350 Offset2D minDstPosition;
14351 Offset2D maxDstPosition;
14352 Extent2D minDstExtent;
14353 Extent2D maxDstExtent;
14354 };
14355 static_assert( sizeof( DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ), "struct and wrapper have different size!" );
14356
14357 enum class CompositeAlphaFlagBitsKHR
14358 {
14359 eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
14360 ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
14361 ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
14362 eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
14363 };
14364
14365 using CompositeAlphaFlagsKHR = Flags<CompositeAlphaFlagBitsKHR, VkCompositeAlphaFlagsKHR>;
14366
14367 inline CompositeAlphaFlagsKHR operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 )
14368 {
14369 return CompositeAlphaFlagsKHR( bit0 ) | bit1;
14370 }
14371
14372 enum class SurfaceTransformFlagBitsKHR
14373 {
14374 eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
14375 eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
14376 eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,
14377 eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,
14378 eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,
14379 eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,
14380 eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,
14381 eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,
14382 eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
14383 };
14384
14385 using SurfaceTransformFlagsKHR = Flags<SurfaceTransformFlagBitsKHR, VkSurfaceTransformFlagsKHR>;
14386
14387 inline SurfaceTransformFlagsKHR operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 )
14388 {
14389 return SurfaceTransformFlagsKHR( bit0 ) | bit1;
14390 }
14391
14392 struct DisplayPropertiesKHR
14393 {
14394 DisplayPropertiesKHR( DisplayKHR display_ = DisplayKHR(), const char* displayName_ = nullptr, Extent2D physicalDimensions_ = Extent2D(), Extent2D physicalResolution_ = Extent2D(), SurfaceTransformFlagsKHR supportedTransforms_ = SurfaceTransformFlagsKHR(), Bool32 planeReorderPossible_ = 0, Bool32 persistentContent_ = 0 )
14395 : display( display_ )
14396 , displayName( displayName_ )
14397 , physicalDimensions( physicalDimensions_ )
14398 , physicalResolution( physicalResolution_ )
14399 , supportedTransforms( supportedTransforms_ )
14400 , planeReorderPossible( planeReorderPossible_ )
14401 , persistentContent( persistentContent_ )
14402 {
14403 }
14404
14405 DisplayPropertiesKHR( VkDisplayPropertiesKHR const & rhs )
14406 {
14407 memcpy( this, &rhs, sizeof(DisplayPropertiesKHR) );
14408 }
14409
14410 DisplayPropertiesKHR& operator=( VkDisplayPropertiesKHR const & rhs )
14411 {
14412 memcpy( this, &rhs, sizeof(DisplayPropertiesKHR) );
14413 return *this;
14414 }
14415
14416 DisplayPropertiesKHR& setDisplay( DisplayKHR display_ )
14417 {
14418 display = display_;
14419 return *this;
14420 }
14421
14422 DisplayPropertiesKHR& setDisplayName( const char* displayName_ )
14423 {
14424 displayName = displayName_;
14425 return *this;
14426 }
14427
14428 DisplayPropertiesKHR& setPhysicalDimensions( Extent2D physicalDimensions_ )
14429 {
14430 physicalDimensions = physicalDimensions_;
14431 return *this;
14432 }
14433
14434 DisplayPropertiesKHR& setPhysicalResolution( Extent2D physicalResolution_ )
14435 {
14436 physicalResolution = physicalResolution_;
14437 return *this;
14438 }
14439
14440 DisplayPropertiesKHR& setSupportedTransforms( SurfaceTransformFlagsKHR supportedTransforms_ )
14441 {
14442 supportedTransforms = supportedTransforms_;
14443 return *this;
14444 }
14445
14446 DisplayPropertiesKHR& setPlaneReorderPossible( Bool32 planeReorderPossible_ )
14447 {
14448 planeReorderPossible = planeReorderPossible_;
14449 return *this;
14450 }
14451
14452 DisplayPropertiesKHR& setPersistentContent( Bool32 persistentContent_ )
14453 {
14454 persistentContent = persistentContent_;
14455 return *this;
14456 }
14457
14458 operator const VkDisplayPropertiesKHR&() const
14459 {
14460 return *reinterpret_cast<const VkDisplayPropertiesKHR*>(this);
14461 }
14462
14463 bool operator==( DisplayPropertiesKHR const& rhs ) const
14464 {
14465 return ( display == rhs.display )
14466 && ( displayName == rhs.displayName )
14467 && ( physicalDimensions == rhs.physicalDimensions )
14468 && ( physicalResolution == rhs.physicalResolution )
14469 && ( supportedTransforms == rhs.supportedTransforms )
14470 && ( planeReorderPossible == rhs.planeReorderPossible )
14471 && ( persistentContent == rhs.persistentContent );
14472 }
14473
14474 bool operator!=( DisplayPropertiesKHR const& rhs ) const
14475 {
14476 return !operator==( rhs );
14477 }
14478
14479 DisplayKHR display;
14480 const char* displayName;
14481 Extent2D physicalDimensions;
14482 Extent2D physicalResolution;
14483 SurfaceTransformFlagsKHR supportedTransforms;
14484 Bool32 planeReorderPossible;
14485 Bool32 persistentContent;
14486 };
14487 static_assert( sizeof( DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ), "struct and wrapper have different size!" );
14488
14489 struct DisplaySurfaceCreateInfoKHR
14490 {
14491 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() )
14492 : sType( StructureType::eDisplaySurfaceCreateInfoKHR )
14493 , pNext( nullptr )
14494 , flags( flags_ )
14495 , displayMode( displayMode_ )
14496 , planeIndex( planeIndex_ )
14497 , planeStackIndex( planeStackIndex_ )
14498 , transform( transform_ )
14499 , globalAlpha( globalAlpha_ )
14500 , alphaMode( alphaMode_ )
14501 , imageExtent( imageExtent_ )
14502 {
14503 }
14504
14505 DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs )
14506 {
14507 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
14508 }
14509
14510 DisplaySurfaceCreateInfoKHR& operator=( VkDisplaySurfaceCreateInfoKHR const & rhs )
14511 {
14512 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
14513 return *this;
14514 }
14515
14516 DisplaySurfaceCreateInfoKHR& setSType( StructureType sType_ )
14517 {
14518 sType = sType_;
14519 return *this;
14520 }
14521
14522 DisplaySurfaceCreateInfoKHR& setPNext( const void* pNext_ )
14523 {
14524 pNext = pNext_;
14525 return *this;
14526 }
14527
14528 DisplaySurfaceCreateInfoKHR& setFlags( DisplaySurfaceCreateFlagsKHR flags_ )
14529 {
14530 flags = flags_;
14531 return *this;
14532 }
14533
14534 DisplaySurfaceCreateInfoKHR& setDisplayMode( DisplayModeKHR displayMode_ )
14535 {
14536 displayMode = displayMode_;
14537 return *this;
14538 }
14539
14540 DisplaySurfaceCreateInfoKHR& setPlaneIndex( uint32_t planeIndex_ )
14541 {
14542 planeIndex = planeIndex_;
14543 return *this;
14544 }
14545
14546 DisplaySurfaceCreateInfoKHR& setPlaneStackIndex( uint32_t planeStackIndex_ )
14547 {
14548 planeStackIndex = planeStackIndex_;
14549 return *this;
14550 }
14551
14552 DisplaySurfaceCreateInfoKHR& setTransform( SurfaceTransformFlagBitsKHR transform_ )
14553 {
14554 transform = transform_;
14555 return *this;
14556 }
14557
14558 DisplaySurfaceCreateInfoKHR& setGlobalAlpha( float globalAlpha_ )
14559 {
14560 globalAlpha = globalAlpha_;
14561 return *this;
14562 }
14563
14564 DisplaySurfaceCreateInfoKHR& setAlphaMode( DisplayPlaneAlphaFlagBitsKHR alphaMode_ )
14565 {
14566 alphaMode = alphaMode_;
14567 return *this;
14568 }
14569
14570 DisplaySurfaceCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
14571 {
14572 imageExtent = imageExtent_;
14573 return *this;
14574 }
14575
14576 operator const VkDisplaySurfaceCreateInfoKHR&() const
14577 {
14578 return *reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>(this);
14579 }
14580
14581 bool operator==( DisplaySurfaceCreateInfoKHR const& rhs ) const
14582 {
14583 return ( sType == rhs.sType )
14584 && ( pNext == rhs.pNext )
14585 && ( flags == rhs.flags )
14586 && ( displayMode == rhs.displayMode )
14587 && ( planeIndex == rhs.planeIndex )
14588 && ( planeStackIndex == rhs.planeStackIndex )
14589 && ( transform == rhs.transform )
14590 && ( globalAlpha == rhs.globalAlpha )
14591 && ( alphaMode == rhs.alphaMode )
14592 && ( imageExtent == rhs.imageExtent );
14593 }
14594
14595 bool operator!=( DisplaySurfaceCreateInfoKHR const& rhs ) const
14596 {
14597 return !operator==( rhs );
14598 }
14599
14600 private:
14601 StructureType sType;
14602
14603 public:
14604 const void* pNext;
14605 DisplaySurfaceCreateFlagsKHR flags;
14606 DisplayModeKHR displayMode;
14607 uint32_t planeIndex;
14608 uint32_t planeStackIndex;
14609 SurfaceTransformFlagBitsKHR transform;
14610 float globalAlpha;
14611 DisplayPlaneAlphaFlagBitsKHR alphaMode;
14612 Extent2D imageExtent;
14613 };
14614 static_assert( sizeof( DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
14615
14616 struct SurfaceCapabilitiesKHR
14617 {
14618 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() )
14619 : minImageCount( minImageCount_ )
14620 , maxImageCount( maxImageCount_ )
14621 , currentExtent( currentExtent_ )
14622 , minImageExtent( minImageExtent_ )
14623 , maxImageExtent( maxImageExtent_ )
14624 , maxImageArrayLayers( maxImageArrayLayers_ )
14625 , supportedTransforms( supportedTransforms_ )
14626 , currentTransform( currentTransform_ )
14627 , supportedCompositeAlpha( supportedCompositeAlpha_ )
14628 , supportedUsageFlags( supportedUsageFlags_ )
14629 {
14630 }
14631
14632 SurfaceCapabilitiesKHR( VkSurfaceCapabilitiesKHR const & rhs )
14633 {
14634 memcpy( this, &rhs, sizeof(SurfaceCapabilitiesKHR) );
14635 }
14636
14637 SurfaceCapabilitiesKHR& operator=( VkSurfaceCapabilitiesKHR const & rhs )
14638 {
14639 memcpy( this, &rhs, sizeof(SurfaceCapabilitiesKHR) );
14640 return *this;
14641 }
14642
14643 SurfaceCapabilitiesKHR& setMinImageCount( uint32_t minImageCount_ )
14644 {
14645 minImageCount = minImageCount_;
14646 return *this;
14647 }
14648
14649 SurfaceCapabilitiesKHR& setMaxImageCount( uint32_t maxImageCount_ )
14650 {
14651 maxImageCount = maxImageCount_;
14652 return *this;
14653 }
14654
14655 SurfaceCapabilitiesKHR& setCurrentExtent( Extent2D currentExtent_ )
14656 {
14657 currentExtent = currentExtent_;
14658 return *this;
14659 }
14660
14661 SurfaceCapabilitiesKHR& setMinImageExtent( Extent2D minImageExtent_ )
14662 {
14663 minImageExtent = minImageExtent_;
14664 return *this;
14665 }
14666
14667 SurfaceCapabilitiesKHR& setMaxImageExtent( Extent2D maxImageExtent_ )
14668 {
14669 maxImageExtent = maxImageExtent_;
14670 return *this;
14671 }
14672
14673 SurfaceCapabilitiesKHR& setMaxImageArrayLayers( uint32_t maxImageArrayLayers_ )
14674 {
14675 maxImageArrayLayers = maxImageArrayLayers_;
14676 return *this;
14677 }
14678
14679 SurfaceCapabilitiesKHR& setSupportedTransforms( SurfaceTransformFlagsKHR supportedTransforms_ )
14680 {
14681 supportedTransforms = supportedTransforms_;
14682 return *this;
14683 }
14684
14685 SurfaceCapabilitiesKHR& setCurrentTransform( SurfaceTransformFlagBitsKHR currentTransform_ )
14686 {
14687 currentTransform = currentTransform_;
14688 return *this;
14689 }
14690
14691 SurfaceCapabilitiesKHR& setSupportedCompositeAlpha( CompositeAlphaFlagsKHR supportedCompositeAlpha_ )
14692 {
14693 supportedCompositeAlpha = supportedCompositeAlpha_;
14694 return *this;
14695 }
14696
14697 SurfaceCapabilitiesKHR& setSupportedUsageFlags( ImageUsageFlags supportedUsageFlags_ )
14698 {
14699 supportedUsageFlags = supportedUsageFlags_;
14700 return *this;
14701 }
14702
14703 operator const VkSurfaceCapabilitiesKHR&() const
14704 {
14705 return *reinterpret_cast<const VkSurfaceCapabilitiesKHR*>(this);
14706 }
14707
14708 bool operator==( SurfaceCapabilitiesKHR const& rhs ) const
14709 {
14710 return ( minImageCount == rhs.minImageCount )
14711 && ( maxImageCount == rhs.maxImageCount )
14712 && ( currentExtent == rhs.currentExtent )
14713 && ( minImageExtent == rhs.minImageExtent )
14714 && ( maxImageExtent == rhs.maxImageExtent )
14715 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
14716 && ( supportedTransforms == rhs.supportedTransforms )
14717 && ( currentTransform == rhs.currentTransform )
14718 && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha )
14719 && ( supportedUsageFlags == rhs.supportedUsageFlags );
14720 }
14721
14722 bool operator!=( SurfaceCapabilitiesKHR const& rhs ) const
14723 {
14724 return !operator==( rhs );
14725 }
14726
14727 uint32_t minImageCount;
14728 uint32_t maxImageCount;
14729 Extent2D currentExtent;
14730 Extent2D minImageExtent;
14731 Extent2D maxImageExtent;
14732 uint32_t maxImageArrayLayers;
14733 SurfaceTransformFlagsKHR supportedTransforms;
14734 SurfaceTransformFlagBitsKHR currentTransform;
14735 CompositeAlphaFlagsKHR supportedCompositeAlpha;
14736 ImageUsageFlags supportedUsageFlags;
14737 };
14738 static_assert( sizeof( SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ), "struct and wrapper have different size!" );
14739
14740 struct SwapchainCreateInfoKHR
14741 {
14742 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() )
14743 : sType( StructureType::eSwapchainCreateInfoKHR )
14744 , pNext( nullptr )
14745 , flags( flags_ )
14746 , surface( surface_ )
14747 , minImageCount( minImageCount_ )
14748 , imageFormat( imageFormat_ )
14749 , imageColorSpace( imageColorSpace_ )
14750 , imageExtent( imageExtent_ )
14751 , imageArrayLayers( imageArrayLayers_ )
14752 , imageUsage( imageUsage_ )
14753 , imageSharingMode( imageSharingMode_ )
14754 , queueFamilyIndexCount( queueFamilyIndexCount_ )
14755 , pQueueFamilyIndices( pQueueFamilyIndices_ )
14756 , preTransform( preTransform_ )
14757 , compositeAlpha( compositeAlpha_ )
14758 , presentMode( presentMode_ )
14759 , clipped( clipped_ )
14760 , oldSwapchain( oldSwapchain_ )
14761 {
14762 }
14763
14764 SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs )
14765 {
14766 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
14767 }
14768
14769 SwapchainCreateInfoKHR& operator=( VkSwapchainCreateInfoKHR const & rhs )
14770 {
14771 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
14772 return *this;
14773 }
14774
14775 SwapchainCreateInfoKHR& setSType( StructureType sType_ )
14776 {
14777 sType = sType_;
14778 return *this;
14779 }
14780
14781 SwapchainCreateInfoKHR& setPNext( const void* pNext_ )
14782 {
14783 pNext = pNext_;
14784 return *this;
14785 }
14786
14787 SwapchainCreateInfoKHR& setFlags( SwapchainCreateFlagsKHR flags_ )
14788 {
14789 flags = flags_;
14790 return *this;
14791 }
14792
14793 SwapchainCreateInfoKHR& setSurface( SurfaceKHR surface_ )
14794 {
14795 surface = surface_;
14796 return *this;
14797 }
14798
14799 SwapchainCreateInfoKHR& setMinImageCount( uint32_t minImageCount_ )
14800 {
14801 minImageCount = minImageCount_;
14802 return *this;
14803 }
14804
14805 SwapchainCreateInfoKHR& setImageFormat( Format imageFormat_ )
14806 {
14807 imageFormat = imageFormat_;
14808 return *this;
14809 }
14810
14811 SwapchainCreateInfoKHR& setImageColorSpace( ColorSpaceKHR imageColorSpace_ )
14812 {
14813 imageColorSpace = imageColorSpace_;
14814 return *this;
14815 }
14816
14817 SwapchainCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
14818 {
14819 imageExtent = imageExtent_;
14820 return *this;
14821 }
14822
14823 SwapchainCreateInfoKHR& setImageArrayLayers( uint32_t imageArrayLayers_ )
14824 {
14825 imageArrayLayers = imageArrayLayers_;
14826 return *this;
14827 }
14828
14829 SwapchainCreateInfoKHR& setImageUsage( ImageUsageFlags imageUsage_ )
14830 {
14831 imageUsage = imageUsage_;
14832 return *this;
14833 }
14834
14835 SwapchainCreateInfoKHR& setImageSharingMode( SharingMode imageSharingMode_ )
14836 {
14837 imageSharingMode = imageSharingMode_;
14838 return *this;
14839 }
14840
14841 SwapchainCreateInfoKHR& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
14842 {
14843 queueFamilyIndexCount = queueFamilyIndexCount_;
14844 return *this;
14845 }
14846
14847 SwapchainCreateInfoKHR& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
14848 {
14849 pQueueFamilyIndices = pQueueFamilyIndices_;
14850 return *this;
14851 }
14852
14853 SwapchainCreateInfoKHR& setPreTransform( SurfaceTransformFlagBitsKHR preTransform_ )
14854 {
14855 preTransform = preTransform_;
14856 return *this;
14857 }
14858
14859 SwapchainCreateInfoKHR& setCompositeAlpha( CompositeAlphaFlagBitsKHR compositeAlpha_ )
14860 {
14861 compositeAlpha = compositeAlpha_;
14862 return *this;
14863 }
14864
14865 SwapchainCreateInfoKHR& setPresentMode( PresentModeKHR presentMode_ )
14866 {
14867 presentMode = presentMode_;
14868 return *this;
14869 }
14870
14871 SwapchainCreateInfoKHR& setClipped( Bool32 clipped_ )
14872 {
14873 clipped = clipped_;
14874 return *this;
14875 }
14876
14877 SwapchainCreateInfoKHR& setOldSwapchain( SwapchainKHR oldSwapchain_ )
14878 {
14879 oldSwapchain = oldSwapchain_;
14880 return *this;
14881 }
14882
14883 operator const VkSwapchainCreateInfoKHR&() const
14884 {
14885 return *reinterpret_cast<const VkSwapchainCreateInfoKHR*>(this);
14886 }
14887
14888 bool operator==( SwapchainCreateInfoKHR const& rhs ) const
14889 {
14890 return ( sType == rhs.sType )
14891 && ( pNext == rhs.pNext )
14892 && ( flags == rhs.flags )
14893 && ( surface == rhs.surface )
14894 && ( minImageCount == rhs.minImageCount )
14895 && ( imageFormat == rhs.imageFormat )
14896 && ( imageColorSpace == rhs.imageColorSpace )
14897 && ( imageExtent == rhs.imageExtent )
14898 && ( imageArrayLayers == rhs.imageArrayLayers )
14899 && ( imageUsage == rhs.imageUsage )
14900 && ( imageSharingMode == rhs.imageSharingMode )
14901 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
14902 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
14903 && ( preTransform == rhs.preTransform )
14904 && ( compositeAlpha == rhs.compositeAlpha )
14905 && ( presentMode == rhs.presentMode )
14906 && ( clipped == rhs.clipped )
14907 && ( oldSwapchain == rhs.oldSwapchain );
14908 }
14909
14910 bool operator!=( SwapchainCreateInfoKHR const& rhs ) const
14911 {
14912 return !operator==( rhs );
14913 }
14914
14915 private:
14916 StructureType sType;
14917
14918 public:
14919 const void* pNext;
14920 SwapchainCreateFlagsKHR flags;
14921 SurfaceKHR surface;
14922 uint32_t minImageCount;
14923 Format imageFormat;
14924 ColorSpaceKHR imageColorSpace;
14925 Extent2D imageExtent;
14926 uint32_t imageArrayLayers;
14927 ImageUsageFlags imageUsage;
14928 SharingMode imageSharingMode;
14929 uint32_t queueFamilyIndexCount;
14930 const uint32_t* pQueueFamilyIndices;
14931 SurfaceTransformFlagBitsKHR preTransform;
14932 CompositeAlphaFlagBitsKHR compositeAlpha;
14933 PresentModeKHR presentMode;
14934 Bool32 clipped;
14935 SwapchainKHR oldSwapchain;
14936 };
14937 static_assert( sizeof( SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ), "struct and wrapper have different size!" );
14938
14939 enum class DebugReportFlagBitsEXT
14940 {
14941 eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT,
14942 eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT,
14943 ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
14944 eError = VK_DEBUG_REPORT_ERROR_BIT_EXT,
14945 eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT
14946 };
14947
14948 using DebugReportFlagsEXT = Flags<DebugReportFlagBitsEXT, VkDebugReportFlagsEXT>;
14949
14950 inline DebugReportFlagsEXT operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 )
14951 {
14952 return DebugReportFlagsEXT( bit0 ) | bit1;
14953 }
14954
14955 struct DebugReportCallbackCreateInfoEXT
14956 {
14957 DebugReportCallbackCreateInfoEXT( DebugReportFlagsEXT flags_ = DebugReportFlagsEXT(), PFN_vkDebugReportCallbackEXT pfnCallback_ = nullptr, void* pUserData_ = nullptr )
14958 : sType( StructureType::eDebugReportCallbackCreateInfoEXT )
14959 , pNext( nullptr )
14960 , flags( flags_ )
14961 , pfnCallback( pfnCallback_ )
14962 , pUserData( pUserData_ )
14963 {
14964 }
14965
14966 DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs )
14967 {
14968 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
14969 }
14970
14971 DebugReportCallbackCreateInfoEXT& operator=( VkDebugReportCallbackCreateInfoEXT const & rhs )
14972 {
14973 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
14974 return *this;
14975 }
14976
14977 DebugReportCallbackCreateInfoEXT& setSType( StructureType sType_ )
14978 {
14979 sType = sType_;
14980 return *this;
14981 }
14982
14983 DebugReportCallbackCreateInfoEXT& setPNext( const void* pNext_ )
14984 {
14985 pNext = pNext_;
14986 return *this;
14987 }
14988
14989 DebugReportCallbackCreateInfoEXT& setFlags( DebugReportFlagsEXT flags_ )
14990 {
14991 flags = flags_;
14992 return *this;
14993 }
14994
14995 DebugReportCallbackCreateInfoEXT& setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ )
14996 {
14997 pfnCallback = pfnCallback_;
14998 return *this;
14999 }
15000
15001 DebugReportCallbackCreateInfoEXT& setPUserData( void* pUserData_ )
15002 {
15003 pUserData = pUserData_;
15004 return *this;
15005 }
15006
15007 operator const VkDebugReportCallbackCreateInfoEXT&() const
15008 {
15009 return *reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(this);
15010 }
15011
15012 bool operator==( DebugReportCallbackCreateInfoEXT const& rhs ) const
15013 {
15014 return ( sType == rhs.sType )
15015 && ( pNext == rhs.pNext )
15016 && ( flags == rhs.flags )
15017 && ( pfnCallback == rhs.pfnCallback )
15018 && ( pUserData == rhs.pUserData );
15019 }
15020
15021 bool operator!=( DebugReportCallbackCreateInfoEXT const& rhs ) const
15022 {
15023 return !operator==( rhs );
15024 }
15025
15026 private:
15027 StructureType sType;
15028
15029 public:
15030 const void* pNext;
15031 DebugReportFlagsEXT flags;
15032 PFN_vkDebugReportCallbackEXT pfnCallback;
15033 void* pUserData;
15034 };
15035 static_assert( sizeof( DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ), "struct and wrapper have different size!" );
15036
15037 enum class DebugReportObjectTypeEXT
15038 {
15039 eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
15040 eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
15041 ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
15042 eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
15043 eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
15044 eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
15045 eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
15046 eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
15047 eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
15048 eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
15049 eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
15050 eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
15051 eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
15052 eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
15053 eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
15054 eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
15055 ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
15056 ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
15057 eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
15058 ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
15059 eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
15060 eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
15061 eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
15062 eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
15063 eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
15064 eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
15065 eSurfaceKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
15066 eSwapchainKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
15067 eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT
15068 };
15069
15070 struct DebugMarkerObjectNameInfoEXT
15071 {
15072 DebugMarkerObjectNameInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, const char* pObjectName_ = nullptr )
15073 : sType( StructureType::eDebugMarkerObjectNameInfoEXT )
15074 , pNext( nullptr )
15075 , objectType( objectType_ )
15076 , object( object_ )
15077 , pObjectName( pObjectName_ )
15078 {
15079 }
15080
15081 DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs )
15082 {
15083 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15084 }
15085
15086 DebugMarkerObjectNameInfoEXT& operator=( VkDebugMarkerObjectNameInfoEXT const & rhs )
15087 {
15088 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15089 return *this;
15090 }
15091
15092 DebugMarkerObjectNameInfoEXT& setSType( StructureType sType_ )
15093 {
15094 sType = sType_;
15095 return *this;
15096 }
15097
15098 DebugMarkerObjectNameInfoEXT& setPNext( const void* pNext_ )
15099 {
15100 pNext = pNext_;
15101 return *this;
15102 }
15103
15104 DebugMarkerObjectNameInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15105 {
15106 objectType = objectType_;
15107 return *this;
15108 }
15109
15110 DebugMarkerObjectNameInfoEXT& setObject( uint64_t object_ )
15111 {
15112 object = object_;
15113 return *this;
15114 }
15115
15116 DebugMarkerObjectNameInfoEXT& setPObjectName( const char* pObjectName_ )
15117 {
15118 pObjectName = pObjectName_;
15119 return *this;
15120 }
15121
15122 operator const VkDebugMarkerObjectNameInfoEXT&() const
15123 {
15124 return *reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>(this);
15125 }
15126
15127 bool operator==( DebugMarkerObjectNameInfoEXT const& rhs ) const
15128 {
15129 return ( sType == rhs.sType )
15130 && ( pNext == rhs.pNext )
15131 && ( objectType == rhs.objectType )
15132 && ( object == rhs.object )
15133 && ( pObjectName == rhs.pObjectName );
15134 }
15135
15136 bool operator!=( DebugMarkerObjectNameInfoEXT const& rhs ) const
15137 {
15138 return !operator==( rhs );
15139 }
15140
15141 private:
15142 StructureType sType;
15143
15144 public:
15145 const void* pNext;
15146 DebugReportObjectTypeEXT objectType;
15147 uint64_t object;
15148 const char* pObjectName;
15149 };
15150 static_assert( sizeof( DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ), "struct and wrapper have different size!" );
15151
15152 struct DebugMarkerObjectTagInfoEXT
15153 {
15154 DebugMarkerObjectTagInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, uint64_t tagName_ = 0, size_t tagSize_ = 0, const void* pTag_ = nullptr )
15155 : sType( StructureType::eDebugMarkerObjectTagInfoEXT )
15156 , pNext( nullptr )
15157 , objectType( objectType_ )
15158 , object( object_ )
15159 , tagName( tagName_ )
15160 , tagSize( tagSize_ )
15161 , pTag( pTag_ )
15162 {
15163 }
15164
15165 DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs )
15166 {
15167 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15168 }
15169
15170 DebugMarkerObjectTagInfoEXT& operator=( VkDebugMarkerObjectTagInfoEXT const & rhs )
15171 {
15172 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15173 return *this;
15174 }
15175
15176 DebugMarkerObjectTagInfoEXT& setSType( StructureType sType_ )
15177 {
15178 sType = sType_;
15179 return *this;
15180 }
15181
15182 DebugMarkerObjectTagInfoEXT& setPNext( const void* pNext_ )
15183 {
15184 pNext = pNext_;
15185 return *this;
15186 }
15187
15188 DebugMarkerObjectTagInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15189 {
15190 objectType = objectType_;
15191 return *this;
15192 }
15193
15194 DebugMarkerObjectTagInfoEXT& setObject( uint64_t object_ )
15195 {
15196 object = object_;
15197 return *this;
15198 }
15199
15200 DebugMarkerObjectTagInfoEXT& setTagName( uint64_t tagName_ )
15201 {
15202 tagName = tagName_;
15203 return *this;
15204 }
15205
15206 DebugMarkerObjectTagInfoEXT& setTagSize( size_t tagSize_ )
15207 {
15208 tagSize = tagSize_;
15209 return *this;
15210 }
15211
15212 DebugMarkerObjectTagInfoEXT& setPTag( const void* pTag_ )
15213 {
15214 pTag = pTag_;
15215 return *this;
15216 }
15217
15218 operator const VkDebugMarkerObjectTagInfoEXT&() const
15219 {
15220 return *reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>(this);
15221 }
15222
15223 bool operator==( DebugMarkerObjectTagInfoEXT const& rhs ) const
15224 {
15225 return ( sType == rhs.sType )
15226 && ( pNext == rhs.pNext )
15227 && ( objectType == rhs.objectType )
15228 && ( object == rhs.object )
15229 && ( tagName == rhs.tagName )
15230 && ( tagSize == rhs.tagSize )
15231 && ( pTag == rhs.pTag );
15232 }
15233
15234 bool operator!=( DebugMarkerObjectTagInfoEXT const& rhs ) const
15235 {
15236 return !operator==( rhs );
15237 }
15238
15239 private:
15240 StructureType sType;
15241
15242 public:
15243 const void* pNext;
15244 DebugReportObjectTypeEXT objectType;
15245 uint64_t object;
15246 uint64_t tagName;
15247 size_t tagSize;
15248 const void* pTag;
15249 };
15250 static_assert( sizeof( DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ), "struct and wrapper have different size!" );
15251
15252 class Device
15253 {
15254 public:
15255 Device()
15256 : m_device(VK_NULL_HANDLE)
15257 {}
15258
15259#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
15260 Device(VkDevice device)
15261 : m_device(device)
15262 {}
15263
15264 Device& operator=(VkDevice device)
15265 {
15266 m_device = device;
15267 return *this;
15268 }
15269#endif
15270
15271 PFN_vkVoidFunction getProcAddr( const char* pName ) const
15272 {
15273 return vkGetDeviceProcAddr( m_device, pName );
15274 }
15275
15276#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15277 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
15278 {
15279 return vkGetDeviceProcAddr( m_device, name.c_str() );
15280 }
15281#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15282
15283 void destroy( const AllocationCallbacks* pAllocator ) const
15284 {
15285 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15286 }
15287
15288#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15289 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
15290 {
15291 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15292 }
15293#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15294
15295 void getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue* pQueue ) const
15296 {
15297 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( pQueue ) );
15298 }
15299
15300#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15301 Queue getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const
15302 {
15303 Queue queue;
15304 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( &queue ) );
15305 return queue;
15306 }
15307#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15308
15309#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15310 Result waitIdle( ) const
15311 {
15312 return static_cast<Result>( vkDeviceWaitIdle( m_device ) );
15313 }
15314#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15315
15316#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15317 ResultValueType<void>::type waitIdle() const
15318 {
15319 Result result = static_cast<Result>( vkDeviceWaitIdle( m_device ) );
15320 return createResultValue( result, "vk::Device::waitIdle" );
15321 }
15322#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15323
15324 Result allocateMemory( const MemoryAllocateInfo* pAllocateInfo, const AllocationCallbacks* pAllocator, DeviceMemory* pMemory ) const
15325 {
15326 return static_cast<Result>( vkAllocateMemory( m_device, reinterpret_cast<const VkMemoryAllocateInfo*>( pAllocateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDeviceMemory*>( pMemory ) ) );
15327 }
15328
15329#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15330 ResultValueType<DeviceMemory>::type allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15331 {
15332 DeviceMemory memory;
15333 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 ) ) );
15334 return createResultValue( result, memory, "vk::Device::allocateMemory" );
15335 }
15336#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15337
15338 void freeMemory( DeviceMemory memory, const AllocationCallbacks* pAllocator ) const
15339 {
15340 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15341 }
15342
15343#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15344 void freeMemory( DeviceMemory memory, Optional<const AllocationCallbacks> allocator = nullptr ) const
15345 {
15346 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15347 }
15348#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15349
15350#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15351 Result mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void** ppData ) const
15352 {
15353 return static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), ppData ) );
15354 }
15355#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15356
15357#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15358 ResultValueType<void*>::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags = MemoryMapFlags() ) const
15359 {
15360 void* pData;
15361 Result result = static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), &pData ) );
15362 return createResultValue( result, pData, "vk::Device::mapMemory" );
15363 }
15364#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15365
15366#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15367 void unmapMemory( DeviceMemory memory ) const
15368 {
15369 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
15370 }
15371#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15372
15373#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15374 void unmapMemory( DeviceMemory memory ) const
15375 {
15376 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
15377 }
15378#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15379
15380 Result flushMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
15381 {
15382 return static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
15383 }
15384
15385#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15386 ResultValueType<void>::type flushMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
15387 {
15388 Result result = static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
15389 return createResultValue( result, "vk::Device::flushMappedMemoryRanges" );
15390 }
15391#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15392
15393 Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
15394 {
15395 return static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
15396 }
15397
15398#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15399 ResultValueType<void>::type invalidateMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
15400 {
15401 Result result = static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
15402 return createResultValue( result, "vk::Device::invalidateMappedMemoryRanges" );
15403 }
15404#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15405
15406 void getMemoryCommitment( DeviceMemory memory, DeviceSize* pCommittedMemoryInBytes ) const
15407 {
15408 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), pCommittedMemoryInBytes );
15409 }
15410
15411#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15412 DeviceSize getMemoryCommitment( DeviceMemory memory ) const
15413 {
15414 DeviceSize committedMemoryInBytes;
15415 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), &committedMemoryInBytes );
15416 return committedMemoryInBytes;
15417 }
15418#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15419
15420 void getBufferMemoryRequirements( Buffer buffer, MemoryRequirements* pMemoryRequirements ) const
15421 {
15422 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
15423 }
15424
15425#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15426 MemoryRequirements getBufferMemoryRequirements( Buffer buffer ) const
15427 {
15428 MemoryRequirements memoryRequirements;
15429 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
15430 return memoryRequirements;
15431 }
15432#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15433
15434#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15435 Result bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
15436 {
15437 return static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15438 }
15439#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15440
15441#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15442 ResultValueType<void>::type bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
15443 {
15444 Result result = static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15445 return createResultValue( result, "vk::Device::bindBufferMemory" );
15446 }
15447#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15448
15449 void getImageMemoryRequirements( Image image, MemoryRequirements* pMemoryRequirements ) const
15450 {
15451 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
15452 }
15453
15454#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15455 MemoryRequirements getImageMemoryRequirements( Image image ) const
15456 {
15457 MemoryRequirements memoryRequirements;
15458 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
15459 return memoryRequirements;
15460 }
15461#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15462
15463#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15464 Result bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
15465 {
15466 return static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15467 }
15468#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15469
15470#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15471 ResultValueType<void>::type bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
15472 {
15473 Result result = static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15474 return createResultValue( result, "vk::Device::bindImageMemory" );
15475 }
15476#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15477
15478 void getImageSparseMemoryRequirements( Image image, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements* pSparseMemoryRequirements ) const
15479 {
15480 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), pSparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( pSparseMemoryRequirements ) );
15481 }
15482
15483#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15484 template <typename Allocator = std::allocator<SparseImageMemoryRequirements>>
15485 std::vector<SparseImageMemoryRequirements,Allocator> getImageSparseMemoryRequirements( Image image ) const
15486 {
15487 std::vector<SparseImageMemoryRequirements,Allocator> sparseMemoryRequirements;
15488 uint32_t sparseMemoryRequirementCount;
15489 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, nullptr );
15490 sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
15491 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( sparseMemoryRequirements.data() ) );
15492 return sparseMemoryRequirements;
15493 }
15494#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15495
15496 Result createFence( const FenceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
15497 {
15498 return static_cast<Result>( vkCreateFence( m_device, reinterpret_cast<const VkFenceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
15499 }
15500
15501#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15502 ResultValueType<Fence>::type createFence( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15503 {
15504 Fence fence;
15505 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 ) ) );
15506 return createResultValue( result, fence, "vk::Device::createFence" );
15507 }
15508#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15509
15510 void destroyFence( Fence fence, const AllocationCallbacks* pAllocator ) const
15511 {
15512 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15513 }
15514
15515#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15516 void destroyFence( Fence fence, Optional<const AllocationCallbacks> allocator = nullptr ) const
15517 {
15518 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15519 }
15520#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15521
15522 Result resetFences( uint32_t fenceCount, const Fence* pFences ) const
15523 {
15524 return static_cast<Result>( vkResetFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ) ) );
15525 }
15526
15527#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15528 ResultValueType<void>::type resetFences( ArrayProxy<const Fence> fences ) const
15529 {
15530 Result result = static_cast<Result>( vkResetFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ) ) );
15531 return createResultValue( result, "vk::Device::resetFences" );
15532 }
15533#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15534
15535#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15536 Result getFenceStatus( Fence fence ) const
15537 {
15538 return static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
15539 }
15540#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15541
15542#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15543 Result getFenceStatus( Fence fence ) const
15544 {
15545 Result result = static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
15546 return createResultValue( result, "vk::Device::getFenceStatus", { Result::eSuccess, Result::eNotReady } );
15547 }
15548#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15549
15550 Result waitForFences( uint32_t fenceCount, const Fence* pFences, Bool32 waitAll, uint64_t timeout ) const
15551 {
15552 return static_cast<Result>( vkWaitForFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ), waitAll, timeout ) );
15553 }
15554
15555#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15556 Result waitForFences( ArrayProxy<const Fence> fences, Bool32 waitAll, uint64_t timeout ) const
15557 {
15558 Result result = static_cast<Result>( vkWaitForFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ), waitAll, timeout ) );
15559 return createResultValue( result, "vk::Device::waitForFences", { Result::eSuccess, Result::eTimeout } );
15560 }
15561#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15562
15563 Result createSemaphore( const SemaphoreCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Semaphore* pSemaphore ) const
15564 {
15565 return static_cast<Result>( vkCreateSemaphore( m_device, reinterpret_cast<const VkSemaphoreCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSemaphore*>( pSemaphore ) ) );
15566 }
15567
15568#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15569 ResultValueType<Semaphore>::type createSemaphore( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15570 {
15571 Semaphore semaphore;
15572 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 ) ) );
15573 return createResultValue( result, semaphore, "vk::Device::createSemaphore" );
15574 }
15575#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15576
15577 void destroySemaphore( Semaphore semaphore, const AllocationCallbacks* pAllocator ) const
15578 {
15579 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15580 }
15581
15582#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15583 void destroySemaphore( Semaphore semaphore, Optional<const AllocationCallbacks> allocator = nullptr ) const
15584 {
15585 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15586 }
15587#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15588
15589 Result createEvent( const EventCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Event* pEvent ) const
15590 {
15591 return static_cast<Result>( vkCreateEvent( m_device, reinterpret_cast<const VkEventCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkEvent*>( pEvent ) ) );
15592 }
15593
15594#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15595 ResultValueType<Event>::type createEvent( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15596 {
15597 Event event;
15598 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 ) ) );
15599 return createResultValue( result, event, "vk::Device::createEvent" );
15600 }
15601#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15602
15603 void destroyEvent( Event event, const AllocationCallbacks* pAllocator ) const
15604 {
15605 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15606 }
15607
15608#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15609 void destroyEvent( Event event, Optional<const AllocationCallbacks> allocator = nullptr ) const
15610 {
15611 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15612 }
15613#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15614
15615#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15616 Result getEventStatus( Event event ) const
15617 {
15618 return static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
15619 }
15620#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15621
15622#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15623 Result getEventStatus( Event event ) const
15624 {
15625 Result result = static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
15626 return createResultValue( result, "vk::Device::getEventStatus", { Result::eEventSet, Result::eEventReset } );
15627 }
15628#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15629
15630#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15631 Result setEvent( Event event ) const
15632 {
15633 return static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
15634 }
15635#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15636
15637#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15638 ResultValueType<void>::type setEvent( Event event ) const
15639 {
15640 Result result = static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
15641 return createResultValue( result, "vk::Device::setEvent" );
15642 }
15643#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15644
15645#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15646 Result resetEvent( Event event ) const
15647 {
15648 return static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
15649 }
15650#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15651
15652#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15653 ResultValueType<void>::type resetEvent( Event event ) const
15654 {
15655 Result result = static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
15656 return createResultValue( result, "vk::Device::resetEvent" );
15657 }
15658#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15659
15660 Result createQueryPool( const QueryPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, QueryPool* pQueryPool ) const
15661 {
15662 return static_cast<Result>( vkCreateQueryPool( m_device, reinterpret_cast<const VkQueryPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkQueryPool*>( pQueryPool ) ) );
15663 }
15664
15665#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15666 ResultValueType<QueryPool>::type createQueryPool( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15667 {
15668 QueryPool queryPool;
15669 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 ) ) );
15670 return createResultValue( result, queryPool, "vk::Device::createQueryPool" );
15671 }
15672#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15673
15674 void destroyQueryPool( QueryPool queryPool, const AllocationCallbacks* pAllocator ) const
15675 {
15676 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15677 }
15678
15679#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15680 void destroyQueryPool( QueryPool queryPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
15681 {
15682 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15683 }
15684#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15685
15686 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, DeviceSize stride, QueryResultFlags flags ) const
15687 {
15688 return static_cast<Result>( vkGetQueryPoolResults( m_device, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, dataSize, pData, stride, static_cast<VkQueryResultFlags>( flags ) ) );
15689 }
15690
15691#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15692 template <typename T>
15693 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, ArrayProxy<T> data, DeviceSize stride, QueryResultFlags flags ) const
15694 {
15695 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 ) ) );
15696 return createResultValue( result, "vk::Device::getQueryPoolResults", { Result::eSuccess, Result::eNotReady } );
15697 }
15698#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15699
15700 Result createBuffer( const BufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Buffer* pBuffer ) const
15701 {
15702 return static_cast<Result>( vkCreateBuffer( m_device, reinterpret_cast<const VkBufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBuffer*>( pBuffer ) ) );
15703 }
15704
15705#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15706 ResultValueType<Buffer>::type createBuffer( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15707 {
15708 Buffer buffer;
15709 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 ) ) );
15710 return createResultValue( result, buffer, "vk::Device::createBuffer" );
15711 }
15712#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15713
15714 void destroyBuffer( Buffer buffer, const AllocationCallbacks* pAllocator ) const
15715 {
15716 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15717 }
15718
15719#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15720 void destroyBuffer( Buffer buffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
15721 {
15722 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15723 }
15724#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15725
15726 Result createBufferView( const BufferViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, BufferView* pView ) const
15727 {
15728 return static_cast<Result>( vkCreateBufferView( m_device, reinterpret_cast<const VkBufferViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBufferView*>( pView ) ) );
15729 }
15730
15731#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15732 ResultValueType<BufferView>::type createBufferView( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15733 {
15734 BufferView view;
15735 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 ) ) );
15736 return createResultValue( result, view, "vk::Device::createBufferView" );
15737 }
15738#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15739
15740 void destroyBufferView( BufferView bufferView, const AllocationCallbacks* pAllocator ) const
15741 {
15742 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15743 }
15744
15745#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15746 void destroyBufferView( BufferView bufferView, Optional<const AllocationCallbacks> allocator = nullptr ) const
15747 {
15748 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15749 }
15750#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15751
15752 Result createImage( const ImageCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Image* pImage ) const
15753 {
15754 return static_cast<Result>( vkCreateImage( m_device, reinterpret_cast<const VkImageCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImage*>( pImage ) ) );
15755 }
15756
15757#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15758 ResultValueType<Image>::type createImage( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15759 {
15760 Image image;
15761 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 ) ) );
15762 return createResultValue( result, image, "vk::Device::createImage" );
15763 }
15764#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15765
15766 void destroyImage( Image image, const AllocationCallbacks* pAllocator ) const
15767 {
15768 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15769 }
15770
15771#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15772 void destroyImage( Image image, Optional<const AllocationCallbacks> allocator = nullptr ) const
15773 {
15774 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15775 }
15776#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15777
15778 void getImageSubresourceLayout( Image image, const ImageSubresource* pSubresource, SubresourceLayout* pLayout ) const
15779 {
15780 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( pSubresource ), reinterpret_cast<VkSubresourceLayout*>( pLayout ) );
15781 }
15782
15783#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15784 SubresourceLayout getImageSubresourceLayout( Image image, const ImageSubresource & subresource ) const
15785 {
15786 SubresourceLayout layout;
15787 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( &subresource ), reinterpret_cast<VkSubresourceLayout*>( &layout ) );
15788 return layout;
15789 }
15790#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15791
15792 Result createImageView( const ImageViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ImageView* pView ) const
15793 {
15794 return static_cast<Result>( vkCreateImageView( m_device, reinterpret_cast<const VkImageViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImageView*>( pView ) ) );
15795 }
15796
15797#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15798 ResultValueType<ImageView>::type createImageView( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15799 {
15800 ImageView view;
15801 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 ) ) );
15802 return createResultValue( result, view, "vk::Device::createImageView" );
15803 }
15804#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15805
15806 void destroyImageView( ImageView imageView, const AllocationCallbacks* pAllocator ) const
15807 {
15808 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15809 }
15810
15811#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15812 void destroyImageView( ImageView imageView, Optional<const AllocationCallbacks> allocator = nullptr ) const
15813 {
15814 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15815 }
15816#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15817
15818 Result createShaderModule( const ShaderModuleCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ShaderModule* pShaderModule ) const
15819 {
15820 return static_cast<Result>( vkCreateShaderModule( m_device, reinterpret_cast<const VkShaderModuleCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkShaderModule*>( pShaderModule ) ) );
15821 }
15822
15823#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15824 ResultValueType<ShaderModule>::type createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15825 {
15826 ShaderModule shaderModule;
15827 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 ) ) );
15828 return createResultValue( result, shaderModule, "vk::Device::createShaderModule" );
15829 }
15830#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15831
15832 void destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks* pAllocator ) const
15833 {
15834 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15835 }
15836
15837#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15838 void destroyShaderModule( ShaderModule shaderModule, Optional<const AllocationCallbacks> allocator = nullptr ) const
15839 {
15840 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15841 }
15842#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15843
15844 Result createPipelineCache( const PipelineCacheCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineCache* pPipelineCache ) const
15845 {
15846 return static_cast<Result>( vkCreatePipelineCache( m_device, reinterpret_cast<const VkPipelineCacheCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineCache*>( pPipelineCache ) ) );
15847 }
15848
15849#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15850 ResultValueType<PipelineCache>::type createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15851 {
15852 PipelineCache pipelineCache;
15853 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 ) ) );
15854 return createResultValue( result, pipelineCache, "vk::Device::createPipelineCache" );
15855 }
15856#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15857
15858 void destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks* pAllocator ) const
15859 {
15860 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15861 }
15862
15863#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15864 void destroyPipelineCache( PipelineCache pipelineCache, Optional<const AllocationCallbacks> allocator = nullptr ) const
15865 {
15866 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15867 }
15868#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15869
15870 Result getPipelineCacheData( PipelineCache pipelineCache, size_t* pDataSize, void* pData ) const
15871 {
15872 return static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), pDataSize, pData ) );
15873 }
15874
15875#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15876 template <typename Allocator = std::allocator<uint8_t>>
15877 typename ResultValueType<std::vector<uint8_t,Allocator>>::type getPipelineCacheData( PipelineCache pipelineCache ) const
15878 {
15879 std::vector<uint8_t,Allocator> data;
15880 size_t dataSize;
15881 Result result;
15882 do
15883 {
15884 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, nullptr ) );
15885 if ( ( result == Result::eSuccess ) && dataSize )
15886 {
15887 data.resize( dataSize );
15888 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, reinterpret_cast<void*>( data.data() ) ) );
15889 }
15890 } while ( result == Result::eIncomplete );
15891 assert( dataSize <= data.size() );
15892 data.resize( dataSize );
15893 return createResultValue( result, data, "vk::Device::getPipelineCacheData" );
15894 }
15895#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15896
15897 Result mergePipelineCaches( PipelineCache dstCache, uint32_t srcCacheCount, const PipelineCache* pSrcCaches ) const
15898 {
15899 return static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCacheCount, reinterpret_cast<const VkPipelineCache*>( pSrcCaches ) ) );
15900 }
15901
15902#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15903 ResultValueType<void>::type mergePipelineCaches( PipelineCache dstCache, ArrayProxy<const PipelineCache> srcCaches ) const
15904 {
15905 Result result = static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCaches.size() , reinterpret_cast<const VkPipelineCache*>( srcCaches.data() ) ) );
15906 return createResultValue( result, "vk::Device::mergePipelineCaches" );
15907 }
15908#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15909
15910 Result createGraphicsPipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const GraphicsPipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
15911 {
15912 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 ) ) );
15913 }
15914
15915#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15916 template <typename Allocator = std::allocator<Pipeline>>
15917 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createGraphicsPipelines( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
15918 {
15919 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
15920 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() ) ) );
15921 return createResultValue( result, pipelines, "vk::Device::createGraphicsPipelines" );
15922 }
15923
15924 ResultValueType<Pipeline>::type createGraphicsPipeline( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15925 {
15926 Pipeline pipeline;
15927 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 ) ) );
15928 return createResultValue( result, pipeline, "vk::Device::createGraphicsPipeline" );
15929 }
15930#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15931
15932 Result createComputePipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const ComputePipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
15933 {
15934 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 ) ) );
15935 }
15936
15937#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15938 template <typename Allocator = std::allocator<Pipeline>>
15939 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createComputePipelines( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
15940 {
15941 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
15942 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() ) ) );
15943 return createResultValue( result, pipelines, "vk::Device::createComputePipelines" );
15944 }
15945
15946 ResultValueType<Pipeline>::type createComputePipeline( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15947 {
15948 Pipeline pipeline;
15949 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 ) ) );
15950 return createResultValue( result, pipeline, "vk::Device::createComputePipeline" );
15951 }
15952#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15953
15954 void destroyPipeline( Pipeline pipeline, const AllocationCallbacks* pAllocator ) const
15955 {
15956 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15957 }
15958
15959#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15960 void destroyPipeline( Pipeline pipeline, Optional<const AllocationCallbacks> allocator = nullptr ) const
15961 {
15962 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15963 }
15964#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15965
15966 Result createPipelineLayout( const PipelineLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineLayout* pPipelineLayout ) const
15967 {
15968 return static_cast<Result>( vkCreatePipelineLayout( m_device, reinterpret_cast<const VkPipelineLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineLayout*>( pPipelineLayout ) ) );
15969 }
15970
15971#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15972 ResultValueType<PipelineLayout>::type createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15973 {
15974 PipelineLayout pipelineLayout;
15975 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 ) ) );
15976 return createResultValue( result, pipelineLayout, "vk::Device::createPipelineLayout" );
15977 }
15978#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15979
15980 void destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks* pAllocator ) const
15981 {
15982 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15983 }
15984
15985#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15986 void destroyPipelineLayout( PipelineLayout pipelineLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
15987 {
15988 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15989 }
15990#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15991
15992 Result createSampler( const SamplerCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Sampler* pSampler ) const
15993 {
15994 return static_cast<Result>( vkCreateSampler( m_device, reinterpret_cast<const VkSamplerCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSampler*>( pSampler ) ) );
15995 }
15996
15997#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15998 ResultValueType<Sampler>::type createSampler( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15999 {
16000 Sampler sampler;
16001 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 ) ) );
16002 return createResultValue( result, sampler, "vk::Device::createSampler" );
16003 }
16004#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16005
16006 void destroySampler( Sampler sampler, const AllocationCallbacks* pAllocator ) const
16007 {
16008 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16009 }
16010
16011#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16012 void destroySampler( Sampler sampler, Optional<const AllocationCallbacks> allocator = nullptr ) const
16013 {
16014 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16015 }
16016#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16017
16018 Result createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorSetLayout* pSetLayout ) const
16019 {
16020 return static_cast<Result>( vkCreateDescriptorSetLayout( m_device, reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorSetLayout*>( pSetLayout ) ) );
16021 }
16022
16023#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16024 ResultValueType<DescriptorSetLayout>::type createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16025 {
16026 DescriptorSetLayout setLayout;
16027 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 ) ) );
16028 return createResultValue( result, setLayout, "vk::Device::createDescriptorSetLayout" );
16029 }
16030#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16031
16032 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks* pAllocator ) const
16033 {
16034 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16035 }
16036
16037#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16038 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16039 {
16040 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16041 }
16042#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16043
16044 Result createDescriptorPool( const DescriptorPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorPool* pDescriptorPool ) const
16045 {
16046 return static_cast<Result>( vkCreateDescriptorPool( m_device, reinterpret_cast<const VkDescriptorPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorPool*>( pDescriptorPool ) ) );
16047 }
16048
16049#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16050 ResultValueType<DescriptorPool>::type createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16051 {
16052 DescriptorPool descriptorPool;
16053 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 ) ) );
16054 return createResultValue( result, descriptorPool, "vk::Device::createDescriptorPool" );
16055 }
16056#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16057
16058 void destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks* pAllocator ) const
16059 {
16060 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16061 }
16062
16063#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16064 void destroyDescriptorPool( DescriptorPool descriptorPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16065 {
16066 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16067 }
16068#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16069
16070#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16071 Result resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const
16072 {
16073 return static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16074 }
16075#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16076
16077#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16078 ResultValueType<void>::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags = DescriptorPoolResetFlags() ) const
16079 {
16080 Result result = static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16081 return createResultValue( result, "vk::Device::resetDescriptorPool" );
16082 }
16083#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16084
16085 Result allocateDescriptorSets( const DescriptorSetAllocateInfo* pAllocateInfo, DescriptorSet* pDescriptorSets ) const
16086 {
16087 return static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkDescriptorSet*>( pDescriptorSets ) ) );
16088 }
16089
16090#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16091 template <typename Allocator = std::allocator<DescriptorSet>>
16092 typename ResultValueType<std::vector<DescriptorSet,Allocator>>::type allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo ) const
16093 {
16094 std::vector<DescriptorSet,Allocator> descriptorSets( allocateInfo.descriptorSetCount );
16095 Result result = static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkDescriptorSet*>( descriptorSets.data() ) ) );
16096 return createResultValue( result, descriptorSets, "vk::Device::allocateDescriptorSets" );
16097 }
16098#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16099
16100 Result freeDescriptorSets( DescriptorPool descriptorPool, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets ) const
16101 {
16102 return static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ) ) );
16103 }
16104
16105#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16106 ResultValueType<void>::type freeDescriptorSets( DescriptorPool descriptorPool, ArrayProxy<const DescriptorSet> descriptorSets ) const
16107 {
16108 Result result = static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ) ) );
16109 return createResultValue( result, "vk::Device::freeDescriptorSets" );
16110 }
16111#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16112
16113 void updateDescriptorSets( uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const CopyDescriptorSet* pDescriptorCopies ) const
16114 {
16115 vkUpdateDescriptorSets( m_device, descriptorWriteCount, reinterpret_cast<const VkWriteDescriptorSet*>( pDescriptorWrites ), descriptorCopyCount, reinterpret_cast<const VkCopyDescriptorSet*>( pDescriptorCopies ) );
16116 }
16117
16118#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16119 void updateDescriptorSets( ArrayProxy<const WriteDescriptorSet> descriptorWrites, ArrayProxy<const CopyDescriptorSet> descriptorCopies ) const
16120 {
16121 vkUpdateDescriptorSets( m_device, descriptorWrites.size() , reinterpret_cast<const VkWriteDescriptorSet*>( descriptorWrites.data() ), descriptorCopies.size() , reinterpret_cast<const VkCopyDescriptorSet*>( descriptorCopies.data() ) );
16122 }
16123#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16124
16125 Result createFramebuffer( const FramebufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Framebuffer* pFramebuffer ) const
16126 {
16127 return static_cast<Result>( vkCreateFramebuffer( m_device, reinterpret_cast<const VkFramebufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFramebuffer*>( pFramebuffer ) ) );
16128 }
16129
16130#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16131 ResultValueType<Framebuffer>::type createFramebuffer( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16132 {
16133 Framebuffer framebuffer;
16134 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 ) ) );
16135 return createResultValue( result, framebuffer, "vk::Device::createFramebuffer" );
16136 }
16137#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16138
16139 void destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks* pAllocator ) const
16140 {
16141 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16142 }
16143
16144#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16145 void destroyFramebuffer( Framebuffer framebuffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16146 {
16147 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16148 }
16149#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16150
16151 Result createRenderPass( const RenderPassCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, RenderPass* pRenderPass ) const
16152 {
16153 return static_cast<Result>( vkCreateRenderPass( m_device, reinterpret_cast<const VkRenderPassCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkRenderPass*>( pRenderPass ) ) );
16154 }
16155
16156#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16157 ResultValueType<RenderPass>::type createRenderPass( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16158 {
16159 RenderPass renderPass;
16160 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 ) ) );
16161 return createResultValue( result, renderPass, "vk::Device::createRenderPass" );
16162 }
16163#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16164
16165 void destroyRenderPass( RenderPass renderPass, const AllocationCallbacks* pAllocator ) const
16166 {
16167 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16168 }
16169
16170#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16171 void destroyRenderPass( RenderPass renderPass, Optional<const AllocationCallbacks> allocator = nullptr ) const
16172 {
16173 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16174 }
16175#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16176
16177 void getRenderAreaGranularity( RenderPass renderPass, Extent2D* pGranularity ) const
16178 {
16179 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( pGranularity ) );
16180 }
16181
16182#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16183 Extent2D getRenderAreaGranularity( RenderPass renderPass ) const
16184 {
16185 Extent2D granularity;
16186 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( &granularity ) );
16187 return granularity;
16188 }
16189#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16190
16191 Result createCommandPool( const CommandPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, CommandPool* pCommandPool ) const
16192 {
16193 return static_cast<Result>( vkCreateCommandPool( m_device, reinterpret_cast<const VkCommandPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkCommandPool*>( pCommandPool ) ) );
16194 }
16195
16196#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16197 ResultValueType<CommandPool>::type createCommandPool( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16198 {
16199 CommandPool commandPool;
16200 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 ) ) );
16201 return createResultValue( result, commandPool, "vk::Device::createCommandPool" );
16202 }
16203#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16204
16205 void destroyCommandPool( CommandPool commandPool, const AllocationCallbacks* pAllocator ) const
16206 {
16207 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16208 }
16209
16210#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16211 void destroyCommandPool( CommandPool commandPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16212 {
16213 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16214 }
16215#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16216
16217#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16218 Result resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16219 {
16220 return static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16221 }
16222#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16223
16224#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16225 ResultValueType<void>::type resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16226 {
16227 Result result = static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16228 return createResultValue( result, "vk::Device::resetCommandPool" );
16229 }
16230#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16231
16232 Result allocateCommandBuffers( const CommandBufferAllocateInfo* pAllocateInfo, CommandBuffer* pCommandBuffers ) const
16233 {
16234 return static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkCommandBuffer*>( pCommandBuffers ) ) );
16235 }
16236
16237#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16238 template <typename Allocator = std::allocator<CommandBuffer>>
16239 typename ResultValueType<std::vector<CommandBuffer,Allocator>>::type allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo ) const
16240 {
16241 std::vector<CommandBuffer,Allocator> commandBuffers( allocateInfo.commandBufferCount );
16242 Result result = static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkCommandBuffer*>( commandBuffers.data() ) ) );
16243 return createResultValue( result, commandBuffers, "vk::Device::allocateCommandBuffers" );
16244 }
16245#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16246
16247 void freeCommandBuffers( CommandPool commandPool, uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
16248 {
16249 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
16250 }
16251
16252#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16253 void freeCommandBuffers( CommandPool commandPool, ArrayProxy<const CommandBuffer> commandBuffers ) const
16254 {
16255 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
16256 }
16257#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16258
16259 Result createSharedSwapchainsKHR( uint32_t swapchainCount, const SwapchainCreateInfoKHR* pCreateInfos, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchains ) const
16260 {
16261 return static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, swapchainCount, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchains ) ) );
16262 }
16263
16264#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16265 template <typename Allocator = std::allocator<SwapchainKHR>>
16266 typename ResultValueType<std::vector<SwapchainKHR,Allocator>>::type createSharedSwapchainsKHR( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16267 {
16268 std::vector<SwapchainKHR,Allocator> swapchains( createInfos.size() );
16269 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() ) ) );
16270 return createResultValue( result, swapchains, "vk::Device::createSharedSwapchainsKHR" );
16271 }
16272
16273 ResultValueType<SwapchainKHR>::type createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16274 {
16275 SwapchainKHR swapchain;
16276 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 ) ) );
16277 return createResultValue( result, swapchain, "vk::Device::createSharedSwapchainKHR" );
16278 }
16279#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16280
16281 Result createSwapchainKHR( const SwapchainCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchain ) const
16282 {
16283 return static_cast<Result>( vkCreateSwapchainKHR( m_device, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchain ) ) );
16284 }
16285
16286#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16287 ResultValueType<SwapchainKHR>::type createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16288 {
16289 SwapchainKHR swapchain;
16290 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 ) ) );
16291 return createResultValue( result, swapchain, "vk::Device::createSwapchainKHR" );
16292 }
16293#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16294
16295 void destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks* pAllocator ) const
16296 {
16297 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16298 }
16299
16300#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16301 void destroySwapchainKHR( SwapchainKHR swapchain, Optional<const AllocationCallbacks> allocator = nullptr ) const
16302 {
16303 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16304 }
16305#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16306
16307 Result getSwapchainImagesKHR( SwapchainKHR swapchain, uint32_t* pSwapchainImageCount, Image* pSwapchainImages ) const
16308 {
16309 return static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), pSwapchainImageCount, reinterpret_cast<VkImage*>( pSwapchainImages ) ) );
16310 }
16311
16312#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16313 template <typename Allocator = std::allocator<Image>>
16314 typename ResultValueType<std::vector<Image,Allocator>>::type getSwapchainImagesKHR( SwapchainKHR swapchain ) const
16315 {
16316 std::vector<Image,Allocator> swapchainImages;
16317 uint32_t swapchainImageCount;
16318 Result result;
16319 do
16320 {
16321 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, nullptr ) );
16322 if ( ( result == Result::eSuccess ) && swapchainImageCount )
16323 {
16324 swapchainImages.resize( swapchainImageCount );
16325 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, reinterpret_cast<VkImage*>( swapchainImages.data() ) ) );
16326 }
16327 } while ( result == Result::eIncomplete );
16328 assert( swapchainImageCount <= swapchainImages.size() );
16329 swapchainImages.resize( swapchainImageCount );
16330 return createResultValue( result, swapchainImages, "vk::Device::getSwapchainImagesKHR" );
16331 }
16332#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16333
16334 Result acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t* pImageIndex ) const
16335 {
16336 return static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), pImageIndex ) );
16337 }
16338
16339#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16340 ResultValue<uint32_t> acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence ) const
16341 {
16342 uint32_t imageIndex;
16343 Result result = static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), &imageIndex ) );
16344 return createResultValue( result, imageIndex, "vk::Device::acquireNextImageKHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } );
16345 }
16346#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16347
16348 Result debugMarkerSetObjectNameEXT( DebugMarkerObjectNameInfoEXT* pNameInfo ) const
16349 {
16350 return static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( pNameInfo ) ) );
16351 }
16352
16353#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16354 ResultValueType<DebugMarkerObjectNameInfoEXT>::type debugMarkerSetObjectNameEXT() const
16355 {
16356 DebugMarkerObjectNameInfoEXT nameInfo;
16357 Result result = static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( &nameInfo ) ) );
16358 return createResultValue( result, nameInfo, "vk::Device::debugMarkerSetObjectNameEXT" );
16359 }
16360#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16361
16362 Result debugMarkerSetObjectTagEXT( DebugMarkerObjectTagInfoEXT* pTagInfo ) const
16363 {
16364 return static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( pTagInfo ) ) );
16365 }
16366
16367#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16368 ResultValueType<DebugMarkerObjectTagInfoEXT>::type debugMarkerSetObjectTagEXT() const
16369 {
16370 DebugMarkerObjectTagInfoEXT tagInfo;
16371 Result result = static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( &tagInfo ) ) );
16372 return createResultValue( result, tagInfo, "vk::Device::debugMarkerSetObjectTagEXT" );
16373 }
16374#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16375
16376#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
16377 explicit
16378#endif
16379 operator VkDevice() const
16380 {
16381 return m_device;
16382 }
16383
16384 explicit operator bool() const
16385 {
16386 return m_device != VK_NULL_HANDLE;
16387 }
16388
16389 bool operator!() const
16390 {
16391 return m_device == VK_NULL_HANDLE;
16392 }
16393
16394 private:
16395 VkDevice m_device;
16396 };
16397 static_assert( sizeof( Device ) == sizeof( VkDevice ), "handle and wrapper have different size!" );
16398
16399 class PhysicalDevice
16400 {
16401 public:
16402 PhysicalDevice()
16403 : m_physicalDevice(VK_NULL_HANDLE)
16404 {}
16405
16406#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
16407 PhysicalDevice(VkPhysicalDevice physicalDevice)
16408 : m_physicalDevice(physicalDevice)
16409 {}
16410
16411 PhysicalDevice& operator=(VkPhysicalDevice physicalDevice)
16412 {
16413 m_physicalDevice = physicalDevice;
16414 return *this;
16415 }
16416#endif
16417
16418 void getProperties( PhysicalDeviceProperties* pProperties ) const
16419 {
16420 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( pProperties ) );
16421 }
16422
16423#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16424 PhysicalDeviceProperties getProperties() const
16425 {
16426 PhysicalDeviceProperties properties;
16427 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( &properties ) );
16428 return properties;
16429 }
16430#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16431
16432 void getQueueFamilyProperties( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties* pQueueFamilyProperties ) const
16433 {
16434 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( pQueueFamilyProperties ) );
16435 }
16436
16437#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16438 template <typename Allocator = std::allocator<QueueFamilyProperties>>
16439 std::vector<QueueFamilyProperties,Allocator> getQueueFamilyProperties() const
16440 {
16441 std::vector<QueueFamilyProperties,Allocator> queueFamilyProperties;
16442 uint32_t queueFamilyPropertyCount;
16443 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr );
16444 queueFamilyProperties.resize( queueFamilyPropertyCount );
16445 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( queueFamilyProperties.data() ) );
16446 return queueFamilyProperties;
16447 }
16448#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16449
16450 void getMemoryProperties( PhysicalDeviceMemoryProperties* pMemoryProperties ) const
16451 {
16452 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( pMemoryProperties ) );
16453 }
16454
16455#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16456 PhysicalDeviceMemoryProperties getMemoryProperties() const
16457 {
16458 PhysicalDeviceMemoryProperties memoryProperties;
16459 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( &memoryProperties ) );
16460 return memoryProperties;
16461 }
16462#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16463
16464 void getFeatures( PhysicalDeviceFeatures* pFeatures ) const
16465 {
16466 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( pFeatures ) );
16467 }
16468
16469#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16470 PhysicalDeviceFeatures getFeatures() const
16471 {
16472 PhysicalDeviceFeatures features;
16473 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( &features ) );
16474 return features;
16475 }
16476#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16477
16478 void getFormatProperties( Format format, FormatProperties* pFormatProperties ) const
16479 {
16480 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( pFormatProperties ) );
16481 }
16482
16483#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16484 FormatProperties getFormatProperties( Format format ) const
16485 {
16486 FormatProperties formatProperties;
16487 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( &formatProperties ) );
16488 return formatProperties;
16489 }
16490#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16491
16492 Result getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ImageFormatProperties* pImageFormatProperties ) const
16493 {
16494 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 ) ) );
16495 }
16496
16497#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16498 ResultValueType<ImageFormatProperties>::type getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags ) const
16499 {
16500 ImageFormatProperties imageFormatProperties;
16501 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 ) ) );
16502 return createResultValue( result, imageFormatProperties, "vk::PhysicalDevice::getImageFormatProperties" );
16503 }
16504#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16505
16506 Result createDevice( const DeviceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Device* pDevice ) const
16507 {
16508 return static_cast<Result>( vkCreateDevice( m_physicalDevice, reinterpret_cast<const VkDeviceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDevice*>( pDevice ) ) );
16509 }
16510
16511#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16512 ResultValueType<Device>::type createDevice( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16513 {
16514 Device device;
16515 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 ) ) );
16516 return createResultValue( result, device, "vk::PhysicalDevice::createDevice" );
16517 }
16518#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16519
16520 Result enumerateDeviceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties ) const
16521 {
16522 return static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
16523 }
16524
16525#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16526 template <typename Allocator = std::allocator<LayerProperties>>
16527 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateDeviceLayerProperties() const
16528 {
16529 std::vector<LayerProperties,Allocator> properties;
16530 uint32_t propertyCount;
16531 Result result;
16532 do
16533 {
16534 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) );
16535 if ( ( result == Result::eSuccess ) && propertyCount )
16536 {
16537 properties.resize( propertyCount );
16538 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
16539 }
16540 } while ( result == Result::eIncomplete );
16541 assert( propertyCount <= properties.size() );
16542 properties.resize( propertyCount );
16543 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceLayerProperties" );
16544 }
16545#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16546
16547 Result enumerateDeviceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties ) const
16548 {
16549 return static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
16550 }
16551
16552#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16553 template <typename Allocator = std::allocator<ExtensionProperties>>
16554 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateDeviceExtensionProperties( Optional<const std::string> layerName = nullptr ) const
16555 {
16556 std::vector<ExtensionProperties,Allocator> properties;
16557 uint32_t propertyCount;
16558 Result result;
16559 do
16560 {
16561 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
16562 if ( ( result == Result::eSuccess ) && propertyCount )
16563 {
16564 properties.resize( propertyCount );
16565 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
16566 }
16567 } while ( result == Result::eIncomplete );
16568 assert( propertyCount <= properties.size() );
16569 properties.resize( propertyCount );
16570 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceExtensionProperties" );
16571 }
16572#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16573
16574 void getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, uint32_t* pPropertyCount, SparseImageFormatProperties* pProperties ) const
16575 {
16576 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 ) );
16577 }
16578
16579#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16580 template <typename Allocator = std::allocator<SparseImageFormatProperties>>
16581 std::vector<SparseImageFormatProperties,Allocator> getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling ) const
16582 {
16583 std::vector<SparseImageFormatProperties,Allocator> properties;
16584 uint32_t propertyCount;
16585 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 );
16586 properties.resize( propertyCount );
16587 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() ) );
16588 return properties;
16589 }
16590#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16591
16592 Result getDisplayPropertiesKHR( uint32_t* pPropertyCount, DisplayPropertiesKHR* pProperties ) const
16593 {
16594 return static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( pProperties ) ) );
16595 }
16596
16597#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16598 template <typename Allocator = std::allocator<DisplayPropertiesKHR>>
16599 typename ResultValueType<std::vector<DisplayPropertiesKHR,Allocator>>::type getDisplayPropertiesKHR() const
16600 {
16601 std::vector<DisplayPropertiesKHR,Allocator> properties;
16602 uint32_t propertyCount;
16603 Result result;
16604 do
16605 {
16606 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
16607 if ( ( result == Result::eSuccess ) && propertyCount )
16608 {
16609 properties.resize( propertyCount );
16610 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( properties.data() ) ) );
16611 }
16612 } while ( result == Result::eIncomplete );
16613 assert( propertyCount <= properties.size() );
16614 properties.resize( propertyCount );
16615 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPropertiesKHR" );
16616 }
16617#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16618
16619 Result getDisplayPlanePropertiesKHR( uint32_t* pPropertyCount, DisplayPlanePropertiesKHR* pProperties ) const
16620 {
16621 return static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( pProperties ) ) );
16622 }
16623
16624#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16625 template <typename Allocator = std::allocator<DisplayPlanePropertiesKHR>>
16626 typename ResultValueType<std::vector<DisplayPlanePropertiesKHR,Allocator>>::type getDisplayPlanePropertiesKHR() const
16627 {
16628 std::vector<DisplayPlanePropertiesKHR,Allocator> properties;
16629 uint32_t propertyCount;
16630 Result result;
16631 do
16632 {
16633 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
16634 if ( ( result == Result::eSuccess ) && propertyCount )
16635 {
16636 properties.resize( propertyCount );
16637 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( properties.data() ) ) );
16638 }
16639 } while ( result == Result::eIncomplete );
16640 assert( propertyCount <= properties.size() );
16641 properties.resize( propertyCount );
16642 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPlanePropertiesKHR" );
16643 }
16644#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16645
16646 Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, uint32_t* pDisplayCount, DisplayKHR* pDisplays ) const
16647 {
16648 return static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, pDisplayCount, reinterpret_cast<VkDisplayKHR*>( pDisplays ) ) );
16649 }
16650
16651#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16652 template <typename Allocator = std::allocator<DisplayKHR>>
16653 typename ResultValueType<std::vector<DisplayKHR,Allocator>>::type getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const
16654 {
16655 std::vector<DisplayKHR,Allocator> displays;
16656 uint32_t displayCount;
16657 Result result;
16658 do
16659 {
16660 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) );
16661 if ( ( result == Result::eSuccess ) && displayCount )
16662 {
16663 displays.resize( displayCount );
16664 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR*>( displays.data() ) ) );
16665 }
16666 } while ( result == Result::eIncomplete );
16667 assert( displayCount <= displays.size() );
16668 displays.resize( displayCount );
16669 return createResultValue( result, displays, "vk::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
16670 }
16671#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16672
16673 Result getDisplayModePropertiesKHR( DisplayKHR display, uint32_t* pPropertyCount, DisplayModePropertiesKHR* pProperties ) const
16674 {
16675 return static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), pPropertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( pProperties ) ) );
16676 }
16677
16678#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16679 template <typename Allocator = std::allocator<DisplayModePropertiesKHR>>
16680 typename ResultValueType<std::vector<DisplayModePropertiesKHR,Allocator>>::type getDisplayModePropertiesKHR( DisplayKHR display ) const
16681 {
16682 std::vector<DisplayModePropertiesKHR,Allocator> properties;
16683 uint32_t propertyCount;
16684 Result result;
16685 do
16686 {
16687 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, nullptr ) );
16688 if ( ( result == Result::eSuccess ) && propertyCount )
16689 {
16690 properties.resize( propertyCount );
16691 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( properties.data() ) ) );
16692 }
16693 } while ( result == Result::eIncomplete );
16694 assert( propertyCount <= properties.size() );
16695 properties.resize( propertyCount );
16696 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayModePropertiesKHR" );
16697 }
16698#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16699
16700 Result createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DisplayModeKHR* pMode ) const
16701 {
16702 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 ) ) );
16703 }
16704
16705#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16706 ResultValueType<DisplayModeKHR>::type createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16707 {
16708 DisplayModeKHR mode;
16709 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 ) ) );
16710 return createResultValue( result, mode, "vk::PhysicalDevice::createDisplayModeKHR" );
16711 }
16712#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16713
16714 Result getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, DisplayPlaneCapabilitiesKHR* pCapabilities ) const
16715 {
16716 return static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( pCapabilities ) ) );
16717 }
16718
16719#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16720 ResultValueType<DisplayPlaneCapabilitiesKHR>::type getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex ) const
16721 {
16722 DisplayPlaneCapabilitiesKHR capabilities;
16723 Result result = static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( &capabilities ) ) );
16724 return createResultValue( result, capabilities, "vk::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" );
16725 }
16726#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16727
16728#ifdef VK_USE_PLATFORM_MIR_KHR
16729 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection* connection ) const
16730 {
16731 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection );
16732 }
16733#endif /*VK_USE_PLATFORM_MIR_KHR*/
16734
16735#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16736#ifdef VK_USE_PLATFORM_MIR_KHR
16737 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection & connection ) const
16738 {
16739 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection );
16740 }
16741#endif /*VK_USE_PLATFORM_MIR_KHR*/
16742#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16743
16744 Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32* pSupported ) const
16745 {
16746 return static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), pSupported ) );
16747 }
16748
16749#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16750 ResultValueType<Bool32>::type getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface ) const
16751 {
16752 Bool32 supported;
16753 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), &supported ) );
16754 return createResultValue( result, supported, "vk::PhysicalDevice::getSurfaceSupportKHR" );
16755 }
16756#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16757
16758 Result getSurfaceCapabilitiesKHR( SurfaceKHR surface, SurfaceCapabilitiesKHR* pSurfaceCapabilities ) const
16759 {
16760 return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( pSurfaceCapabilities ) ) );
16761 }
16762
16763#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16764 ResultValueType<SurfaceCapabilitiesKHR>::type getSurfaceCapabilitiesKHR( SurfaceKHR surface ) const
16765 {
16766 SurfaceCapabilitiesKHR surfaceCapabilities;
16767 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( &surfaceCapabilities ) ) );
16768 return createResultValue( result, surfaceCapabilities, "vk::PhysicalDevice::getSurfaceCapabilitiesKHR" );
16769 }
16770#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16771
16772 Result getSurfaceFormatsKHR( SurfaceKHR surface, uint32_t* pSurfaceFormatCount, SurfaceFormatKHR* pSurfaceFormats ) const
16773 {
16774 return static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pSurfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( pSurfaceFormats ) ) );
16775 }
16776
16777#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16778 template <typename Allocator = std::allocator<SurfaceFormatKHR>>
16779 typename ResultValueType<std::vector<SurfaceFormatKHR,Allocator>>::type getSurfaceFormatsKHR( SurfaceKHR surface ) const
16780 {
16781 std::vector<SurfaceFormatKHR,Allocator> surfaceFormats;
16782 uint32_t surfaceFormatCount;
16783 Result result;
16784 do
16785 {
16786 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, nullptr ) );
16787 if ( ( result == Result::eSuccess ) && surfaceFormatCount )
16788 {
16789 surfaceFormats.resize( surfaceFormatCount );
16790 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( surfaceFormats.data() ) ) );
16791 }
16792 } while ( result == Result::eIncomplete );
16793 assert( surfaceFormatCount <= surfaceFormats.size() );
16794 surfaceFormats.resize( surfaceFormatCount );
16795 return createResultValue( result, surfaceFormats, "vk::PhysicalDevice::getSurfaceFormatsKHR" );
16796 }
16797#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16798
16799 Result getSurfacePresentModesKHR( SurfaceKHR surface, uint32_t* pPresentModeCount, PresentModeKHR* pPresentModes ) const
16800 {
16801 return static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pPresentModeCount, reinterpret_cast<VkPresentModeKHR*>( pPresentModes ) ) );
16802 }
16803
16804#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16805 template <typename Allocator = std::allocator<PresentModeKHR>>
16806 typename ResultValueType<std::vector<PresentModeKHR,Allocator>>::type getSurfacePresentModesKHR( SurfaceKHR surface ) const
16807 {
16808 std::vector<PresentModeKHR,Allocator> presentModes;
16809 uint32_t presentModeCount;
16810 Result result;
16811 do
16812 {
16813 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, nullptr ) );
16814 if ( ( result == Result::eSuccess ) && presentModeCount )
16815 {
16816 presentModes.resize( presentModeCount );
16817 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, reinterpret_cast<VkPresentModeKHR*>( presentModes.data() ) ) );
16818 }
16819 } while ( result == Result::eIncomplete );
16820 assert( presentModeCount <= presentModes.size() );
16821 presentModes.resize( presentModeCount );
16822 return createResultValue( result, presentModes, "vk::PhysicalDevice::getSurfacePresentModesKHR" );
16823 }
16824#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16825
16826#ifdef VK_USE_PLATFORM_WAYLAND_KHR
16827 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display* display ) const
16828 {
16829 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, display );
16830 }
16831#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
16832
16833#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16834#ifdef VK_USE_PLATFORM_WAYLAND_KHR
16835 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const
16836 {
16837 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display );
16838 }
16839#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
16840#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16841
16842#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16843#ifdef VK_USE_PLATFORM_WIN32_KHR
16844 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
16845 {
16846 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
16847 }
16848#endif /*VK_USE_PLATFORM_WIN32_KHR*/
16849#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16850
16851#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16852#ifdef VK_USE_PLATFORM_WIN32_KHR
16853 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
16854 {
16855 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
16856 }
16857#endif /*VK_USE_PLATFORM_WIN32_KHR*/
16858#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16859
16860#ifdef VK_USE_PLATFORM_XLIB_KHR
16861 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID ) const
16862 {
16863 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, dpy, visualID );
16864 }
16865#endif /*VK_USE_PLATFORM_XLIB_KHR*/
16866
16867#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16868#ifdef VK_USE_PLATFORM_XLIB_KHR
16869 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const
16870 {
16871 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID );
16872 }
16873#endif /*VK_USE_PLATFORM_XLIB_KHR*/
16874#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16875
16876#ifdef VK_USE_PLATFORM_XCB_KHR
16877 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id ) const
16878 {
16879 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection, visual_id );
16880 }
16881#endif /*VK_USE_PLATFORM_XCB_KHR*/
16882
16883#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16884#ifdef VK_USE_PLATFORM_XCB_KHR
16885 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const
16886 {
16887 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id );
16888 }
16889#endif /*VK_USE_PLATFORM_XCB_KHR*/
16890#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16891
16892#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
16893 explicit
16894#endif
16895 operator VkPhysicalDevice() const
16896 {
16897 return m_physicalDevice;
16898 }
16899
16900 explicit operator bool() const
16901 {
16902 return m_physicalDevice != VK_NULL_HANDLE;
16903 }
16904
16905 bool operator!() const
16906 {
16907 return m_physicalDevice == VK_NULL_HANDLE;
16908 }
16909
16910 private:
16911 VkPhysicalDevice m_physicalDevice;
16912 };
16913 static_assert( sizeof( PhysicalDevice ) == sizeof( VkPhysicalDevice ), "handle and wrapper have different size!" );
16914
16915 class Instance
16916 {
16917 public:
16918 Instance()
16919 : m_instance(VK_NULL_HANDLE)
16920 {}
16921
16922#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
16923 Instance(VkInstance instance)
16924 : m_instance(instance)
16925 {}
16926
16927 Instance& operator=(VkInstance instance)
16928 {
16929 m_instance = instance;
16930 return *this;
16931 }
16932#endif
16933
16934 void destroy( const AllocationCallbacks* pAllocator ) const
16935 {
16936 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16937 }
16938
16939#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16940 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
16941 {
16942 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16943 }
16944#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16945
16946 Result enumeratePhysicalDevices( uint32_t* pPhysicalDeviceCount, PhysicalDevice* pPhysicalDevices ) const
16947 {
16948 return static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, pPhysicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( pPhysicalDevices ) ) );
16949 }
16950
16951#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16952 template <typename Allocator = std::allocator<PhysicalDevice>>
16953 typename ResultValueType<std::vector<PhysicalDevice,Allocator>>::type enumeratePhysicalDevices() const
16954 {
16955 std::vector<PhysicalDevice,Allocator> physicalDevices;
16956 uint32_t physicalDeviceCount;
16957 Result result;
16958 do
16959 {
16960 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) );
16961 if ( ( result == Result::eSuccess ) && physicalDeviceCount )
16962 {
16963 physicalDevices.resize( physicalDeviceCount );
16964 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( physicalDevices.data() ) ) );
16965 }
16966 } while ( result == Result::eIncomplete );
16967 assert( physicalDeviceCount <= physicalDevices.size() );
16968 physicalDevices.resize( physicalDeviceCount );
16969 return createResultValue( result, physicalDevices, "vk::Instance::enumeratePhysicalDevices" );
16970 }
16971#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16972
16973 PFN_vkVoidFunction getProcAddr( const char* pName ) const
16974 {
16975 return vkGetInstanceProcAddr( m_instance, pName );
16976 }
16977
16978#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16979 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
16980 {
16981 return vkGetInstanceProcAddr( m_instance, name.c_str() );
16982 }
16983#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16984
16985#ifdef VK_USE_PLATFORM_ANDROID_KHR
16986 Result createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
16987 {
16988 return static_cast<Result>( vkCreateAndroidSurfaceKHR( m_instance, reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
16989 }
16990#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
16991
16992#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16993#ifdef VK_USE_PLATFORM_ANDROID_KHR
16994 ResultValueType<SurfaceKHR>::type createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16995 {
16996 SurfaceKHR surface;
16997 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 ) ) );
16998 return createResultValue( result, surface, "vk::Instance::createAndroidSurfaceKHR" );
16999 }
17000#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
17001#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17002
17003 Result createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17004 {
17005 return static_cast<Result>( vkCreateDisplayPlaneSurfaceKHR( m_instance, reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17006 }
17007
17008#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17009 ResultValueType<SurfaceKHR>::type createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17010 {
17011 SurfaceKHR surface;
17012 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 ) ) );
17013 return createResultValue( result, surface, "vk::Instance::createDisplayPlaneSurfaceKHR" );
17014 }
17015#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17016
17017#ifdef VK_USE_PLATFORM_MIR_KHR
17018 Result createMirSurfaceKHR( const MirSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17019 {
17020 return static_cast<Result>( vkCreateMirSurfaceKHR( m_instance, reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17021 }
17022#endif /*VK_USE_PLATFORM_MIR_KHR*/
17023
17024#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17025#ifdef VK_USE_PLATFORM_MIR_KHR
17026 ResultValueType<SurfaceKHR>::type createMirSurfaceKHR( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17027 {
17028 SurfaceKHR surface;
17029 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 ) ) );
17030 return createResultValue( result, surface, "vk::Instance::createMirSurfaceKHR" );
17031 }
17032#endif /*VK_USE_PLATFORM_MIR_KHR*/
17033#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17034
17035 void destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks* pAllocator ) const
17036 {
17037 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17038 }
17039
17040#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17041 void destroySurfaceKHR( SurfaceKHR surface, Optional<const AllocationCallbacks> allocator = nullptr ) const
17042 {
17043 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17044 }
17045#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17046
17047#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17048 Result createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17049 {
17050 return static_cast<Result>( vkCreateWaylandSurfaceKHR( m_instance, reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17051 }
17052#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17053
17054#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17055#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17056 ResultValueType<SurfaceKHR>::type createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17057 {
17058 SurfaceKHR surface;
17059 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 ) ) );
17060 return createResultValue( result, surface, "vk::Instance::createWaylandSurfaceKHR" );
17061 }
17062#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17063#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17064
17065#ifdef VK_USE_PLATFORM_WIN32_KHR
17066 Result createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17067 {
17068 return static_cast<Result>( vkCreateWin32SurfaceKHR( m_instance, reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17069 }
17070#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17071
17072#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17073#ifdef VK_USE_PLATFORM_WIN32_KHR
17074 ResultValueType<SurfaceKHR>::type createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17075 {
17076 SurfaceKHR surface;
17077 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 ) ) );
17078 return createResultValue( result, surface, "vk::Instance::createWin32SurfaceKHR" );
17079 }
17080#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17081#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17082
17083#ifdef VK_USE_PLATFORM_XLIB_KHR
17084 Result createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17085 {
17086 return static_cast<Result>( vkCreateXlibSurfaceKHR( m_instance, reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17087 }
17088#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17089
17090#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17091#ifdef VK_USE_PLATFORM_XLIB_KHR
17092 ResultValueType<SurfaceKHR>::type createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17093 {
17094 SurfaceKHR surface;
17095 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 ) ) );
17096 return createResultValue( result, surface, "vk::Instance::createXlibSurfaceKHR" );
17097 }
17098#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17099#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17100
17101#ifdef VK_USE_PLATFORM_XCB_KHR
17102 Result createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17103 {
17104 return static_cast<Result>( vkCreateXcbSurfaceKHR( m_instance, reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17105 }
17106#endif /*VK_USE_PLATFORM_XCB_KHR*/
17107
17108#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17109#ifdef VK_USE_PLATFORM_XCB_KHR
17110 ResultValueType<SurfaceKHR>::type createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17111 {
17112 SurfaceKHR surface;
17113 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 ) ) );
17114 return createResultValue( result, surface, "vk::Instance::createXcbSurfaceKHR" );
17115 }
17116#endif /*VK_USE_PLATFORM_XCB_KHR*/
17117#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17118
17119 Result createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, DebugReportCallbackEXT* pCallback ) const
17120 {
17121 return static_cast<Result>( vkCreateDebugReportCallbackEXT( m_instance, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDebugReportCallbackEXT*>( pCallback ) ) );
17122 }
17123
17124#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17125 ResultValueType<DebugReportCallbackEXT>::type createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17126 {
17127 DebugReportCallbackEXT callback;
17128 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 ) ) );
17129 return createResultValue( result, callback, "vk::Instance::createDebugReportCallbackEXT" );
17130 }
17131#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17132
17133 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, const AllocationCallbacks* pAllocator ) const
17134 {
17135 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17136 }
17137
17138#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17139 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, Optional<const AllocationCallbacks> allocator = nullptr ) const
17140 {
17141 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17142 }
17143#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17144
17145 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage ) const
17146 {
17147 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, pLayerPrefix, pMessage );
17148 }
17149
17150#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17151 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const std::string & layerPrefix, const std::string & message ) const
17152 {
17153 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, layerPrefix.c_str(), message.c_str() );
17154 }
17155#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17156
17157#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17158 explicit
17159#endif
17160 operator VkInstance() const
17161 {
17162 return m_instance;
17163 }
17164
17165 explicit operator bool() const
17166 {
17167 return m_instance != VK_NULL_HANDLE;
17168 }
17169
17170 bool operator!() const
17171 {
17172 return m_instance == VK_NULL_HANDLE;
17173 }
17174
17175 private:
17176 VkInstance m_instance;
17177 };
17178 static_assert( sizeof( Instance ) == sizeof( VkInstance ), "handle and wrapper have different size!" );
17179
17180 enum class DebugReportErrorEXT
17181 {
17182 eNone = VK_DEBUG_REPORT_ERROR_NONE_EXT,
17183 eCallbackRef = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT
17184 };
17185
17186 enum class RasterizationOrderAMD
17187 {
17188 eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD,
17189 eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD
17190 };
17191
17192 struct PipelineRasterizationStateRasterizationOrderAMD
17193 {
17194 PipelineRasterizationStateRasterizationOrderAMD( RasterizationOrderAMD rasterizationOrder_ = RasterizationOrderAMD::eStrict )
17195 : sType( StructureType::ePipelineRasterizationStateRasterizationOrderAMD )
17196 , pNext( nullptr )
17197 , rasterizationOrder( rasterizationOrder_ )
17198 {
17199 }
17200
17201 PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
17202 {
17203 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
17204 }
17205
17206 PipelineRasterizationStateRasterizationOrderAMD& operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
17207 {
17208 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
17209 return *this;
17210 }
17211
17212 PipelineRasterizationStateRasterizationOrderAMD& setSType( StructureType sType_ )
17213 {
17214 sType = sType_;
17215 return *this;
17216 }
17217
17218 PipelineRasterizationStateRasterizationOrderAMD& setPNext( const void* pNext_ )
17219 {
17220 pNext = pNext_;
17221 return *this;
17222 }
17223
17224 PipelineRasterizationStateRasterizationOrderAMD& setRasterizationOrder( RasterizationOrderAMD rasterizationOrder_ )
17225 {
17226 rasterizationOrder = rasterizationOrder_;
17227 return *this;
17228 }
17229
17230 operator const VkPipelineRasterizationStateRasterizationOrderAMD&() const
17231 {
17232 return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(this);
17233 }
17234
17235 bool operator==( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
17236 {
17237 return ( sType == rhs.sType )
17238 && ( pNext == rhs.pNext )
17239 && ( rasterizationOrder == rhs.rasterizationOrder );
17240 }
17241
17242 bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
17243 {
17244 return !operator==( rhs );
17245 }
17246
17247 private:
17248 StructureType sType;
17249
17250 public:
17251 const void* pNext;
17252 RasterizationOrderAMD rasterizationOrder;
17253 };
17254 static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) == sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), "struct and wrapper have different size!" );
17255
17256 inline Result createInstance( const InstanceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Instance* pInstance )
17257 {
17258 return static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkInstance*>( pInstance ) ) );
17259 }
17260
17261#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17262 inline ResultValueType<Instance>::type createInstance( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr )
17263 {
17264 Instance instance;
17265 Result result = static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkInstance*>( &instance ) ) );
17266 return createResultValue( result, instance, "vk::createInstance" );
17267 }
17268#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17269
17270 inline Result enumerateInstanceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties )
17271 {
17272 return static_cast<Result>( vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
17273 }
17274
17275#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17276 template <typename Allocator = std::allocator<LayerProperties>>
17277 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties()
17278 {
17279 std::vector<LayerProperties,Allocator> properties;
17280 uint32_t propertyCount;
17281 Result result;
17282 do
17283 {
17284 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) );
17285 if ( ( result == Result::eSuccess ) && propertyCount )
17286 {
17287 properties.resize( propertyCount );
17288 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
17289 }
17290 } while ( result == Result::eIncomplete );
17291 assert( propertyCount <= properties.size() );
17292 properties.resize( propertyCount );
17293 return createResultValue( result, properties, "vk::enumerateInstanceLayerProperties" );
17294 }
17295#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17296
17297 inline Result enumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties )
17298 {
17299 return static_cast<Result>( vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
17300 }
17301
17302#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17303 template <typename Allocator = std::allocator<ExtensionProperties>>
17304 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateInstanceExtensionProperties( Optional<const std::string> layerName = nullptr )
17305 {
17306 std::vector<ExtensionProperties,Allocator> properties;
17307 uint32_t propertyCount;
17308 Result result;
17309 do
17310 {
17311 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
17312 if ( ( result == Result::eSuccess ) && propertyCount )
17313 {
17314 properties.resize( propertyCount );
17315 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
17316 }
17317 } while ( result == Result::eIncomplete );
17318 assert( propertyCount <= properties.size() );
17319 properties.resize( propertyCount );
17320 return createResultValue( result, properties, "vk::enumerateInstanceExtensionProperties" );
17321 }
17322#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17323
17324 inline std::string to_string(FramebufferCreateFlagBits)
17325 {
17326 return "(void)";
17327 }
17328
17329 inline std::string to_string(FramebufferCreateFlags)
17330 {
17331 return "{}";
17332 }
17333
17334 inline std::string to_string(QueryPoolCreateFlagBits)
17335 {
17336 return "(void)";
17337 }
17338
17339 inline std::string to_string(QueryPoolCreateFlags)
17340 {
17341 return "{}";
17342 }
17343
17344 inline std::string to_string(RenderPassCreateFlagBits)
17345 {
17346 return "(void)";
17347 }
17348
17349 inline std::string to_string(RenderPassCreateFlags)
17350 {
17351 return "{}";
17352 }
17353
17354 inline std::string to_string(SamplerCreateFlagBits)
17355 {
17356 return "(void)";
17357 }
17358
17359 inline std::string to_string(SamplerCreateFlags)
17360 {
17361 return "{}";
17362 }
17363
17364 inline std::string to_string(PipelineLayoutCreateFlagBits)
17365 {
17366 return "(void)";
17367 }
17368
17369 inline std::string to_string(PipelineLayoutCreateFlags)
17370 {
17371 return "{}";
17372 }
17373
17374 inline std::string to_string(PipelineCacheCreateFlagBits)
17375 {
17376 return "(void)";
17377 }
17378
17379 inline std::string to_string(PipelineCacheCreateFlags)
17380 {
17381 return "{}";
17382 }
17383
17384 inline std::string to_string(PipelineDepthStencilStateCreateFlagBits)
17385 {
17386 return "(void)";
17387 }
17388
17389 inline std::string to_string(PipelineDepthStencilStateCreateFlags)
17390 {
17391 return "{}";
17392 }
17393
17394 inline std::string to_string(PipelineDynamicStateCreateFlagBits)
17395 {
17396 return "(void)";
17397 }
17398
17399 inline std::string to_string(PipelineDynamicStateCreateFlags)
17400 {
17401 return "{}";
17402 }
17403
17404 inline std::string to_string(PipelineColorBlendStateCreateFlagBits)
17405 {
17406 return "(void)";
17407 }
17408
17409 inline std::string to_string(PipelineColorBlendStateCreateFlags)
17410 {
17411 return "{}";
17412 }
17413
17414 inline std::string to_string(PipelineMultisampleStateCreateFlagBits)
17415 {
17416 return "(void)";
17417 }
17418
17419 inline std::string to_string(PipelineMultisampleStateCreateFlags)
17420 {
17421 return "{}";
17422 }
17423
17424 inline std::string to_string(PipelineRasterizationStateCreateFlagBits)
17425 {
17426 return "(void)";
17427 }
17428
17429 inline std::string to_string(PipelineRasterizationStateCreateFlags)
17430 {
17431 return "{}";
17432 }
17433
17434 inline std::string to_string(PipelineViewportStateCreateFlagBits)
17435 {
17436 return "(void)";
17437 }
17438
17439 inline std::string to_string(PipelineViewportStateCreateFlags)
17440 {
17441 return "{}";
17442 }
17443
17444 inline std::string to_string(PipelineTessellationStateCreateFlagBits)
17445 {
17446 return "(void)";
17447 }
17448
17449 inline std::string to_string(PipelineTessellationStateCreateFlags)
17450 {
17451 return "{}";
17452 }
17453
17454 inline std::string to_string(PipelineInputAssemblyStateCreateFlagBits)
17455 {
17456 return "(void)";
17457 }
17458
17459 inline std::string to_string(PipelineInputAssemblyStateCreateFlags)
17460 {
17461 return "{}";
17462 }
17463
17464 inline std::string to_string(PipelineVertexInputStateCreateFlagBits)
17465 {
17466 return "(void)";
17467 }
17468
17469 inline std::string to_string(PipelineVertexInputStateCreateFlags)
17470 {
17471 return "{}";
17472 }
17473
17474 inline std::string to_string(PipelineShaderStageCreateFlagBits)
17475 {
17476 return "(void)";
17477 }
17478
17479 inline std::string to_string(PipelineShaderStageCreateFlags)
17480 {
17481 return "{}";
17482 }
17483
17484 inline std::string to_string(DescriptorSetLayoutCreateFlagBits)
17485 {
17486 return "(void)";
17487 }
17488
17489 inline std::string to_string(DescriptorSetLayoutCreateFlags)
17490 {
17491 return "{}";
17492 }
17493
17494 inline std::string to_string(BufferViewCreateFlagBits)
17495 {
17496 return "(void)";
17497 }
17498
17499 inline std::string to_string(BufferViewCreateFlags)
17500 {
17501 return "{}";
17502 }
17503
17504 inline std::string to_string(InstanceCreateFlagBits)
17505 {
17506 return "(void)";
17507 }
17508
17509 inline std::string to_string(InstanceCreateFlags)
17510 {
17511 return "{}";
17512 }
17513
17514 inline std::string to_string(DeviceCreateFlagBits)
17515 {
17516 return "(void)";
17517 }
17518
17519 inline std::string to_string(DeviceCreateFlags)
17520 {
17521 return "{}";
17522 }
17523
17524 inline std::string to_string(DeviceQueueCreateFlagBits)
17525 {
17526 return "(void)";
17527 }
17528
17529 inline std::string to_string(DeviceQueueCreateFlags)
17530 {
17531 return "{}";
17532 }
17533
17534 inline std::string to_string(ImageViewCreateFlagBits)
17535 {
17536 return "(void)";
17537 }
17538
17539 inline std::string to_string(ImageViewCreateFlags)
17540 {
17541 return "{}";
17542 }
17543
17544 inline std::string to_string(SemaphoreCreateFlagBits)
17545 {
17546 return "(void)";
17547 }
17548
17549 inline std::string to_string(SemaphoreCreateFlags)
17550 {
17551 return "{}";
17552 }
17553
17554 inline std::string to_string(ShaderModuleCreateFlagBits)
17555 {
17556 return "(void)";
17557 }
17558
17559 inline std::string to_string(ShaderModuleCreateFlags)
17560 {
17561 return "{}";
17562 }
17563
17564 inline std::string to_string(EventCreateFlagBits)
17565 {
17566 return "(void)";
17567 }
17568
17569 inline std::string to_string(EventCreateFlags)
17570 {
17571 return "{}";
17572 }
17573
17574 inline std::string to_string(MemoryMapFlagBits)
17575 {
17576 return "(void)";
17577 }
17578
17579 inline std::string to_string(MemoryMapFlags)
17580 {
17581 return "{}";
17582 }
17583
17584 inline std::string to_string(SubpassDescriptionFlagBits)
17585 {
17586 return "(void)";
17587 }
17588
17589 inline std::string to_string(SubpassDescriptionFlags)
17590 {
17591 return "{}";
17592 }
17593
17594 inline std::string to_string(DescriptorPoolResetFlagBits)
17595 {
17596 return "(void)";
17597 }
17598
17599 inline std::string to_string(DescriptorPoolResetFlags)
17600 {
17601 return "{}";
17602 }
17603
17604 inline std::string to_string(SwapchainCreateFlagBitsKHR)
17605 {
17606 return "(void)";
17607 }
17608
17609 inline std::string to_string(SwapchainCreateFlagsKHR)
17610 {
17611 return "{}";
17612 }
17613
17614 inline std::string to_string(DisplayModeCreateFlagBitsKHR)
17615 {
17616 return "(void)";
17617 }
17618
17619 inline std::string to_string(DisplayModeCreateFlagsKHR)
17620 {
17621 return "{}";
17622 }
17623
17624 inline std::string to_string(DisplaySurfaceCreateFlagBitsKHR)
17625 {
17626 return "(void)";
17627 }
17628
17629 inline std::string to_string(DisplaySurfaceCreateFlagsKHR)
17630 {
17631 return "{}";
17632 }
17633
17634#ifdef VK_USE_PLATFORM_ANDROID_KHR
17635 inline std::string to_string(AndroidSurfaceCreateFlagBitsKHR)
17636 {
17637 return "(void)";
17638 }
17639#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
17640
17641#ifdef VK_USE_PLATFORM_ANDROID_KHR
17642 inline std::string to_string(AndroidSurfaceCreateFlagsKHR)
17643 {
17644 return "{}";
17645 }
17646#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
17647
17648#ifdef VK_USE_PLATFORM_MIR_KHR
17649 inline std::string to_string(MirSurfaceCreateFlagBitsKHR)
17650 {
17651 return "(void)";
17652 }
17653#endif /*VK_USE_PLATFORM_MIR_KHR*/
17654
17655#ifdef VK_USE_PLATFORM_MIR_KHR
17656 inline std::string to_string(MirSurfaceCreateFlagsKHR)
17657 {
17658 return "{}";
17659 }
17660#endif /*VK_USE_PLATFORM_MIR_KHR*/
17661
17662#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17663 inline std::string to_string(WaylandSurfaceCreateFlagBitsKHR)
17664 {
17665 return "(void)";
17666 }
17667#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17668
17669#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17670 inline std::string to_string(WaylandSurfaceCreateFlagsKHR)
17671 {
17672 return "{}";
17673 }
17674#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17675
17676#ifdef VK_USE_PLATFORM_WIN32_KHR
17677 inline std::string to_string(Win32SurfaceCreateFlagBitsKHR)
17678 {
17679 return "(void)";
17680 }
17681#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17682
17683#ifdef VK_USE_PLATFORM_WIN32_KHR
17684 inline std::string to_string(Win32SurfaceCreateFlagsKHR)
17685 {
17686 return "{}";
17687 }
17688#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17689
17690#ifdef VK_USE_PLATFORM_XLIB_KHR
17691 inline std::string to_string(XlibSurfaceCreateFlagBitsKHR)
17692 {
17693 return "(void)";
17694 }
17695#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17696
17697#ifdef VK_USE_PLATFORM_XLIB_KHR
17698 inline std::string to_string(XlibSurfaceCreateFlagsKHR)
17699 {
17700 return "{}";
17701 }
17702#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17703
17704#ifdef VK_USE_PLATFORM_XCB_KHR
17705 inline std::string to_string(XcbSurfaceCreateFlagBitsKHR)
17706 {
17707 return "(void)";
17708 }
17709#endif /*VK_USE_PLATFORM_XCB_KHR*/
17710
17711#ifdef VK_USE_PLATFORM_XCB_KHR
17712 inline std::string to_string(XcbSurfaceCreateFlagsKHR)
17713 {
17714 return "{}";
17715 }
17716#endif /*VK_USE_PLATFORM_XCB_KHR*/
17717
17718 inline std::string to_string(ImageLayout value)
17719 {
17720 switch (value)
17721 {
17722 case ImageLayout::eUndefined: return "Undefined";
17723 case ImageLayout::eGeneral: return "General";
17724 case ImageLayout::eColorAttachmentOptimal: return "ColorAttachmentOptimal";
17725 case ImageLayout::eDepthStencilAttachmentOptimal: return "DepthStencilAttachmentOptimal";
17726 case ImageLayout::eDepthStencilReadOnlyOptimal: return "DepthStencilReadOnlyOptimal";
17727 case ImageLayout::eShaderReadOnlyOptimal: return "ShaderReadOnlyOptimal";
17728 case ImageLayout::eTransferSrcOptimal: return "TransferSrcOptimal";
17729 case ImageLayout::eTransferDstOptimal: return "TransferDstOptimal";
17730 case ImageLayout::ePreinitialized: return "Preinitialized";
17731 case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR";
17732 default: return "invalid";
17733 }
17734 }
17735
17736 inline std::string to_string(AttachmentLoadOp value)
17737 {
17738 switch (value)
17739 {
17740 case AttachmentLoadOp::eLoad: return "Load";
17741 case AttachmentLoadOp::eClear: return "Clear";
17742 case AttachmentLoadOp::eDontCare: return "DontCare";
17743 default: return "invalid";
17744 }
17745 }
17746
17747 inline std::string to_string(AttachmentStoreOp value)
17748 {
17749 switch (value)
17750 {
17751 case AttachmentStoreOp::eStore: return "Store";
17752 case AttachmentStoreOp::eDontCare: return "DontCare";
17753 default: return "invalid";
17754 }
17755 }
17756
17757 inline std::string to_string(ImageType value)
17758 {
17759 switch (value)
17760 {
17761 case ImageType::e1D: return "1D";
17762 case ImageType::e2D: return "2D";
17763 case ImageType::e3D: return "3D";
17764 default: return "invalid";
17765 }
17766 }
17767
17768 inline std::string to_string(ImageTiling value)
17769 {
17770 switch (value)
17771 {
17772 case ImageTiling::eOptimal: return "Optimal";
17773 case ImageTiling::eLinear: return "Linear";
17774 default: return "invalid";
17775 }
17776 }
17777
17778 inline std::string to_string(ImageViewType value)
17779 {
17780 switch (value)
17781 {
17782 case ImageViewType::e1D: return "1D";
17783 case ImageViewType::e2D: return "2D";
17784 case ImageViewType::e3D: return "3D";
17785 case ImageViewType::eCube: return "Cube";
17786 case ImageViewType::e1DArray: return "1DArray";
17787 case ImageViewType::e2DArray: return "2DArray";
17788 case ImageViewType::eCubeArray: return "CubeArray";
17789 default: return "invalid";
17790 }
17791 }
17792
17793 inline std::string to_string(CommandBufferLevel value)
17794 {
17795 switch (value)
17796 {
17797 case CommandBufferLevel::ePrimary: return "Primary";
17798 case CommandBufferLevel::eSecondary: return "Secondary";
17799 default: return "invalid";
17800 }
17801 }
17802
17803 inline std::string to_string(ComponentSwizzle value)
17804 {
17805 switch (value)
17806 {
17807 case ComponentSwizzle::eIdentity: return "Identity";
17808 case ComponentSwizzle::eZero: return "Zero";
17809 case ComponentSwizzle::eOne: return "One";
17810 case ComponentSwizzle::eR: return "R";
17811 case ComponentSwizzle::eG: return "G";
17812 case ComponentSwizzle::eB: return "B";
17813 case ComponentSwizzle::eA: return "A";
17814 default: return "invalid";
17815 }
17816 }
17817
17818 inline std::string to_string(DescriptorType value)
17819 {
17820 switch (value)
17821 {
17822 case DescriptorType::eSampler: return "Sampler";
17823 case DescriptorType::eCombinedImageSampler: return "CombinedImageSampler";
17824 case DescriptorType::eSampledImage: return "SampledImage";
17825 case DescriptorType::eStorageImage: return "StorageImage";
17826 case DescriptorType::eUniformTexelBuffer: return "UniformTexelBuffer";
17827 case DescriptorType::eStorageTexelBuffer: return "StorageTexelBuffer";
17828 case DescriptorType::eUniformBuffer: return "UniformBuffer";
17829 case DescriptorType::eStorageBuffer: return "StorageBuffer";
17830 case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic";
17831 case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic";
17832 case DescriptorType::eInputAttachment: return "InputAttachment";
17833 default: return "invalid";
17834 }
17835 }
17836
17837 inline std::string to_string(QueryType value)
17838 {
17839 switch (value)
17840 {
17841 case QueryType::eOcclusion: return "Occlusion";
17842 case QueryType::ePipelineStatistics: return "PipelineStatistics";
17843 case QueryType::eTimestamp: return "Timestamp";
17844 default: return "invalid";
17845 }
17846 }
17847
17848 inline std::string to_string(BorderColor value)
17849 {
17850 switch (value)
17851 {
17852 case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack";
17853 case BorderColor::eIntTransparentBlack: return "IntTransparentBlack";
17854 case BorderColor::eFloatOpaqueBlack: return "FloatOpaqueBlack";
17855 case BorderColor::eIntOpaqueBlack: return "IntOpaqueBlack";
17856 case BorderColor::eFloatOpaqueWhite: return "FloatOpaqueWhite";
17857 case BorderColor::eIntOpaqueWhite: return "IntOpaqueWhite";
17858 default: return "invalid";
17859 }
17860 }
17861
17862 inline std::string to_string(PipelineBindPoint value)
17863 {
17864 switch (value)
17865 {
17866 case PipelineBindPoint::eGraphics: return "Graphics";
17867 case PipelineBindPoint::eCompute: return "Compute";
17868 default: return "invalid";
17869 }
17870 }
17871
17872 inline std::string to_string(PipelineCacheHeaderVersion value)
17873 {
17874 switch (value)
17875 {
17876 case PipelineCacheHeaderVersion::eOne: return "One";
17877 default: return "invalid";
17878 }
17879 }
17880
17881 inline std::string to_string(PrimitiveTopology value)
17882 {
17883 switch (value)
17884 {
17885 case PrimitiveTopology::ePointList: return "PointList";
17886 case PrimitiveTopology::eLineList: return "LineList";
17887 case PrimitiveTopology::eLineStrip: return "LineStrip";
17888 case PrimitiveTopology::eTriangleList: return "TriangleList";
17889 case PrimitiveTopology::eTriangleStrip: return "TriangleStrip";
17890 case PrimitiveTopology::eTriangleFan: return "TriangleFan";
17891 case PrimitiveTopology::eLineListWithAdjacency: return "LineListWithAdjacency";
17892 case PrimitiveTopology::eLineStripWithAdjacency: return "LineStripWithAdjacency";
17893 case PrimitiveTopology::eTriangleListWithAdjacency: return "TriangleListWithAdjacency";
17894 case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency";
17895 case PrimitiveTopology::ePatchList: return "PatchList";
17896 default: return "invalid";
17897 }
17898 }
17899
17900 inline std::string to_string(SharingMode value)
17901 {
17902 switch (value)
17903 {
17904 case SharingMode::eExclusive: return "Exclusive";
17905 case SharingMode::eConcurrent: return "Concurrent";
17906 default: return "invalid";
17907 }
17908 }
17909
17910 inline std::string to_string(IndexType value)
17911 {
17912 switch (value)
17913 {
17914 case IndexType::eUint16: return "Uint16";
17915 case IndexType::eUint32: return "Uint32";
17916 default: return "invalid";
17917 }
17918 }
17919
17920 inline std::string to_string(Filter value)
17921 {
17922 switch (value)
17923 {
17924 case Filter::eNearest: return "Nearest";
17925 case Filter::eLinear: return "Linear";
17926 case Filter::eCubicIMG: return "CubicIMG";
17927 default: return "invalid";
17928 }
17929 }
17930
17931 inline std::string to_string(SamplerMipmapMode value)
17932 {
17933 switch (value)
17934 {
17935 case SamplerMipmapMode::eNearest: return "Nearest";
17936 case SamplerMipmapMode::eLinear: return "Linear";
17937 default: return "invalid";
17938 }
17939 }
17940
17941 inline std::string to_string(SamplerAddressMode value)
17942 {
17943 switch (value)
17944 {
17945 case SamplerAddressMode::eRepeat: return "Repeat";
17946 case SamplerAddressMode::eMirroredRepeat: return "MirroredRepeat";
17947 case SamplerAddressMode::eClampToEdge: return "ClampToEdge";
17948 case SamplerAddressMode::eClampToBorder: return "ClampToBorder";
17949 case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge";
17950 default: return "invalid";
17951 }
17952 }
17953
17954 inline std::string to_string(CompareOp value)
17955 {
17956 switch (value)
17957 {
17958 case CompareOp::eNever: return "Never";
17959 case CompareOp::eLess: return "Less";
17960 case CompareOp::eEqual: return "Equal";
17961 case CompareOp::eLessOrEqual: return "LessOrEqual";
17962 case CompareOp::eGreater: return "Greater";
17963 case CompareOp::eNotEqual: return "NotEqual";
17964 case CompareOp::eGreaterOrEqual: return "GreaterOrEqual";
17965 case CompareOp::eAlways: return "Always";
17966 default: return "invalid";
17967 }
17968 }
17969
17970 inline std::string to_string(PolygonMode value)
17971 {
17972 switch (value)
17973 {
17974 case PolygonMode::eFill: return "Fill";
17975 case PolygonMode::eLine: return "Line";
17976 case PolygonMode::ePoint: return "Point";
17977 default: return "invalid";
17978 }
17979 }
17980
17981 inline std::string to_string(CullModeFlagBits value)
17982 {
17983 switch (value)
17984 {
17985 case CullModeFlagBits::eNone: return "None";
17986 case CullModeFlagBits::eFront: return "Front";
17987 case CullModeFlagBits::eBack: return "Back";
17988 case CullModeFlagBits::eFrontAndBack: return "FrontAndBack";
17989 default: return "invalid";
17990 }
17991 }
17992
17993 inline std::string to_string(CullModeFlags value)
17994 {
17995 if (!value) return "{}";
17996 std::string result;
17997 if (value & CullModeFlagBits::eNone) result += "None | ";
17998 if (value & CullModeFlagBits::eFront) result += "Front | ";
17999 if (value & CullModeFlagBits::eBack) result += "Back | ";
18000 if (value & CullModeFlagBits::eFrontAndBack) result += "FrontAndBack | ";
18001 return "{" + result.substr(0, result.size() - 3) + "}";
18002 }
18003
18004 inline std::string to_string(FrontFace value)
18005 {
18006 switch (value)
18007 {
18008 case FrontFace::eCounterClockwise: return "CounterClockwise";
18009 case FrontFace::eClockwise: return "Clockwise";
18010 default: return "invalid";
18011 }
18012 }
18013
18014 inline std::string to_string(BlendFactor value)
18015 {
18016 switch (value)
18017 {
18018 case BlendFactor::eZero: return "Zero";
18019 case BlendFactor::eOne: return "One";
18020 case BlendFactor::eSrcColor: return "SrcColor";
18021 case BlendFactor::eOneMinusSrcColor: return "OneMinusSrcColor";
18022 case BlendFactor::eDstColor: return "DstColor";
18023 case BlendFactor::eOneMinusDstColor: return "OneMinusDstColor";
18024 case BlendFactor::eSrcAlpha: return "SrcAlpha";
18025 case BlendFactor::eOneMinusSrcAlpha: return "OneMinusSrcAlpha";
18026 case BlendFactor::eDstAlpha: return "DstAlpha";
18027 case BlendFactor::eOneMinusDstAlpha: return "OneMinusDstAlpha";
18028 case BlendFactor::eConstantColor: return "ConstantColor";
18029 case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor";
18030 case BlendFactor::eConstantAlpha: return "ConstantAlpha";
18031 case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha";
18032 case BlendFactor::eSrcAlphaSaturate: return "SrcAlphaSaturate";
18033 case BlendFactor::eSrc1Color: return "Src1Color";
18034 case BlendFactor::eOneMinusSrc1Color: return "OneMinusSrc1Color";
18035 case BlendFactor::eSrc1Alpha: return "Src1Alpha";
18036 case BlendFactor::eOneMinusSrc1Alpha: return "OneMinusSrc1Alpha";
18037 default: return "invalid";
18038 }
18039 }
18040
18041 inline std::string to_string(BlendOp value)
18042 {
18043 switch (value)
18044 {
18045 case BlendOp::eAdd: return "Add";
18046 case BlendOp::eSubtract: return "Subtract";
18047 case BlendOp::eReverseSubtract: return "ReverseSubtract";
18048 case BlendOp::eMin: return "Min";
18049 case BlendOp::eMax: return "Max";
18050 default: return "invalid";
18051 }
18052 }
18053
18054 inline std::string to_string(StencilOp value)
18055 {
18056 switch (value)
18057 {
18058 case StencilOp::eKeep: return "Keep";
18059 case StencilOp::eZero: return "Zero";
18060 case StencilOp::eReplace: return "Replace";
18061 case StencilOp::eIncrementAndClamp: return "IncrementAndClamp";
18062 case StencilOp::eDecrementAndClamp: return "DecrementAndClamp";
18063 case StencilOp::eInvert: return "Invert";
18064 case StencilOp::eIncrementAndWrap: return "IncrementAndWrap";
18065 case StencilOp::eDecrementAndWrap: return "DecrementAndWrap";
18066 default: return "invalid";
18067 }
18068 }
18069
18070 inline std::string to_string(LogicOp value)
18071 {
18072 switch (value)
18073 {
18074 case LogicOp::eClear: return "Clear";
18075 case LogicOp::eAnd: return "And";
18076 case LogicOp::eAndReverse: return "AndReverse";
18077 case LogicOp::eCopy: return "Copy";
18078 case LogicOp::eAndInverted: return "AndInverted";
18079 case LogicOp::eNoOp: return "NoOp";
18080 case LogicOp::eXor: return "Xor";
18081 case LogicOp::eOr: return "Or";
18082 case LogicOp::eNor: return "Nor";
18083 case LogicOp::eEquivalent: return "Equivalent";
18084 case LogicOp::eInvert: return "Invert";
18085 case LogicOp::eOrReverse: return "OrReverse";
18086 case LogicOp::eCopyInverted: return "CopyInverted";
18087 case LogicOp::eOrInverted: return "OrInverted";
18088 case LogicOp::eNand: return "Nand";
18089 case LogicOp::eSet: return "Set";
18090 default: return "invalid";
18091 }
18092 }
18093
18094 inline std::string to_string(InternalAllocationType value)
18095 {
18096 switch (value)
18097 {
18098 case InternalAllocationType::eExecutable: return "Executable";
18099 default: return "invalid";
18100 }
18101 }
18102
18103 inline std::string to_string(SystemAllocationScope value)
18104 {
18105 switch (value)
18106 {
18107 case SystemAllocationScope::eCommand: return "Command";
18108 case SystemAllocationScope::eObject: return "Object";
18109 case SystemAllocationScope::eCache: return "Cache";
18110 case SystemAllocationScope::eDevice: return "Device";
18111 case SystemAllocationScope::eInstance: return "Instance";
18112 default: return "invalid";
18113 }
18114 }
18115
18116 inline std::string to_string(PhysicalDeviceType value)
18117 {
18118 switch (value)
18119 {
18120 case PhysicalDeviceType::eOther: return "Other";
18121 case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu";
18122 case PhysicalDeviceType::eDiscreteGpu: return "DiscreteGpu";
18123 case PhysicalDeviceType::eVirtualGpu: return "VirtualGpu";
18124 case PhysicalDeviceType::eCpu: return "Cpu";
18125 default: return "invalid";
18126 }
18127 }
18128
18129 inline std::string to_string(VertexInputRate value)
18130 {
18131 switch (value)
18132 {
18133 case VertexInputRate::eVertex: return "Vertex";
18134 case VertexInputRate::eInstance: return "Instance";
18135 default: return "invalid";
18136 }
18137 }
18138
18139 inline std::string to_string(Format value)
18140 {
18141 switch (value)
18142 {
18143 case Format::eUndefined: return "Undefined";
18144 case Format::eR4G4UnormPack8: return "R4G4UnormPack8";
18145 case Format::eR4G4B4A4UnormPack16: return "R4G4B4A4UnormPack16";
18146 case Format::eB4G4R4A4UnormPack16: return "B4G4R4A4UnormPack16";
18147 case Format::eR5G6B5UnormPack16: return "R5G6B5UnormPack16";
18148 case Format::eB5G6R5UnormPack16: return "B5G6R5UnormPack16";
18149 case Format::eR5G5B5A1UnormPack16: return "R5G5B5A1UnormPack16";
18150 case Format::eB5G5R5A1UnormPack16: return "B5G5R5A1UnormPack16";
18151 case Format::eA1R5G5B5UnormPack16: return "A1R5G5B5UnormPack16";
18152 case Format::eR8Unorm: return "R8Unorm";
18153 case Format::eR8Snorm: return "R8Snorm";
18154 case Format::eR8Uscaled: return "R8Uscaled";
18155 case Format::eR8Sscaled: return "R8Sscaled";
18156 case Format::eR8Uint: return "R8Uint";
18157 case Format::eR8Sint: return "R8Sint";
18158 case Format::eR8Srgb: return "R8Srgb";
18159 case Format::eR8G8Unorm: return "R8G8Unorm";
18160 case Format::eR8G8Snorm: return "R8G8Snorm";
18161 case Format::eR8G8Uscaled: return "R8G8Uscaled";
18162 case Format::eR8G8Sscaled: return "R8G8Sscaled";
18163 case Format::eR8G8Uint: return "R8G8Uint";
18164 case Format::eR8G8Sint: return "R8G8Sint";
18165 case Format::eR8G8Srgb: return "R8G8Srgb";
18166 case Format::eR8G8B8Unorm: return "R8G8B8Unorm";
18167 case Format::eR8G8B8Snorm: return "R8G8B8Snorm";
18168 case Format::eR8G8B8Uscaled: return "R8G8B8Uscaled";
18169 case Format::eR8G8B8Sscaled: return "R8G8B8Sscaled";
18170 case Format::eR8G8B8Uint: return "R8G8B8Uint";
18171 case Format::eR8G8B8Sint: return "R8G8B8Sint";
18172 case Format::eR8G8B8Srgb: return "R8G8B8Srgb";
18173 case Format::eB8G8R8Unorm: return "B8G8R8Unorm";
18174 case Format::eB8G8R8Snorm: return "B8G8R8Snorm";
18175 case Format::eB8G8R8Uscaled: return "B8G8R8Uscaled";
18176 case Format::eB8G8R8Sscaled: return "B8G8R8Sscaled";
18177 case Format::eB8G8R8Uint: return "B8G8R8Uint";
18178 case Format::eB8G8R8Sint: return "B8G8R8Sint";
18179 case Format::eB8G8R8Srgb: return "B8G8R8Srgb";
18180 case Format::eR8G8B8A8Unorm: return "R8G8B8A8Unorm";
18181 case Format::eR8G8B8A8Snorm: return "R8G8B8A8Snorm";
18182 case Format::eR8G8B8A8Uscaled: return "R8G8B8A8Uscaled";
18183 case Format::eR8G8B8A8Sscaled: return "R8G8B8A8Sscaled";
18184 case Format::eR8G8B8A8Uint: return "R8G8B8A8Uint";
18185 case Format::eR8G8B8A8Sint: return "R8G8B8A8Sint";
18186 case Format::eR8G8B8A8Srgb: return "R8G8B8A8Srgb";
18187 case Format::eB8G8R8A8Unorm: return "B8G8R8A8Unorm";
18188 case Format::eB8G8R8A8Snorm: return "B8G8R8A8Snorm";
18189 case Format::eB8G8R8A8Uscaled: return "B8G8R8A8Uscaled";
18190 case Format::eB8G8R8A8Sscaled: return "B8G8R8A8Sscaled";
18191 case Format::eB8G8R8A8Uint: return "B8G8R8A8Uint";
18192 case Format::eB8G8R8A8Sint: return "B8G8R8A8Sint";
18193 case Format::eB8G8R8A8Srgb: return "B8G8R8A8Srgb";
18194 case Format::eA8B8G8R8UnormPack32: return "A8B8G8R8UnormPack32";
18195 case Format::eA8B8G8R8SnormPack32: return "A8B8G8R8SnormPack32";
18196 case Format::eA8B8G8R8UscaledPack32: return "A8B8G8R8UscaledPack32";
18197 case Format::eA8B8G8R8SscaledPack32: return "A8B8G8R8SscaledPack32";
18198 case Format::eA8B8G8R8UintPack32: return "A8B8G8R8UintPack32";
18199 case Format::eA8B8G8R8SintPack32: return "A8B8G8R8SintPack32";
18200 case Format::eA8B8G8R8SrgbPack32: return "A8B8G8R8SrgbPack32";
18201 case Format::eA2R10G10B10UnormPack32: return "A2R10G10B10UnormPack32";
18202 case Format::eA2R10G10B10SnormPack32: return "A2R10G10B10SnormPack32";
18203 case Format::eA2R10G10B10UscaledPack32: return "A2R10G10B10UscaledPack32";
18204 case Format::eA2R10G10B10SscaledPack32: return "A2R10G10B10SscaledPack32";
18205 case Format::eA2R10G10B10UintPack32: return "A2R10G10B10UintPack32";
18206 case Format::eA2R10G10B10SintPack32: return "A2R10G10B10SintPack32";
18207 case Format::eA2B10G10R10UnormPack32: return "A2B10G10R10UnormPack32";
18208 case Format::eA2B10G10R10SnormPack32: return "A2B10G10R10SnormPack32";
18209 case Format::eA2B10G10R10UscaledPack32: return "A2B10G10R10UscaledPack32";
18210 case Format::eA2B10G10R10SscaledPack32: return "A2B10G10R10SscaledPack32";
18211 case Format::eA2B10G10R10UintPack32: return "A2B10G10R10UintPack32";
18212 case Format::eA2B10G10R10SintPack32: return "A2B10G10R10SintPack32";
18213 case Format::eR16Unorm: return "R16Unorm";
18214 case Format::eR16Snorm: return "R16Snorm";
18215 case Format::eR16Uscaled: return "R16Uscaled";
18216 case Format::eR16Sscaled: return "R16Sscaled";
18217 case Format::eR16Uint: return "R16Uint";
18218 case Format::eR16Sint: return "R16Sint";
18219 case Format::eR16Sfloat: return "R16Sfloat";
18220 case Format::eR16G16Unorm: return "R16G16Unorm";
18221 case Format::eR16G16Snorm: return "R16G16Snorm";
18222 case Format::eR16G16Uscaled: return "R16G16Uscaled";
18223 case Format::eR16G16Sscaled: return "R16G16Sscaled";
18224 case Format::eR16G16Uint: return "R16G16Uint";
18225 case Format::eR16G16Sint: return "R16G16Sint";
18226 case Format::eR16G16Sfloat: return "R16G16Sfloat";
18227 case Format::eR16G16B16Unorm: return "R16G16B16Unorm";
18228 case Format::eR16G16B16Snorm: return "R16G16B16Snorm";
18229 case Format::eR16G16B16Uscaled: return "R16G16B16Uscaled";
18230 case Format::eR16G16B16Sscaled: return "R16G16B16Sscaled";
18231 case Format::eR16G16B16Uint: return "R16G16B16Uint";
18232 case Format::eR16G16B16Sint: return "R16G16B16Sint";
18233 case Format::eR16G16B16Sfloat: return "R16G16B16Sfloat";
18234 case Format::eR16G16B16A16Unorm: return "R16G16B16A16Unorm";
18235 case Format::eR16G16B16A16Snorm: return "R16G16B16A16Snorm";
18236 case Format::eR16G16B16A16Uscaled: return "R16G16B16A16Uscaled";
18237 case Format::eR16G16B16A16Sscaled: return "R16G16B16A16Sscaled";
18238 case Format::eR16G16B16A16Uint: return "R16G16B16A16Uint";
18239 case Format::eR16G16B16A16Sint: return "R16G16B16A16Sint";
18240 case Format::eR16G16B16A16Sfloat: return "R16G16B16A16Sfloat";
18241 case Format::eR32Uint: return "R32Uint";
18242 case Format::eR32Sint: return "R32Sint";
18243 case Format::eR32Sfloat: return "R32Sfloat";
18244 case Format::eR32G32Uint: return "R32G32Uint";
18245 case Format::eR32G32Sint: return "R32G32Sint";
18246 case Format::eR32G32Sfloat: return "R32G32Sfloat";
18247 case Format::eR32G32B32Uint: return "R32G32B32Uint";
18248 case Format::eR32G32B32Sint: return "R32G32B32Sint";
18249 case Format::eR32G32B32Sfloat: return "R32G32B32Sfloat";
18250 case Format::eR32G32B32A32Uint: return "R32G32B32A32Uint";
18251 case Format::eR32G32B32A32Sint: return "R32G32B32A32Sint";
18252 case Format::eR32G32B32A32Sfloat: return "R32G32B32A32Sfloat";
18253 case Format::eR64Uint: return "R64Uint";
18254 case Format::eR64Sint: return "R64Sint";
18255 case Format::eR64Sfloat: return "R64Sfloat";
18256 case Format::eR64G64Uint: return "R64G64Uint";
18257 case Format::eR64G64Sint: return "R64G64Sint";
18258 case Format::eR64G64Sfloat: return "R64G64Sfloat";
18259 case Format::eR64G64B64Uint: return "R64G64B64Uint";
18260 case Format::eR64G64B64Sint: return "R64G64B64Sint";
18261 case Format::eR64G64B64Sfloat: return "R64G64B64Sfloat";
18262 case Format::eR64G64B64A64Uint: return "R64G64B64A64Uint";
18263 case Format::eR64G64B64A64Sint: return "R64G64B64A64Sint";
18264 case Format::eR64G64B64A64Sfloat: return "R64G64B64A64Sfloat";
18265 case Format::eB10G11R11UfloatPack32: return "B10G11R11UfloatPack32";
18266 case Format::eE5B9G9R9UfloatPack32: return "E5B9G9R9UfloatPack32";
18267 case Format::eD16Unorm: return "D16Unorm";
18268 case Format::eX8D24UnormPack32: return "X8D24UnormPack32";
18269 case Format::eD32Sfloat: return "D32Sfloat";
18270 case Format::eS8Uint: return "S8Uint";
18271 case Format::eD16UnormS8Uint: return "D16UnormS8Uint";
18272 case Format::eD24UnormS8Uint: return "D24UnormS8Uint";
18273 case Format::eD32SfloatS8Uint: return "D32SfloatS8Uint";
18274 case Format::eBc1RgbUnormBlock: return "Bc1RgbUnormBlock";
18275 case Format::eBc1RgbSrgbBlock: return "Bc1RgbSrgbBlock";
18276 case Format::eBc1RgbaUnormBlock: return "Bc1RgbaUnormBlock";
18277 case Format::eBc1RgbaSrgbBlock: return "Bc1RgbaSrgbBlock";
18278 case Format::eBc2UnormBlock: return "Bc2UnormBlock";
18279 case Format::eBc2SrgbBlock: return "Bc2SrgbBlock";
18280 case Format::eBc3UnormBlock: return "Bc3UnormBlock";
18281 case Format::eBc3SrgbBlock: return "Bc3SrgbBlock";
18282 case Format::eBc4UnormBlock: return "Bc4UnormBlock";
18283 case Format::eBc4SnormBlock: return "Bc4SnormBlock";
18284 case Format::eBc5UnormBlock: return "Bc5UnormBlock";
18285 case Format::eBc5SnormBlock: return "Bc5SnormBlock";
18286 case Format::eBc6HUfloatBlock: return "Bc6HUfloatBlock";
18287 case Format::eBc6HSfloatBlock: return "Bc6HSfloatBlock";
18288 case Format::eBc7UnormBlock: return "Bc7UnormBlock";
18289 case Format::eBc7SrgbBlock: return "Bc7SrgbBlock";
18290 case Format::eEtc2R8G8B8UnormBlock: return "Etc2R8G8B8UnormBlock";
18291 case Format::eEtc2R8G8B8SrgbBlock: return "Etc2R8G8B8SrgbBlock";
18292 case Format::eEtc2R8G8B8A1UnormBlock: return "Etc2R8G8B8A1UnormBlock";
18293 case Format::eEtc2R8G8B8A1SrgbBlock: return "Etc2R8G8B8A1SrgbBlock";
18294 case Format::eEtc2R8G8B8A8UnormBlock: return "Etc2R8G8B8A8UnormBlock";
18295 case Format::eEtc2R8G8B8A8SrgbBlock: return "Etc2R8G8B8A8SrgbBlock";
18296 case Format::eEacR11UnormBlock: return "EacR11UnormBlock";
18297 case Format::eEacR11SnormBlock: return "EacR11SnormBlock";
18298 case Format::eEacR11G11UnormBlock: return "EacR11G11UnormBlock";
18299 case Format::eEacR11G11SnormBlock: return "EacR11G11SnormBlock";
18300 case Format::eAstc4x4UnormBlock: return "Astc4x4UnormBlock";
18301 case Format::eAstc4x4SrgbBlock: return "Astc4x4SrgbBlock";
18302 case Format::eAstc5x4UnormBlock: return "Astc5x4UnormBlock";
18303 case Format::eAstc5x4SrgbBlock: return "Astc5x4SrgbBlock";
18304 case Format::eAstc5x5UnormBlock: return "Astc5x5UnormBlock";
18305 case Format::eAstc5x5SrgbBlock: return "Astc5x5SrgbBlock";
18306 case Format::eAstc6x5UnormBlock: return "Astc6x5UnormBlock";
18307 case Format::eAstc6x5SrgbBlock: return "Astc6x5SrgbBlock";
18308 case Format::eAstc6x6UnormBlock: return "Astc6x6UnormBlock";
18309 case Format::eAstc6x6SrgbBlock: return "Astc6x6SrgbBlock";
18310 case Format::eAstc8x5UnormBlock: return "Astc8x5UnormBlock";
18311 case Format::eAstc8x5SrgbBlock: return "Astc8x5SrgbBlock";
18312 case Format::eAstc8x6UnormBlock: return "Astc8x6UnormBlock";
18313 case Format::eAstc8x6SrgbBlock: return "Astc8x6SrgbBlock";
18314 case Format::eAstc8x8UnormBlock: return "Astc8x8UnormBlock";
18315 case Format::eAstc8x8SrgbBlock: return "Astc8x8SrgbBlock";
18316 case Format::eAstc10x5UnormBlock: return "Astc10x5UnormBlock";
18317 case Format::eAstc10x5SrgbBlock: return "Astc10x5SrgbBlock";
18318 case Format::eAstc10x6UnormBlock: return "Astc10x6UnormBlock";
18319 case Format::eAstc10x6SrgbBlock: return "Astc10x6SrgbBlock";
18320 case Format::eAstc10x8UnormBlock: return "Astc10x8UnormBlock";
18321 case Format::eAstc10x8SrgbBlock: return "Astc10x8SrgbBlock";
18322 case Format::eAstc10x10UnormBlock: return "Astc10x10UnormBlock";
18323 case Format::eAstc10x10SrgbBlock: return "Astc10x10SrgbBlock";
18324 case Format::eAstc12x10UnormBlock: return "Astc12x10UnormBlock";
18325 case Format::eAstc12x10SrgbBlock: return "Astc12x10SrgbBlock";
18326 case Format::eAstc12x12UnormBlock: return "Astc12x12UnormBlock";
18327 case Format::eAstc12x12SrgbBlock: return "Astc12x12SrgbBlock";
18328 default: return "invalid";
18329 }
18330 }
18331
18332 inline std::string to_string(StructureType value)
18333 {
18334 switch (value)
18335 {
18336 case StructureType::eApplicationInfo: return "ApplicationInfo";
18337 case StructureType::eInstanceCreateInfo: return "InstanceCreateInfo";
18338 case StructureType::eDeviceQueueCreateInfo: return "DeviceQueueCreateInfo";
18339 case StructureType::eDeviceCreateInfo: return "DeviceCreateInfo";
18340 case StructureType::eSubmitInfo: return "SubmitInfo";
18341 case StructureType::eMemoryAllocateInfo: return "MemoryAllocateInfo";
18342 case StructureType::eMappedMemoryRange: return "MappedMemoryRange";
18343 case StructureType::eBindSparseInfo: return "BindSparseInfo";
18344 case StructureType::eFenceCreateInfo: return "FenceCreateInfo";
18345 case StructureType::eSemaphoreCreateInfo: return "SemaphoreCreateInfo";
18346 case StructureType::eEventCreateInfo: return "EventCreateInfo";
18347 case StructureType::eQueryPoolCreateInfo: return "QueryPoolCreateInfo";
18348 case StructureType::eBufferCreateInfo: return "BufferCreateInfo";
18349 case StructureType::eBufferViewCreateInfo: return "BufferViewCreateInfo";
18350 case StructureType::eImageCreateInfo: return "ImageCreateInfo";
18351 case StructureType::eImageViewCreateInfo: return "ImageViewCreateInfo";
18352 case StructureType::eShaderModuleCreateInfo: return "ShaderModuleCreateInfo";
18353 case StructureType::ePipelineCacheCreateInfo: return "PipelineCacheCreateInfo";
18354 case StructureType::ePipelineShaderStageCreateInfo: return "PipelineShaderStageCreateInfo";
18355 case StructureType::ePipelineVertexInputStateCreateInfo: return "PipelineVertexInputStateCreateInfo";
18356 case StructureType::ePipelineInputAssemblyStateCreateInfo: return "PipelineInputAssemblyStateCreateInfo";
18357 case StructureType::ePipelineTessellationStateCreateInfo: return "PipelineTessellationStateCreateInfo";
18358 case StructureType::ePipelineViewportStateCreateInfo: return "PipelineViewportStateCreateInfo";
18359 case StructureType::ePipelineRasterizationStateCreateInfo: return "PipelineRasterizationStateCreateInfo";
18360 case StructureType::ePipelineMultisampleStateCreateInfo: return "PipelineMultisampleStateCreateInfo";
18361 case StructureType::ePipelineDepthStencilStateCreateInfo: return "PipelineDepthStencilStateCreateInfo";
18362 case StructureType::ePipelineColorBlendStateCreateInfo: return "PipelineColorBlendStateCreateInfo";
18363 case StructureType::ePipelineDynamicStateCreateInfo: return "PipelineDynamicStateCreateInfo";
18364 case StructureType::eGraphicsPipelineCreateInfo: return "GraphicsPipelineCreateInfo";
18365 case StructureType::eComputePipelineCreateInfo: return "ComputePipelineCreateInfo";
18366 case StructureType::ePipelineLayoutCreateInfo: return "PipelineLayoutCreateInfo";
18367 case StructureType::eSamplerCreateInfo: return "SamplerCreateInfo";
18368 case StructureType::eDescriptorSetLayoutCreateInfo: return "DescriptorSetLayoutCreateInfo";
18369 case StructureType::eDescriptorPoolCreateInfo: return "DescriptorPoolCreateInfo";
18370 case StructureType::eDescriptorSetAllocateInfo: return "DescriptorSetAllocateInfo";
18371 case StructureType::eWriteDescriptorSet: return "WriteDescriptorSet";
18372 case StructureType::eCopyDescriptorSet: return "CopyDescriptorSet";
18373 case StructureType::eFramebufferCreateInfo: return "FramebufferCreateInfo";
18374 case StructureType::eRenderPassCreateInfo: return "RenderPassCreateInfo";
18375 case StructureType::eCommandPoolCreateInfo: return "CommandPoolCreateInfo";
18376 case StructureType::eCommandBufferAllocateInfo: return "CommandBufferAllocateInfo";
18377 case StructureType::eCommandBufferInheritanceInfo: return "CommandBufferInheritanceInfo";
18378 case StructureType::eCommandBufferBeginInfo: return "CommandBufferBeginInfo";
18379 case StructureType::eRenderPassBeginInfo: return "RenderPassBeginInfo";
18380 case StructureType::eBufferMemoryBarrier: return "BufferMemoryBarrier";
18381 case StructureType::eImageMemoryBarrier: return "ImageMemoryBarrier";
18382 case StructureType::eMemoryBarrier: return "MemoryBarrier";
18383 case StructureType::eLoaderInstanceCreateInfo: return "LoaderInstanceCreateInfo";
18384 case StructureType::eLoaderDeviceCreateInfo: return "LoaderDeviceCreateInfo";
18385 case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR";
18386 case StructureType::ePresentInfoKHR: return "PresentInfoKHR";
18387 case StructureType::eDisplayModeCreateInfoKHR: return "DisplayModeCreateInfoKHR";
18388 case StructureType::eDisplaySurfaceCreateInfoKHR: return "DisplaySurfaceCreateInfoKHR";
18389 case StructureType::eDisplayPresentInfoKHR: return "DisplayPresentInfoKHR";
18390 case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR";
18391 case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR";
18392 case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR";
18393 case StructureType::eMirSurfaceCreateInfoKHR: return "MirSurfaceCreateInfoKHR";
18394 case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR";
18395 case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR";
18396 case StructureType::eDebugReportCallbackCreateInfoEXT: return "DebugReportCallbackCreateInfoEXT";
18397 case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD";
18398 case StructureType::eDebugMarkerObjectNameInfoEXT: return "DebugMarkerObjectNameInfoEXT";
18399 case StructureType::eDebugMarkerObjectTagInfoEXT: return "DebugMarkerObjectTagInfoEXT";
18400 case StructureType::eDebugMarkerMarkerInfoEXT: return "DebugMarkerMarkerInfoEXT";
18401 case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV";
18402 case StructureType::eDedicatedAllocationBufferCreateInfoNV: return "DedicatedAllocationBufferCreateInfoNV";
18403 case StructureType::eDedicatedAllocationMemoryAllocateInfoNV: return "DedicatedAllocationMemoryAllocateInfoNV";
18404 default: return "invalid";
18405 }
18406 }
18407
18408 inline std::string to_string(SubpassContents value)
18409 {
18410 switch (value)
18411 {
18412 case SubpassContents::eInline: return "Inline";
18413 case SubpassContents::eSecondaryCommandBuffers: return "SecondaryCommandBuffers";
18414 default: return "invalid";
18415 }
18416 }
18417
18418 inline std::string to_string(DynamicState value)
18419 {
18420 switch (value)
18421 {
18422 case DynamicState::eViewport: return "Viewport";
18423 case DynamicState::eScissor: return "Scissor";
18424 case DynamicState::eLineWidth: return "LineWidth";
18425 case DynamicState::eDepthBias: return "DepthBias";
18426 case DynamicState::eBlendConstants: return "BlendConstants";
18427 case DynamicState::eDepthBounds: return "DepthBounds";
18428 case DynamicState::eStencilCompareMask: return "StencilCompareMask";
18429 case DynamicState::eStencilWriteMask: return "StencilWriteMask";
18430 case DynamicState::eStencilReference: return "StencilReference";
18431 default: return "invalid";
18432 }
18433 }
18434
18435 inline std::string to_string(QueueFlagBits value)
18436 {
18437 switch (value)
18438 {
18439 case QueueFlagBits::eGraphics: return "Graphics";
18440 case QueueFlagBits::eCompute: return "Compute";
18441 case QueueFlagBits::eTransfer: return "Transfer";
18442 case QueueFlagBits::eSparseBinding: return "SparseBinding";
18443 default: return "invalid";
18444 }
18445 }
18446
18447 inline std::string to_string(QueueFlags value)
18448 {
18449 if (!value) return "{}";
18450 std::string result;
18451 if (value & QueueFlagBits::eGraphics) result += "Graphics | ";
18452 if (value & QueueFlagBits::eCompute) result += "Compute | ";
18453 if (value & QueueFlagBits::eTransfer) result += "Transfer | ";
18454 if (value & QueueFlagBits::eSparseBinding) result += "SparseBinding | ";
18455 return "{" + result.substr(0, result.size() - 3) + "}";
18456 }
18457
18458 inline std::string to_string(MemoryPropertyFlagBits value)
18459 {
18460 switch (value)
18461 {
18462 case MemoryPropertyFlagBits::eDeviceLocal: return "DeviceLocal";
18463 case MemoryPropertyFlagBits::eHostVisible: return "HostVisible";
18464 case MemoryPropertyFlagBits::eHostCoherent: return "HostCoherent";
18465 case MemoryPropertyFlagBits::eHostCached: return "HostCached";
18466 case MemoryPropertyFlagBits::eLazilyAllocated: return "LazilyAllocated";
18467 default: return "invalid";
18468 }
18469 }
18470
18471 inline std::string to_string(MemoryPropertyFlags value)
18472 {
18473 if (!value) return "{}";
18474 std::string result;
18475 if (value & MemoryPropertyFlagBits::eDeviceLocal) result += "DeviceLocal | ";
18476 if (value & MemoryPropertyFlagBits::eHostVisible) result += "HostVisible | ";
18477 if (value & MemoryPropertyFlagBits::eHostCoherent) result += "HostCoherent | ";
18478 if (value & MemoryPropertyFlagBits::eHostCached) result += "HostCached | ";
18479 if (value & MemoryPropertyFlagBits::eLazilyAllocated) result += "LazilyAllocated | ";
18480 return "{" + result.substr(0, result.size() - 3) + "}";
18481 }
18482
18483 inline std::string to_string(MemoryHeapFlagBits value)
18484 {
18485 switch (value)
18486 {
18487 case MemoryHeapFlagBits::eDeviceLocal: return "DeviceLocal";
18488 default: return "invalid";
18489 }
18490 }
18491
18492 inline std::string to_string(MemoryHeapFlags value)
18493 {
18494 if (!value) return "{}";
18495 std::string result;
18496 if (value & MemoryHeapFlagBits::eDeviceLocal) result += "DeviceLocal | ";
18497 return "{" + result.substr(0, result.size() - 3) + "}";
18498 }
18499
18500 inline std::string to_string(AccessFlagBits value)
18501 {
18502 switch (value)
18503 {
18504 case AccessFlagBits::eIndirectCommandRead: return "IndirectCommandRead";
18505 case AccessFlagBits::eIndexRead: return "IndexRead";
18506 case AccessFlagBits::eVertexAttributeRead: return "VertexAttributeRead";
18507 case AccessFlagBits::eUniformRead: return "UniformRead";
18508 case AccessFlagBits::eInputAttachmentRead: return "InputAttachmentRead";
18509 case AccessFlagBits::eShaderRead: return "ShaderRead";
18510 case AccessFlagBits::eShaderWrite: return "ShaderWrite";
18511 case AccessFlagBits::eColorAttachmentRead: return "ColorAttachmentRead";
18512 case AccessFlagBits::eColorAttachmentWrite: return "ColorAttachmentWrite";
18513 case AccessFlagBits::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
18514 case AccessFlagBits::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
18515 case AccessFlagBits::eTransferRead: return "TransferRead";
18516 case AccessFlagBits::eTransferWrite: return "TransferWrite";
18517 case AccessFlagBits::eHostRead: return "HostRead";
18518 case AccessFlagBits::eHostWrite: return "HostWrite";
18519 case AccessFlagBits::eMemoryRead: return "MemoryRead";
18520 case AccessFlagBits::eMemoryWrite: return "MemoryWrite";
18521 default: return "invalid";
18522 }
18523 }
18524
18525 inline std::string to_string(AccessFlags value)
18526 {
18527 if (!value) return "{}";
18528 std::string result;
18529 if (value & AccessFlagBits::eIndirectCommandRead) result += "IndirectCommandRead | ";
18530 if (value & AccessFlagBits::eIndexRead) result += "IndexRead | ";
18531 if (value & AccessFlagBits::eVertexAttributeRead) result += "VertexAttributeRead | ";
18532 if (value & AccessFlagBits::eUniformRead) result += "UniformRead | ";
18533 if (value & AccessFlagBits::eInputAttachmentRead) result += "InputAttachmentRead | ";
18534 if (value & AccessFlagBits::eShaderRead) result += "ShaderRead | ";
18535 if (value & AccessFlagBits::eShaderWrite) result += "ShaderWrite | ";
18536 if (value & AccessFlagBits::eColorAttachmentRead) result += "ColorAttachmentRead | ";
18537 if (value & AccessFlagBits::eColorAttachmentWrite) result += "ColorAttachmentWrite | ";
18538 if (value & AccessFlagBits::eDepthStencilAttachmentRead) result += "DepthStencilAttachmentRead | ";
18539 if (value & AccessFlagBits::eDepthStencilAttachmentWrite) result += "DepthStencilAttachmentWrite | ";
18540 if (value & AccessFlagBits::eTransferRead) result += "TransferRead | ";
18541 if (value & AccessFlagBits::eTransferWrite) result += "TransferWrite | ";
18542 if (value & AccessFlagBits::eHostRead) result += "HostRead | ";
18543 if (value & AccessFlagBits::eHostWrite) result += "HostWrite | ";
18544 if (value & AccessFlagBits::eMemoryRead) result += "MemoryRead | ";
18545 if (value & AccessFlagBits::eMemoryWrite) result += "MemoryWrite | ";
18546 return "{" + result.substr(0, result.size() - 3) + "}";
18547 }
18548
18549 inline std::string to_string(BufferUsageFlagBits value)
18550 {
18551 switch (value)
18552 {
18553 case BufferUsageFlagBits::eTransferSrc: return "TransferSrc";
18554 case BufferUsageFlagBits::eTransferDst: return "TransferDst";
18555 case BufferUsageFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
18556 case BufferUsageFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
18557 case BufferUsageFlagBits::eUniformBuffer: return "UniformBuffer";
18558 case BufferUsageFlagBits::eStorageBuffer: return "StorageBuffer";
18559 case BufferUsageFlagBits::eIndexBuffer: return "IndexBuffer";
18560 case BufferUsageFlagBits::eVertexBuffer: return "VertexBuffer";
18561 case BufferUsageFlagBits::eIndirectBuffer: return "IndirectBuffer";
18562 default: return "invalid";
18563 }
18564 }
18565
18566 inline std::string to_string(BufferUsageFlags value)
18567 {
18568 if (!value) return "{}";
18569 std::string result;
18570 if (value & BufferUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
18571 if (value & BufferUsageFlagBits::eTransferDst) result += "TransferDst | ";
18572 if (value & BufferUsageFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
18573 if (value & BufferUsageFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
18574 if (value & BufferUsageFlagBits::eUniformBuffer) result += "UniformBuffer | ";
18575 if (value & BufferUsageFlagBits::eStorageBuffer) result += "StorageBuffer | ";
18576 if (value & BufferUsageFlagBits::eIndexBuffer) result += "IndexBuffer | ";
18577 if (value & BufferUsageFlagBits::eVertexBuffer) result += "VertexBuffer | ";
18578 if (value & BufferUsageFlagBits::eIndirectBuffer) result += "IndirectBuffer | ";
18579 return "{" + result.substr(0, result.size() - 3) + "}";
18580 }
18581
18582 inline std::string to_string(BufferCreateFlagBits value)
18583 {
18584 switch (value)
18585 {
18586 case BufferCreateFlagBits::eSparseBinding: return "SparseBinding";
18587 case BufferCreateFlagBits::eSparseResidency: return "SparseResidency";
18588 case BufferCreateFlagBits::eSparseAliased: return "SparseAliased";
18589 default: return "invalid";
18590 }
18591 }
18592
18593 inline std::string to_string(BufferCreateFlags value)
18594 {
18595 if (!value) return "{}";
18596 std::string result;
18597 if (value & BufferCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
18598 if (value & BufferCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
18599 if (value & BufferCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
18600 return "{" + result.substr(0, result.size() - 3) + "}";
18601 }
18602
18603 inline std::string to_string(ShaderStageFlagBits value)
18604 {
18605 switch (value)
18606 {
18607 case ShaderStageFlagBits::eVertex: return "Vertex";
18608 case ShaderStageFlagBits::eTessellationControl: return "TessellationControl";
18609 case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation";
18610 case ShaderStageFlagBits::eGeometry: return "Geometry";
18611 case ShaderStageFlagBits::eFragment: return "Fragment";
18612 case ShaderStageFlagBits::eCompute: return "Compute";
18613 case ShaderStageFlagBits::eAllGraphics: return "AllGraphics";
18614 case ShaderStageFlagBits::eAll: return "All";
18615 default: return "invalid";
18616 }
18617 }
18618
18619 inline std::string to_string(ShaderStageFlags value)
18620 {
18621 if (!value) return "{}";
18622 std::string result;
18623 if (value & ShaderStageFlagBits::eVertex) result += "Vertex | ";
18624 if (value & ShaderStageFlagBits::eTessellationControl) result += "TessellationControl | ";
18625 if (value & ShaderStageFlagBits::eTessellationEvaluation) result += "TessellationEvaluation | ";
18626 if (value & ShaderStageFlagBits::eGeometry) result += "Geometry | ";
18627 if (value & ShaderStageFlagBits::eFragment) result += "Fragment | ";
18628 if (value & ShaderStageFlagBits::eCompute) result += "Compute | ";
18629 if (value & ShaderStageFlagBits::eAllGraphics) result += "AllGraphics | ";
18630 if (value & ShaderStageFlagBits::eAll) result += "All | ";
18631 return "{" + result.substr(0, result.size() - 3) + "}";
18632 }
18633
18634 inline std::string to_string(ImageUsageFlagBits value)
18635 {
18636 switch (value)
18637 {
18638 case ImageUsageFlagBits::eTransferSrc: return "TransferSrc";
18639 case ImageUsageFlagBits::eTransferDst: return "TransferDst";
18640 case ImageUsageFlagBits::eSampled: return "Sampled";
18641 case ImageUsageFlagBits::eStorage: return "Storage";
18642 case ImageUsageFlagBits::eColorAttachment: return "ColorAttachment";
18643 case ImageUsageFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
18644 case ImageUsageFlagBits::eTransientAttachment: return "TransientAttachment";
18645 case ImageUsageFlagBits::eInputAttachment: return "InputAttachment";
18646 default: return "invalid";
18647 }
18648 }
18649
18650 inline std::string to_string(ImageUsageFlags value)
18651 {
18652 if (!value) return "{}";
18653 std::string result;
18654 if (value & ImageUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
18655 if (value & ImageUsageFlagBits::eTransferDst) result += "TransferDst | ";
18656 if (value & ImageUsageFlagBits::eSampled) result += "Sampled | ";
18657 if (value & ImageUsageFlagBits::eStorage) result += "Storage | ";
18658 if (value & ImageUsageFlagBits::eColorAttachment) result += "ColorAttachment | ";
18659 if (value & ImageUsageFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
18660 if (value & ImageUsageFlagBits::eTransientAttachment) result += "TransientAttachment | ";
18661 if (value & ImageUsageFlagBits::eInputAttachment) result += "InputAttachment | ";
18662 return "{" + result.substr(0, result.size() - 3) + "}";
18663 }
18664
18665 inline std::string to_string(ImageCreateFlagBits value)
18666 {
18667 switch (value)
18668 {
18669 case ImageCreateFlagBits::eSparseBinding: return "SparseBinding";
18670 case ImageCreateFlagBits::eSparseResidency: return "SparseResidency";
18671 case ImageCreateFlagBits::eSparseAliased: return "SparseAliased";
18672 case ImageCreateFlagBits::eMutableFormat: return "MutableFormat";
18673 case ImageCreateFlagBits::eCubeCompatible: return "CubeCompatible";
18674 default: return "invalid";
18675 }
18676 }
18677
18678 inline std::string to_string(ImageCreateFlags value)
18679 {
18680 if (!value) return "{}";
18681 std::string result;
18682 if (value & ImageCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
18683 if (value & ImageCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
18684 if (value & ImageCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
18685 if (value & ImageCreateFlagBits::eMutableFormat) result += "MutableFormat | ";
18686 if (value & ImageCreateFlagBits::eCubeCompatible) result += "CubeCompatible | ";
18687 return "{" + result.substr(0, result.size() - 3) + "}";
18688 }
18689
18690 inline std::string to_string(PipelineCreateFlagBits value)
18691 {
18692 switch (value)
18693 {
18694 case PipelineCreateFlagBits::eDisableOptimization: return "DisableOptimization";
18695 case PipelineCreateFlagBits::eAllowDerivatives: return "AllowDerivatives";
18696 case PipelineCreateFlagBits::eDerivative: return "Derivative";
18697 default: return "invalid";
18698 }
18699 }
18700
18701 inline std::string to_string(PipelineCreateFlags value)
18702 {
18703 if (!value) return "{}";
18704 std::string result;
18705 if (value & PipelineCreateFlagBits::eDisableOptimization) result += "DisableOptimization | ";
18706 if (value & PipelineCreateFlagBits::eAllowDerivatives) result += "AllowDerivatives | ";
18707 if (value & PipelineCreateFlagBits::eDerivative) result += "Derivative | ";
18708 return "{" + result.substr(0, result.size() - 3) + "}";
18709 }
18710
18711 inline std::string to_string(ColorComponentFlagBits value)
18712 {
18713 switch (value)
18714 {
18715 case ColorComponentFlagBits::eR: return "R";
18716 case ColorComponentFlagBits::eG: return "G";
18717 case ColorComponentFlagBits::eB: return "B";
18718 case ColorComponentFlagBits::eA: return "A";
18719 default: return "invalid";
18720 }
18721 }
18722
18723 inline std::string to_string(ColorComponentFlags value)
18724 {
18725 if (!value) return "{}";
18726 std::string result;
18727 if (value & ColorComponentFlagBits::eR) result += "R | ";
18728 if (value & ColorComponentFlagBits::eG) result += "G | ";
18729 if (value & ColorComponentFlagBits::eB) result += "B | ";
18730 if (value & ColorComponentFlagBits::eA) result += "A | ";
18731 return "{" + result.substr(0, result.size() - 3) + "}";
18732 }
18733
18734 inline std::string to_string(FenceCreateFlagBits value)
18735 {
18736 switch (value)
18737 {
18738 case FenceCreateFlagBits::eSignaled: return "Signaled";
18739 default: return "invalid";
18740 }
18741 }
18742
18743 inline std::string to_string(FenceCreateFlags value)
18744 {
18745 if (!value) return "{}";
18746 std::string result;
18747 if (value & FenceCreateFlagBits::eSignaled) result += "Signaled | ";
18748 return "{" + result.substr(0, result.size() - 3) + "}";
18749 }
18750
18751 inline std::string to_string(FormatFeatureFlagBits value)
18752 {
18753 switch (value)
18754 {
18755 case FormatFeatureFlagBits::eSampledImage: return "SampledImage";
18756 case FormatFeatureFlagBits::eStorageImage: return "StorageImage";
18757 case FormatFeatureFlagBits::eStorageImageAtomic: return "StorageImageAtomic";
18758 case FormatFeatureFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
18759 case FormatFeatureFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
18760 case FormatFeatureFlagBits::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic";
18761 case FormatFeatureFlagBits::eVertexBuffer: return "VertexBuffer";
18762 case FormatFeatureFlagBits::eColorAttachment: return "ColorAttachment";
18763 case FormatFeatureFlagBits::eColorAttachmentBlend: return "ColorAttachmentBlend";
18764 case FormatFeatureFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
18765 case FormatFeatureFlagBits::eBlitSrc: return "BlitSrc";
18766 case FormatFeatureFlagBits::eBlitDst: return "BlitDst";
18767 case FormatFeatureFlagBits::eSampledImageFilterLinear: return "SampledImageFilterLinear";
18768 case FormatFeatureFlagBits::eSampledImageFilterCubicIMG: return "SampledImageFilterCubicIMG";
18769 default: return "invalid";
18770 }
18771 }
18772
18773 inline std::string to_string(FormatFeatureFlags value)
18774 {
18775 if (!value) return "{}";
18776 std::string result;
18777 if (value & FormatFeatureFlagBits::eSampledImage) result += "SampledImage | ";
18778 if (value & FormatFeatureFlagBits::eStorageImage) result += "StorageImage | ";
18779 if (value & FormatFeatureFlagBits::eStorageImageAtomic) result += "StorageImageAtomic | ";
18780 if (value & FormatFeatureFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
18781 if (value & FormatFeatureFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
18782 if (value & FormatFeatureFlagBits::eStorageTexelBufferAtomic) result += "StorageTexelBufferAtomic | ";
18783 if (value & FormatFeatureFlagBits::eVertexBuffer) result += "VertexBuffer | ";
18784 if (value & FormatFeatureFlagBits::eColorAttachment) result += "ColorAttachment | ";
18785 if (value & FormatFeatureFlagBits::eColorAttachmentBlend) result += "ColorAttachmentBlend | ";
18786 if (value & FormatFeatureFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
18787 if (value & FormatFeatureFlagBits::eBlitSrc) result += "BlitSrc | ";
18788 if (value & FormatFeatureFlagBits::eBlitDst) result += "BlitDst | ";
18789 if (value & FormatFeatureFlagBits::eSampledImageFilterLinear) result += "SampledImageFilterLinear | ";
18790 if (value & FormatFeatureFlagBits::eSampledImageFilterCubicIMG) result += "SampledImageFilterCubicIMG | ";
18791 return "{" + result.substr(0, result.size() - 3) + "}";
18792 }
18793
18794 inline std::string to_string(QueryControlFlagBits value)
18795 {
18796 switch (value)
18797 {
18798 case QueryControlFlagBits::ePrecise: return "Precise";
18799 default: return "invalid";
18800 }
18801 }
18802
18803 inline std::string to_string(QueryControlFlags value)
18804 {
18805 if (!value) return "{}";
18806 std::string result;
18807 if (value & QueryControlFlagBits::ePrecise) result += "Precise | ";
18808 return "{" + result.substr(0, result.size() - 3) + "}";
18809 }
18810
18811 inline std::string to_string(QueryResultFlagBits value)
18812 {
18813 switch (value)
18814 {
18815 case QueryResultFlagBits::e64: return "64";
18816 case QueryResultFlagBits::eWait: return "Wait";
18817 case QueryResultFlagBits::eWithAvailability: return "WithAvailability";
18818 case QueryResultFlagBits::ePartial: return "Partial";
18819 default: return "invalid";
18820 }
18821 }
18822
18823 inline std::string to_string(QueryResultFlags value)
18824 {
18825 if (!value) return "{}";
18826 std::string result;
18827 if (value & QueryResultFlagBits::e64) result += "64 | ";
18828 if (value & QueryResultFlagBits::eWait) result += "Wait | ";
18829 if (value & QueryResultFlagBits::eWithAvailability) result += "WithAvailability | ";
18830 if (value & QueryResultFlagBits::ePartial) result += "Partial | ";
18831 return "{" + result.substr(0, result.size() - 3) + "}";
18832 }
18833
18834 inline std::string to_string(CommandBufferUsageFlagBits value)
18835 {
18836 switch (value)
18837 {
18838 case CommandBufferUsageFlagBits::eOneTimeSubmit: return "OneTimeSubmit";
18839 case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue";
18840 case CommandBufferUsageFlagBits::eSimultaneousUse: return "SimultaneousUse";
18841 default: return "invalid";
18842 }
18843 }
18844
18845 inline std::string to_string(CommandBufferUsageFlags value)
18846 {
18847 if (!value) return "{}";
18848 std::string result;
18849 if (value & CommandBufferUsageFlagBits::eOneTimeSubmit) result += "OneTimeSubmit | ";
18850 if (value & CommandBufferUsageFlagBits::eRenderPassContinue) result += "RenderPassContinue | ";
18851 if (value & CommandBufferUsageFlagBits::eSimultaneousUse) result += "SimultaneousUse | ";
18852 return "{" + result.substr(0, result.size() - 3) + "}";
18853 }
18854
18855 inline std::string to_string(QueryPipelineStatisticFlagBits value)
18856 {
18857 switch (value)
18858 {
18859 case QueryPipelineStatisticFlagBits::eInputAssemblyVertices: return "InputAssemblyVertices";
18860 case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives: return "InputAssemblyPrimitives";
18861 case QueryPipelineStatisticFlagBits::eVertexShaderInvocations: return "VertexShaderInvocations";
18862 case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations: return "GeometryShaderInvocations";
18863 case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives: return "GeometryShaderPrimitives";
18864 case QueryPipelineStatisticFlagBits::eClippingInvocations: return "ClippingInvocations";
18865 case QueryPipelineStatisticFlagBits::eClippingPrimitives: return "ClippingPrimitives";
18866 case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations: return "FragmentShaderInvocations";
18867 case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches: return "TessellationControlShaderPatches";
18868 case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations";
18869 case QueryPipelineStatisticFlagBits::eComputeShaderInvocations: return "ComputeShaderInvocations";
18870 default: return "invalid";
18871 }
18872 }
18873
18874 inline std::string to_string(QueryPipelineStatisticFlags value)
18875 {
18876 if (!value) return "{}";
18877 std::string result;
18878 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices) result += "InputAssemblyVertices | ";
18879 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives) result += "InputAssemblyPrimitives | ";
18880 if (value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations) result += "VertexShaderInvocations | ";
18881 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations) result += "GeometryShaderInvocations | ";
18882 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives) result += "GeometryShaderPrimitives | ";
18883 if (value & QueryPipelineStatisticFlagBits::eClippingInvocations) result += "ClippingInvocations | ";
18884 if (value & QueryPipelineStatisticFlagBits::eClippingPrimitives) result += "ClippingPrimitives | ";
18885 if (value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations) result += "FragmentShaderInvocations | ";
18886 if (value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches) result += "TessellationControlShaderPatches | ";
18887 if (value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations) result += "TessellationEvaluationShaderInvocations | ";
18888 if (value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations) result += "ComputeShaderInvocations | ";
18889 return "{" + result.substr(0, result.size() - 3) + "}";
18890 }
18891
18892 inline std::string to_string(ImageAspectFlagBits value)
18893 {
18894 switch (value)
18895 {
18896 case ImageAspectFlagBits::eColor: return "Color";
18897 case ImageAspectFlagBits::eDepth: return "Depth";
18898 case ImageAspectFlagBits::eStencil: return "Stencil";
18899 case ImageAspectFlagBits::eMetadata: return "Metadata";
18900 default: return "invalid";
18901 }
18902 }
18903
18904 inline std::string to_string(ImageAspectFlags value)
18905 {
18906 if (!value) return "{}";
18907 std::string result;
18908 if (value & ImageAspectFlagBits::eColor) result += "Color | ";
18909 if (value & ImageAspectFlagBits::eDepth) result += "Depth | ";
18910 if (value & ImageAspectFlagBits::eStencil) result += "Stencil | ";
18911 if (value & ImageAspectFlagBits::eMetadata) result += "Metadata | ";
18912 return "{" + result.substr(0, result.size() - 3) + "}";
18913 }
18914
18915 inline std::string to_string(SparseImageFormatFlagBits value)
18916 {
18917 switch (value)
18918 {
18919 case SparseImageFormatFlagBits::eSingleMiptail: return "SingleMiptail";
18920 case SparseImageFormatFlagBits::eAlignedMipSize: return "AlignedMipSize";
18921 case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize";
18922 default: return "invalid";
18923 }
18924 }
18925
18926 inline std::string to_string(SparseImageFormatFlags value)
18927 {
18928 if (!value) return "{}";
18929 std::string result;
18930 if (value & SparseImageFormatFlagBits::eSingleMiptail) result += "SingleMiptail | ";
18931 if (value & SparseImageFormatFlagBits::eAlignedMipSize) result += "AlignedMipSize | ";
18932 if (value & SparseImageFormatFlagBits::eNonstandardBlockSize) result += "NonstandardBlockSize | ";
18933 return "{" + result.substr(0, result.size() - 3) + "}";
18934 }
18935
18936 inline std::string to_string(SparseMemoryBindFlagBits value)
18937 {
18938 switch (value)
18939 {
18940 case SparseMemoryBindFlagBits::eMetadata: return "Metadata";
18941 default: return "invalid";
18942 }
18943 }
18944
18945 inline std::string to_string(SparseMemoryBindFlags value)
18946 {
18947 if (!value) return "{}";
18948 std::string result;
18949 if (value & SparseMemoryBindFlagBits::eMetadata) result += "Metadata | ";
18950 return "{" + result.substr(0, result.size() - 3) + "}";
18951 }
18952
18953 inline std::string to_string(PipelineStageFlagBits value)
18954 {
18955 switch (value)
18956 {
18957 case PipelineStageFlagBits::eTopOfPipe: return "TopOfPipe";
18958 case PipelineStageFlagBits::eDrawIndirect: return "DrawIndirect";
18959 case PipelineStageFlagBits::eVertexInput: return "VertexInput";
18960 case PipelineStageFlagBits::eVertexShader: return "VertexShader";
18961 case PipelineStageFlagBits::eTessellationControlShader: return "TessellationControlShader";
18962 case PipelineStageFlagBits::eTessellationEvaluationShader: return "TessellationEvaluationShader";
18963 case PipelineStageFlagBits::eGeometryShader: return "GeometryShader";
18964 case PipelineStageFlagBits::eFragmentShader: return "FragmentShader";
18965 case PipelineStageFlagBits::eEarlyFragmentTests: return "EarlyFragmentTests";
18966 case PipelineStageFlagBits::eLateFragmentTests: return "LateFragmentTests";
18967 case PipelineStageFlagBits::eColorAttachmentOutput: return "ColorAttachmentOutput";
18968 case PipelineStageFlagBits::eComputeShader: return "ComputeShader";
18969 case PipelineStageFlagBits::eTransfer: return "Transfer";
18970 case PipelineStageFlagBits::eBottomOfPipe: return "BottomOfPipe";
18971 case PipelineStageFlagBits::eHost: return "Host";
18972 case PipelineStageFlagBits::eAllGraphics: return "AllGraphics";
18973 case PipelineStageFlagBits::eAllCommands: return "AllCommands";
18974 default: return "invalid";
18975 }
18976 }
18977
18978 inline std::string to_string(PipelineStageFlags value)
18979 {
18980 if (!value) return "{}";
18981 std::string result;
18982 if (value & PipelineStageFlagBits::eTopOfPipe) result += "TopOfPipe | ";
18983 if (value & PipelineStageFlagBits::eDrawIndirect) result += "DrawIndirect | ";
18984 if (value & PipelineStageFlagBits::eVertexInput) result += "VertexInput | ";
18985 if (value & PipelineStageFlagBits::eVertexShader) result += "VertexShader | ";
18986 if (value & PipelineStageFlagBits::eTessellationControlShader) result += "TessellationControlShader | ";
18987 if (value & PipelineStageFlagBits::eTessellationEvaluationShader) result += "TessellationEvaluationShader | ";
18988 if (value & PipelineStageFlagBits::eGeometryShader) result += "GeometryShader | ";
18989 if (value & PipelineStageFlagBits::eFragmentShader) result += "FragmentShader | ";
18990 if (value & PipelineStageFlagBits::eEarlyFragmentTests) result += "EarlyFragmentTests | ";
18991 if (value & PipelineStageFlagBits::eLateFragmentTests) result += "LateFragmentTests | ";
18992 if (value & PipelineStageFlagBits::eColorAttachmentOutput) result += "ColorAttachmentOutput | ";
18993 if (value & PipelineStageFlagBits::eComputeShader) result += "ComputeShader | ";
18994 if (value & PipelineStageFlagBits::eTransfer) result += "Transfer | ";
18995 if (value & PipelineStageFlagBits::eBottomOfPipe) result += "BottomOfPipe | ";
18996 if (value & PipelineStageFlagBits::eHost) result += "Host | ";
18997 if (value & PipelineStageFlagBits::eAllGraphics) result += "AllGraphics | ";
18998 if (value & PipelineStageFlagBits::eAllCommands) result += "AllCommands | ";
18999 return "{" + result.substr(0, result.size() - 3) + "}";
19000 }
19001
19002 inline std::string to_string(CommandPoolCreateFlagBits value)
19003 {
19004 switch (value)
19005 {
19006 case CommandPoolCreateFlagBits::eTransient: return "Transient";
19007 case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer";
19008 default: return "invalid";
19009 }
19010 }
19011
19012 inline std::string to_string(CommandPoolCreateFlags value)
19013 {
19014 if (!value) return "{}";
19015 std::string result;
19016 if (value & CommandPoolCreateFlagBits::eTransient) result += "Transient | ";
19017 if (value & CommandPoolCreateFlagBits::eResetCommandBuffer) result += "ResetCommandBuffer | ";
19018 return "{" + result.substr(0, result.size() - 3) + "}";
19019 }
19020
19021 inline std::string to_string(CommandPoolResetFlagBits value)
19022 {
19023 switch (value)
19024 {
19025 case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources";
19026 default: return "invalid";
19027 }
19028 }
19029
19030 inline std::string to_string(CommandPoolResetFlags value)
19031 {
19032 if (!value) return "{}";
19033 std::string result;
19034 if (value & CommandPoolResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
19035 return "{" + result.substr(0, result.size() - 3) + "}";
19036 }
19037
19038 inline std::string to_string(CommandBufferResetFlagBits value)
19039 {
19040 switch (value)
19041 {
19042 case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources";
19043 default: return "invalid";
19044 }
19045 }
19046
19047 inline std::string to_string(CommandBufferResetFlags value)
19048 {
19049 if (!value) return "{}";
19050 std::string result;
19051 if (value & CommandBufferResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
19052 return "{" + result.substr(0, result.size() - 3) + "}";
19053 }
19054
19055 inline std::string to_string(SampleCountFlagBits value)
19056 {
19057 switch (value)
19058 {
19059 case SampleCountFlagBits::e1: return "1";
19060 case SampleCountFlagBits::e2: return "2";
19061 case SampleCountFlagBits::e4: return "4";
19062 case SampleCountFlagBits::e8: return "8";
19063 case SampleCountFlagBits::e16: return "16";
19064 case SampleCountFlagBits::e32: return "32";
19065 case SampleCountFlagBits::e64: return "64";
19066 default: return "invalid";
19067 }
19068 }
19069
19070 inline std::string to_string(SampleCountFlags value)
19071 {
19072 if (!value) return "{}";
19073 std::string result;
19074 if (value & SampleCountFlagBits::e1) result += "1 | ";
19075 if (value & SampleCountFlagBits::e2) result += "2 | ";
19076 if (value & SampleCountFlagBits::e4) result += "4 | ";
19077 if (value & SampleCountFlagBits::e8) result += "8 | ";
19078 if (value & SampleCountFlagBits::e16) result += "16 | ";
19079 if (value & SampleCountFlagBits::e32) result += "32 | ";
19080 if (value & SampleCountFlagBits::e64) result += "64 | ";
19081 return "{" + result.substr(0, result.size() - 3) + "}";
19082 }
19083
19084 inline std::string to_string(AttachmentDescriptionFlagBits value)
19085 {
19086 switch (value)
19087 {
19088 case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias";
19089 default: return "invalid";
19090 }
19091 }
19092
19093 inline std::string to_string(AttachmentDescriptionFlags value)
19094 {
19095 if (!value) return "{}";
19096 std::string result;
19097 if (value & AttachmentDescriptionFlagBits::eMayAlias) result += "MayAlias | ";
19098 return "{" + result.substr(0, result.size() - 3) + "}";
19099 }
19100
19101 inline std::string to_string(StencilFaceFlagBits value)
19102 {
19103 switch (value)
19104 {
19105 case StencilFaceFlagBits::eFront: return "Front";
19106 case StencilFaceFlagBits::eBack: return "Back";
19107 case StencilFaceFlagBits::eVkStencilFrontAndBack: return "VkStencilFrontAndBack";
19108 default: return "invalid";
19109 }
19110 }
19111
19112 inline std::string to_string(StencilFaceFlags value)
19113 {
19114 if (!value) return "{}";
19115 std::string result;
19116 if (value & StencilFaceFlagBits::eFront) result += "Front | ";
19117 if (value & StencilFaceFlagBits::eBack) result += "Back | ";
19118 if (value & StencilFaceFlagBits::eVkStencilFrontAndBack) result += "VkStencilFrontAndBack | ";
19119 return "{" + result.substr(0, result.size() - 3) + "}";
19120 }
19121
19122 inline std::string to_string(DescriptorPoolCreateFlagBits value)
19123 {
19124 switch (value)
19125 {
19126 case DescriptorPoolCreateFlagBits::eFreeDescriptorSet: return "FreeDescriptorSet";
19127 default: return "invalid";
19128 }
19129 }
19130
19131 inline std::string to_string(DescriptorPoolCreateFlags value)
19132 {
19133 if (!value) return "{}";
19134 std::string result;
19135 if (value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet) result += "FreeDescriptorSet | ";
19136 return "{" + result.substr(0, result.size() - 3) + "}";
19137 }
19138
19139 inline std::string to_string(DependencyFlagBits value)
19140 {
19141 switch (value)
19142 {
19143 case DependencyFlagBits::eByRegion: return "ByRegion";
19144 default: return "invalid";
19145 }
19146 }
19147
19148 inline std::string to_string(DependencyFlags value)
19149 {
19150 if (!value) return "{}";
19151 std::string result;
19152 if (value & DependencyFlagBits::eByRegion) result += "ByRegion | ";
19153 return "{" + result.substr(0, result.size() - 3) + "}";
19154 }
19155
19156 inline std::string to_string(PresentModeKHR value)
19157 {
19158 switch (value)
19159 {
19160 case PresentModeKHR::eImmediate: return "Immediate";
19161 case PresentModeKHR::eMailbox: return "Mailbox";
19162 case PresentModeKHR::eFifo: return "Fifo";
19163 case PresentModeKHR::eFifoRelaxed: return "FifoRelaxed";
19164 default: return "invalid";
19165 }
19166 }
19167
19168 inline std::string to_string(ColorSpaceKHR value)
19169 {
19170 switch (value)
19171 {
19172 case ColorSpaceKHR::eSrgbNonlinear: return "SrgbNonlinear";
19173 default: return "invalid";
19174 }
19175 }
19176
19177 inline std::string to_string(DisplayPlaneAlphaFlagBitsKHR value)
19178 {
19179 switch (value)
19180 {
19181 case DisplayPlaneAlphaFlagBitsKHR::eOpaque: return "Opaque";
19182 case DisplayPlaneAlphaFlagBitsKHR::eGlobal: return "Global";
19183 case DisplayPlaneAlphaFlagBitsKHR::ePerPixel: return "PerPixel";
19184 case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied";
19185 default: return "invalid";
19186 }
19187 }
19188
19189 inline std::string to_string(DisplayPlaneAlphaFlagsKHR value)
19190 {
19191 if (!value) return "{}";
19192 std::string result;
19193 if (value & DisplayPlaneAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
19194 if (value & DisplayPlaneAlphaFlagBitsKHR::eGlobal) result += "Global | ";
19195 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel) result += "PerPixel | ";
19196 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied) result += "PerPixelPremultiplied | ";
19197 return "{" + result.substr(0, result.size() - 3) + "}";
19198 }
19199
19200 inline std::string to_string(CompositeAlphaFlagBitsKHR value)
19201 {
19202 switch (value)
19203 {
19204 case CompositeAlphaFlagBitsKHR::eOpaque: return "Opaque";
19205 case CompositeAlphaFlagBitsKHR::ePreMultiplied: return "PreMultiplied";
19206 case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied";
19207 case CompositeAlphaFlagBitsKHR::eInherit: return "Inherit";
19208 default: return "invalid";
19209 }
19210 }
19211
19212 inline std::string to_string(CompositeAlphaFlagsKHR value)
19213 {
19214 if (!value) return "{}";
19215 std::string result;
19216 if (value & CompositeAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
19217 if (value & CompositeAlphaFlagBitsKHR::ePreMultiplied) result += "PreMultiplied | ";
19218 if (value & CompositeAlphaFlagBitsKHR::ePostMultiplied) result += "PostMultiplied | ";
19219 if (value & CompositeAlphaFlagBitsKHR::eInherit) result += "Inherit | ";
19220 return "{" + result.substr(0, result.size() - 3) + "}";
19221 }
19222
19223 inline std::string to_string(SurfaceTransformFlagBitsKHR value)
19224 {
19225 switch (value)
19226 {
19227 case SurfaceTransformFlagBitsKHR::eIdentity: return "Identity";
19228 case SurfaceTransformFlagBitsKHR::eRotate90: return "Rotate90";
19229 case SurfaceTransformFlagBitsKHR::eRotate180: return "Rotate180";
19230 case SurfaceTransformFlagBitsKHR::eRotate270: return "Rotate270";
19231 case SurfaceTransformFlagBitsKHR::eHorizontalMirror: return "HorizontalMirror";
19232 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90: return "HorizontalMirrorRotate90";
19233 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180";
19234 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270";
19235 case SurfaceTransformFlagBitsKHR::eInherit: return "Inherit";
19236 default: return "invalid";
19237 }
19238 }
19239
19240 inline std::string to_string(SurfaceTransformFlagsKHR value)
19241 {
19242 if (!value) return "{}";
19243 std::string result;
19244 if (value & SurfaceTransformFlagBitsKHR::eIdentity) result += "Identity | ";
19245 if (value & SurfaceTransformFlagBitsKHR::eRotate90) result += "Rotate90 | ";
19246 if (value & SurfaceTransformFlagBitsKHR::eRotate180) result += "Rotate180 | ";
19247 if (value & SurfaceTransformFlagBitsKHR::eRotate270) result += "Rotate270 | ";
19248 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirror) result += "HorizontalMirror | ";
19249 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90) result += "HorizontalMirrorRotate90 | ";
19250 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180) result += "HorizontalMirrorRotate180 | ";
19251 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270) result += "HorizontalMirrorRotate270 | ";
19252 if (value & SurfaceTransformFlagBitsKHR::eInherit) result += "Inherit | ";
19253 return "{" + result.substr(0, result.size() - 3) + "}";
19254 }
19255
19256 inline std::string to_string(DebugReportFlagBitsEXT value)
19257 {
19258 switch (value)
19259 {
19260 case DebugReportFlagBitsEXT::eInformation: return "Information";
19261 case DebugReportFlagBitsEXT::eWarning: return "Warning";
19262 case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning";
19263 case DebugReportFlagBitsEXT::eError: return "Error";
19264 case DebugReportFlagBitsEXT::eDebug: return "Debug";
19265 default: return "invalid";
19266 }
19267 }
19268
19269 inline std::string to_string(DebugReportFlagsEXT value)
19270 {
19271 if (!value) return "{}";
19272 std::string result;
19273 if (value & DebugReportFlagBitsEXT::eInformation) result += "Information | ";
19274 if (value & DebugReportFlagBitsEXT::eWarning) result += "Warning | ";
19275 if (value & DebugReportFlagBitsEXT::ePerformanceWarning) result += "PerformanceWarning | ";
19276 if (value & DebugReportFlagBitsEXT::eError) result += "Error | ";
19277 if (value & DebugReportFlagBitsEXT::eDebug) result += "Debug | ";
19278 return "{" + result.substr(0, result.size() - 3) + "}";
19279 }
19280
19281 inline std::string to_string(DebugReportObjectTypeEXT value)
19282 {
19283 switch (value)
19284 {
19285 case DebugReportObjectTypeEXT::eUnknown: return "Unknown";
19286 case DebugReportObjectTypeEXT::eInstance: return "Instance";
19287 case DebugReportObjectTypeEXT::ePhysicalDevice: return "PhysicalDevice";
19288 case DebugReportObjectTypeEXT::eDevice: return "Device";
19289 case DebugReportObjectTypeEXT::eQueue: return "Queue";
19290 case DebugReportObjectTypeEXT::eSemaphore: return "Semaphore";
19291 case DebugReportObjectTypeEXT::eCommandBuffer: return "CommandBuffer";
19292 case DebugReportObjectTypeEXT::eFence: return "Fence";
19293 case DebugReportObjectTypeEXT::eDeviceMemory: return "DeviceMemory";
19294 case DebugReportObjectTypeEXT::eBuffer: return "Buffer";
19295 case DebugReportObjectTypeEXT::eImage: return "Image";
19296 case DebugReportObjectTypeEXT::eEvent: return "Event";
19297 case DebugReportObjectTypeEXT::eQueryPool: return "QueryPool";
19298 case DebugReportObjectTypeEXT::eBufferView: return "BufferView";
19299 case DebugReportObjectTypeEXT::eImageView: return "ImageView";
19300 case DebugReportObjectTypeEXT::eShaderModule: return "ShaderModule";
19301 case DebugReportObjectTypeEXT::ePipelineCache: return "PipelineCache";
19302 case DebugReportObjectTypeEXT::ePipelineLayout: return "PipelineLayout";
19303 case DebugReportObjectTypeEXT::eRenderPass: return "RenderPass";
19304 case DebugReportObjectTypeEXT::ePipeline: return "Pipeline";
19305 case DebugReportObjectTypeEXT::eDescriptorSetLayout: return "DescriptorSetLayout";
19306 case DebugReportObjectTypeEXT::eSampler: return "Sampler";
19307 case DebugReportObjectTypeEXT::eDescriptorPool: return "DescriptorPool";
19308 case DebugReportObjectTypeEXT::eDescriptorSet: return "DescriptorSet";
19309 case DebugReportObjectTypeEXT::eFramebuffer: return "Framebuffer";
19310 case DebugReportObjectTypeEXT::eCommandPool: return "CommandPool";
19311 case DebugReportObjectTypeEXT::eSurfaceKhr: return "SurfaceKhr";
19312 case DebugReportObjectTypeEXT::eSwapchainKhr: return "SwapchainKhr";
19313 case DebugReportObjectTypeEXT::eDebugReport: return "DebugReport";
19314 default: return "invalid";
19315 }
19316 }
19317
19318 inline std::string to_string(DebugReportErrorEXT value)
19319 {
19320 switch (value)
19321 {
19322 case DebugReportErrorEXT::eNone: return "None";
19323 case DebugReportErrorEXT::eCallbackRef: return "CallbackRef";
19324 default: return "invalid";
19325 }
19326 }
19327
19328 inline std::string to_string(RasterizationOrderAMD value)
19329 {
19330 switch (value)
19331 {
19332 case RasterizationOrderAMD::eStrict: return "Strict";
19333 case RasterizationOrderAMD::eRelaxed: return "Relaxed";
19334 default: return "invalid";
19335 }
19336 }
19337
19338} // namespace vk
19339
19340#endif