blob: d212d335ebacaf2f1bb201d539e54555002beac2 [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
Mark Lobodzinskic7759ac2016-11-18 08:36:15 -070043static_assert( VK_HEADER_VERSION == 34 , "Wrong VK_HEADER_VERSION!" );
Lenny Komowbed9b5c2016-08-11 11:23:15 -060044
45// 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
46// To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
Endre Oma5d2c7ec2016-09-01 17:56:41 +020047#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
Lenny Komowbed9b5c2016-08-11 11:23:15 -060048#define VULKAN_HPP_TYPESAFE_CONVERSION 1
49#endif
50
51#if !defined(VULKAN_HPP_HAS_UNRESTRICTED_UNIONS)
52# if defined(__clang__)
53# if __has_feature(cxx_unrestricted_unions)
54# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
55# endif
56# elif defined(__GNUC__)
Lenny Komow6501c122016-08-31 15:03:49 -060057# define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
Lenny Komowbed9b5c2016-08-11 11:23:15 -060058# if 40600 <= GCC_VERSION
59# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
60# endif
61# elif defined(_MSC_VER)
62# if 1900 <= _MSC_VER
63# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
64# endif
65# endif
66#endif
67
68namespace vk
69{
70 template <typename BitType, typename MaskType = VkFlags>
71 class Flags
72 {
73 public:
74 Flags()
75 : m_mask(0)
76 {
77 }
78
79 Flags(BitType bit)
80 : m_mask(static_cast<MaskType>(bit))
81 {
82 }
83
84 Flags(Flags<BitType> const& rhs)
85 : m_mask(rhs.m_mask)
86 {
87 }
88
89 Flags<BitType> & operator=(Flags<BitType> const& rhs)
90 {
91 m_mask = rhs.m_mask;
92 return *this;
93 }
94
95 Flags<BitType> & operator|=(Flags<BitType> const& rhs)
96 {
97 m_mask |= rhs.m_mask;
98 return *this;
99 }
100
101 Flags<BitType> & operator&=(Flags<BitType> const& rhs)
102 {
103 m_mask &= rhs.m_mask;
104 return *this;
105 }
106
107 Flags<BitType> & operator^=(Flags<BitType> const& rhs)
108 {
109 m_mask ^= rhs.m_mask;
110 return *this;
111 }
112
113 Flags<BitType> operator|(Flags<BitType> const& rhs) const
114 {
115 Flags<BitType> result(*this);
116 result |= rhs;
117 return result;
118 }
119
120 Flags<BitType> operator&(Flags<BitType> const& rhs) const
121 {
122 Flags<BitType> result(*this);
123 result &= rhs;
124 return result;
125 }
126
127 Flags<BitType> operator^(Flags<BitType> const& rhs) const
128 {
129 Flags<BitType> result(*this);
130 result ^= rhs;
131 return result;
132 }
133
134 bool operator!() const
135 {
136 return !m_mask;
137 }
138
139 bool operator==(Flags<BitType> const& rhs) const
140 {
141 return m_mask == rhs.m_mask;
142 }
143
144 bool operator!=(Flags<BitType> const& rhs) const
145 {
146 return m_mask != rhs.m_mask;
147 }
148
149 explicit operator bool() const
150 {
151 return !!m_mask;
152 }
153
154 explicit operator MaskType() const
155 {
156 return m_mask;
157 }
158
159 private:
160 MaskType m_mask;
161 };
162
163 template <typename BitType>
164 Flags<BitType> operator|(BitType bit, Flags<BitType> const& flags)
165 {
166 return flags | bit;
167 }
168
169 template <typename BitType>
170 Flags<BitType> operator&(BitType bit, Flags<BitType> const& flags)
171 {
172 return flags & bit;
173 }
174
175 template <typename BitType>
176 Flags<BitType> operator^(BitType bit, Flags<BitType> const& flags)
177 {
178 return flags ^ bit;
179 }
180
181 template <typename RefType>
182 class Optional
183 {
184 public:
185 Optional(RefType & reference) { m_ptr = &reference; }
186 Optional(std::nullptr_t) { m_ptr = nullptr; }
187
188 operator RefType*() const { return m_ptr; }
189 RefType const* operator->() const { return m_ptr; }
190 explicit operator bool() const { return !!m_ptr; }
191
192 private:
193 RefType *m_ptr;
194 };
195
196#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
197 template <typename T>
198 class ArrayProxy
199 {
200 public:
201 ArrayProxy(std::nullptr_t)
202 : m_count(0)
203 , m_ptr(nullptr)
204 {}
205
206 ArrayProxy(T & ptr)
207 : m_count(1)
208 , m_ptr(&ptr)
209 {}
210
211 ArrayProxy(uint32_t count, T * ptr)
212 : m_count(count)
213 , m_ptr(ptr)
214 {}
215
216 template <size_t N>
217 ArrayProxy(std::array<typename std::remove_const<T>::type, N> & data)
218 : m_count(N)
219 , m_ptr(data.data())
220 {}
221
222 template <size_t N>
223 ArrayProxy(std::array<typename std::remove_const<T>::type, N> const& data)
224 : m_count(N)
225 , m_ptr(data.data())
226 {}
227
228 template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
229 ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> & data)
230 : m_count(static_cast<uint32_t>(data.size()))
231 , m_ptr(data.data())
232 {}
233
234 template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
235 ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> const& data)
236 : m_count(static_cast<uint32_t>(data.size()))
237 , m_ptr(data.data())
238 {}
239
240 ArrayProxy(std::initializer_list<T> const& data)
241 : m_count(static_cast<uint32_t>(data.end() - data.begin()))
242 , m_ptr(data.begin())
243 {}
244
245 const T * begin() const
246 {
247 return m_ptr;
248 }
249
250 const T * end() const
251 {
252 return m_ptr + m_count;
253 }
254
255 const T & front() const
256 {
257 assert(m_count && m_ptr);
258 return *m_ptr;
259 }
260
261 const T & back() const
262 {
263 assert(m_count && m_ptr);
264 return *(m_ptr + m_count - 1);
265 }
266
267 bool empty() const
268 {
269 return (m_count == 0);
270 }
271
272 uint32_t size() const
273 {
274 return m_count;
275 }
276
277 T * data() const
278 {
279 return m_ptr;
280 }
281
282 private:
283 uint32_t m_count;
284 T * m_ptr;
285 };
286#endif
287
288 enum class Result
289 {
290 eSuccess = VK_SUCCESS,
291 eNotReady = VK_NOT_READY,
292 eTimeout = VK_TIMEOUT,
293 eEventSet = VK_EVENT_SET,
294 eEventReset = VK_EVENT_RESET,
295 eIncomplete = VK_INCOMPLETE,
296 eErrorOutOfHostMemory = VK_ERROR_OUT_OF_HOST_MEMORY,
297 eErrorOutOfDeviceMemory = VK_ERROR_OUT_OF_DEVICE_MEMORY,
298 eErrorInitializationFailed = VK_ERROR_INITIALIZATION_FAILED,
299 eErrorDeviceLost = VK_ERROR_DEVICE_LOST,
300 eErrorMemoryMapFailed = VK_ERROR_MEMORY_MAP_FAILED,
301 eErrorLayerNotPresent = VK_ERROR_LAYER_NOT_PRESENT,
302 eErrorExtensionNotPresent = VK_ERROR_EXTENSION_NOT_PRESENT,
303 eErrorFeatureNotPresent = VK_ERROR_FEATURE_NOT_PRESENT,
304 eErrorIncompatibleDriver = VK_ERROR_INCOMPATIBLE_DRIVER,
305 eErrorTooManyObjects = VK_ERROR_TOO_MANY_OBJECTS,
306 eErrorFormatNotSupported = VK_ERROR_FORMAT_NOT_SUPPORTED,
Lenny Komowebf33162016-08-26 14:10:08 -0600307 eErrorFragmentedPool = VK_ERROR_FRAGMENTED_POOL,
Lenny Komowbed9b5c2016-08-11 11:23:15 -0600308 eErrorSurfaceLostKHR = VK_ERROR_SURFACE_LOST_KHR,
309 eErrorNativeWindowInUseKHR = VK_ERROR_NATIVE_WINDOW_IN_USE_KHR,
310 eSuboptimalKHR = VK_SUBOPTIMAL_KHR,
311 eErrorOutOfDateKHR = VK_ERROR_OUT_OF_DATE_KHR,
312 eErrorIncompatibleDisplayKHR = VK_ERROR_INCOMPATIBLE_DISPLAY_KHR,
313 eErrorValidationFailedEXT = VK_ERROR_VALIDATION_FAILED_EXT,
314 eErrorInvalidShaderNV = VK_ERROR_INVALID_SHADER_NV
315 };
316
317 inline std::string to_string(Result value)
318 {
319 switch (value)
320 {
321 case Result::eSuccess: return "Success";
322 case Result::eNotReady: return "NotReady";
323 case Result::eTimeout: return "Timeout";
324 case Result::eEventSet: return "EventSet";
325 case Result::eEventReset: return "EventReset";
326 case Result::eIncomplete: return "Incomplete";
327 case Result::eErrorOutOfHostMemory: return "ErrorOutOfHostMemory";
328 case Result::eErrorOutOfDeviceMemory: return "ErrorOutOfDeviceMemory";
329 case Result::eErrorInitializationFailed: return "ErrorInitializationFailed";
330 case Result::eErrorDeviceLost: return "ErrorDeviceLost";
331 case Result::eErrorMemoryMapFailed: return "ErrorMemoryMapFailed";
332 case Result::eErrorLayerNotPresent: return "ErrorLayerNotPresent";
333 case Result::eErrorExtensionNotPresent: return "ErrorExtensionNotPresent";
334 case Result::eErrorFeatureNotPresent: return "ErrorFeatureNotPresent";
335 case Result::eErrorIncompatibleDriver: return "ErrorIncompatibleDriver";
336 case Result::eErrorTooManyObjects: return "ErrorTooManyObjects";
337 case Result::eErrorFormatNotSupported: return "ErrorFormatNotSupported";
Lenny Komowebf33162016-08-26 14:10:08 -0600338 case Result::eErrorFragmentedPool: return "ErrorFragmentedPool";
Lenny Komowbed9b5c2016-08-11 11:23:15 -0600339 case Result::eErrorSurfaceLostKHR: return "ErrorSurfaceLostKHR";
340 case Result::eErrorNativeWindowInUseKHR: return "ErrorNativeWindowInUseKHR";
341 case Result::eSuboptimalKHR: return "SuboptimalKHR";
342 case Result::eErrorOutOfDateKHR: return "ErrorOutOfDateKHR";
343 case Result::eErrorIncompatibleDisplayKHR: return "ErrorIncompatibleDisplayKHR";
344 case Result::eErrorValidationFailedEXT: return "ErrorValidationFailedEXT";
345 case Result::eErrorInvalidShaderNV: return "ErrorInvalidShaderNV";
346 default: return "invalid";
347 }
348 }
349
350#if defined(_MSC_VER) && (_MSC_VER == 1800)
351# define noexcept _NOEXCEPT
352#endif
353
354 class ErrorCategoryImpl : public std::error_category
355 {
356 public:
357 virtual const char* name() const noexcept override { return "vk::Result"; }
358 virtual std::string message(int ev) const override { return to_string(static_cast<Result>(ev)); }
359 };
360
361#if defined(_MSC_VER) && (_MSC_VER == 1800)
362# undef noexcept
363#endif
364
365 inline const std::error_category& errorCategory()
366 {
367 static ErrorCategoryImpl instance;
368 return instance;
369 }
370
371 inline std::error_code make_error_code(Result e)
372 {
373 return std::error_code(static_cast<int>(e), errorCategory());
374 }
375
376 inline std::error_condition make_error_condition(Result e)
377 {
378 return std::error_condition(static_cast<int>(e), errorCategory());
379 }
380
381} // namespace vk
382
383namespace std
384{
385 template <>
386 struct is_error_code_enum<vk::Result> : public true_type
387 {};
388}
389
390namespace vk
391{
392 template <typename T>
393 struct ResultValue
394 {
395 ResultValue( Result r, T & v )
396 : result( r )
397 , value( v )
398 {}
399
400 Result result;
401 T value;
402 };
403
404 template <typename T>
405 struct ResultValueType
406 {
407#ifdef VULKAN_HPP_NO_EXCEPTIONS
408 typedef ResultValue<T> type;
409#else
410 typedef T type;
411#endif
412 };
413
414 template <> struct ResultValueType<void>
415 {
416#ifdef VULKAN_HPP_NO_EXCEPTIONS
417 typedef Result type;
418#else
419 typedef void type;
420#endif
421 };
422
423 inline ResultValueType<void>::type createResultValue( Result result, char const * message )
424 {
425#ifdef VULKAN_HPP_NO_EXCEPTIONS
426 assert( result == Result::eSuccess );
427 return result;
428#else
429 if ( result != Result::eSuccess )
430 {
431 throw std::system_error( result, message );
432 }
433#endif
434 }
435
436 template <typename T>
437 inline typename ResultValueType<T>::type createResultValue( Result result, T & data, char const * message )
438 {
439#ifdef VULKAN_HPP_NO_EXCEPTIONS
440 assert( result == Result::eSuccess );
441 return ResultValue<T>( result, data );
442#else
443 if ( result != Result::eSuccess )
444 {
445 throw std::system_error( result, message );
446 }
447 return data;
448#endif
449 }
450
451 inline Result createResultValue( Result result, char const * message, std::initializer_list<Result> successCodes )
452 {
453#ifdef VULKAN_HPP_NO_EXCEPTIONS
454 assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
455#else
456 if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
457 {
458 throw std::system_error( result, message );
459 }
460#endif
461 return result;
462 }
463
464 template <typename T>
465 inline ResultValue<T> createResultValue( Result result, T & data, char const * message, std::initializer_list<Result> successCodes )
466 {
467#ifdef VULKAN_HPP_NO_EXCEPTIONS
468 assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
469#else
470 if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
471 {
472 throw std::system_error( result, message );
473 }
474#endif
475 return ResultValue<T>( result, data );
476 }
477
478 using SampleMask = uint32_t;
479
480 using Bool32 = uint32_t;
481
482 using DeviceSize = uint64_t;
483
484 enum class FramebufferCreateFlagBits
485 {
486 };
487
488 using FramebufferCreateFlags = Flags<FramebufferCreateFlagBits, VkFramebufferCreateFlags>;
489
490 inline FramebufferCreateFlags operator|( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 )
491 {
492 return FramebufferCreateFlags( bit0 ) | bit1;
493 }
494
495 enum class QueryPoolCreateFlagBits
496 {
497 };
498
499 using QueryPoolCreateFlags = Flags<QueryPoolCreateFlagBits, VkQueryPoolCreateFlags>;
500
501 inline QueryPoolCreateFlags operator|( QueryPoolCreateFlagBits bit0, QueryPoolCreateFlagBits bit1 )
502 {
503 return QueryPoolCreateFlags( bit0 ) | bit1;
504 }
505
506 enum class RenderPassCreateFlagBits
507 {
508 };
509
510 using RenderPassCreateFlags = Flags<RenderPassCreateFlagBits, VkRenderPassCreateFlags>;
511
512 inline RenderPassCreateFlags operator|( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 )
513 {
514 return RenderPassCreateFlags( bit0 ) | bit1;
515 }
516
517 enum class SamplerCreateFlagBits
518 {
519 };
520
521 using SamplerCreateFlags = Flags<SamplerCreateFlagBits, VkSamplerCreateFlags>;
522
523 inline SamplerCreateFlags operator|( SamplerCreateFlagBits bit0, SamplerCreateFlagBits bit1 )
524 {
525 return SamplerCreateFlags( bit0 ) | bit1;
526 }
527
528 enum class PipelineLayoutCreateFlagBits
529 {
530 };
531
532 using PipelineLayoutCreateFlags = Flags<PipelineLayoutCreateFlagBits, VkPipelineLayoutCreateFlags>;
533
534 inline PipelineLayoutCreateFlags operator|( PipelineLayoutCreateFlagBits bit0, PipelineLayoutCreateFlagBits bit1 )
535 {
536 return PipelineLayoutCreateFlags( bit0 ) | bit1;
537 }
538
539 enum class PipelineCacheCreateFlagBits
540 {
541 };
542
543 using PipelineCacheCreateFlags = Flags<PipelineCacheCreateFlagBits, VkPipelineCacheCreateFlags>;
544
545 inline PipelineCacheCreateFlags operator|( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 )
546 {
547 return PipelineCacheCreateFlags( bit0 ) | bit1;
548 }
549
550 enum class PipelineDepthStencilStateCreateFlagBits
551 {
552 };
553
554 using PipelineDepthStencilStateCreateFlags = Flags<PipelineDepthStencilStateCreateFlagBits, VkPipelineDepthStencilStateCreateFlags>;
555
556 inline PipelineDepthStencilStateCreateFlags operator|( PipelineDepthStencilStateCreateFlagBits bit0, PipelineDepthStencilStateCreateFlagBits bit1 )
557 {
558 return PipelineDepthStencilStateCreateFlags( bit0 ) | bit1;
559 }
560
561 enum class PipelineDynamicStateCreateFlagBits
562 {
563 };
564
565 using PipelineDynamicStateCreateFlags = Flags<PipelineDynamicStateCreateFlagBits, VkPipelineDynamicStateCreateFlags>;
566
567 inline PipelineDynamicStateCreateFlags operator|( PipelineDynamicStateCreateFlagBits bit0, PipelineDynamicStateCreateFlagBits bit1 )
568 {
569 return PipelineDynamicStateCreateFlags( bit0 ) | bit1;
570 }
571
572 enum class PipelineColorBlendStateCreateFlagBits
573 {
574 };
575
576 using PipelineColorBlendStateCreateFlags = Flags<PipelineColorBlendStateCreateFlagBits, VkPipelineColorBlendStateCreateFlags>;
577
578 inline PipelineColorBlendStateCreateFlags operator|( PipelineColorBlendStateCreateFlagBits bit0, PipelineColorBlendStateCreateFlagBits bit1 )
579 {
580 return PipelineColorBlendStateCreateFlags( bit0 ) | bit1;
581 }
582
583 enum class PipelineMultisampleStateCreateFlagBits
584 {
585 };
586
587 using PipelineMultisampleStateCreateFlags = Flags<PipelineMultisampleStateCreateFlagBits, VkPipelineMultisampleStateCreateFlags>;
588
589 inline PipelineMultisampleStateCreateFlags operator|( PipelineMultisampleStateCreateFlagBits bit0, PipelineMultisampleStateCreateFlagBits bit1 )
590 {
591 return PipelineMultisampleStateCreateFlags( bit0 ) | bit1;
592 }
593
594 enum class PipelineRasterizationStateCreateFlagBits
595 {
596 };
597
598 using PipelineRasterizationStateCreateFlags = Flags<PipelineRasterizationStateCreateFlagBits, VkPipelineRasterizationStateCreateFlags>;
599
600 inline PipelineRasterizationStateCreateFlags operator|( PipelineRasterizationStateCreateFlagBits bit0, PipelineRasterizationStateCreateFlagBits bit1 )
601 {
602 return PipelineRasterizationStateCreateFlags( bit0 ) | bit1;
603 }
604
605 enum class PipelineViewportStateCreateFlagBits
606 {
607 };
608
609 using PipelineViewportStateCreateFlags = Flags<PipelineViewportStateCreateFlagBits, VkPipelineViewportStateCreateFlags>;
610
611 inline PipelineViewportStateCreateFlags operator|( PipelineViewportStateCreateFlagBits bit0, PipelineViewportStateCreateFlagBits bit1 )
612 {
613 return PipelineViewportStateCreateFlags( bit0 ) | bit1;
614 }
615
616 enum class PipelineTessellationStateCreateFlagBits
617 {
618 };
619
620 using PipelineTessellationStateCreateFlags = Flags<PipelineTessellationStateCreateFlagBits, VkPipelineTessellationStateCreateFlags>;
621
622 inline PipelineTessellationStateCreateFlags operator|( PipelineTessellationStateCreateFlagBits bit0, PipelineTessellationStateCreateFlagBits bit1 )
623 {
624 return PipelineTessellationStateCreateFlags( bit0 ) | bit1;
625 }
626
627 enum class PipelineInputAssemblyStateCreateFlagBits
628 {
629 };
630
631 using PipelineInputAssemblyStateCreateFlags = Flags<PipelineInputAssemblyStateCreateFlagBits, VkPipelineInputAssemblyStateCreateFlags>;
632
633 inline PipelineInputAssemblyStateCreateFlags operator|( PipelineInputAssemblyStateCreateFlagBits bit0, PipelineInputAssemblyStateCreateFlagBits bit1 )
634 {
635 return PipelineInputAssemblyStateCreateFlags( bit0 ) | bit1;
636 }
637
638 enum class PipelineVertexInputStateCreateFlagBits
639 {
640 };
641
642 using PipelineVertexInputStateCreateFlags = Flags<PipelineVertexInputStateCreateFlagBits, VkPipelineVertexInputStateCreateFlags>;
643
644 inline PipelineVertexInputStateCreateFlags operator|( PipelineVertexInputStateCreateFlagBits bit0, PipelineVertexInputStateCreateFlagBits bit1 )
645 {
646 return PipelineVertexInputStateCreateFlags( bit0 ) | bit1;
647 }
648
649 enum class PipelineShaderStageCreateFlagBits
650 {
651 };
652
653 using PipelineShaderStageCreateFlags = Flags<PipelineShaderStageCreateFlagBits, VkPipelineShaderStageCreateFlags>;
654
655 inline PipelineShaderStageCreateFlags operator|( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 )
656 {
657 return PipelineShaderStageCreateFlags( bit0 ) | bit1;
658 }
659
660 enum class DescriptorSetLayoutCreateFlagBits
661 {
662 };
663
664 using DescriptorSetLayoutCreateFlags = Flags<DescriptorSetLayoutCreateFlagBits, VkDescriptorSetLayoutCreateFlags>;
665
666 inline DescriptorSetLayoutCreateFlags operator|( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 )
667 {
668 return DescriptorSetLayoutCreateFlags( bit0 ) | bit1;
669 }
670
671 enum class BufferViewCreateFlagBits
672 {
673 };
674
675 using BufferViewCreateFlags = Flags<BufferViewCreateFlagBits, VkBufferViewCreateFlags>;
676
677 inline BufferViewCreateFlags operator|( BufferViewCreateFlagBits bit0, BufferViewCreateFlagBits bit1 )
678 {
679 return BufferViewCreateFlags( bit0 ) | bit1;
680 }
681
682 enum class InstanceCreateFlagBits
683 {
684 };
685
686 using InstanceCreateFlags = Flags<InstanceCreateFlagBits, VkInstanceCreateFlags>;
687
688 inline InstanceCreateFlags operator|( InstanceCreateFlagBits bit0, InstanceCreateFlagBits bit1 )
689 {
690 return InstanceCreateFlags( bit0 ) | bit1;
691 }
692
693 enum class DeviceCreateFlagBits
694 {
695 };
696
697 using DeviceCreateFlags = Flags<DeviceCreateFlagBits, VkDeviceCreateFlags>;
698
699 inline DeviceCreateFlags operator|( DeviceCreateFlagBits bit0, DeviceCreateFlagBits bit1 )
700 {
701 return DeviceCreateFlags( bit0 ) | bit1;
702 }
703
704 enum class DeviceQueueCreateFlagBits
705 {
706 };
707
708 using DeviceQueueCreateFlags = Flags<DeviceQueueCreateFlagBits, VkDeviceQueueCreateFlags>;
709
710 inline DeviceQueueCreateFlags operator|( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 )
711 {
712 return DeviceQueueCreateFlags( bit0 ) | bit1;
713 }
714
715 enum class ImageViewCreateFlagBits
716 {
717 };
718
719 using ImageViewCreateFlags = Flags<ImageViewCreateFlagBits, VkImageViewCreateFlags>;
720
721 inline ImageViewCreateFlags operator|( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 )
722 {
723 return ImageViewCreateFlags( bit0 ) | bit1;
724 }
725
726 enum class SemaphoreCreateFlagBits
727 {
728 };
729
730 using SemaphoreCreateFlags = Flags<SemaphoreCreateFlagBits, VkSemaphoreCreateFlags>;
731
732 inline SemaphoreCreateFlags operator|( SemaphoreCreateFlagBits bit0, SemaphoreCreateFlagBits bit1 )
733 {
734 return SemaphoreCreateFlags( bit0 ) | bit1;
735 }
736
737 enum class ShaderModuleCreateFlagBits
738 {
739 };
740
741 using ShaderModuleCreateFlags = Flags<ShaderModuleCreateFlagBits, VkShaderModuleCreateFlags>;
742
743 inline ShaderModuleCreateFlags operator|( ShaderModuleCreateFlagBits bit0, ShaderModuleCreateFlagBits bit1 )
744 {
745 return ShaderModuleCreateFlags( bit0 ) | bit1;
746 }
747
748 enum class EventCreateFlagBits
749 {
750 };
751
752 using EventCreateFlags = Flags<EventCreateFlagBits, VkEventCreateFlags>;
753
754 inline EventCreateFlags operator|( EventCreateFlagBits bit0, EventCreateFlagBits bit1 )
755 {
756 return EventCreateFlags( bit0 ) | bit1;
757 }
758
759 enum class MemoryMapFlagBits
760 {
761 };
762
763 using MemoryMapFlags = Flags<MemoryMapFlagBits, VkMemoryMapFlags>;
764
765 inline MemoryMapFlags operator|( MemoryMapFlagBits bit0, MemoryMapFlagBits bit1 )
766 {
767 return MemoryMapFlags( bit0 ) | bit1;
768 }
769
770 enum class SubpassDescriptionFlagBits
771 {
772 };
773
774 using SubpassDescriptionFlags = Flags<SubpassDescriptionFlagBits, VkSubpassDescriptionFlags>;
775
776 inline SubpassDescriptionFlags operator|( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 )
777 {
778 return SubpassDescriptionFlags( bit0 ) | bit1;
779 }
780
781 enum class DescriptorPoolResetFlagBits
782 {
783 };
784
785 using DescriptorPoolResetFlags = Flags<DescriptorPoolResetFlagBits, VkDescriptorPoolResetFlags>;
786
787 inline DescriptorPoolResetFlags operator|( DescriptorPoolResetFlagBits bit0, DescriptorPoolResetFlagBits bit1 )
788 {
789 return DescriptorPoolResetFlags( bit0 ) | bit1;
790 }
791
792 enum class SwapchainCreateFlagBitsKHR
793 {
794 };
795
796 using SwapchainCreateFlagsKHR = Flags<SwapchainCreateFlagBitsKHR, VkSwapchainCreateFlagsKHR>;
797
798 inline SwapchainCreateFlagsKHR operator|( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 )
799 {
800 return SwapchainCreateFlagsKHR( bit0 ) | bit1;
801 }
802
803 enum class DisplayModeCreateFlagBitsKHR
804 {
805 };
806
807 using DisplayModeCreateFlagsKHR = Flags<DisplayModeCreateFlagBitsKHR, VkDisplayModeCreateFlagsKHR>;
808
809 inline DisplayModeCreateFlagsKHR operator|( DisplayModeCreateFlagBitsKHR bit0, DisplayModeCreateFlagBitsKHR bit1 )
810 {
811 return DisplayModeCreateFlagsKHR( bit0 ) | bit1;
812 }
813
814 enum class DisplaySurfaceCreateFlagBitsKHR
815 {
816 };
817
818 using DisplaySurfaceCreateFlagsKHR = Flags<DisplaySurfaceCreateFlagBitsKHR, VkDisplaySurfaceCreateFlagsKHR>;
819
820 inline DisplaySurfaceCreateFlagsKHR operator|( DisplaySurfaceCreateFlagBitsKHR bit0, DisplaySurfaceCreateFlagBitsKHR bit1 )
821 {
822 return DisplaySurfaceCreateFlagsKHR( bit0 ) | bit1;
823 }
824
825#ifdef VK_USE_PLATFORM_ANDROID_KHR
826 enum class AndroidSurfaceCreateFlagBitsKHR
827 {
828 };
829#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
830
831#ifdef VK_USE_PLATFORM_ANDROID_KHR
832 using AndroidSurfaceCreateFlagsKHR = Flags<AndroidSurfaceCreateFlagBitsKHR, VkAndroidSurfaceCreateFlagsKHR>;
833
834 inline AndroidSurfaceCreateFlagsKHR operator|( AndroidSurfaceCreateFlagBitsKHR bit0, AndroidSurfaceCreateFlagBitsKHR bit1 )
835 {
836 return AndroidSurfaceCreateFlagsKHR( bit0 ) | bit1;
837 }
838#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
839
840#ifdef VK_USE_PLATFORM_MIR_KHR
841 enum class MirSurfaceCreateFlagBitsKHR
842 {
843 };
844#endif /*VK_USE_PLATFORM_MIR_KHR*/
845
846#ifdef VK_USE_PLATFORM_MIR_KHR
847 using MirSurfaceCreateFlagsKHR = Flags<MirSurfaceCreateFlagBitsKHR, VkMirSurfaceCreateFlagsKHR>;
848
849 inline MirSurfaceCreateFlagsKHR operator|( MirSurfaceCreateFlagBitsKHR bit0, MirSurfaceCreateFlagBitsKHR bit1 )
850 {
851 return MirSurfaceCreateFlagsKHR( bit0 ) | bit1;
852 }
853#endif /*VK_USE_PLATFORM_MIR_KHR*/
854
855#ifdef VK_USE_PLATFORM_WAYLAND_KHR
856 enum class WaylandSurfaceCreateFlagBitsKHR
857 {
858 };
859#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
860
861#ifdef VK_USE_PLATFORM_WAYLAND_KHR
862 using WaylandSurfaceCreateFlagsKHR = Flags<WaylandSurfaceCreateFlagBitsKHR, VkWaylandSurfaceCreateFlagsKHR>;
863
864 inline WaylandSurfaceCreateFlagsKHR operator|( WaylandSurfaceCreateFlagBitsKHR bit0, WaylandSurfaceCreateFlagBitsKHR bit1 )
865 {
866 return WaylandSurfaceCreateFlagsKHR( bit0 ) | bit1;
867 }
868#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
869
870#ifdef VK_USE_PLATFORM_WIN32_KHR
871 enum class Win32SurfaceCreateFlagBitsKHR
872 {
873 };
874#endif /*VK_USE_PLATFORM_WIN32_KHR*/
875
876#ifdef VK_USE_PLATFORM_WIN32_KHR
877 using Win32SurfaceCreateFlagsKHR = Flags<Win32SurfaceCreateFlagBitsKHR, VkWin32SurfaceCreateFlagsKHR>;
878
879 inline Win32SurfaceCreateFlagsKHR operator|( Win32SurfaceCreateFlagBitsKHR bit0, Win32SurfaceCreateFlagBitsKHR bit1 )
880 {
881 return Win32SurfaceCreateFlagsKHR( bit0 ) | bit1;
882 }
883#endif /*VK_USE_PLATFORM_WIN32_KHR*/
884
885#ifdef VK_USE_PLATFORM_XLIB_KHR
886 enum class XlibSurfaceCreateFlagBitsKHR
887 {
888 };
889#endif /*VK_USE_PLATFORM_XLIB_KHR*/
890
891#ifdef VK_USE_PLATFORM_XLIB_KHR
892 using XlibSurfaceCreateFlagsKHR = Flags<XlibSurfaceCreateFlagBitsKHR, VkXlibSurfaceCreateFlagsKHR>;
893
894 inline XlibSurfaceCreateFlagsKHR operator|( XlibSurfaceCreateFlagBitsKHR bit0, XlibSurfaceCreateFlagBitsKHR bit1 )
895 {
896 return XlibSurfaceCreateFlagsKHR( bit0 ) | bit1;
897 }
898#endif /*VK_USE_PLATFORM_XLIB_KHR*/
899
900#ifdef VK_USE_PLATFORM_XCB_KHR
901 enum class XcbSurfaceCreateFlagBitsKHR
902 {
903 };
904#endif /*VK_USE_PLATFORM_XCB_KHR*/
905
906#ifdef VK_USE_PLATFORM_XCB_KHR
907 using XcbSurfaceCreateFlagsKHR = Flags<XcbSurfaceCreateFlagBitsKHR, VkXcbSurfaceCreateFlagsKHR>;
908
909 inline XcbSurfaceCreateFlagsKHR operator|( XcbSurfaceCreateFlagBitsKHR bit0, XcbSurfaceCreateFlagBitsKHR bit1 )
910 {
911 return XcbSurfaceCreateFlagsKHR( bit0 ) | bit1;
912 }
913#endif /*VK_USE_PLATFORM_XCB_KHR*/
914
915 class DeviceMemory
916 {
917 public:
918 DeviceMemory()
919 : m_deviceMemory(VK_NULL_HANDLE)
920 {}
921
922#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
923 DeviceMemory(VkDeviceMemory deviceMemory)
924 : m_deviceMemory(deviceMemory)
925 {}
926
927 DeviceMemory& operator=(VkDeviceMemory deviceMemory)
928 {
929 m_deviceMemory = deviceMemory;
930 return *this;
931 }
932#endif
933
Lenny Komowebf33162016-08-26 14:10:08 -0600934 bool operator==(DeviceMemory const &rhs) const
935 {
936 return m_deviceMemory == rhs.m_deviceMemory;
937 }
938
939 bool operator!=(DeviceMemory const &rhs) const
940 {
941 return m_deviceMemory != rhs.m_deviceMemory;
942 }
943
944 bool operator<(DeviceMemory const &rhs) const
945 {
946 return m_deviceMemory < rhs.m_deviceMemory;
947 }
948
Lenny Komowbed9b5c2016-08-11 11:23:15 -0600949#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
950 explicit
951#endif
952 operator VkDeviceMemory() const
953 {
954 return m_deviceMemory;
955 }
956
957 explicit operator bool() const
958 {
959 return m_deviceMemory != VK_NULL_HANDLE;
960 }
961
962 bool operator!() const
963 {
964 return m_deviceMemory == VK_NULL_HANDLE;
965 }
966
967 private:
968 VkDeviceMemory m_deviceMemory;
969 };
970 static_assert( sizeof( DeviceMemory ) == sizeof( VkDeviceMemory ), "handle and wrapper have different size!" );
971
972 class CommandPool
973 {
974 public:
975 CommandPool()
976 : m_commandPool(VK_NULL_HANDLE)
977 {}
978
979#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
980 CommandPool(VkCommandPool commandPool)
981 : m_commandPool(commandPool)
982 {}
983
984 CommandPool& operator=(VkCommandPool commandPool)
985 {
986 m_commandPool = commandPool;
987 return *this;
988 }
989#endif
990
Lenny Komowebf33162016-08-26 14:10:08 -0600991 bool operator==(CommandPool const &rhs) const
992 {
993 return m_commandPool == rhs.m_commandPool;
994 }
995
996 bool operator!=(CommandPool const &rhs) const
997 {
998 return m_commandPool != rhs.m_commandPool;
999 }
1000
1001 bool operator<(CommandPool const &rhs) const
1002 {
1003 return m_commandPool < rhs.m_commandPool;
1004 }
1005
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001006#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1007 explicit
1008#endif
1009 operator VkCommandPool() const
1010 {
1011 return m_commandPool;
1012 }
1013
1014 explicit operator bool() const
1015 {
1016 return m_commandPool != VK_NULL_HANDLE;
1017 }
1018
1019 bool operator!() const
1020 {
1021 return m_commandPool == VK_NULL_HANDLE;
1022 }
1023
1024 private:
1025 VkCommandPool m_commandPool;
1026 };
1027 static_assert( sizeof( CommandPool ) == sizeof( VkCommandPool ), "handle and wrapper have different size!" );
1028
1029 class Buffer
1030 {
1031 public:
1032 Buffer()
1033 : m_buffer(VK_NULL_HANDLE)
1034 {}
1035
1036#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1037 Buffer(VkBuffer buffer)
1038 : m_buffer(buffer)
1039 {}
1040
1041 Buffer& operator=(VkBuffer buffer)
1042 {
1043 m_buffer = buffer;
1044 return *this;
1045 }
1046#endif
1047
Lenny Komowebf33162016-08-26 14:10:08 -06001048 bool operator==(Buffer const &rhs) const
1049 {
1050 return m_buffer == rhs.m_buffer;
1051 }
1052
1053 bool operator!=(Buffer const &rhs) const
1054 {
1055 return m_buffer != rhs.m_buffer;
1056 }
1057
1058 bool operator<(Buffer const &rhs) const
1059 {
1060 return m_buffer < rhs.m_buffer;
1061 }
1062
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001063#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1064 explicit
1065#endif
1066 operator VkBuffer() const
1067 {
1068 return m_buffer;
1069 }
1070
1071 explicit operator bool() const
1072 {
1073 return m_buffer != VK_NULL_HANDLE;
1074 }
1075
1076 bool operator!() const
1077 {
1078 return m_buffer == VK_NULL_HANDLE;
1079 }
1080
1081 private:
1082 VkBuffer m_buffer;
1083 };
1084 static_assert( sizeof( Buffer ) == sizeof( VkBuffer ), "handle and wrapper have different size!" );
1085
1086 class BufferView
1087 {
1088 public:
1089 BufferView()
1090 : m_bufferView(VK_NULL_HANDLE)
1091 {}
1092
1093#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1094 BufferView(VkBufferView bufferView)
1095 : m_bufferView(bufferView)
1096 {}
1097
1098 BufferView& operator=(VkBufferView bufferView)
1099 {
1100 m_bufferView = bufferView;
1101 return *this;
1102 }
1103#endif
1104
Lenny Komowebf33162016-08-26 14:10:08 -06001105 bool operator==(BufferView const &rhs) const
1106 {
1107 return m_bufferView == rhs.m_bufferView;
1108 }
1109
1110 bool operator!=(BufferView const &rhs) const
1111 {
1112 return m_bufferView != rhs.m_bufferView;
1113 }
1114
1115 bool operator<(BufferView const &rhs) const
1116 {
1117 return m_bufferView < rhs.m_bufferView;
1118 }
1119
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001120#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1121 explicit
1122#endif
1123 operator VkBufferView() const
1124 {
1125 return m_bufferView;
1126 }
1127
1128 explicit operator bool() const
1129 {
1130 return m_bufferView != VK_NULL_HANDLE;
1131 }
1132
1133 bool operator!() const
1134 {
1135 return m_bufferView == VK_NULL_HANDLE;
1136 }
1137
1138 private:
1139 VkBufferView m_bufferView;
1140 };
1141 static_assert( sizeof( BufferView ) == sizeof( VkBufferView ), "handle and wrapper have different size!" );
1142
1143 class Image
1144 {
1145 public:
1146 Image()
1147 : m_image(VK_NULL_HANDLE)
1148 {}
1149
1150#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1151 Image(VkImage image)
1152 : m_image(image)
1153 {}
1154
1155 Image& operator=(VkImage image)
1156 {
1157 m_image = image;
1158 return *this;
1159 }
1160#endif
1161
Lenny Komowebf33162016-08-26 14:10:08 -06001162 bool operator==(Image const &rhs) const
1163 {
1164 return m_image == rhs.m_image;
1165 }
1166
1167 bool operator!=(Image const &rhs) const
1168 {
1169 return m_image != rhs.m_image;
1170 }
1171
1172 bool operator<(Image const &rhs) const
1173 {
1174 return m_image < rhs.m_image;
1175 }
1176
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001177#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1178 explicit
1179#endif
1180 operator VkImage() const
1181 {
1182 return m_image;
1183 }
1184
1185 explicit operator bool() const
1186 {
1187 return m_image != VK_NULL_HANDLE;
1188 }
1189
1190 bool operator!() const
1191 {
1192 return m_image == VK_NULL_HANDLE;
1193 }
1194
1195 private:
1196 VkImage m_image;
1197 };
1198 static_assert( sizeof( Image ) == sizeof( VkImage ), "handle and wrapper have different size!" );
1199
1200 class ImageView
1201 {
1202 public:
1203 ImageView()
1204 : m_imageView(VK_NULL_HANDLE)
1205 {}
1206
1207#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1208 ImageView(VkImageView imageView)
1209 : m_imageView(imageView)
1210 {}
1211
1212 ImageView& operator=(VkImageView imageView)
1213 {
1214 m_imageView = imageView;
1215 return *this;
1216 }
1217#endif
1218
Lenny Komowebf33162016-08-26 14:10:08 -06001219 bool operator==(ImageView const &rhs) const
1220 {
1221 return m_imageView == rhs.m_imageView;
1222 }
1223
1224 bool operator!=(ImageView const &rhs) const
1225 {
1226 return m_imageView != rhs.m_imageView;
1227 }
1228
1229 bool operator<(ImageView const &rhs) const
1230 {
1231 return m_imageView < rhs.m_imageView;
1232 }
1233
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001234#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1235 explicit
1236#endif
1237 operator VkImageView() const
1238 {
1239 return m_imageView;
1240 }
1241
1242 explicit operator bool() const
1243 {
1244 return m_imageView != VK_NULL_HANDLE;
1245 }
1246
1247 bool operator!() const
1248 {
1249 return m_imageView == VK_NULL_HANDLE;
1250 }
1251
1252 private:
1253 VkImageView m_imageView;
1254 };
1255 static_assert( sizeof( ImageView ) == sizeof( VkImageView ), "handle and wrapper have different size!" );
1256
1257 class ShaderModule
1258 {
1259 public:
1260 ShaderModule()
1261 : m_shaderModule(VK_NULL_HANDLE)
1262 {}
1263
1264#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1265 ShaderModule(VkShaderModule shaderModule)
1266 : m_shaderModule(shaderModule)
1267 {}
1268
1269 ShaderModule& operator=(VkShaderModule shaderModule)
1270 {
1271 m_shaderModule = shaderModule;
1272 return *this;
1273 }
1274#endif
1275
Lenny Komowebf33162016-08-26 14:10:08 -06001276 bool operator==(ShaderModule const &rhs) const
1277 {
1278 return m_shaderModule == rhs.m_shaderModule;
1279 }
1280
1281 bool operator!=(ShaderModule const &rhs) const
1282 {
1283 return m_shaderModule != rhs.m_shaderModule;
1284 }
1285
1286 bool operator<(ShaderModule const &rhs) const
1287 {
1288 return m_shaderModule < rhs.m_shaderModule;
1289 }
1290
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001291#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1292 explicit
1293#endif
1294 operator VkShaderModule() const
1295 {
1296 return m_shaderModule;
1297 }
1298
1299 explicit operator bool() const
1300 {
1301 return m_shaderModule != VK_NULL_HANDLE;
1302 }
1303
1304 bool operator!() const
1305 {
1306 return m_shaderModule == VK_NULL_HANDLE;
1307 }
1308
1309 private:
1310 VkShaderModule m_shaderModule;
1311 };
1312 static_assert( sizeof( ShaderModule ) == sizeof( VkShaderModule ), "handle and wrapper have different size!" );
1313
1314 class Pipeline
1315 {
1316 public:
1317 Pipeline()
1318 : m_pipeline(VK_NULL_HANDLE)
1319 {}
1320
1321#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1322 Pipeline(VkPipeline pipeline)
1323 : m_pipeline(pipeline)
1324 {}
1325
1326 Pipeline& operator=(VkPipeline pipeline)
1327 {
1328 m_pipeline = pipeline;
1329 return *this;
1330 }
1331#endif
1332
Lenny Komowebf33162016-08-26 14:10:08 -06001333 bool operator==(Pipeline const &rhs) const
1334 {
1335 return m_pipeline == rhs.m_pipeline;
1336 }
1337
1338 bool operator!=(Pipeline const &rhs) const
1339 {
1340 return m_pipeline != rhs.m_pipeline;
1341 }
1342
1343 bool operator<(Pipeline const &rhs) const
1344 {
1345 return m_pipeline < rhs.m_pipeline;
1346 }
1347
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001348#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1349 explicit
1350#endif
1351 operator VkPipeline() const
1352 {
1353 return m_pipeline;
1354 }
1355
1356 explicit operator bool() const
1357 {
1358 return m_pipeline != VK_NULL_HANDLE;
1359 }
1360
1361 bool operator!() const
1362 {
1363 return m_pipeline == VK_NULL_HANDLE;
1364 }
1365
1366 private:
1367 VkPipeline m_pipeline;
1368 };
1369 static_assert( sizeof( Pipeline ) == sizeof( VkPipeline ), "handle and wrapper have different size!" );
1370
1371 class PipelineLayout
1372 {
1373 public:
1374 PipelineLayout()
1375 : m_pipelineLayout(VK_NULL_HANDLE)
1376 {}
1377
1378#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1379 PipelineLayout(VkPipelineLayout pipelineLayout)
1380 : m_pipelineLayout(pipelineLayout)
1381 {}
1382
1383 PipelineLayout& operator=(VkPipelineLayout pipelineLayout)
1384 {
1385 m_pipelineLayout = pipelineLayout;
1386 return *this;
1387 }
1388#endif
1389
Lenny Komowebf33162016-08-26 14:10:08 -06001390 bool operator==(PipelineLayout const &rhs) const
1391 {
1392 return m_pipelineLayout == rhs.m_pipelineLayout;
1393 }
1394
1395 bool operator!=(PipelineLayout const &rhs) const
1396 {
1397 return m_pipelineLayout != rhs.m_pipelineLayout;
1398 }
1399
1400 bool operator<(PipelineLayout const &rhs) const
1401 {
1402 return m_pipelineLayout < rhs.m_pipelineLayout;
1403 }
1404
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001405#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1406 explicit
1407#endif
1408 operator VkPipelineLayout() const
1409 {
1410 return m_pipelineLayout;
1411 }
1412
1413 explicit operator bool() const
1414 {
1415 return m_pipelineLayout != VK_NULL_HANDLE;
1416 }
1417
1418 bool operator!() const
1419 {
1420 return m_pipelineLayout == VK_NULL_HANDLE;
1421 }
1422
1423 private:
1424 VkPipelineLayout m_pipelineLayout;
1425 };
1426 static_assert( sizeof( PipelineLayout ) == sizeof( VkPipelineLayout ), "handle and wrapper have different size!" );
1427
1428 class Sampler
1429 {
1430 public:
1431 Sampler()
1432 : m_sampler(VK_NULL_HANDLE)
1433 {}
1434
1435#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1436 Sampler(VkSampler sampler)
1437 : m_sampler(sampler)
1438 {}
1439
1440 Sampler& operator=(VkSampler sampler)
1441 {
1442 m_sampler = sampler;
1443 return *this;
1444 }
1445#endif
1446
Lenny Komowebf33162016-08-26 14:10:08 -06001447 bool operator==(Sampler const &rhs) const
1448 {
1449 return m_sampler == rhs.m_sampler;
1450 }
1451
1452 bool operator!=(Sampler const &rhs) const
1453 {
1454 return m_sampler != rhs.m_sampler;
1455 }
1456
1457 bool operator<(Sampler const &rhs) const
1458 {
1459 return m_sampler < rhs.m_sampler;
1460 }
1461
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001462#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1463 explicit
1464#endif
1465 operator VkSampler() const
1466 {
1467 return m_sampler;
1468 }
1469
1470 explicit operator bool() const
1471 {
1472 return m_sampler != VK_NULL_HANDLE;
1473 }
1474
1475 bool operator!() const
1476 {
1477 return m_sampler == VK_NULL_HANDLE;
1478 }
1479
1480 private:
1481 VkSampler m_sampler;
1482 };
1483 static_assert( sizeof( Sampler ) == sizeof( VkSampler ), "handle and wrapper have different size!" );
1484
1485 class DescriptorSet
1486 {
1487 public:
1488 DescriptorSet()
1489 : m_descriptorSet(VK_NULL_HANDLE)
1490 {}
1491
1492#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1493 DescriptorSet(VkDescriptorSet descriptorSet)
1494 : m_descriptorSet(descriptorSet)
1495 {}
1496
1497 DescriptorSet& operator=(VkDescriptorSet descriptorSet)
1498 {
1499 m_descriptorSet = descriptorSet;
1500 return *this;
1501 }
1502#endif
1503
Lenny Komowebf33162016-08-26 14:10:08 -06001504 bool operator==(DescriptorSet const &rhs) const
1505 {
1506 return m_descriptorSet == rhs.m_descriptorSet;
1507 }
1508
1509 bool operator!=(DescriptorSet const &rhs) const
1510 {
1511 return m_descriptorSet != rhs.m_descriptorSet;
1512 }
1513
1514 bool operator<(DescriptorSet const &rhs) const
1515 {
1516 return m_descriptorSet < rhs.m_descriptorSet;
1517 }
1518
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001519#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1520 explicit
1521#endif
1522 operator VkDescriptorSet() const
1523 {
1524 return m_descriptorSet;
1525 }
1526
1527 explicit operator bool() const
1528 {
1529 return m_descriptorSet != VK_NULL_HANDLE;
1530 }
1531
1532 bool operator!() const
1533 {
1534 return m_descriptorSet == VK_NULL_HANDLE;
1535 }
1536
1537 private:
1538 VkDescriptorSet m_descriptorSet;
1539 };
1540 static_assert( sizeof( DescriptorSet ) == sizeof( VkDescriptorSet ), "handle and wrapper have different size!" );
1541
1542 class DescriptorSetLayout
1543 {
1544 public:
1545 DescriptorSetLayout()
1546 : m_descriptorSetLayout(VK_NULL_HANDLE)
1547 {}
1548
1549#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1550 DescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout)
1551 : m_descriptorSetLayout(descriptorSetLayout)
1552 {}
1553
1554 DescriptorSetLayout& operator=(VkDescriptorSetLayout descriptorSetLayout)
1555 {
1556 m_descriptorSetLayout = descriptorSetLayout;
1557 return *this;
1558 }
1559#endif
1560
Lenny Komowebf33162016-08-26 14:10:08 -06001561 bool operator==(DescriptorSetLayout const &rhs) const
1562 {
1563 return m_descriptorSetLayout == rhs.m_descriptorSetLayout;
1564 }
1565
1566 bool operator!=(DescriptorSetLayout const &rhs) const
1567 {
1568 return m_descriptorSetLayout != rhs.m_descriptorSetLayout;
1569 }
1570
1571 bool operator<(DescriptorSetLayout const &rhs) const
1572 {
1573 return m_descriptorSetLayout < rhs.m_descriptorSetLayout;
1574 }
1575
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001576#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1577 explicit
1578#endif
1579 operator VkDescriptorSetLayout() const
1580 {
1581 return m_descriptorSetLayout;
1582 }
1583
1584 explicit operator bool() const
1585 {
1586 return m_descriptorSetLayout != VK_NULL_HANDLE;
1587 }
1588
1589 bool operator!() const
1590 {
1591 return m_descriptorSetLayout == VK_NULL_HANDLE;
1592 }
1593
1594 private:
1595 VkDescriptorSetLayout m_descriptorSetLayout;
1596 };
1597 static_assert( sizeof( DescriptorSetLayout ) == sizeof( VkDescriptorSetLayout ), "handle and wrapper have different size!" );
1598
1599 class DescriptorPool
1600 {
1601 public:
1602 DescriptorPool()
1603 : m_descriptorPool(VK_NULL_HANDLE)
1604 {}
1605
1606#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1607 DescriptorPool(VkDescriptorPool descriptorPool)
1608 : m_descriptorPool(descriptorPool)
1609 {}
1610
1611 DescriptorPool& operator=(VkDescriptorPool descriptorPool)
1612 {
1613 m_descriptorPool = descriptorPool;
1614 return *this;
1615 }
1616#endif
1617
Lenny Komowebf33162016-08-26 14:10:08 -06001618 bool operator==(DescriptorPool const &rhs) const
1619 {
1620 return m_descriptorPool == rhs.m_descriptorPool;
1621 }
1622
1623 bool operator!=(DescriptorPool const &rhs) const
1624 {
1625 return m_descriptorPool != rhs.m_descriptorPool;
1626 }
1627
1628 bool operator<(DescriptorPool const &rhs) const
1629 {
1630 return m_descriptorPool < rhs.m_descriptorPool;
1631 }
1632
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001633#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1634 explicit
1635#endif
1636 operator VkDescriptorPool() const
1637 {
1638 return m_descriptorPool;
1639 }
1640
1641 explicit operator bool() const
1642 {
1643 return m_descriptorPool != VK_NULL_HANDLE;
1644 }
1645
1646 bool operator!() const
1647 {
1648 return m_descriptorPool == VK_NULL_HANDLE;
1649 }
1650
1651 private:
1652 VkDescriptorPool m_descriptorPool;
1653 };
1654 static_assert( sizeof( DescriptorPool ) == sizeof( VkDescriptorPool ), "handle and wrapper have different size!" );
1655
1656 class Fence
1657 {
1658 public:
1659 Fence()
1660 : m_fence(VK_NULL_HANDLE)
1661 {}
1662
1663#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1664 Fence(VkFence fence)
1665 : m_fence(fence)
1666 {}
1667
1668 Fence& operator=(VkFence fence)
1669 {
1670 m_fence = fence;
1671 return *this;
1672 }
1673#endif
1674
Lenny Komowebf33162016-08-26 14:10:08 -06001675 bool operator==(Fence const &rhs) const
1676 {
1677 return m_fence == rhs.m_fence;
1678 }
1679
1680 bool operator!=(Fence const &rhs) const
1681 {
1682 return m_fence != rhs.m_fence;
1683 }
1684
1685 bool operator<(Fence const &rhs) const
1686 {
1687 return m_fence < rhs.m_fence;
1688 }
1689
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001690#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1691 explicit
1692#endif
1693 operator VkFence() const
1694 {
1695 return m_fence;
1696 }
1697
1698 explicit operator bool() const
1699 {
1700 return m_fence != VK_NULL_HANDLE;
1701 }
1702
1703 bool operator!() const
1704 {
1705 return m_fence == VK_NULL_HANDLE;
1706 }
1707
1708 private:
1709 VkFence m_fence;
1710 };
1711 static_assert( sizeof( Fence ) == sizeof( VkFence ), "handle and wrapper have different size!" );
1712
1713 class Semaphore
1714 {
1715 public:
1716 Semaphore()
1717 : m_semaphore(VK_NULL_HANDLE)
1718 {}
1719
1720#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1721 Semaphore(VkSemaphore semaphore)
1722 : m_semaphore(semaphore)
1723 {}
1724
1725 Semaphore& operator=(VkSemaphore semaphore)
1726 {
1727 m_semaphore = semaphore;
1728 return *this;
1729 }
1730#endif
1731
Lenny Komowebf33162016-08-26 14:10:08 -06001732 bool operator==(Semaphore const &rhs) const
1733 {
1734 return m_semaphore == rhs.m_semaphore;
1735 }
1736
1737 bool operator!=(Semaphore const &rhs) const
1738 {
1739 return m_semaphore != rhs.m_semaphore;
1740 }
1741
1742 bool operator<(Semaphore const &rhs) const
1743 {
1744 return m_semaphore < rhs.m_semaphore;
1745 }
1746
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001747#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1748 explicit
1749#endif
1750 operator VkSemaphore() const
1751 {
1752 return m_semaphore;
1753 }
1754
1755 explicit operator bool() const
1756 {
1757 return m_semaphore != VK_NULL_HANDLE;
1758 }
1759
1760 bool operator!() const
1761 {
1762 return m_semaphore == VK_NULL_HANDLE;
1763 }
1764
1765 private:
1766 VkSemaphore m_semaphore;
1767 };
1768 static_assert( sizeof( Semaphore ) == sizeof( VkSemaphore ), "handle and wrapper have different size!" );
1769
1770 class Event
1771 {
1772 public:
1773 Event()
1774 : m_event(VK_NULL_HANDLE)
1775 {}
1776
1777#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1778 Event(VkEvent event)
1779 : m_event(event)
1780 {}
1781
1782 Event& operator=(VkEvent event)
1783 {
1784 m_event = event;
1785 return *this;
1786 }
1787#endif
1788
Lenny Komowebf33162016-08-26 14:10:08 -06001789 bool operator==(Event const &rhs) const
1790 {
1791 return m_event == rhs.m_event;
1792 }
1793
1794 bool operator!=(Event const &rhs) const
1795 {
1796 return m_event != rhs.m_event;
1797 }
1798
1799 bool operator<(Event const &rhs) const
1800 {
1801 return m_event < rhs.m_event;
1802 }
1803
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001804#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1805 explicit
1806#endif
1807 operator VkEvent() const
1808 {
1809 return m_event;
1810 }
1811
1812 explicit operator bool() const
1813 {
1814 return m_event != VK_NULL_HANDLE;
1815 }
1816
1817 bool operator!() const
1818 {
1819 return m_event == VK_NULL_HANDLE;
1820 }
1821
1822 private:
1823 VkEvent m_event;
1824 };
1825 static_assert( sizeof( Event ) == sizeof( VkEvent ), "handle and wrapper have different size!" );
1826
1827 class QueryPool
1828 {
1829 public:
1830 QueryPool()
1831 : m_queryPool(VK_NULL_HANDLE)
1832 {}
1833
1834#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1835 QueryPool(VkQueryPool queryPool)
1836 : m_queryPool(queryPool)
1837 {}
1838
1839 QueryPool& operator=(VkQueryPool queryPool)
1840 {
1841 m_queryPool = queryPool;
1842 return *this;
1843 }
1844#endif
1845
Lenny Komowebf33162016-08-26 14:10:08 -06001846 bool operator==(QueryPool const &rhs) const
1847 {
1848 return m_queryPool == rhs.m_queryPool;
1849 }
1850
1851 bool operator!=(QueryPool const &rhs) const
1852 {
1853 return m_queryPool != rhs.m_queryPool;
1854 }
1855
1856 bool operator<(QueryPool const &rhs) const
1857 {
1858 return m_queryPool < rhs.m_queryPool;
1859 }
1860
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001861#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1862 explicit
1863#endif
1864 operator VkQueryPool() const
1865 {
1866 return m_queryPool;
1867 }
1868
1869 explicit operator bool() const
1870 {
1871 return m_queryPool != VK_NULL_HANDLE;
1872 }
1873
1874 bool operator!() const
1875 {
1876 return m_queryPool == VK_NULL_HANDLE;
1877 }
1878
1879 private:
1880 VkQueryPool m_queryPool;
1881 };
1882 static_assert( sizeof( QueryPool ) == sizeof( VkQueryPool ), "handle and wrapper have different size!" );
1883
1884 class Framebuffer
1885 {
1886 public:
1887 Framebuffer()
1888 : m_framebuffer(VK_NULL_HANDLE)
1889 {}
1890
1891#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1892 Framebuffer(VkFramebuffer framebuffer)
1893 : m_framebuffer(framebuffer)
1894 {}
1895
1896 Framebuffer& operator=(VkFramebuffer framebuffer)
1897 {
1898 m_framebuffer = framebuffer;
1899 return *this;
1900 }
1901#endif
1902
Lenny Komowebf33162016-08-26 14:10:08 -06001903 bool operator==(Framebuffer const &rhs) const
1904 {
1905 return m_framebuffer == rhs.m_framebuffer;
1906 }
1907
1908 bool operator!=(Framebuffer const &rhs) const
1909 {
1910 return m_framebuffer != rhs.m_framebuffer;
1911 }
1912
1913 bool operator<(Framebuffer const &rhs) const
1914 {
1915 return m_framebuffer < rhs.m_framebuffer;
1916 }
1917
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001918#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1919 explicit
1920#endif
1921 operator VkFramebuffer() const
1922 {
1923 return m_framebuffer;
1924 }
1925
1926 explicit operator bool() const
1927 {
1928 return m_framebuffer != VK_NULL_HANDLE;
1929 }
1930
1931 bool operator!() const
1932 {
1933 return m_framebuffer == VK_NULL_HANDLE;
1934 }
1935
1936 private:
1937 VkFramebuffer m_framebuffer;
1938 };
1939 static_assert( sizeof( Framebuffer ) == sizeof( VkFramebuffer ), "handle and wrapper have different size!" );
1940
1941 class RenderPass
1942 {
1943 public:
1944 RenderPass()
1945 : m_renderPass(VK_NULL_HANDLE)
1946 {}
1947
1948#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1949 RenderPass(VkRenderPass renderPass)
1950 : m_renderPass(renderPass)
1951 {}
1952
1953 RenderPass& operator=(VkRenderPass renderPass)
1954 {
1955 m_renderPass = renderPass;
1956 return *this;
1957 }
1958#endif
1959
Lenny Komowebf33162016-08-26 14:10:08 -06001960 bool operator==(RenderPass const &rhs) const
1961 {
1962 return m_renderPass == rhs.m_renderPass;
1963 }
1964
1965 bool operator!=(RenderPass const &rhs) const
1966 {
1967 return m_renderPass != rhs.m_renderPass;
1968 }
1969
1970 bool operator<(RenderPass const &rhs) const
1971 {
1972 return m_renderPass < rhs.m_renderPass;
1973 }
1974
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001975#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
1976 explicit
1977#endif
1978 operator VkRenderPass() const
1979 {
1980 return m_renderPass;
1981 }
1982
1983 explicit operator bool() const
1984 {
1985 return m_renderPass != VK_NULL_HANDLE;
1986 }
1987
1988 bool operator!() const
1989 {
1990 return m_renderPass == VK_NULL_HANDLE;
1991 }
1992
1993 private:
1994 VkRenderPass m_renderPass;
1995 };
1996 static_assert( sizeof( RenderPass ) == sizeof( VkRenderPass ), "handle and wrapper have different size!" );
1997
1998 class PipelineCache
1999 {
2000 public:
2001 PipelineCache()
2002 : m_pipelineCache(VK_NULL_HANDLE)
2003 {}
2004
2005#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2006 PipelineCache(VkPipelineCache pipelineCache)
2007 : m_pipelineCache(pipelineCache)
2008 {}
2009
2010 PipelineCache& operator=(VkPipelineCache pipelineCache)
2011 {
2012 m_pipelineCache = pipelineCache;
2013 return *this;
2014 }
2015#endif
2016
Lenny Komowebf33162016-08-26 14:10:08 -06002017 bool operator==(PipelineCache const &rhs) const
2018 {
2019 return m_pipelineCache == rhs.m_pipelineCache;
2020 }
2021
2022 bool operator!=(PipelineCache const &rhs) const
2023 {
2024 return m_pipelineCache != rhs.m_pipelineCache;
2025 }
2026
2027 bool operator<(PipelineCache const &rhs) const
2028 {
2029 return m_pipelineCache < rhs.m_pipelineCache;
2030 }
2031
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002032#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2033 explicit
2034#endif
2035 operator VkPipelineCache() const
2036 {
2037 return m_pipelineCache;
2038 }
2039
2040 explicit operator bool() const
2041 {
2042 return m_pipelineCache != VK_NULL_HANDLE;
2043 }
2044
2045 bool operator!() const
2046 {
2047 return m_pipelineCache == VK_NULL_HANDLE;
2048 }
2049
2050 private:
2051 VkPipelineCache m_pipelineCache;
2052 };
2053 static_assert( sizeof( PipelineCache ) == sizeof( VkPipelineCache ), "handle and wrapper have different size!" );
2054
2055 class DisplayKHR
2056 {
2057 public:
2058 DisplayKHR()
2059 : m_displayKHR(VK_NULL_HANDLE)
2060 {}
2061
2062#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2063 DisplayKHR(VkDisplayKHR displayKHR)
2064 : m_displayKHR(displayKHR)
2065 {}
2066
2067 DisplayKHR& operator=(VkDisplayKHR displayKHR)
2068 {
2069 m_displayKHR = displayKHR;
2070 return *this;
2071 }
2072#endif
2073
Lenny Komowebf33162016-08-26 14:10:08 -06002074 bool operator==(DisplayKHR const &rhs) const
2075 {
2076 return m_displayKHR == rhs.m_displayKHR;
2077 }
2078
2079 bool operator!=(DisplayKHR const &rhs) const
2080 {
2081 return m_displayKHR != rhs.m_displayKHR;
2082 }
2083
2084 bool operator<(DisplayKHR const &rhs) const
2085 {
2086 return m_displayKHR < rhs.m_displayKHR;
2087 }
2088
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002089#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2090 explicit
2091#endif
2092 operator VkDisplayKHR() const
2093 {
2094 return m_displayKHR;
2095 }
2096
2097 explicit operator bool() const
2098 {
2099 return m_displayKHR != VK_NULL_HANDLE;
2100 }
2101
2102 bool operator!() const
2103 {
2104 return m_displayKHR == VK_NULL_HANDLE;
2105 }
2106
2107 private:
2108 VkDisplayKHR m_displayKHR;
2109 };
2110 static_assert( sizeof( DisplayKHR ) == sizeof( VkDisplayKHR ), "handle and wrapper have different size!" );
2111
2112 class DisplayModeKHR
2113 {
2114 public:
2115 DisplayModeKHR()
2116 : m_displayModeKHR(VK_NULL_HANDLE)
2117 {}
2118
2119#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2120 DisplayModeKHR(VkDisplayModeKHR displayModeKHR)
2121 : m_displayModeKHR(displayModeKHR)
2122 {}
2123
2124 DisplayModeKHR& operator=(VkDisplayModeKHR displayModeKHR)
2125 {
2126 m_displayModeKHR = displayModeKHR;
2127 return *this;
2128 }
2129#endif
2130
Lenny Komowebf33162016-08-26 14:10:08 -06002131 bool operator==(DisplayModeKHR const &rhs) const
2132 {
2133 return m_displayModeKHR == rhs.m_displayModeKHR;
2134 }
2135
2136 bool operator!=(DisplayModeKHR const &rhs) const
2137 {
2138 return m_displayModeKHR != rhs.m_displayModeKHR;
2139 }
2140
2141 bool operator<(DisplayModeKHR const &rhs) const
2142 {
2143 return m_displayModeKHR < rhs.m_displayModeKHR;
2144 }
2145
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002146#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2147 explicit
2148#endif
2149 operator VkDisplayModeKHR() const
2150 {
2151 return m_displayModeKHR;
2152 }
2153
2154 explicit operator bool() const
2155 {
2156 return m_displayModeKHR != VK_NULL_HANDLE;
2157 }
2158
2159 bool operator!() const
2160 {
2161 return m_displayModeKHR == VK_NULL_HANDLE;
2162 }
2163
2164 private:
2165 VkDisplayModeKHR m_displayModeKHR;
2166 };
2167 static_assert( sizeof( DisplayModeKHR ) == sizeof( VkDisplayModeKHR ), "handle and wrapper have different size!" );
2168
2169 class SurfaceKHR
2170 {
2171 public:
2172 SurfaceKHR()
2173 : m_surfaceKHR(VK_NULL_HANDLE)
2174 {}
2175
2176#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2177 SurfaceKHR(VkSurfaceKHR surfaceKHR)
2178 : m_surfaceKHR(surfaceKHR)
2179 {}
2180
2181 SurfaceKHR& operator=(VkSurfaceKHR surfaceKHR)
2182 {
2183 m_surfaceKHR = surfaceKHR;
2184 return *this;
2185 }
2186#endif
2187
Lenny Komowebf33162016-08-26 14:10:08 -06002188 bool operator==(SurfaceKHR const &rhs) const
2189 {
2190 return m_surfaceKHR == rhs.m_surfaceKHR;
2191 }
2192
2193 bool operator!=(SurfaceKHR const &rhs) const
2194 {
2195 return m_surfaceKHR != rhs.m_surfaceKHR;
2196 }
2197
2198 bool operator<(SurfaceKHR const &rhs) const
2199 {
2200 return m_surfaceKHR < rhs.m_surfaceKHR;
2201 }
2202
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002203#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2204 explicit
2205#endif
2206 operator VkSurfaceKHR() const
2207 {
2208 return m_surfaceKHR;
2209 }
2210
2211 explicit operator bool() const
2212 {
2213 return m_surfaceKHR != VK_NULL_HANDLE;
2214 }
2215
2216 bool operator!() const
2217 {
2218 return m_surfaceKHR == VK_NULL_HANDLE;
2219 }
2220
2221 private:
2222 VkSurfaceKHR m_surfaceKHR;
2223 };
2224 static_assert( sizeof( SurfaceKHR ) == sizeof( VkSurfaceKHR ), "handle and wrapper have different size!" );
2225
2226 class SwapchainKHR
2227 {
2228 public:
2229 SwapchainKHR()
2230 : m_swapchainKHR(VK_NULL_HANDLE)
2231 {}
2232
2233#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2234 SwapchainKHR(VkSwapchainKHR swapchainKHR)
2235 : m_swapchainKHR(swapchainKHR)
2236 {}
2237
2238 SwapchainKHR& operator=(VkSwapchainKHR swapchainKHR)
2239 {
2240 m_swapchainKHR = swapchainKHR;
2241 return *this;
2242 }
2243#endif
2244
Lenny Komowebf33162016-08-26 14:10:08 -06002245 bool operator==(SwapchainKHR const &rhs) const
2246 {
2247 return m_swapchainKHR == rhs.m_swapchainKHR;
2248 }
2249
2250 bool operator!=(SwapchainKHR const &rhs) const
2251 {
2252 return m_swapchainKHR != rhs.m_swapchainKHR;
2253 }
2254
2255 bool operator<(SwapchainKHR const &rhs) const
2256 {
2257 return m_swapchainKHR < rhs.m_swapchainKHR;
2258 }
2259
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002260#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2261 explicit
2262#endif
2263 operator VkSwapchainKHR() const
2264 {
2265 return m_swapchainKHR;
2266 }
2267
2268 explicit operator bool() const
2269 {
2270 return m_swapchainKHR != VK_NULL_HANDLE;
2271 }
2272
2273 bool operator!() const
2274 {
2275 return m_swapchainKHR == VK_NULL_HANDLE;
2276 }
2277
2278 private:
2279 VkSwapchainKHR m_swapchainKHR;
2280 };
2281 static_assert( sizeof( SwapchainKHR ) == sizeof( VkSwapchainKHR ), "handle and wrapper have different size!" );
2282
2283 class DebugReportCallbackEXT
2284 {
2285 public:
2286 DebugReportCallbackEXT()
2287 : m_debugReportCallbackEXT(VK_NULL_HANDLE)
2288 {}
2289
2290#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2291 DebugReportCallbackEXT(VkDebugReportCallbackEXT debugReportCallbackEXT)
2292 : m_debugReportCallbackEXT(debugReportCallbackEXT)
2293 {}
2294
2295 DebugReportCallbackEXT& operator=(VkDebugReportCallbackEXT debugReportCallbackEXT)
2296 {
2297 m_debugReportCallbackEXT = debugReportCallbackEXT;
2298 return *this;
2299 }
2300#endif
2301
Lenny Komowebf33162016-08-26 14:10:08 -06002302 bool operator==(DebugReportCallbackEXT const &rhs) const
2303 {
2304 return m_debugReportCallbackEXT == rhs.m_debugReportCallbackEXT;
2305 }
2306
2307 bool operator!=(DebugReportCallbackEXT const &rhs) const
2308 {
2309 return m_debugReportCallbackEXT != rhs.m_debugReportCallbackEXT;
2310 }
2311
2312 bool operator<(DebugReportCallbackEXT const &rhs) const
2313 {
2314 return m_debugReportCallbackEXT < rhs.m_debugReportCallbackEXT;
2315 }
2316
Lenny Komowbed9b5c2016-08-11 11:23:15 -06002317#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
2318 explicit
2319#endif
2320 operator VkDebugReportCallbackEXT() const
2321 {
2322 return m_debugReportCallbackEXT;
2323 }
2324
2325 explicit operator bool() const
2326 {
2327 return m_debugReportCallbackEXT != VK_NULL_HANDLE;
2328 }
2329
2330 bool operator!() const
2331 {
2332 return m_debugReportCallbackEXT == VK_NULL_HANDLE;
2333 }
2334
2335 private:
2336 VkDebugReportCallbackEXT m_debugReportCallbackEXT;
2337 };
2338 static_assert( sizeof( DebugReportCallbackEXT ) == sizeof( VkDebugReportCallbackEXT ), "handle and wrapper have different size!" );
2339
2340 struct Offset2D
2341 {
2342 Offset2D( int32_t x_ = 0, int32_t y_ = 0 )
2343 : x( x_ )
2344 , y( y_ )
2345 {
2346 }
2347
2348 Offset2D( VkOffset2D const & rhs )
2349 {
2350 memcpy( this, &rhs, sizeof(Offset2D) );
2351 }
2352
2353 Offset2D& operator=( VkOffset2D const & rhs )
2354 {
2355 memcpy( this, &rhs, sizeof(Offset2D) );
2356 return *this;
2357 }
2358
2359 Offset2D& setX( int32_t x_ )
2360 {
2361 x = x_;
2362 return *this;
2363 }
2364
2365 Offset2D& setY( int32_t y_ )
2366 {
2367 y = y_;
2368 return *this;
2369 }
2370
2371 operator const VkOffset2D&() const
2372 {
2373 return *reinterpret_cast<const VkOffset2D*>(this);
2374 }
2375
2376 bool operator==( Offset2D const& rhs ) const
2377 {
2378 return ( x == rhs.x )
2379 && ( y == rhs.y );
2380 }
2381
2382 bool operator!=( Offset2D const& rhs ) const
2383 {
2384 return !operator==( rhs );
2385 }
2386
2387 int32_t x;
2388 int32_t y;
2389 };
2390 static_assert( sizeof( Offset2D ) == sizeof( VkOffset2D ), "struct and wrapper have different size!" );
2391
2392 struct Offset3D
2393 {
2394 Offset3D( int32_t x_ = 0, int32_t y_ = 0, int32_t z_ = 0 )
2395 : x( x_ )
2396 , y( y_ )
2397 , z( z_ )
2398 {
2399 }
2400
2401 Offset3D( VkOffset3D const & rhs )
2402 {
2403 memcpy( this, &rhs, sizeof(Offset3D) );
2404 }
2405
2406 Offset3D& operator=( VkOffset3D const & rhs )
2407 {
2408 memcpy( this, &rhs, sizeof(Offset3D) );
2409 return *this;
2410 }
2411
2412 Offset3D& setX( int32_t x_ )
2413 {
2414 x = x_;
2415 return *this;
2416 }
2417
2418 Offset3D& setY( int32_t y_ )
2419 {
2420 y = y_;
2421 return *this;
2422 }
2423
2424 Offset3D& setZ( int32_t z_ )
2425 {
2426 z = z_;
2427 return *this;
2428 }
2429
2430 operator const VkOffset3D&() const
2431 {
2432 return *reinterpret_cast<const VkOffset3D*>(this);
2433 }
2434
2435 bool operator==( Offset3D const& rhs ) const
2436 {
2437 return ( x == rhs.x )
2438 && ( y == rhs.y )
2439 && ( z == rhs.z );
2440 }
2441
2442 bool operator!=( Offset3D const& rhs ) const
2443 {
2444 return !operator==( rhs );
2445 }
2446
2447 int32_t x;
2448 int32_t y;
2449 int32_t z;
2450 };
2451 static_assert( sizeof( Offset3D ) == sizeof( VkOffset3D ), "struct and wrapper have different size!" );
2452
2453 struct Extent2D
2454 {
2455 Extent2D( uint32_t width_ = 0, uint32_t height_ = 0 )
2456 : width( width_ )
2457 , height( height_ )
2458 {
2459 }
2460
2461 Extent2D( VkExtent2D const & rhs )
2462 {
2463 memcpy( this, &rhs, sizeof(Extent2D) );
2464 }
2465
2466 Extent2D& operator=( VkExtent2D const & rhs )
2467 {
2468 memcpy( this, &rhs, sizeof(Extent2D) );
2469 return *this;
2470 }
2471
2472 Extent2D& setWidth( uint32_t width_ )
2473 {
2474 width = width_;
2475 return *this;
2476 }
2477
2478 Extent2D& setHeight( uint32_t height_ )
2479 {
2480 height = height_;
2481 return *this;
2482 }
2483
2484 operator const VkExtent2D&() const
2485 {
2486 return *reinterpret_cast<const VkExtent2D*>(this);
2487 }
2488
2489 bool operator==( Extent2D const& rhs ) const
2490 {
2491 return ( width == rhs.width )
2492 && ( height == rhs.height );
2493 }
2494
2495 bool operator!=( Extent2D const& rhs ) const
2496 {
2497 return !operator==( rhs );
2498 }
2499
2500 uint32_t width;
2501 uint32_t height;
2502 };
2503 static_assert( sizeof( Extent2D ) == sizeof( VkExtent2D ), "struct and wrapper have different size!" );
2504
2505 struct Extent3D
2506 {
2507 Extent3D( uint32_t width_ = 0, uint32_t height_ = 0, uint32_t depth_ = 0 )
2508 : width( width_ )
2509 , height( height_ )
2510 , depth( depth_ )
2511 {
2512 }
2513
2514 Extent3D( VkExtent3D const & rhs )
2515 {
2516 memcpy( this, &rhs, sizeof(Extent3D) );
2517 }
2518
2519 Extent3D& operator=( VkExtent3D const & rhs )
2520 {
2521 memcpy( this, &rhs, sizeof(Extent3D) );
2522 return *this;
2523 }
2524
2525 Extent3D& setWidth( uint32_t width_ )
2526 {
2527 width = width_;
2528 return *this;
2529 }
2530
2531 Extent3D& setHeight( uint32_t height_ )
2532 {
2533 height = height_;
2534 return *this;
2535 }
2536
2537 Extent3D& setDepth( uint32_t depth_ )
2538 {
2539 depth = depth_;
2540 return *this;
2541 }
2542
2543 operator const VkExtent3D&() const
2544 {
2545 return *reinterpret_cast<const VkExtent3D*>(this);
2546 }
2547
2548 bool operator==( Extent3D const& rhs ) const
2549 {
2550 return ( width == rhs.width )
2551 && ( height == rhs.height )
2552 && ( depth == rhs.depth );
2553 }
2554
2555 bool operator!=( Extent3D const& rhs ) const
2556 {
2557 return !operator==( rhs );
2558 }
2559
2560 uint32_t width;
2561 uint32_t height;
2562 uint32_t depth;
2563 };
2564 static_assert( sizeof( Extent3D ) == sizeof( VkExtent3D ), "struct and wrapper have different size!" );
2565
2566 struct Viewport
2567 {
2568 Viewport( float x_ = 0, float y_ = 0, float width_ = 0, float height_ = 0, float minDepth_ = 0, float maxDepth_ = 0 )
2569 : x( x_ )
2570 , y( y_ )
2571 , width( width_ )
2572 , height( height_ )
2573 , minDepth( minDepth_ )
2574 , maxDepth( maxDepth_ )
2575 {
2576 }
2577
2578 Viewport( VkViewport const & rhs )
2579 {
2580 memcpy( this, &rhs, sizeof(Viewport) );
2581 }
2582
2583 Viewport& operator=( VkViewport const & rhs )
2584 {
2585 memcpy( this, &rhs, sizeof(Viewport) );
2586 return *this;
2587 }
2588
2589 Viewport& setX( float x_ )
2590 {
2591 x = x_;
2592 return *this;
2593 }
2594
2595 Viewport& setY( float y_ )
2596 {
2597 y = y_;
2598 return *this;
2599 }
2600
2601 Viewport& setWidth( float width_ )
2602 {
2603 width = width_;
2604 return *this;
2605 }
2606
2607 Viewport& setHeight( float height_ )
2608 {
2609 height = height_;
2610 return *this;
2611 }
2612
2613 Viewport& setMinDepth( float minDepth_ )
2614 {
2615 minDepth = minDepth_;
2616 return *this;
2617 }
2618
2619 Viewport& setMaxDepth( float maxDepth_ )
2620 {
2621 maxDepth = maxDepth_;
2622 return *this;
2623 }
2624
2625 operator const VkViewport&() const
2626 {
2627 return *reinterpret_cast<const VkViewport*>(this);
2628 }
2629
2630 bool operator==( Viewport const& rhs ) const
2631 {
2632 return ( x == rhs.x )
2633 && ( y == rhs.y )
2634 && ( width == rhs.width )
2635 && ( height == rhs.height )
2636 && ( minDepth == rhs.minDepth )
2637 && ( maxDepth == rhs.maxDepth );
2638 }
2639
2640 bool operator!=( Viewport const& rhs ) const
2641 {
2642 return !operator==( rhs );
2643 }
2644
2645 float x;
2646 float y;
2647 float width;
2648 float height;
2649 float minDepth;
2650 float maxDepth;
2651 };
2652 static_assert( sizeof( Viewport ) == sizeof( VkViewport ), "struct and wrapper have different size!" );
2653
2654 struct Rect2D
2655 {
2656 Rect2D( Offset2D offset_ = Offset2D(), Extent2D extent_ = Extent2D() )
2657 : offset( offset_ )
2658 , extent( extent_ )
2659 {
2660 }
2661
2662 Rect2D( VkRect2D const & rhs )
2663 {
2664 memcpy( this, &rhs, sizeof(Rect2D) );
2665 }
2666
2667 Rect2D& operator=( VkRect2D const & rhs )
2668 {
2669 memcpy( this, &rhs, sizeof(Rect2D) );
2670 return *this;
2671 }
2672
2673 Rect2D& setOffset( Offset2D offset_ )
2674 {
2675 offset = offset_;
2676 return *this;
2677 }
2678
2679 Rect2D& setExtent( Extent2D extent_ )
2680 {
2681 extent = extent_;
2682 return *this;
2683 }
2684
2685 operator const VkRect2D&() const
2686 {
2687 return *reinterpret_cast<const VkRect2D*>(this);
2688 }
2689
2690 bool operator==( Rect2D const& rhs ) const
2691 {
2692 return ( offset == rhs.offset )
2693 && ( extent == rhs.extent );
2694 }
2695
2696 bool operator!=( Rect2D const& rhs ) const
2697 {
2698 return !operator==( rhs );
2699 }
2700
2701 Offset2D offset;
2702 Extent2D extent;
2703 };
2704 static_assert( sizeof( Rect2D ) == sizeof( VkRect2D ), "struct and wrapper have different size!" );
2705
2706 struct ClearRect
2707 {
2708 ClearRect( Rect2D rect_ = Rect2D(), uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
2709 : rect( rect_ )
2710 , baseArrayLayer( baseArrayLayer_ )
2711 , layerCount( layerCount_ )
2712 {
2713 }
2714
2715 ClearRect( VkClearRect const & rhs )
2716 {
2717 memcpy( this, &rhs, sizeof(ClearRect) );
2718 }
2719
2720 ClearRect& operator=( VkClearRect const & rhs )
2721 {
2722 memcpy( this, &rhs, sizeof(ClearRect) );
2723 return *this;
2724 }
2725
2726 ClearRect& setRect( Rect2D rect_ )
2727 {
2728 rect = rect_;
2729 return *this;
2730 }
2731
2732 ClearRect& setBaseArrayLayer( uint32_t baseArrayLayer_ )
2733 {
2734 baseArrayLayer = baseArrayLayer_;
2735 return *this;
2736 }
2737
2738 ClearRect& setLayerCount( uint32_t layerCount_ )
2739 {
2740 layerCount = layerCount_;
2741 return *this;
2742 }
2743
2744 operator const VkClearRect&() const
2745 {
2746 return *reinterpret_cast<const VkClearRect*>(this);
2747 }
2748
2749 bool operator==( ClearRect const& rhs ) const
2750 {
2751 return ( rect == rhs.rect )
2752 && ( baseArrayLayer == rhs.baseArrayLayer )
2753 && ( layerCount == rhs.layerCount );
2754 }
2755
2756 bool operator!=( ClearRect const& rhs ) const
2757 {
2758 return !operator==( rhs );
2759 }
2760
2761 Rect2D rect;
2762 uint32_t baseArrayLayer;
2763 uint32_t layerCount;
2764 };
2765 static_assert( sizeof( ClearRect ) == sizeof( VkClearRect ), "struct and wrapper have different size!" );
2766
2767 struct ExtensionProperties
2768 {
2769 operator const VkExtensionProperties&() const
2770 {
2771 return *reinterpret_cast<const VkExtensionProperties*>(this);
2772 }
2773
2774 bool operator==( ExtensionProperties const& rhs ) const
2775 {
2776 return ( memcmp( extensionName, rhs.extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
2777 && ( specVersion == rhs.specVersion );
2778 }
2779
2780 bool operator!=( ExtensionProperties const& rhs ) const
2781 {
2782 return !operator==( rhs );
2783 }
2784
2785 char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
2786 uint32_t specVersion;
2787 };
2788 static_assert( sizeof( ExtensionProperties ) == sizeof( VkExtensionProperties ), "struct and wrapper have different size!" );
2789
2790 struct LayerProperties
2791 {
2792 operator const VkLayerProperties&() const
2793 {
2794 return *reinterpret_cast<const VkLayerProperties*>(this);
2795 }
2796
2797 bool operator==( LayerProperties const& rhs ) const
2798 {
2799 return ( memcmp( layerName, rhs.layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
2800 && ( specVersion == rhs.specVersion )
2801 && ( implementationVersion == rhs.implementationVersion )
2802 && ( memcmp( description, rhs.description, VK_MAX_DESCRIPTION_SIZE * sizeof( char ) ) == 0 );
2803 }
2804
2805 bool operator!=( LayerProperties const& rhs ) const
2806 {
2807 return !operator==( rhs );
2808 }
2809
2810 char layerName[VK_MAX_EXTENSION_NAME_SIZE];
2811 uint32_t specVersion;
2812 uint32_t implementationVersion;
2813 char description[VK_MAX_DESCRIPTION_SIZE];
2814 };
2815 static_assert( sizeof( LayerProperties ) == sizeof( VkLayerProperties ), "struct and wrapper have different size!" );
2816
2817 struct AllocationCallbacks
2818 {
2819 AllocationCallbacks( void* pUserData_ = nullptr, PFN_vkAllocationFunction pfnAllocation_ = nullptr, PFN_vkReallocationFunction pfnReallocation_ = nullptr, PFN_vkFreeFunction pfnFree_ = nullptr, PFN_vkInternalAllocationNotification pfnInternalAllocation_ = nullptr, PFN_vkInternalFreeNotification pfnInternalFree_ = nullptr )
2820 : pUserData( pUserData_ )
2821 , pfnAllocation( pfnAllocation_ )
2822 , pfnReallocation( pfnReallocation_ )
2823 , pfnFree( pfnFree_ )
2824 , pfnInternalAllocation( pfnInternalAllocation_ )
2825 , pfnInternalFree( pfnInternalFree_ )
2826 {
2827 }
2828
2829 AllocationCallbacks( VkAllocationCallbacks const & rhs )
2830 {
2831 memcpy( this, &rhs, sizeof(AllocationCallbacks) );
2832 }
2833
2834 AllocationCallbacks& operator=( VkAllocationCallbacks const & rhs )
2835 {
2836 memcpy( this, &rhs, sizeof(AllocationCallbacks) );
2837 return *this;
2838 }
2839
2840 AllocationCallbacks& setPUserData( void* pUserData_ )
2841 {
2842 pUserData = pUserData_;
2843 return *this;
2844 }
2845
2846 AllocationCallbacks& setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ )
2847 {
2848 pfnAllocation = pfnAllocation_;
2849 return *this;
2850 }
2851
2852 AllocationCallbacks& setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ )
2853 {
2854 pfnReallocation = pfnReallocation_;
2855 return *this;
2856 }
2857
2858 AllocationCallbacks& setPfnFree( PFN_vkFreeFunction pfnFree_ )
2859 {
2860 pfnFree = pfnFree_;
2861 return *this;
2862 }
2863
2864 AllocationCallbacks& setPfnInternalAllocation( PFN_vkInternalAllocationNotification pfnInternalAllocation_ )
2865 {
2866 pfnInternalAllocation = pfnInternalAllocation_;
2867 return *this;
2868 }
2869
2870 AllocationCallbacks& setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ )
2871 {
2872 pfnInternalFree = pfnInternalFree_;
2873 return *this;
2874 }
2875
2876 operator const VkAllocationCallbacks&() const
2877 {
2878 return *reinterpret_cast<const VkAllocationCallbacks*>(this);
2879 }
2880
2881 bool operator==( AllocationCallbacks const& rhs ) const
2882 {
2883 return ( pUserData == rhs.pUserData )
2884 && ( pfnAllocation == rhs.pfnAllocation )
2885 && ( pfnReallocation == rhs.pfnReallocation )
2886 && ( pfnFree == rhs.pfnFree )
2887 && ( pfnInternalAllocation == rhs.pfnInternalAllocation )
2888 && ( pfnInternalFree == rhs.pfnInternalFree );
2889 }
2890
2891 bool operator!=( AllocationCallbacks const& rhs ) const
2892 {
2893 return !operator==( rhs );
2894 }
2895
2896 void* pUserData;
2897 PFN_vkAllocationFunction pfnAllocation;
2898 PFN_vkReallocationFunction pfnReallocation;
2899 PFN_vkFreeFunction pfnFree;
2900 PFN_vkInternalAllocationNotification pfnInternalAllocation;
2901 PFN_vkInternalFreeNotification pfnInternalFree;
2902 };
2903 static_assert( sizeof( AllocationCallbacks ) == sizeof( VkAllocationCallbacks ), "struct and wrapper have different size!" );
2904
2905 struct MemoryRequirements
2906 {
2907 operator const VkMemoryRequirements&() const
2908 {
2909 return *reinterpret_cast<const VkMemoryRequirements*>(this);
2910 }
2911
2912 bool operator==( MemoryRequirements const& rhs ) const
2913 {
2914 return ( size == rhs.size )
2915 && ( alignment == rhs.alignment )
2916 && ( memoryTypeBits == rhs.memoryTypeBits );
2917 }
2918
2919 bool operator!=( MemoryRequirements const& rhs ) const
2920 {
2921 return !operator==( rhs );
2922 }
2923
2924 DeviceSize size;
2925 DeviceSize alignment;
2926 uint32_t memoryTypeBits;
2927 };
2928 static_assert( sizeof( MemoryRequirements ) == sizeof( VkMemoryRequirements ), "struct and wrapper have different size!" );
2929
2930 struct DescriptorBufferInfo
2931 {
2932 DescriptorBufferInfo( Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize range_ = 0 )
2933 : buffer( buffer_ )
2934 , offset( offset_ )
2935 , range( range_ )
2936 {
2937 }
2938
2939 DescriptorBufferInfo( VkDescriptorBufferInfo const & rhs )
2940 {
2941 memcpy( this, &rhs, sizeof(DescriptorBufferInfo) );
2942 }
2943
2944 DescriptorBufferInfo& operator=( VkDescriptorBufferInfo const & rhs )
2945 {
2946 memcpy( this, &rhs, sizeof(DescriptorBufferInfo) );
2947 return *this;
2948 }
2949
2950 DescriptorBufferInfo& setBuffer( Buffer buffer_ )
2951 {
2952 buffer = buffer_;
2953 return *this;
2954 }
2955
2956 DescriptorBufferInfo& setOffset( DeviceSize offset_ )
2957 {
2958 offset = offset_;
2959 return *this;
2960 }
2961
2962 DescriptorBufferInfo& setRange( DeviceSize range_ )
2963 {
2964 range = range_;
2965 return *this;
2966 }
2967
2968 operator const VkDescriptorBufferInfo&() const
2969 {
2970 return *reinterpret_cast<const VkDescriptorBufferInfo*>(this);
2971 }
2972
2973 bool operator==( DescriptorBufferInfo const& rhs ) const
2974 {
2975 return ( buffer == rhs.buffer )
2976 && ( offset == rhs.offset )
2977 && ( range == rhs.range );
2978 }
2979
2980 bool operator!=( DescriptorBufferInfo const& rhs ) const
2981 {
2982 return !operator==( rhs );
2983 }
2984
2985 Buffer buffer;
2986 DeviceSize offset;
2987 DeviceSize range;
2988 };
2989 static_assert( sizeof( DescriptorBufferInfo ) == sizeof( VkDescriptorBufferInfo ), "struct and wrapper have different size!" );
2990
2991 struct SubresourceLayout
2992 {
2993 operator const VkSubresourceLayout&() const
2994 {
2995 return *reinterpret_cast<const VkSubresourceLayout*>(this);
2996 }
2997
2998 bool operator==( SubresourceLayout const& rhs ) const
2999 {
3000 return ( offset == rhs.offset )
3001 && ( size == rhs.size )
3002 && ( rowPitch == rhs.rowPitch )
3003 && ( arrayPitch == rhs.arrayPitch )
3004 && ( depthPitch == rhs.depthPitch );
3005 }
3006
3007 bool operator!=( SubresourceLayout const& rhs ) const
3008 {
3009 return !operator==( rhs );
3010 }
3011
3012 DeviceSize offset;
3013 DeviceSize size;
3014 DeviceSize rowPitch;
3015 DeviceSize arrayPitch;
3016 DeviceSize depthPitch;
3017 };
3018 static_assert( sizeof( SubresourceLayout ) == sizeof( VkSubresourceLayout ), "struct and wrapper have different size!" );
3019
3020 struct BufferCopy
3021 {
3022 BufferCopy( DeviceSize srcOffset_ = 0, DeviceSize dstOffset_ = 0, DeviceSize size_ = 0 )
3023 : srcOffset( srcOffset_ )
3024 , dstOffset( dstOffset_ )
3025 , size( size_ )
3026 {
3027 }
3028
3029 BufferCopy( VkBufferCopy const & rhs )
3030 {
3031 memcpy( this, &rhs, sizeof(BufferCopy) );
3032 }
3033
3034 BufferCopy& operator=( VkBufferCopy const & rhs )
3035 {
3036 memcpy( this, &rhs, sizeof(BufferCopy) );
3037 return *this;
3038 }
3039
3040 BufferCopy& setSrcOffset( DeviceSize srcOffset_ )
3041 {
3042 srcOffset = srcOffset_;
3043 return *this;
3044 }
3045
3046 BufferCopy& setDstOffset( DeviceSize dstOffset_ )
3047 {
3048 dstOffset = dstOffset_;
3049 return *this;
3050 }
3051
3052 BufferCopy& setSize( DeviceSize size_ )
3053 {
3054 size = size_;
3055 return *this;
3056 }
3057
3058 operator const VkBufferCopy&() const
3059 {
3060 return *reinterpret_cast<const VkBufferCopy*>(this);
3061 }
3062
3063 bool operator==( BufferCopy const& rhs ) const
3064 {
3065 return ( srcOffset == rhs.srcOffset )
3066 && ( dstOffset == rhs.dstOffset )
3067 && ( size == rhs.size );
3068 }
3069
3070 bool operator!=( BufferCopy const& rhs ) const
3071 {
3072 return !operator==( rhs );
3073 }
3074
3075 DeviceSize srcOffset;
3076 DeviceSize dstOffset;
3077 DeviceSize size;
3078 };
3079 static_assert( sizeof( BufferCopy ) == sizeof( VkBufferCopy ), "struct and wrapper have different size!" );
3080
3081 struct SpecializationMapEntry
3082 {
3083 SpecializationMapEntry( uint32_t constantID_ = 0, uint32_t offset_ = 0, size_t size_ = 0 )
3084 : constantID( constantID_ )
3085 , offset( offset_ )
3086 , size( size_ )
3087 {
3088 }
3089
3090 SpecializationMapEntry( VkSpecializationMapEntry const & rhs )
3091 {
3092 memcpy( this, &rhs, sizeof(SpecializationMapEntry) );
3093 }
3094
3095 SpecializationMapEntry& operator=( VkSpecializationMapEntry const & rhs )
3096 {
3097 memcpy( this, &rhs, sizeof(SpecializationMapEntry) );
3098 return *this;
3099 }
3100
3101 SpecializationMapEntry& setConstantID( uint32_t constantID_ )
3102 {
3103 constantID = constantID_;
3104 return *this;
3105 }
3106
3107 SpecializationMapEntry& setOffset( uint32_t offset_ )
3108 {
3109 offset = offset_;
3110 return *this;
3111 }
3112
3113 SpecializationMapEntry& setSize( size_t size_ )
3114 {
3115 size = size_;
3116 return *this;
3117 }
3118
3119 operator const VkSpecializationMapEntry&() const
3120 {
3121 return *reinterpret_cast<const VkSpecializationMapEntry*>(this);
3122 }
3123
3124 bool operator==( SpecializationMapEntry const& rhs ) const
3125 {
3126 return ( constantID == rhs.constantID )
3127 && ( offset == rhs.offset )
3128 && ( size == rhs.size );
3129 }
3130
3131 bool operator!=( SpecializationMapEntry const& rhs ) const
3132 {
3133 return !operator==( rhs );
3134 }
3135
3136 uint32_t constantID;
3137 uint32_t offset;
3138 size_t size;
3139 };
3140 static_assert( sizeof( SpecializationMapEntry ) == sizeof( VkSpecializationMapEntry ), "struct and wrapper have different size!" );
3141
3142 struct SpecializationInfo
3143 {
3144 SpecializationInfo( uint32_t mapEntryCount_ = 0, const SpecializationMapEntry* pMapEntries_ = nullptr, size_t dataSize_ = 0, const void* pData_ = nullptr )
3145 : mapEntryCount( mapEntryCount_ )
3146 , pMapEntries( pMapEntries_ )
3147 , dataSize( dataSize_ )
3148 , pData( pData_ )
3149 {
3150 }
3151
3152 SpecializationInfo( VkSpecializationInfo const & rhs )
3153 {
3154 memcpy( this, &rhs, sizeof(SpecializationInfo) );
3155 }
3156
3157 SpecializationInfo& operator=( VkSpecializationInfo const & rhs )
3158 {
3159 memcpy( this, &rhs, sizeof(SpecializationInfo) );
3160 return *this;
3161 }
3162
3163 SpecializationInfo& setMapEntryCount( uint32_t mapEntryCount_ )
3164 {
3165 mapEntryCount = mapEntryCount_;
3166 return *this;
3167 }
3168
3169 SpecializationInfo& setPMapEntries( const SpecializationMapEntry* pMapEntries_ )
3170 {
3171 pMapEntries = pMapEntries_;
3172 return *this;
3173 }
3174
3175 SpecializationInfo& setDataSize( size_t dataSize_ )
3176 {
3177 dataSize = dataSize_;
3178 return *this;
3179 }
3180
3181 SpecializationInfo& setPData( const void* pData_ )
3182 {
3183 pData = pData_;
3184 return *this;
3185 }
3186
3187 operator const VkSpecializationInfo&() const
3188 {
3189 return *reinterpret_cast<const VkSpecializationInfo*>(this);
3190 }
3191
3192 bool operator==( SpecializationInfo const& rhs ) const
3193 {
3194 return ( mapEntryCount == rhs.mapEntryCount )
3195 && ( pMapEntries == rhs.pMapEntries )
3196 && ( dataSize == rhs.dataSize )
3197 && ( pData == rhs.pData );
3198 }
3199
3200 bool operator!=( SpecializationInfo const& rhs ) const
3201 {
3202 return !operator==( rhs );
3203 }
3204
3205 uint32_t mapEntryCount;
3206 const SpecializationMapEntry* pMapEntries;
3207 size_t dataSize;
3208 const void* pData;
3209 };
3210 static_assert( sizeof( SpecializationInfo ) == sizeof( VkSpecializationInfo ), "struct and wrapper have different size!" );
3211
3212 union ClearColorValue
3213 {
3214 ClearColorValue( const std::array<float,4>& float32_ = { {0} } )
3215 {
3216 memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
3217 }
3218
3219 ClearColorValue( const std::array<int32_t,4>& int32_ )
3220 {
3221 memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
3222 }
3223
3224 ClearColorValue( const std::array<uint32_t,4>& uint32_ )
3225 {
3226 memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
3227 }
3228
3229 ClearColorValue& setFloat32( std::array<float,4> float32_ )
3230 {
3231 memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
3232 return *this;
3233 }
3234
3235 ClearColorValue& setInt32( std::array<int32_t,4> int32_ )
3236 {
3237 memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
3238 return *this;
3239 }
3240
3241 ClearColorValue& setUint32( std::array<uint32_t,4> uint32_ )
3242 {
3243 memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
3244 return *this;
3245 }
3246
3247 operator VkClearColorValue const& () const
3248 {
3249 return *reinterpret_cast<const VkClearColorValue*>(this);
3250 }
3251
3252 float float32[4];
3253 int32_t int32[4];
3254 uint32_t uint32[4];
3255 };
3256
3257 struct ClearDepthStencilValue
3258 {
3259 ClearDepthStencilValue( float depth_ = 0, uint32_t stencil_ = 0 )
3260 : depth( depth_ )
3261 , stencil( stencil_ )
3262 {
3263 }
3264
3265 ClearDepthStencilValue( VkClearDepthStencilValue const & rhs )
3266 {
3267 memcpy( this, &rhs, sizeof(ClearDepthStencilValue) );
3268 }
3269
3270 ClearDepthStencilValue& operator=( VkClearDepthStencilValue const & rhs )
3271 {
3272 memcpy( this, &rhs, sizeof(ClearDepthStencilValue) );
3273 return *this;
3274 }
3275
3276 ClearDepthStencilValue& setDepth( float depth_ )
3277 {
3278 depth = depth_;
3279 return *this;
3280 }
3281
3282 ClearDepthStencilValue& setStencil( uint32_t stencil_ )
3283 {
3284 stencil = stencil_;
3285 return *this;
3286 }
3287
3288 operator const VkClearDepthStencilValue&() const
3289 {
3290 return *reinterpret_cast<const VkClearDepthStencilValue*>(this);
3291 }
3292
3293 bool operator==( ClearDepthStencilValue const& rhs ) const
3294 {
3295 return ( depth == rhs.depth )
3296 && ( stencil == rhs.stencil );
3297 }
3298
3299 bool operator!=( ClearDepthStencilValue const& rhs ) const
3300 {
3301 return !operator==( rhs );
3302 }
3303
3304 float depth;
3305 uint32_t stencil;
3306 };
3307 static_assert( sizeof( ClearDepthStencilValue ) == sizeof( VkClearDepthStencilValue ), "struct and wrapper have different size!" );
3308
3309 union ClearValue
3310 {
3311 ClearValue( ClearColorValue color_ = ClearColorValue() )
3312 {
3313 color = color_;
3314 }
3315
3316 ClearValue( ClearDepthStencilValue depthStencil_ )
3317 {
3318 depthStencil = depthStencil_;
3319 }
3320
3321 ClearValue& setColor( ClearColorValue color_ )
3322 {
3323 color = color_;
3324 return *this;
3325 }
3326
3327 ClearValue& setDepthStencil( ClearDepthStencilValue depthStencil_ )
3328 {
3329 depthStencil = depthStencil_;
3330 return *this;
3331 }
3332
3333 operator VkClearValue const& () const
3334 {
3335 return *reinterpret_cast<const VkClearValue*>(this);
3336 }
3337
3338#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
3339 ClearColorValue color;
3340 ClearDepthStencilValue depthStencil;
3341#else
3342 VkClearColorValue color;
3343 VkClearDepthStencilValue depthStencil;
3344#endif // VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
3345 };
3346
3347 struct PhysicalDeviceFeatures
3348 {
3349 PhysicalDeviceFeatures( Bool32 robustBufferAccess_ = 0, Bool32 fullDrawIndexUint32_ = 0, Bool32 imageCubeArray_ = 0, Bool32 independentBlend_ = 0, Bool32 geometryShader_ = 0, Bool32 tessellationShader_ = 0, Bool32 sampleRateShading_ = 0, Bool32 dualSrcBlend_ = 0, Bool32 logicOp_ = 0, Bool32 multiDrawIndirect_ = 0, Bool32 drawIndirectFirstInstance_ = 0, Bool32 depthClamp_ = 0, Bool32 depthBiasClamp_ = 0, Bool32 fillModeNonSolid_ = 0, Bool32 depthBounds_ = 0, Bool32 wideLines_ = 0, Bool32 largePoints_ = 0, Bool32 alphaToOne_ = 0, Bool32 multiViewport_ = 0, Bool32 samplerAnisotropy_ = 0, Bool32 textureCompressionETC2_ = 0, Bool32 textureCompressionASTC_LDR_ = 0, Bool32 textureCompressionBC_ = 0, Bool32 occlusionQueryPrecise_ = 0, Bool32 pipelineStatisticsQuery_ = 0, Bool32 vertexPipelineStoresAndAtomics_ = 0, Bool32 fragmentStoresAndAtomics_ = 0, Bool32 shaderTessellationAndGeometryPointSize_ = 0, Bool32 shaderImageGatherExtended_ = 0, Bool32 shaderStorageImageExtendedFormats_ = 0, Bool32 shaderStorageImageMultisample_ = 0, Bool32 shaderStorageImageReadWithoutFormat_ = 0, Bool32 shaderStorageImageWriteWithoutFormat_ = 0, Bool32 shaderUniformBufferArrayDynamicIndexing_ = 0, Bool32 shaderSampledImageArrayDynamicIndexing_ = 0, Bool32 shaderStorageBufferArrayDynamicIndexing_ = 0, Bool32 shaderStorageImageArrayDynamicIndexing_ = 0, Bool32 shaderClipDistance_ = 0, Bool32 shaderCullDistance_ = 0, Bool32 shaderFloat64_ = 0, Bool32 shaderInt64_ = 0, Bool32 shaderInt16_ = 0, Bool32 shaderResourceResidency_ = 0, Bool32 shaderResourceMinLod_ = 0, Bool32 sparseBinding_ = 0, Bool32 sparseResidencyBuffer_ = 0, Bool32 sparseResidencyImage2D_ = 0, Bool32 sparseResidencyImage3D_ = 0, Bool32 sparseResidency2Samples_ = 0, Bool32 sparseResidency4Samples_ = 0, Bool32 sparseResidency8Samples_ = 0, Bool32 sparseResidency16Samples_ = 0, Bool32 sparseResidencyAliased_ = 0, Bool32 variableMultisampleRate_ = 0, Bool32 inheritedQueries_ = 0 )
3350 : robustBufferAccess( robustBufferAccess_ )
3351 , fullDrawIndexUint32( fullDrawIndexUint32_ )
3352 , imageCubeArray( imageCubeArray_ )
3353 , independentBlend( independentBlend_ )
3354 , geometryShader( geometryShader_ )
3355 , tessellationShader( tessellationShader_ )
3356 , sampleRateShading( sampleRateShading_ )
3357 , dualSrcBlend( dualSrcBlend_ )
3358 , logicOp( logicOp_ )
3359 , multiDrawIndirect( multiDrawIndirect_ )
3360 , drawIndirectFirstInstance( drawIndirectFirstInstance_ )
3361 , depthClamp( depthClamp_ )
3362 , depthBiasClamp( depthBiasClamp_ )
3363 , fillModeNonSolid( fillModeNonSolid_ )
3364 , depthBounds( depthBounds_ )
3365 , wideLines( wideLines_ )
3366 , largePoints( largePoints_ )
3367 , alphaToOne( alphaToOne_ )
3368 , multiViewport( multiViewport_ )
3369 , samplerAnisotropy( samplerAnisotropy_ )
3370 , textureCompressionETC2( textureCompressionETC2_ )
3371 , textureCompressionASTC_LDR( textureCompressionASTC_LDR_ )
3372 , textureCompressionBC( textureCompressionBC_ )
3373 , occlusionQueryPrecise( occlusionQueryPrecise_ )
3374 , pipelineStatisticsQuery( pipelineStatisticsQuery_ )
3375 , vertexPipelineStoresAndAtomics( vertexPipelineStoresAndAtomics_ )
3376 , fragmentStoresAndAtomics( fragmentStoresAndAtomics_ )
3377 , shaderTessellationAndGeometryPointSize( shaderTessellationAndGeometryPointSize_ )
3378 , shaderImageGatherExtended( shaderImageGatherExtended_ )
3379 , shaderStorageImageExtendedFormats( shaderStorageImageExtendedFormats_ )
3380 , shaderStorageImageMultisample( shaderStorageImageMultisample_ )
3381 , shaderStorageImageReadWithoutFormat( shaderStorageImageReadWithoutFormat_ )
3382 , shaderStorageImageWriteWithoutFormat( shaderStorageImageWriteWithoutFormat_ )
3383 , shaderUniformBufferArrayDynamicIndexing( shaderUniformBufferArrayDynamicIndexing_ )
3384 , shaderSampledImageArrayDynamicIndexing( shaderSampledImageArrayDynamicIndexing_ )
3385 , shaderStorageBufferArrayDynamicIndexing( shaderStorageBufferArrayDynamicIndexing_ )
3386 , shaderStorageImageArrayDynamicIndexing( shaderStorageImageArrayDynamicIndexing_ )
3387 , shaderClipDistance( shaderClipDistance_ )
3388 , shaderCullDistance( shaderCullDistance_ )
3389 , shaderFloat64( shaderFloat64_ )
3390 , shaderInt64( shaderInt64_ )
3391 , shaderInt16( shaderInt16_ )
3392 , shaderResourceResidency( shaderResourceResidency_ )
3393 , shaderResourceMinLod( shaderResourceMinLod_ )
3394 , sparseBinding( sparseBinding_ )
3395 , sparseResidencyBuffer( sparseResidencyBuffer_ )
3396 , sparseResidencyImage2D( sparseResidencyImage2D_ )
3397 , sparseResidencyImage3D( sparseResidencyImage3D_ )
3398 , sparseResidency2Samples( sparseResidency2Samples_ )
3399 , sparseResidency4Samples( sparseResidency4Samples_ )
3400 , sparseResidency8Samples( sparseResidency8Samples_ )
3401 , sparseResidency16Samples( sparseResidency16Samples_ )
3402 , sparseResidencyAliased( sparseResidencyAliased_ )
3403 , variableMultisampleRate( variableMultisampleRate_ )
3404 , inheritedQueries( inheritedQueries_ )
3405 {
3406 }
3407
3408 PhysicalDeviceFeatures( VkPhysicalDeviceFeatures const & rhs )
3409 {
3410 memcpy( this, &rhs, sizeof(PhysicalDeviceFeatures) );
3411 }
3412
3413 PhysicalDeviceFeatures& operator=( VkPhysicalDeviceFeatures const & rhs )
3414 {
3415 memcpy( this, &rhs, sizeof(PhysicalDeviceFeatures) );
3416 return *this;
3417 }
3418
3419 PhysicalDeviceFeatures& setRobustBufferAccess( Bool32 robustBufferAccess_ )
3420 {
3421 robustBufferAccess = robustBufferAccess_;
3422 return *this;
3423 }
3424
3425 PhysicalDeviceFeatures& setFullDrawIndexUint32( Bool32 fullDrawIndexUint32_ )
3426 {
3427 fullDrawIndexUint32 = fullDrawIndexUint32_;
3428 return *this;
3429 }
3430
3431 PhysicalDeviceFeatures& setImageCubeArray( Bool32 imageCubeArray_ )
3432 {
3433 imageCubeArray = imageCubeArray_;
3434 return *this;
3435 }
3436
3437 PhysicalDeviceFeatures& setIndependentBlend( Bool32 independentBlend_ )
3438 {
3439 independentBlend = independentBlend_;
3440 return *this;
3441 }
3442
3443 PhysicalDeviceFeatures& setGeometryShader( Bool32 geometryShader_ )
3444 {
3445 geometryShader = geometryShader_;
3446 return *this;
3447 }
3448
3449 PhysicalDeviceFeatures& setTessellationShader( Bool32 tessellationShader_ )
3450 {
3451 tessellationShader = tessellationShader_;
3452 return *this;
3453 }
3454
3455 PhysicalDeviceFeatures& setSampleRateShading( Bool32 sampleRateShading_ )
3456 {
3457 sampleRateShading = sampleRateShading_;
3458 return *this;
3459 }
3460
3461 PhysicalDeviceFeatures& setDualSrcBlend( Bool32 dualSrcBlend_ )
3462 {
3463 dualSrcBlend = dualSrcBlend_;
3464 return *this;
3465 }
3466
3467 PhysicalDeviceFeatures& setLogicOp( Bool32 logicOp_ )
3468 {
3469 logicOp = logicOp_;
3470 return *this;
3471 }
3472
3473 PhysicalDeviceFeatures& setMultiDrawIndirect( Bool32 multiDrawIndirect_ )
3474 {
3475 multiDrawIndirect = multiDrawIndirect_;
3476 return *this;
3477 }
3478
3479 PhysicalDeviceFeatures& setDrawIndirectFirstInstance( Bool32 drawIndirectFirstInstance_ )
3480 {
3481 drawIndirectFirstInstance = drawIndirectFirstInstance_;
3482 return *this;
3483 }
3484
3485 PhysicalDeviceFeatures& setDepthClamp( Bool32 depthClamp_ )
3486 {
3487 depthClamp = depthClamp_;
3488 return *this;
3489 }
3490
3491 PhysicalDeviceFeatures& setDepthBiasClamp( Bool32 depthBiasClamp_ )
3492 {
3493 depthBiasClamp = depthBiasClamp_;
3494 return *this;
3495 }
3496
3497 PhysicalDeviceFeatures& setFillModeNonSolid( Bool32 fillModeNonSolid_ )
3498 {
3499 fillModeNonSolid = fillModeNonSolid_;
3500 return *this;
3501 }
3502
3503 PhysicalDeviceFeatures& setDepthBounds( Bool32 depthBounds_ )
3504 {
3505 depthBounds = depthBounds_;
3506 return *this;
3507 }
3508
3509 PhysicalDeviceFeatures& setWideLines( Bool32 wideLines_ )
3510 {
3511 wideLines = wideLines_;
3512 return *this;
3513 }
3514
3515 PhysicalDeviceFeatures& setLargePoints( Bool32 largePoints_ )
3516 {
3517 largePoints = largePoints_;
3518 return *this;
3519 }
3520
3521 PhysicalDeviceFeatures& setAlphaToOne( Bool32 alphaToOne_ )
3522 {
3523 alphaToOne = alphaToOne_;
3524 return *this;
3525 }
3526
3527 PhysicalDeviceFeatures& setMultiViewport( Bool32 multiViewport_ )
3528 {
3529 multiViewport = multiViewport_;
3530 return *this;
3531 }
3532
3533 PhysicalDeviceFeatures& setSamplerAnisotropy( Bool32 samplerAnisotropy_ )
3534 {
3535 samplerAnisotropy = samplerAnisotropy_;
3536 return *this;
3537 }
3538
3539 PhysicalDeviceFeatures& setTextureCompressionETC2( Bool32 textureCompressionETC2_ )
3540 {
3541 textureCompressionETC2 = textureCompressionETC2_;
3542 return *this;
3543 }
3544
3545 PhysicalDeviceFeatures& setTextureCompressionASTC_LDR( Bool32 textureCompressionASTC_LDR_ )
3546 {
3547 textureCompressionASTC_LDR = textureCompressionASTC_LDR_;
3548 return *this;
3549 }
3550
3551 PhysicalDeviceFeatures& setTextureCompressionBC( Bool32 textureCompressionBC_ )
3552 {
3553 textureCompressionBC = textureCompressionBC_;
3554 return *this;
3555 }
3556
3557 PhysicalDeviceFeatures& setOcclusionQueryPrecise( Bool32 occlusionQueryPrecise_ )
3558 {
3559 occlusionQueryPrecise = occlusionQueryPrecise_;
3560 return *this;
3561 }
3562
3563 PhysicalDeviceFeatures& setPipelineStatisticsQuery( Bool32 pipelineStatisticsQuery_ )
3564 {
3565 pipelineStatisticsQuery = pipelineStatisticsQuery_;
3566 return *this;
3567 }
3568
3569 PhysicalDeviceFeatures& setVertexPipelineStoresAndAtomics( Bool32 vertexPipelineStoresAndAtomics_ )
3570 {
3571 vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics_;
3572 return *this;
3573 }
3574
3575 PhysicalDeviceFeatures& setFragmentStoresAndAtomics( Bool32 fragmentStoresAndAtomics_ )
3576 {
3577 fragmentStoresAndAtomics = fragmentStoresAndAtomics_;
3578 return *this;
3579 }
3580
3581 PhysicalDeviceFeatures& setShaderTessellationAndGeometryPointSize( Bool32 shaderTessellationAndGeometryPointSize_ )
3582 {
3583 shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize_;
3584 return *this;
3585 }
3586
3587 PhysicalDeviceFeatures& setShaderImageGatherExtended( Bool32 shaderImageGatherExtended_ )
3588 {
3589 shaderImageGatherExtended = shaderImageGatherExtended_;
3590 return *this;
3591 }
3592
3593 PhysicalDeviceFeatures& setShaderStorageImageExtendedFormats( Bool32 shaderStorageImageExtendedFormats_ )
3594 {
3595 shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats_;
3596 return *this;
3597 }
3598
3599 PhysicalDeviceFeatures& setShaderStorageImageMultisample( Bool32 shaderStorageImageMultisample_ )
3600 {
3601 shaderStorageImageMultisample = shaderStorageImageMultisample_;
3602 return *this;
3603 }
3604
3605 PhysicalDeviceFeatures& setShaderStorageImageReadWithoutFormat( Bool32 shaderStorageImageReadWithoutFormat_ )
3606 {
3607 shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat_;
3608 return *this;
3609 }
3610
3611 PhysicalDeviceFeatures& setShaderStorageImageWriteWithoutFormat( Bool32 shaderStorageImageWriteWithoutFormat_ )
3612 {
3613 shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat_;
3614 return *this;
3615 }
3616
3617 PhysicalDeviceFeatures& setShaderUniformBufferArrayDynamicIndexing( Bool32 shaderUniformBufferArrayDynamicIndexing_ )
3618 {
3619 shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing_;
3620 return *this;
3621 }
3622
3623 PhysicalDeviceFeatures& setShaderSampledImageArrayDynamicIndexing( Bool32 shaderSampledImageArrayDynamicIndexing_ )
3624 {
3625 shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing_;
3626 return *this;
3627 }
3628
3629 PhysicalDeviceFeatures& setShaderStorageBufferArrayDynamicIndexing( Bool32 shaderStorageBufferArrayDynamicIndexing_ )
3630 {
3631 shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing_;
3632 return *this;
3633 }
3634
3635 PhysicalDeviceFeatures& setShaderStorageImageArrayDynamicIndexing( Bool32 shaderStorageImageArrayDynamicIndexing_ )
3636 {
3637 shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing_;
3638 return *this;
3639 }
3640
3641 PhysicalDeviceFeatures& setShaderClipDistance( Bool32 shaderClipDistance_ )
3642 {
3643 shaderClipDistance = shaderClipDistance_;
3644 return *this;
3645 }
3646
3647 PhysicalDeviceFeatures& setShaderCullDistance( Bool32 shaderCullDistance_ )
3648 {
3649 shaderCullDistance = shaderCullDistance_;
3650 return *this;
3651 }
3652
3653 PhysicalDeviceFeatures& setShaderFloat64( Bool32 shaderFloat64_ )
3654 {
3655 shaderFloat64 = shaderFloat64_;
3656 return *this;
3657 }
3658
3659 PhysicalDeviceFeatures& setShaderInt64( Bool32 shaderInt64_ )
3660 {
3661 shaderInt64 = shaderInt64_;
3662 return *this;
3663 }
3664
3665 PhysicalDeviceFeatures& setShaderInt16( Bool32 shaderInt16_ )
3666 {
3667 shaderInt16 = shaderInt16_;
3668 return *this;
3669 }
3670
3671 PhysicalDeviceFeatures& setShaderResourceResidency( Bool32 shaderResourceResidency_ )
3672 {
3673 shaderResourceResidency = shaderResourceResidency_;
3674 return *this;
3675 }
3676
3677 PhysicalDeviceFeatures& setShaderResourceMinLod( Bool32 shaderResourceMinLod_ )
3678 {
3679 shaderResourceMinLod = shaderResourceMinLod_;
3680 return *this;
3681 }
3682
3683 PhysicalDeviceFeatures& setSparseBinding( Bool32 sparseBinding_ )
3684 {
3685 sparseBinding = sparseBinding_;
3686 return *this;
3687 }
3688
3689 PhysicalDeviceFeatures& setSparseResidencyBuffer( Bool32 sparseResidencyBuffer_ )
3690 {
3691 sparseResidencyBuffer = sparseResidencyBuffer_;
3692 return *this;
3693 }
3694
3695 PhysicalDeviceFeatures& setSparseResidencyImage2D( Bool32 sparseResidencyImage2D_ )
3696 {
3697 sparseResidencyImage2D = sparseResidencyImage2D_;
3698 return *this;
3699 }
3700
3701 PhysicalDeviceFeatures& setSparseResidencyImage3D( Bool32 sparseResidencyImage3D_ )
3702 {
3703 sparseResidencyImage3D = sparseResidencyImage3D_;
3704 return *this;
3705 }
3706
3707 PhysicalDeviceFeatures& setSparseResidency2Samples( Bool32 sparseResidency2Samples_ )
3708 {
3709 sparseResidency2Samples = sparseResidency2Samples_;
3710 return *this;
3711 }
3712
3713 PhysicalDeviceFeatures& setSparseResidency4Samples( Bool32 sparseResidency4Samples_ )
3714 {
3715 sparseResidency4Samples = sparseResidency4Samples_;
3716 return *this;
3717 }
3718
3719 PhysicalDeviceFeatures& setSparseResidency8Samples( Bool32 sparseResidency8Samples_ )
3720 {
3721 sparseResidency8Samples = sparseResidency8Samples_;
3722 return *this;
3723 }
3724
3725 PhysicalDeviceFeatures& setSparseResidency16Samples( Bool32 sparseResidency16Samples_ )
3726 {
3727 sparseResidency16Samples = sparseResidency16Samples_;
3728 return *this;
3729 }
3730
3731 PhysicalDeviceFeatures& setSparseResidencyAliased( Bool32 sparseResidencyAliased_ )
3732 {
3733 sparseResidencyAliased = sparseResidencyAliased_;
3734 return *this;
3735 }
3736
3737 PhysicalDeviceFeatures& setVariableMultisampleRate( Bool32 variableMultisampleRate_ )
3738 {
3739 variableMultisampleRate = variableMultisampleRate_;
3740 return *this;
3741 }
3742
3743 PhysicalDeviceFeatures& setInheritedQueries( Bool32 inheritedQueries_ )
3744 {
3745 inheritedQueries = inheritedQueries_;
3746 return *this;
3747 }
3748
3749 operator const VkPhysicalDeviceFeatures&() const
3750 {
3751 return *reinterpret_cast<const VkPhysicalDeviceFeatures*>(this);
3752 }
3753
3754 bool operator==( PhysicalDeviceFeatures const& rhs ) const
3755 {
3756 return ( robustBufferAccess == rhs.robustBufferAccess )
3757 && ( fullDrawIndexUint32 == rhs.fullDrawIndexUint32 )
3758 && ( imageCubeArray == rhs.imageCubeArray )
3759 && ( independentBlend == rhs.independentBlend )
3760 && ( geometryShader == rhs.geometryShader )
3761 && ( tessellationShader == rhs.tessellationShader )
3762 && ( sampleRateShading == rhs.sampleRateShading )
3763 && ( dualSrcBlend == rhs.dualSrcBlend )
3764 && ( logicOp == rhs.logicOp )
3765 && ( multiDrawIndirect == rhs.multiDrawIndirect )
3766 && ( drawIndirectFirstInstance == rhs.drawIndirectFirstInstance )
3767 && ( depthClamp == rhs.depthClamp )
3768 && ( depthBiasClamp == rhs.depthBiasClamp )
3769 && ( fillModeNonSolid == rhs.fillModeNonSolid )
3770 && ( depthBounds == rhs.depthBounds )
3771 && ( wideLines == rhs.wideLines )
3772 && ( largePoints == rhs.largePoints )
3773 && ( alphaToOne == rhs.alphaToOne )
3774 && ( multiViewport == rhs.multiViewport )
3775 && ( samplerAnisotropy == rhs.samplerAnisotropy )
3776 && ( textureCompressionETC2 == rhs.textureCompressionETC2 )
3777 && ( textureCompressionASTC_LDR == rhs.textureCompressionASTC_LDR )
3778 && ( textureCompressionBC == rhs.textureCompressionBC )
3779 && ( occlusionQueryPrecise == rhs.occlusionQueryPrecise )
3780 && ( pipelineStatisticsQuery == rhs.pipelineStatisticsQuery )
3781 && ( vertexPipelineStoresAndAtomics == rhs.vertexPipelineStoresAndAtomics )
3782 && ( fragmentStoresAndAtomics == rhs.fragmentStoresAndAtomics )
3783 && ( shaderTessellationAndGeometryPointSize == rhs.shaderTessellationAndGeometryPointSize )
3784 && ( shaderImageGatherExtended == rhs.shaderImageGatherExtended )
3785 && ( shaderStorageImageExtendedFormats == rhs.shaderStorageImageExtendedFormats )
3786 && ( shaderStorageImageMultisample == rhs.shaderStorageImageMultisample )
3787 && ( shaderStorageImageReadWithoutFormat == rhs.shaderStorageImageReadWithoutFormat )
3788 && ( shaderStorageImageWriteWithoutFormat == rhs.shaderStorageImageWriteWithoutFormat )
3789 && ( shaderUniformBufferArrayDynamicIndexing == rhs.shaderUniformBufferArrayDynamicIndexing )
3790 && ( shaderSampledImageArrayDynamicIndexing == rhs.shaderSampledImageArrayDynamicIndexing )
3791 && ( shaderStorageBufferArrayDynamicIndexing == rhs.shaderStorageBufferArrayDynamicIndexing )
3792 && ( shaderStorageImageArrayDynamicIndexing == rhs.shaderStorageImageArrayDynamicIndexing )
3793 && ( shaderClipDistance == rhs.shaderClipDistance )
3794 && ( shaderCullDistance == rhs.shaderCullDistance )
3795 && ( shaderFloat64 == rhs.shaderFloat64 )
3796 && ( shaderInt64 == rhs.shaderInt64 )
3797 && ( shaderInt16 == rhs.shaderInt16 )
3798 && ( shaderResourceResidency == rhs.shaderResourceResidency )
3799 && ( shaderResourceMinLod == rhs.shaderResourceMinLod )
3800 && ( sparseBinding == rhs.sparseBinding )
3801 && ( sparseResidencyBuffer == rhs.sparseResidencyBuffer )
3802 && ( sparseResidencyImage2D == rhs.sparseResidencyImage2D )
3803 && ( sparseResidencyImage3D == rhs.sparseResidencyImage3D )
3804 && ( sparseResidency2Samples == rhs.sparseResidency2Samples )
3805 && ( sparseResidency4Samples == rhs.sparseResidency4Samples )
3806 && ( sparseResidency8Samples == rhs.sparseResidency8Samples )
3807 && ( sparseResidency16Samples == rhs.sparseResidency16Samples )
3808 && ( sparseResidencyAliased == rhs.sparseResidencyAliased )
3809 && ( variableMultisampleRate == rhs.variableMultisampleRate )
3810 && ( inheritedQueries == rhs.inheritedQueries );
3811 }
3812
3813 bool operator!=( PhysicalDeviceFeatures const& rhs ) const
3814 {
3815 return !operator==( rhs );
3816 }
3817
3818 Bool32 robustBufferAccess;
3819 Bool32 fullDrawIndexUint32;
3820 Bool32 imageCubeArray;
3821 Bool32 independentBlend;
3822 Bool32 geometryShader;
3823 Bool32 tessellationShader;
3824 Bool32 sampleRateShading;
3825 Bool32 dualSrcBlend;
3826 Bool32 logicOp;
3827 Bool32 multiDrawIndirect;
3828 Bool32 drawIndirectFirstInstance;
3829 Bool32 depthClamp;
3830 Bool32 depthBiasClamp;
3831 Bool32 fillModeNonSolid;
3832 Bool32 depthBounds;
3833 Bool32 wideLines;
3834 Bool32 largePoints;
3835 Bool32 alphaToOne;
3836 Bool32 multiViewport;
3837 Bool32 samplerAnisotropy;
3838 Bool32 textureCompressionETC2;
3839 Bool32 textureCompressionASTC_LDR;
3840 Bool32 textureCompressionBC;
3841 Bool32 occlusionQueryPrecise;
3842 Bool32 pipelineStatisticsQuery;
3843 Bool32 vertexPipelineStoresAndAtomics;
3844 Bool32 fragmentStoresAndAtomics;
3845 Bool32 shaderTessellationAndGeometryPointSize;
3846 Bool32 shaderImageGatherExtended;
3847 Bool32 shaderStorageImageExtendedFormats;
3848 Bool32 shaderStorageImageMultisample;
3849 Bool32 shaderStorageImageReadWithoutFormat;
3850 Bool32 shaderStorageImageWriteWithoutFormat;
3851 Bool32 shaderUniformBufferArrayDynamicIndexing;
3852 Bool32 shaderSampledImageArrayDynamicIndexing;
3853 Bool32 shaderStorageBufferArrayDynamicIndexing;
3854 Bool32 shaderStorageImageArrayDynamicIndexing;
3855 Bool32 shaderClipDistance;
3856 Bool32 shaderCullDistance;
3857 Bool32 shaderFloat64;
3858 Bool32 shaderInt64;
3859 Bool32 shaderInt16;
3860 Bool32 shaderResourceResidency;
3861 Bool32 shaderResourceMinLod;
3862 Bool32 sparseBinding;
3863 Bool32 sparseResidencyBuffer;
3864 Bool32 sparseResidencyImage2D;
3865 Bool32 sparseResidencyImage3D;
3866 Bool32 sparseResidency2Samples;
3867 Bool32 sparseResidency4Samples;
3868 Bool32 sparseResidency8Samples;
3869 Bool32 sparseResidency16Samples;
3870 Bool32 sparseResidencyAliased;
3871 Bool32 variableMultisampleRate;
3872 Bool32 inheritedQueries;
3873 };
3874 static_assert( sizeof( PhysicalDeviceFeatures ) == sizeof( VkPhysicalDeviceFeatures ), "struct and wrapper have different size!" );
3875
3876 struct PhysicalDeviceSparseProperties
3877 {
3878 operator const VkPhysicalDeviceSparseProperties&() const
3879 {
3880 return *reinterpret_cast<const VkPhysicalDeviceSparseProperties*>(this);
3881 }
3882
3883 bool operator==( PhysicalDeviceSparseProperties const& rhs ) const
3884 {
3885 return ( residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape )
3886 && ( residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape )
3887 && ( residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape )
3888 && ( residencyAlignedMipSize == rhs.residencyAlignedMipSize )
3889 && ( residencyNonResidentStrict == rhs.residencyNonResidentStrict );
3890 }
3891
3892 bool operator!=( PhysicalDeviceSparseProperties const& rhs ) const
3893 {
3894 return !operator==( rhs );
3895 }
3896
3897 Bool32 residencyStandard2DBlockShape;
3898 Bool32 residencyStandard2DMultisampleBlockShape;
3899 Bool32 residencyStandard3DBlockShape;
3900 Bool32 residencyAlignedMipSize;
3901 Bool32 residencyNonResidentStrict;
3902 };
3903 static_assert( sizeof( PhysicalDeviceSparseProperties ) == sizeof( VkPhysicalDeviceSparseProperties ), "struct and wrapper have different size!" );
3904
3905 struct DrawIndirectCommand
3906 {
3907 DrawIndirectCommand( uint32_t vertexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstVertex_ = 0, uint32_t firstInstance_ = 0 )
3908 : vertexCount( vertexCount_ )
3909 , instanceCount( instanceCount_ )
3910 , firstVertex( firstVertex_ )
3911 , firstInstance( firstInstance_ )
3912 {
3913 }
3914
3915 DrawIndirectCommand( VkDrawIndirectCommand const & rhs )
3916 {
3917 memcpy( this, &rhs, sizeof(DrawIndirectCommand) );
3918 }
3919
3920 DrawIndirectCommand& operator=( VkDrawIndirectCommand const & rhs )
3921 {
3922 memcpy( this, &rhs, sizeof(DrawIndirectCommand) );
3923 return *this;
3924 }
3925
3926 DrawIndirectCommand& setVertexCount( uint32_t vertexCount_ )
3927 {
3928 vertexCount = vertexCount_;
3929 return *this;
3930 }
3931
3932 DrawIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
3933 {
3934 instanceCount = instanceCount_;
3935 return *this;
3936 }
3937
3938 DrawIndirectCommand& setFirstVertex( uint32_t firstVertex_ )
3939 {
3940 firstVertex = firstVertex_;
3941 return *this;
3942 }
3943
3944 DrawIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
3945 {
3946 firstInstance = firstInstance_;
3947 return *this;
3948 }
3949
3950 operator const VkDrawIndirectCommand&() const
3951 {
3952 return *reinterpret_cast<const VkDrawIndirectCommand*>(this);
3953 }
3954
3955 bool operator==( DrawIndirectCommand const& rhs ) const
3956 {
3957 return ( vertexCount == rhs.vertexCount )
3958 && ( instanceCount == rhs.instanceCount )
3959 && ( firstVertex == rhs.firstVertex )
3960 && ( firstInstance == rhs.firstInstance );
3961 }
3962
3963 bool operator!=( DrawIndirectCommand const& rhs ) const
3964 {
3965 return !operator==( rhs );
3966 }
3967
3968 uint32_t vertexCount;
3969 uint32_t instanceCount;
3970 uint32_t firstVertex;
3971 uint32_t firstInstance;
3972 };
3973 static_assert( sizeof( DrawIndirectCommand ) == sizeof( VkDrawIndirectCommand ), "struct and wrapper have different size!" );
3974
3975 struct DrawIndexedIndirectCommand
3976 {
3977 DrawIndexedIndirectCommand( uint32_t indexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstIndex_ = 0, int32_t vertexOffset_ = 0, uint32_t firstInstance_ = 0 )
3978 : indexCount( indexCount_ )
3979 , instanceCount( instanceCount_ )
3980 , firstIndex( firstIndex_ )
3981 , vertexOffset( vertexOffset_ )
3982 , firstInstance( firstInstance_ )
3983 {
3984 }
3985
3986 DrawIndexedIndirectCommand( VkDrawIndexedIndirectCommand const & rhs )
3987 {
3988 memcpy( this, &rhs, sizeof(DrawIndexedIndirectCommand) );
3989 }
3990
3991 DrawIndexedIndirectCommand& operator=( VkDrawIndexedIndirectCommand const & rhs )
3992 {
3993 memcpy( this, &rhs, sizeof(DrawIndexedIndirectCommand) );
3994 return *this;
3995 }
3996
3997 DrawIndexedIndirectCommand& setIndexCount( uint32_t indexCount_ )
3998 {
3999 indexCount = indexCount_;
4000 return *this;
4001 }
4002
4003 DrawIndexedIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
4004 {
4005 instanceCount = instanceCount_;
4006 return *this;
4007 }
4008
4009 DrawIndexedIndirectCommand& setFirstIndex( uint32_t firstIndex_ )
4010 {
4011 firstIndex = firstIndex_;
4012 return *this;
4013 }
4014
4015 DrawIndexedIndirectCommand& setVertexOffset( int32_t vertexOffset_ )
4016 {
4017 vertexOffset = vertexOffset_;
4018 return *this;
4019 }
4020
4021 DrawIndexedIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
4022 {
4023 firstInstance = firstInstance_;
4024 return *this;
4025 }
4026
4027 operator const VkDrawIndexedIndirectCommand&() const
4028 {
4029 return *reinterpret_cast<const VkDrawIndexedIndirectCommand*>(this);
4030 }
4031
4032 bool operator==( DrawIndexedIndirectCommand const& rhs ) const
4033 {
4034 return ( indexCount == rhs.indexCount )
4035 && ( instanceCount == rhs.instanceCount )
4036 && ( firstIndex == rhs.firstIndex )
4037 && ( vertexOffset == rhs.vertexOffset )
4038 && ( firstInstance == rhs.firstInstance );
4039 }
4040
4041 bool operator!=( DrawIndexedIndirectCommand const& rhs ) const
4042 {
4043 return !operator==( rhs );
4044 }
4045
4046 uint32_t indexCount;
4047 uint32_t instanceCount;
4048 uint32_t firstIndex;
4049 int32_t vertexOffset;
4050 uint32_t firstInstance;
4051 };
4052 static_assert( sizeof( DrawIndexedIndirectCommand ) == sizeof( VkDrawIndexedIndirectCommand ), "struct and wrapper have different size!" );
4053
4054 struct DispatchIndirectCommand
4055 {
4056 DispatchIndirectCommand( uint32_t x_ = 0, uint32_t y_ = 0, uint32_t z_ = 0 )
4057 : x( x_ )
4058 , y( y_ )
4059 , z( z_ )
4060 {
4061 }
4062
4063 DispatchIndirectCommand( VkDispatchIndirectCommand const & rhs )
4064 {
4065 memcpy( this, &rhs, sizeof(DispatchIndirectCommand) );
4066 }
4067
4068 DispatchIndirectCommand& operator=( VkDispatchIndirectCommand const & rhs )
4069 {
4070 memcpy( this, &rhs, sizeof(DispatchIndirectCommand) );
4071 return *this;
4072 }
4073
4074 DispatchIndirectCommand& setX( uint32_t x_ )
4075 {
4076 x = x_;
4077 return *this;
4078 }
4079
4080 DispatchIndirectCommand& setY( uint32_t y_ )
4081 {
4082 y = y_;
4083 return *this;
4084 }
4085
4086 DispatchIndirectCommand& setZ( uint32_t z_ )
4087 {
4088 z = z_;
4089 return *this;
4090 }
4091
4092 operator const VkDispatchIndirectCommand&() const
4093 {
4094 return *reinterpret_cast<const VkDispatchIndirectCommand*>(this);
4095 }
4096
4097 bool operator==( DispatchIndirectCommand const& rhs ) const
4098 {
4099 return ( x == rhs.x )
4100 && ( y == rhs.y )
4101 && ( z == rhs.z );
4102 }
4103
4104 bool operator!=( DispatchIndirectCommand const& rhs ) const
4105 {
4106 return !operator==( rhs );
4107 }
4108
4109 uint32_t x;
4110 uint32_t y;
4111 uint32_t z;
4112 };
4113 static_assert( sizeof( DispatchIndirectCommand ) == sizeof( VkDispatchIndirectCommand ), "struct and wrapper have different size!" );
4114
4115 struct DisplayPlanePropertiesKHR
4116 {
Lenny Komowbed9b5c2016-08-11 11:23:15 -06004117 operator const VkDisplayPlanePropertiesKHR&() const
4118 {
4119 return *reinterpret_cast<const VkDisplayPlanePropertiesKHR*>(this);
4120 }
4121
4122 bool operator==( DisplayPlanePropertiesKHR const& rhs ) const
4123 {
4124 return ( currentDisplay == rhs.currentDisplay )
4125 && ( currentStackIndex == rhs.currentStackIndex );
4126 }
4127
4128 bool operator!=( DisplayPlanePropertiesKHR const& rhs ) const
4129 {
4130 return !operator==( rhs );
4131 }
4132
4133 DisplayKHR currentDisplay;
4134 uint32_t currentStackIndex;
4135 };
4136 static_assert( sizeof( DisplayPlanePropertiesKHR ) == sizeof( VkDisplayPlanePropertiesKHR ), "struct and wrapper have different size!" );
4137
4138 struct DisplayModeParametersKHR
4139 {
4140 DisplayModeParametersKHR( Extent2D visibleRegion_ = Extent2D(), uint32_t refreshRate_ = 0 )
4141 : visibleRegion( visibleRegion_ )
4142 , refreshRate( refreshRate_ )
4143 {
4144 }
4145
4146 DisplayModeParametersKHR( VkDisplayModeParametersKHR const & rhs )
4147 {
4148 memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
4149 }
4150
4151 DisplayModeParametersKHR& operator=( VkDisplayModeParametersKHR const & rhs )
4152 {
4153 memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
4154 return *this;
4155 }
4156
4157 DisplayModeParametersKHR& setVisibleRegion( Extent2D visibleRegion_ )
4158 {
4159 visibleRegion = visibleRegion_;
4160 return *this;
4161 }
4162
4163 DisplayModeParametersKHR& setRefreshRate( uint32_t refreshRate_ )
4164 {
4165 refreshRate = refreshRate_;
4166 return *this;
4167 }
4168
4169 operator const VkDisplayModeParametersKHR&() const
4170 {
4171 return *reinterpret_cast<const VkDisplayModeParametersKHR*>(this);
4172 }
4173
4174 bool operator==( DisplayModeParametersKHR const& rhs ) const
4175 {
4176 return ( visibleRegion == rhs.visibleRegion )
4177 && ( refreshRate == rhs.refreshRate );
4178 }
4179
4180 bool operator!=( DisplayModeParametersKHR const& rhs ) const
4181 {
4182 return !operator==( rhs );
4183 }
4184
4185 Extent2D visibleRegion;
4186 uint32_t refreshRate;
4187 };
4188 static_assert( sizeof( DisplayModeParametersKHR ) == sizeof( VkDisplayModeParametersKHR ), "struct and wrapper have different size!" );
4189
4190 struct DisplayModePropertiesKHR
4191 {
Lenny Komowbed9b5c2016-08-11 11:23:15 -06004192 operator const VkDisplayModePropertiesKHR&() const
4193 {
4194 return *reinterpret_cast<const VkDisplayModePropertiesKHR*>(this);
4195 }
4196
4197 bool operator==( DisplayModePropertiesKHR const& rhs ) const
4198 {
4199 return ( displayMode == rhs.displayMode )
4200 && ( parameters == rhs.parameters );
4201 }
4202
4203 bool operator!=( DisplayModePropertiesKHR const& rhs ) const
4204 {
4205 return !operator==( rhs );
4206 }
4207
4208 DisplayModeKHR displayMode;
4209 DisplayModeParametersKHR parameters;
4210 };
4211 static_assert( sizeof( DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ), "struct and wrapper have different size!" );
4212
4213 enum class ImageLayout
4214 {
4215 eUndefined = VK_IMAGE_LAYOUT_UNDEFINED,
4216 eGeneral = VK_IMAGE_LAYOUT_GENERAL,
4217 eColorAttachmentOptimal = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
4218 eDepthStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
4219 eDepthStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
4220 eShaderReadOnlyOptimal = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
4221 eTransferSrcOptimal = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
4222 eTransferDstOptimal = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
4223 ePreinitialized = VK_IMAGE_LAYOUT_PREINITIALIZED,
4224 ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
4225 };
4226
4227 struct DescriptorImageInfo
4228 {
4229 DescriptorImageInfo( Sampler sampler_ = Sampler(), ImageView imageView_ = ImageView(), ImageLayout imageLayout_ = ImageLayout::eUndefined )
4230 : sampler( sampler_ )
4231 , imageView( imageView_ )
4232 , imageLayout( imageLayout_ )
4233 {
4234 }
4235
4236 DescriptorImageInfo( VkDescriptorImageInfo const & rhs )
4237 {
4238 memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
4239 }
4240
4241 DescriptorImageInfo& operator=( VkDescriptorImageInfo const & rhs )
4242 {
4243 memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
4244 return *this;
4245 }
4246
4247 DescriptorImageInfo& setSampler( Sampler sampler_ )
4248 {
4249 sampler = sampler_;
4250 return *this;
4251 }
4252
4253 DescriptorImageInfo& setImageView( ImageView imageView_ )
4254 {
4255 imageView = imageView_;
4256 return *this;
4257 }
4258
4259 DescriptorImageInfo& setImageLayout( ImageLayout imageLayout_ )
4260 {
4261 imageLayout = imageLayout_;
4262 return *this;
4263 }
4264
4265 operator const VkDescriptorImageInfo&() const
4266 {
4267 return *reinterpret_cast<const VkDescriptorImageInfo*>(this);
4268 }
4269
4270 bool operator==( DescriptorImageInfo const& rhs ) const
4271 {
4272 return ( sampler == rhs.sampler )
4273 && ( imageView == rhs.imageView )
4274 && ( imageLayout == rhs.imageLayout );
4275 }
4276
4277 bool operator!=( DescriptorImageInfo const& rhs ) const
4278 {
4279 return !operator==( rhs );
4280 }
4281
4282 Sampler sampler;
4283 ImageView imageView;
4284 ImageLayout imageLayout;
4285 };
4286 static_assert( sizeof( DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ), "struct and wrapper have different size!" );
4287
4288 struct AttachmentReference
4289 {
4290 AttachmentReference( uint32_t attachment_ = 0, ImageLayout layout_ = ImageLayout::eUndefined )
4291 : attachment( attachment_ )
4292 , layout( layout_ )
4293 {
4294 }
4295
4296 AttachmentReference( VkAttachmentReference const & rhs )
4297 {
4298 memcpy( this, &rhs, sizeof(AttachmentReference) );
4299 }
4300
4301 AttachmentReference& operator=( VkAttachmentReference const & rhs )
4302 {
4303 memcpy( this, &rhs, sizeof(AttachmentReference) );
4304 return *this;
4305 }
4306
4307 AttachmentReference& setAttachment( uint32_t attachment_ )
4308 {
4309 attachment = attachment_;
4310 return *this;
4311 }
4312
4313 AttachmentReference& setLayout( ImageLayout layout_ )
4314 {
4315 layout = layout_;
4316 return *this;
4317 }
4318
4319 operator const VkAttachmentReference&() const
4320 {
4321 return *reinterpret_cast<const VkAttachmentReference*>(this);
4322 }
4323
4324 bool operator==( AttachmentReference const& rhs ) const
4325 {
4326 return ( attachment == rhs.attachment )
4327 && ( layout == rhs.layout );
4328 }
4329
4330 bool operator!=( AttachmentReference const& rhs ) const
4331 {
4332 return !operator==( rhs );
4333 }
4334
4335 uint32_t attachment;
4336 ImageLayout layout;
4337 };
4338 static_assert( sizeof( AttachmentReference ) == sizeof( VkAttachmentReference ), "struct and wrapper have different size!" );
4339
4340 enum class AttachmentLoadOp
4341 {
4342 eLoad = VK_ATTACHMENT_LOAD_OP_LOAD,
4343 eClear = VK_ATTACHMENT_LOAD_OP_CLEAR,
4344 eDontCare = VK_ATTACHMENT_LOAD_OP_DONT_CARE
4345 };
4346
4347 enum class AttachmentStoreOp
4348 {
4349 eStore = VK_ATTACHMENT_STORE_OP_STORE,
4350 eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE
4351 };
4352
4353 enum class ImageType
4354 {
4355 e1D = VK_IMAGE_TYPE_1D,
4356 e2D = VK_IMAGE_TYPE_2D,
4357 e3D = VK_IMAGE_TYPE_3D
4358 };
4359
4360 enum class ImageTiling
4361 {
4362 eOptimal = VK_IMAGE_TILING_OPTIMAL,
4363 eLinear = VK_IMAGE_TILING_LINEAR
4364 };
4365
4366 enum class ImageViewType
4367 {
4368 e1D = VK_IMAGE_VIEW_TYPE_1D,
4369 e2D = VK_IMAGE_VIEW_TYPE_2D,
4370 e3D = VK_IMAGE_VIEW_TYPE_3D,
4371 eCube = VK_IMAGE_VIEW_TYPE_CUBE,
4372 e1DArray = VK_IMAGE_VIEW_TYPE_1D_ARRAY,
4373 e2DArray = VK_IMAGE_VIEW_TYPE_2D_ARRAY,
4374 eCubeArray = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
4375 };
4376
4377 enum class CommandBufferLevel
4378 {
4379 ePrimary = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
4380 eSecondary = VK_COMMAND_BUFFER_LEVEL_SECONDARY
4381 };
4382
4383 enum class ComponentSwizzle
4384 {
4385 eIdentity = VK_COMPONENT_SWIZZLE_IDENTITY,
4386 eZero = VK_COMPONENT_SWIZZLE_ZERO,
4387 eOne = VK_COMPONENT_SWIZZLE_ONE,
4388 eR = VK_COMPONENT_SWIZZLE_R,
4389 eG = VK_COMPONENT_SWIZZLE_G,
4390 eB = VK_COMPONENT_SWIZZLE_B,
4391 eA = VK_COMPONENT_SWIZZLE_A
4392 };
4393
4394 struct ComponentMapping
4395 {
4396 ComponentMapping( ComponentSwizzle r_ = ComponentSwizzle::eIdentity, ComponentSwizzle g_ = ComponentSwizzle::eIdentity, ComponentSwizzle b_ = ComponentSwizzle::eIdentity, ComponentSwizzle a_ = ComponentSwizzle::eIdentity )
4397 : r( r_ )
4398 , g( g_ )
4399 , b( b_ )
4400 , a( a_ )
4401 {
4402 }
4403
4404 ComponentMapping( VkComponentMapping const & rhs )
4405 {
4406 memcpy( this, &rhs, sizeof(ComponentMapping) );
4407 }
4408
4409 ComponentMapping& operator=( VkComponentMapping const & rhs )
4410 {
4411 memcpy( this, &rhs, sizeof(ComponentMapping) );
4412 return *this;
4413 }
4414
4415 ComponentMapping& setR( ComponentSwizzle r_ )
4416 {
4417 r = r_;
4418 return *this;
4419 }
4420
4421 ComponentMapping& setG( ComponentSwizzle g_ )
4422 {
4423 g = g_;
4424 return *this;
4425 }
4426
4427 ComponentMapping& setB( ComponentSwizzle b_ )
4428 {
4429 b = b_;
4430 return *this;
4431 }
4432
4433 ComponentMapping& setA( ComponentSwizzle a_ )
4434 {
4435 a = a_;
4436 return *this;
4437 }
4438
4439 operator const VkComponentMapping&() const
4440 {
4441 return *reinterpret_cast<const VkComponentMapping*>(this);
4442 }
4443
4444 bool operator==( ComponentMapping const& rhs ) const
4445 {
4446 return ( r == rhs.r )
4447 && ( g == rhs.g )
4448 && ( b == rhs.b )
4449 && ( a == rhs.a );
4450 }
4451
4452 bool operator!=( ComponentMapping const& rhs ) const
4453 {
4454 return !operator==( rhs );
4455 }
4456
4457 ComponentSwizzle r;
4458 ComponentSwizzle g;
4459 ComponentSwizzle b;
4460 ComponentSwizzle a;
4461 };
4462 static_assert( sizeof( ComponentMapping ) == sizeof( VkComponentMapping ), "struct and wrapper have different size!" );
4463
4464 enum class DescriptorType
4465 {
4466 eSampler = VK_DESCRIPTOR_TYPE_SAMPLER,
4467 eCombinedImageSampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
4468 eSampledImage = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
4469 eStorageImage = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
4470 eUniformTexelBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
4471 eStorageTexelBuffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
4472 eUniformBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
4473 eStorageBuffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
4474 eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
4475 eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
4476 eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
4477 };
4478
4479 struct DescriptorPoolSize
4480 {
4481 DescriptorPoolSize( DescriptorType type_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0 )
4482 : type( type_ )
4483 , descriptorCount( descriptorCount_ )
4484 {
4485 }
4486
4487 DescriptorPoolSize( VkDescriptorPoolSize const & rhs )
4488 {
4489 memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4490 }
4491
4492 DescriptorPoolSize& operator=( VkDescriptorPoolSize const & rhs )
4493 {
4494 memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4495 return *this;
4496 }
4497
4498 DescriptorPoolSize& setType( DescriptorType type_ )
4499 {
4500 type = type_;
4501 return *this;
4502 }
4503
4504 DescriptorPoolSize& setDescriptorCount( uint32_t descriptorCount_ )
4505 {
4506 descriptorCount = descriptorCount_;
4507 return *this;
4508 }
4509
4510 operator const VkDescriptorPoolSize&() const
4511 {
4512 return *reinterpret_cast<const VkDescriptorPoolSize*>(this);
4513 }
4514
4515 bool operator==( DescriptorPoolSize const& rhs ) const
4516 {
4517 return ( type == rhs.type )
4518 && ( descriptorCount == rhs.descriptorCount );
4519 }
4520
4521 bool operator!=( DescriptorPoolSize const& rhs ) const
4522 {
4523 return !operator==( rhs );
4524 }
4525
4526 DescriptorType type;
4527 uint32_t descriptorCount;
4528 };
4529 static_assert( sizeof( DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ), "struct and wrapper have different size!" );
4530
4531 enum class QueryType
4532 {
4533 eOcclusion = VK_QUERY_TYPE_OCCLUSION,
4534 ePipelineStatistics = VK_QUERY_TYPE_PIPELINE_STATISTICS,
4535 eTimestamp = VK_QUERY_TYPE_TIMESTAMP
4536 };
4537
4538 enum class BorderColor
4539 {
4540 eFloatTransparentBlack = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
4541 eIntTransparentBlack = VK_BORDER_COLOR_INT_TRANSPARENT_BLACK,
4542 eFloatOpaqueBlack = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
4543 eIntOpaqueBlack = VK_BORDER_COLOR_INT_OPAQUE_BLACK,
4544 eFloatOpaqueWhite = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE,
4545 eIntOpaqueWhite = VK_BORDER_COLOR_INT_OPAQUE_WHITE
4546 };
4547
4548 enum class PipelineBindPoint
4549 {
4550 eGraphics = VK_PIPELINE_BIND_POINT_GRAPHICS,
4551 eCompute = VK_PIPELINE_BIND_POINT_COMPUTE
4552 };
4553
4554 struct SubpassDescription
4555 {
4556 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 )
4557 : flags( flags_ )
4558 , pipelineBindPoint( pipelineBindPoint_ )
4559 , inputAttachmentCount( inputAttachmentCount_ )
4560 , pInputAttachments( pInputAttachments_ )
4561 , colorAttachmentCount( colorAttachmentCount_ )
4562 , pColorAttachments( pColorAttachments_ )
4563 , pResolveAttachments( pResolveAttachments_ )
4564 , pDepthStencilAttachment( pDepthStencilAttachment_ )
4565 , preserveAttachmentCount( preserveAttachmentCount_ )
4566 , pPreserveAttachments( pPreserveAttachments_ )
4567 {
4568 }
4569
4570 SubpassDescription( VkSubpassDescription const & rhs )
4571 {
4572 memcpy( this, &rhs, sizeof(SubpassDescription) );
4573 }
4574
4575 SubpassDescription& operator=( VkSubpassDescription const & rhs )
4576 {
4577 memcpy( this, &rhs, sizeof(SubpassDescription) );
4578 return *this;
4579 }
4580
4581 SubpassDescription& setFlags( SubpassDescriptionFlags flags_ )
4582 {
4583 flags = flags_;
4584 return *this;
4585 }
4586
4587 SubpassDescription& setPipelineBindPoint( PipelineBindPoint pipelineBindPoint_ )
4588 {
4589 pipelineBindPoint = pipelineBindPoint_;
4590 return *this;
4591 }
4592
4593 SubpassDescription& setInputAttachmentCount( uint32_t inputAttachmentCount_ )
4594 {
4595 inputAttachmentCount = inputAttachmentCount_;
4596 return *this;
4597 }
4598
4599 SubpassDescription& setPInputAttachments( const AttachmentReference* pInputAttachments_ )
4600 {
4601 pInputAttachments = pInputAttachments_;
4602 return *this;
4603 }
4604
4605 SubpassDescription& setColorAttachmentCount( uint32_t colorAttachmentCount_ )
4606 {
4607 colorAttachmentCount = colorAttachmentCount_;
4608 return *this;
4609 }
4610
4611 SubpassDescription& setPColorAttachments( const AttachmentReference* pColorAttachments_ )
4612 {
4613 pColorAttachments = pColorAttachments_;
4614 return *this;
4615 }
4616
4617 SubpassDescription& setPResolveAttachments( const AttachmentReference* pResolveAttachments_ )
4618 {
4619 pResolveAttachments = pResolveAttachments_;
4620 return *this;
4621 }
4622
4623 SubpassDescription& setPDepthStencilAttachment( const AttachmentReference* pDepthStencilAttachment_ )
4624 {
4625 pDepthStencilAttachment = pDepthStencilAttachment_;
4626 return *this;
4627 }
4628
4629 SubpassDescription& setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ )
4630 {
4631 preserveAttachmentCount = preserveAttachmentCount_;
4632 return *this;
4633 }
4634
4635 SubpassDescription& setPPreserveAttachments( const uint32_t* pPreserveAttachments_ )
4636 {
4637 pPreserveAttachments = pPreserveAttachments_;
4638 return *this;
4639 }
4640
4641 operator const VkSubpassDescription&() const
4642 {
4643 return *reinterpret_cast<const VkSubpassDescription*>(this);
4644 }
4645
4646 bool operator==( SubpassDescription const& rhs ) const
4647 {
4648 return ( flags == rhs.flags )
4649 && ( pipelineBindPoint == rhs.pipelineBindPoint )
4650 && ( inputAttachmentCount == rhs.inputAttachmentCount )
4651 && ( pInputAttachments == rhs.pInputAttachments )
4652 && ( colorAttachmentCount == rhs.colorAttachmentCount )
4653 && ( pColorAttachments == rhs.pColorAttachments )
4654 && ( pResolveAttachments == rhs.pResolveAttachments )
4655 && ( pDepthStencilAttachment == rhs.pDepthStencilAttachment )
4656 && ( preserveAttachmentCount == rhs.preserveAttachmentCount )
4657 && ( pPreserveAttachments == rhs.pPreserveAttachments );
4658 }
4659
4660 bool operator!=( SubpassDescription const& rhs ) const
4661 {
4662 return !operator==( rhs );
4663 }
4664
4665 SubpassDescriptionFlags flags;
4666 PipelineBindPoint pipelineBindPoint;
4667 uint32_t inputAttachmentCount;
4668 const AttachmentReference* pInputAttachments;
4669 uint32_t colorAttachmentCount;
4670 const AttachmentReference* pColorAttachments;
4671 const AttachmentReference* pResolveAttachments;
4672 const AttachmentReference* pDepthStencilAttachment;
4673 uint32_t preserveAttachmentCount;
4674 const uint32_t* pPreserveAttachments;
4675 };
4676 static_assert( sizeof( SubpassDescription ) == sizeof( VkSubpassDescription ), "struct and wrapper have different size!" );
4677
4678 enum class PipelineCacheHeaderVersion
4679 {
4680 eOne = VK_PIPELINE_CACHE_HEADER_VERSION_ONE
4681 };
4682
4683 enum class PrimitiveTopology
4684 {
4685 ePointList = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
4686 eLineList = VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
4687 eLineStrip = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
4688 eTriangleList = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
4689 eTriangleStrip = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
4690 eTriangleFan = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
4691 eLineListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
4692 eLineStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
4693 eTriangleListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
4694 eTriangleStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY,
4695 ePatchList = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
4696 };
4697
4698 enum class SharingMode
4699 {
4700 eExclusive = VK_SHARING_MODE_EXCLUSIVE,
4701 eConcurrent = VK_SHARING_MODE_CONCURRENT
4702 };
4703
4704 enum class IndexType
4705 {
4706 eUint16 = VK_INDEX_TYPE_UINT16,
4707 eUint32 = VK_INDEX_TYPE_UINT32
4708 };
4709
4710 enum class Filter
4711 {
4712 eNearest = VK_FILTER_NEAREST,
4713 eLinear = VK_FILTER_LINEAR,
4714 eCubicIMG = VK_FILTER_CUBIC_IMG
4715 };
4716
4717 enum class SamplerMipmapMode
4718 {
4719 eNearest = VK_SAMPLER_MIPMAP_MODE_NEAREST,
4720 eLinear = VK_SAMPLER_MIPMAP_MODE_LINEAR
4721 };
4722
4723 enum class SamplerAddressMode
4724 {
4725 eRepeat = VK_SAMPLER_ADDRESS_MODE_REPEAT,
4726 eMirroredRepeat = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
4727 eClampToEdge = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
4728 eClampToBorder = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
4729 eMirrorClampToEdge = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
4730 };
4731
4732 enum class CompareOp
4733 {
4734 eNever = VK_COMPARE_OP_NEVER,
4735 eLess = VK_COMPARE_OP_LESS,
4736 eEqual = VK_COMPARE_OP_EQUAL,
4737 eLessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL,
4738 eGreater = VK_COMPARE_OP_GREATER,
4739 eNotEqual = VK_COMPARE_OP_NOT_EQUAL,
4740 eGreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL,
4741 eAlways = VK_COMPARE_OP_ALWAYS
4742 };
4743
4744 enum class PolygonMode
4745 {
4746 eFill = VK_POLYGON_MODE_FILL,
4747 eLine = VK_POLYGON_MODE_LINE,
4748 ePoint = VK_POLYGON_MODE_POINT
4749 };
4750
4751 enum class CullModeFlagBits
4752 {
4753 eNone = VK_CULL_MODE_NONE,
4754 eFront = VK_CULL_MODE_FRONT_BIT,
4755 eBack = VK_CULL_MODE_BACK_BIT,
4756 eFrontAndBack = VK_CULL_MODE_FRONT_AND_BACK
4757 };
4758
4759 using CullModeFlags = Flags<CullModeFlagBits, VkCullModeFlags>;
4760
4761 inline CullModeFlags operator|( CullModeFlagBits bit0, CullModeFlagBits bit1 )
4762 {
4763 return CullModeFlags( bit0 ) | bit1;
4764 }
4765
4766 enum class FrontFace
4767 {
4768 eCounterClockwise = VK_FRONT_FACE_COUNTER_CLOCKWISE,
4769 eClockwise = VK_FRONT_FACE_CLOCKWISE
4770 };
4771
4772 enum class BlendFactor
4773 {
4774 eZero = VK_BLEND_FACTOR_ZERO,
4775 eOne = VK_BLEND_FACTOR_ONE,
4776 eSrcColor = VK_BLEND_FACTOR_SRC_COLOR,
4777 eOneMinusSrcColor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
4778 eDstColor = VK_BLEND_FACTOR_DST_COLOR,
4779 eOneMinusDstColor = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR,
4780 eSrcAlpha = VK_BLEND_FACTOR_SRC_ALPHA,
4781 eOneMinusSrcAlpha = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
4782 eDstAlpha = VK_BLEND_FACTOR_DST_ALPHA,
4783 eOneMinusDstAlpha = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA,
4784 eConstantColor = VK_BLEND_FACTOR_CONSTANT_COLOR,
4785 eOneMinusConstantColor = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
4786 eConstantAlpha = VK_BLEND_FACTOR_CONSTANT_ALPHA,
4787 eOneMinusConstantAlpha = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
4788 eSrcAlphaSaturate = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE,
4789 eSrc1Color = VK_BLEND_FACTOR_SRC1_COLOR,
4790 eOneMinusSrc1Color = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
4791 eSrc1Alpha = VK_BLEND_FACTOR_SRC1_ALPHA,
4792 eOneMinusSrc1Alpha = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
4793 };
4794
4795 enum class BlendOp
4796 {
4797 eAdd = VK_BLEND_OP_ADD,
4798 eSubtract = VK_BLEND_OP_SUBTRACT,
4799 eReverseSubtract = VK_BLEND_OP_REVERSE_SUBTRACT,
4800 eMin = VK_BLEND_OP_MIN,
4801 eMax = VK_BLEND_OP_MAX
4802 };
4803
4804 enum class StencilOp
4805 {
4806 eKeep = VK_STENCIL_OP_KEEP,
4807 eZero = VK_STENCIL_OP_ZERO,
4808 eReplace = VK_STENCIL_OP_REPLACE,
4809 eIncrementAndClamp = VK_STENCIL_OP_INCREMENT_AND_CLAMP,
4810 eDecrementAndClamp = VK_STENCIL_OP_DECREMENT_AND_CLAMP,
4811 eInvert = VK_STENCIL_OP_INVERT,
4812 eIncrementAndWrap = VK_STENCIL_OP_INCREMENT_AND_WRAP,
4813 eDecrementAndWrap = VK_STENCIL_OP_DECREMENT_AND_WRAP
4814 };
4815
4816 struct StencilOpState
4817 {
4818 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 )
4819 : failOp( failOp_ )
4820 , passOp( passOp_ )
4821 , depthFailOp( depthFailOp_ )
4822 , compareOp( compareOp_ )
4823 , compareMask( compareMask_ )
4824 , writeMask( writeMask_ )
4825 , reference( reference_ )
4826 {
4827 }
4828
4829 StencilOpState( VkStencilOpState const & rhs )
4830 {
4831 memcpy( this, &rhs, sizeof(StencilOpState) );
4832 }
4833
4834 StencilOpState& operator=( VkStencilOpState const & rhs )
4835 {
4836 memcpy( this, &rhs, sizeof(StencilOpState) );
4837 return *this;
4838 }
4839
4840 StencilOpState& setFailOp( StencilOp failOp_ )
4841 {
4842 failOp = failOp_;
4843 return *this;
4844 }
4845
4846 StencilOpState& setPassOp( StencilOp passOp_ )
4847 {
4848 passOp = passOp_;
4849 return *this;
4850 }
4851
4852 StencilOpState& setDepthFailOp( StencilOp depthFailOp_ )
4853 {
4854 depthFailOp = depthFailOp_;
4855 return *this;
4856 }
4857
4858 StencilOpState& setCompareOp( CompareOp compareOp_ )
4859 {
4860 compareOp = compareOp_;
4861 return *this;
4862 }
4863
4864 StencilOpState& setCompareMask( uint32_t compareMask_ )
4865 {
4866 compareMask = compareMask_;
4867 return *this;
4868 }
4869
4870 StencilOpState& setWriteMask( uint32_t writeMask_ )
4871 {
4872 writeMask = writeMask_;
4873 return *this;
4874 }
4875
4876 StencilOpState& setReference( uint32_t reference_ )
4877 {
4878 reference = reference_;
4879 return *this;
4880 }
4881
4882 operator const VkStencilOpState&() const
4883 {
4884 return *reinterpret_cast<const VkStencilOpState*>(this);
4885 }
4886
4887 bool operator==( StencilOpState const& rhs ) const
4888 {
4889 return ( failOp == rhs.failOp )
4890 && ( passOp == rhs.passOp )
4891 && ( depthFailOp == rhs.depthFailOp )
4892 && ( compareOp == rhs.compareOp )
4893 && ( compareMask == rhs.compareMask )
4894 && ( writeMask == rhs.writeMask )
4895 && ( reference == rhs.reference );
4896 }
4897
4898 bool operator!=( StencilOpState const& rhs ) const
4899 {
4900 return !operator==( rhs );
4901 }
4902
4903 StencilOp failOp;
4904 StencilOp passOp;
4905 StencilOp depthFailOp;
4906 CompareOp compareOp;
4907 uint32_t compareMask;
4908 uint32_t writeMask;
4909 uint32_t reference;
4910 };
4911 static_assert( sizeof( StencilOpState ) == sizeof( VkStencilOpState ), "struct and wrapper have different size!" );
4912
4913 enum class LogicOp
4914 {
4915 eClear = VK_LOGIC_OP_CLEAR,
4916 eAnd = VK_LOGIC_OP_AND,
4917 eAndReverse = VK_LOGIC_OP_AND_REVERSE,
4918 eCopy = VK_LOGIC_OP_COPY,
4919 eAndInverted = VK_LOGIC_OP_AND_INVERTED,
4920 eNoOp = VK_LOGIC_OP_NO_OP,
4921 eXor = VK_LOGIC_OP_XOR,
4922 eOr = VK_LOGIC_OP_OR,
4923 eNor = VK_LOGIC_OP_NOR,
4924 eEquivalent = VK_LOGIC_OP_EQUIVALENT,
4925 eInvert = VK_LOGIC_OP_INVERT,
4926 eOrReverse = VK_LOGIC_OP_OR_REVERSE,
4927 eCopyInverted = VK_LOGIC_OP_COPY_INVERTED,
4928 eOrInverted = VK_LOGIC_OP_OR_INVERTED,
4929 eNand = VK_LOGIC_OP_NAND,
4930 eSet = VK_LOGIC_OP_SET
4931 };
4932
4933 enum class InternalAllocationType
4934 {
4935 eExecutable = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE
4936 };
4937
4938 enum class SystemAllocationScope
4939 {
4940 eCommand = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
4941 eObject = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT,
4942 eCache = VK_SYSTEM_ALLOCATION_SCOPE_CACHE,
4943 eDevice = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE,
4944 eInstance = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE
4945 };
4946
4947 enum class PhysicalDeviceType
4948 {
4949 eOther = VK_PHYSICAL_DEVICE_TYPE_OTHER,
4950 eIntegratedGpu = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
4951 eDiscreteGpu = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
4952 eVirtualGpu = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU,
4953 eCpu = VK_PHYSICAL_DEVICE_TYPE_CPU
4954 };
4955
4956 enum class VertexInputRate
4957 {
4958 eVertex = VK_VERTEX_INPUT_RATE_VERTEX,
4959 eInstance = VK_VERTEX_INPUT_RATE_INSTANCE
4960 };
4961
4962 struct VertexInputBindingDescription
4963 {
4964 VertexInputBindingDescription( uint32_t binding_ = 0, uint32_t stride_ = 0, VertexInputRate inputRate_ = VertexInputRate::eVertex )
4965 : binding( binding_ )
4966 , stride( stride_ )
4967 , inputRate( inputRate_ )
4968 {
4969 }
4970
4971 VertexInputBindingDescription( VkVertexInputBindingDescription const & rhs )
4972 {
4973 memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
4974 }
4975
4976 VertexInputBindingDescription& operator=( VkVertexInputBindingDescription const & rhs )
4977 {
4978 memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
4979 return *this;
4980 }
4981
4982 VertexInputBindingDescription& setBinding( uint32_t binding_ )
4983 {
4984 binding = binding_;
4985 return *this;
4986 }
4987
4988 VertexInputBindingDescription& setStride( uint32_t stride_ )
4989 {
4990 stride = stride_;
4991 return *this;
4992 }
4993
4994 VertexInputBindingDescription& setInputRate( VertexInputRate inputRate_ )
4995 {
4996 inputRate = inputRate_;
4997 return *this;
4998 }
4999
5000 operator const VkVertexInputBindingDescription&() const
5001 {
5002 return *reinterpret_cast<const VkVertexInputBindingDescription*>(this);
5003 }
5004
5005 bool operator==( VertexInputBindingDescription const& rhs ) const
5006 {
5007 return ( binding == rhs.binding )
5008 && ( stride == rhs.stride )
5009 && ( inputRate == rhs.inputRate );
5010 }
5011
5012 bool operator!=( VertexInputBindingDescription const& rhs ) const
5013 {
5014 return !operator==( rhs );
5015 }
5016
5017 uint32_t binding;
5018 uint32_t stride;
5019 VertexInputRate inputRate;
5020 };
5021 static_assert( sizeof( VertexInputBindingDescription ) == sizeof( VkVertexInputBindingDescription ), "struct and wrapper have different size!" );
5022
5023 enum class Format
5024 {
5025 eUndefined = VK_FORMAT_UNDEFINED,
5026 eR4G4UnormPack8 = VK_FORMAT_R4G4_UNORM_PACK8,
5027 eR4G4B4A4UnormPack16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16,
5028 eB4G4R4A4UnormPack16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16,
5029 eR5G6B5UnormPack16 = VK_FORMAT_R5G6B5_UNORM_PACK16,
5030 eB5G6R5UnormPack16 = VK_FORMAT_B5G6R5_UNORM_PACK16,
5031 eR5G5B5A1UnormPack16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16,
5032 eB5G5R5A1UnormPack16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16,
5033 eA1R5G5B5UnormPack16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16,
5034 eR8Unorm = VK_FORMAT_R8_UNORM,
5035 eR8Snorm = VK_FORMAT_R8_SNORM,
5036 eR8Uscaled = VK_FORMAT_R8_USCALED,
5037 eR8Sscaled = VK_FORMAT_R8_SSCALED,
5038 eR8Uint = VK_FORMAT_R8_UINT,
5039 eR8Sint = VK_FORMAT_R8_SINT,
5040 eR8Srgb = VK_FORMAT_R8_SRGB,
5041 eR8G8Unorm = VK_FORMAT_R8G8_UNORM,
5042 eR8G8Snorm = VK_FORMAT_R8G8_SNORM,
5043 eR8G8Uscaled = VK_FORMAT_R8G8_USCALED,
5044 eR8G8Sscaled = VK_FORMAT_R8G8_SSCALED,
5045 eR8G8Uint = VK_FORMAT_R8G8_UINT,
5046 eR8G8Sint = VK_FORMAT_R8G8_SINT,
5047 eR8G8Srgb = VK_FORMAT_R8G8_SRGB,
5048 eR8G8B8Unorm = VK_FORMAT_R8G8B8_UNORM,
5049 eR8G8B8Snorm = VK_FORMAT_R8G8B8_SNORM,
5050 eR8G8B8Uscaled = VK_FORMAT_R8G8B8_USCALED,
5051 eR8G8B8Sscaled = VK_FORMAT_R8G8B8_SSCALED,
5052 eR8G8B8Uint = VK_FORMAT_R8G8B8_UINT,
5053 eR8G8B8Sint = VK_FORMAT_R8G8B8_SINT,
5054 eR8G8B8Srgb = VK_FORMAT_R8G8B8_SRGB,
5055 eB8G8R8Unorm = VK_FORMAT_B8G8R8_UNORM,
5056 eB8G8R8Snorm = VK_FORMAT_B8G8R8_SNORM,
5057 eB8G8R8Uscaled = VK_FORMAT_B8G8R8_USCALED,
5058 eB8G8R8Sscaled = VK_FORMAT_B8G8R8_SSCALED,
5059 eB8G8R8Uint = VK_FORMAT_B8G8R8_UINT,
5060 eB8G8R8Sint = VK_FORMAT_B8G8R8_SINT,
5061 eB8G8R8Srgb = VK_FORMAT_B8G8R8_SRGB,
5062 eR8G8B8A8Unorm = VK_FORMAT_R8G8B8A8_UNORM,
5063 eR8G8B8A8Snorm = VK_FORMAT_R8G8B8A8_SNORM,
5064 eR8G8B8A8Uscaled = VK_FORMAT_R8G8B8A8_USCALED,
5065 eR8G8B8A8Sscaled = VK_FORMAT_R8G8B8A8_SSCALED,
5066 eR8G8B8A8Uint = VK_FORMAT_R8G8B8A8_UINT,
5067 eR8G8B8A8Sint = VK_FORMAT_R8G8B8A8_SINT,
5068 eR8G8B8A8Srgb = VK_FORMAT_R8G8B8A8_SRGB,
5069 eB8G8R8A8Unorm = VK_FORMAT_B8G8R8A8_UNORM,
5070 eB8G8R8A8Snorm = VK_FORMAT_B8G8R8A8_SNORM,
5071 eB8G8R8A8Uscaled = VK_FORMAT_B8G8R8A8_USCALED,
5072 eB8G8R8A8Sscaled = VK_FORMAT_B8G8R8A8_SSCALED,
5073 eB8G8R8A8Uint = VK_FORMAT_B8G8R8A8_UINT,
5074 eB8G8R8A8Sint = VK_FORMAT_B8G8R8A8_SINT,
5075 eB8G8R8A8Srgb = VK_FORMAT_B8G8R8A8_SRGB,
5076 eA8B8G8R8UnormPack32 = VK_FORMAT_A8B8G8R8_UNORM_PACK32,
5077 eA8B8G8R8SnormPack32 = VK_FORMAT_A8B8G8R8_SNORM_PACK32,
5078 eA8B8G8R8UscaledPack32 = VK_FORMAT_A8B8G8R8_USCALED_PACK32,
5079 eA8B8G8R8SscaledPack32 = VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
5080 eA8B8G8R8UintPack32 = VK_FORMAT_A8B8G8R8_UINT_PACK32,
5081 eA8B8G8R8SintPack32 = VK_FORMAT_A8B8G8R8_SINT_PACK32,
5082 eA8B8G8R8SrgbPack32 = VK_FORMAT_A8B8G8R8_SRGB_PACK32,
5083 eA2R10G10B10UnormPack32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32,
5084 eA2R10G10B10SnormPack32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32,
5085 eA2R10G10B10UscaledPack32 = VK_FORMAT_A2R10G10B10_USCALED_PACK32,
5086 eA2R10G10B10SscaledPack32 = VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
5087 eA2R10G10B10UintPack32 = VK_FORMAT_A2R10G10B10_UINT_PACK32,
5088 eA2R10G10B10SintPack32 = VK_FORMAT_A2R10G10B10_SINT_PACK32,
5089 eA2B10G10R10UnormPack32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32,
5090 eA2B10G10R10SnormPack32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32,
5091 eA2B10G10R10UscaledPack32 = VK_FORMAT_A2B10G10R10_USCALED_PACK32,
5092 eA2B10G10R10SscaledPack32 = VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
5093 eA2B10G10R10UintPack32 = VK_FORMAT_A2B10G10R10_UINT_PACK32,
5094 eA2B10G10R10SintPack32 = VK_FORMAT_A2B10G10R10_SINT_PACK32,
5095 eR16Unorm = VK_FORMAT_R16_UNORM,
5096 eR16Snorm = VK_FORMAT_R16_SNORM,
5097 eR16Uscaled = VK_FORMAT_R16_USCALED,
5098 eR16Sscaled = VK_FORMAT_R16_SSCALED,
5099 eR16Uint = VK_FORMAT_R16_UINT,
5100 eR16Sint = VK_FORMAT_R16_SINT,
5101 eR16Sfloat = VK_FORMAT_R16_SFLOAT,
5102 eR16G16Unorm = VK_FORMAT_R16G16_UNORM,
5103 eR16G16Snorm = VK_FORMAT_R16G16_SNORM,
5104 eR16G16Uscaled = VK_FORMAT_R16G16_USCALED,
5105 eR16G16Sscaled = VK_FORMAT_R16G16_SSCALED,
5106 eR16G16Uint = VK_FORMAT_R16G16_UINT,
5107 eR16G16Sint = VK_FORMAT_R16G16_SINT,
5108 eR16G16Sfloat = VK_FORMAT_R16G16_SFLOAT,
5109 eR16G16B16Unorm = VK_FORMAT_R16G16B16_UNORM,
5110 eR16G16B16Snorm = VK_FORMAT_R16G16B16_SNORM,
5111 eR16G16B16Uscaled = VK_FORMAT_R16G16B16_USCALED,
5112 eR16G16B16Sscaled = VK_FORMAT_R16G16B16_SSCALED,
5113 eR16G16B16Uint = VK_FORMAT_R16G16B16_UINT,
5114 eR16G16B16Sint = VK_FORMAT_R16G16B16_SINT,
5115 eR16G16B16Sfloat = VK_FORMAT_R16G16B16_SFLOAT,
5116 eR16G16B16A16Unorm = VK_FORMAT_R16G16B16A16_UNORM,
5117 eR16G16B16A16Snorm = VK_FORMAT_R16G16B16A16_SNORM,
5118 eR16G16B16A16Uscaled = VK_FORMAT_R16G16B16A16_USCALED,
5119 eR16G16B16A16Sscaled = VK_FORMAT_R16G16B16A16_SSCALED,
5120 eR16G16B16A16Uint = VK_FORMAT_R16G16B16A16_UINT,
5121 eR16G16B16A16Sint = VK_FORMAT_R16G16B16A16_SINT,
5122 eR16G16B16A16Sfloat = VK_FORMAT_R16G16B16A16_SFLOAT,
5123 eR32Uint = VK_FORMAT_R32_UINT,
5124 eR32Sint = VK_FORMAT_R32_SINT,
5125 eR32Sfloat = VK_FORMAT_R32_SFLOAT,
5126 eR32G32Uint = VK_FORMAT_R32G32_UINT,
5127 eR32G32Sint = VK_FORMAT_R32G32_SINT,
5128 eR32G32Sfloat = VK_FORMAT_R32G32_SFLOAT,
5129 eR32G32B32Uint = VK_FORMAT_R32G32B32_UINT,
5130 eR32G32B32Sint = VK_FORMAT_R32G32B32_SINT,
5131 eR32G32B32Sfloat = VK_FORMAT_R32G32B32_SFLOAT,
5132 eR32G32B32A32Uint = VK_FORMAT_R32G32B32A32_UINT,
5133 eR32G32B32A32Sint = VK_FORMAT_R32G32B32A32_SINT,
5134 eR32G32B32A32Sfloat = VK_FORMAT_R32G32B32A32_SFLOAT,
5135 eR64Uint = VK_FORMAT_R64_UINT,
5136 eR64Sint = VK_FORMAT_R64_SINT,
5137 eR64Sfloat = VK_FORMAT_R64_SFLOAT,
5138 eR64G64Uint = VK_FORMAT_R64G64_UINT,
5139 eR64G64Sint = VK_FORMAT_R64G64_SINT,
5140 eR64G64Sfloat = VK_FORMAT_R64G64_SFLOAT,
5141 eR64G64B64Uint = VK_FORMAT_R64G64B64_UINT,
5142 eR64G64B64Sint = VK_FORMAT_R64G64B64_SINT,
5143 eR64G64B64Sfloat = VK_FORMAT_R64G64B64_SFLOAT,
5144 eR64G64B64A64Uint = VK_FORMAT_R64G64B64A64_UINT,
5145 eR64G64B64A64Sint = VK_FORMAT_R64G64B64A64_SINT,
5146 eR64G64B64A64Sfloat = VK_FORMAT_R64G64B64A64_SFLOAT,
5147 eB10G11R11UfloatPack32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32,
5148 eE5B9G9R9UfloatPack32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
5149 eD16Unorm = VK_FORMAT_D16_UNORM,
5150 eX8D24UnormPack32 = VK_FORMAT_X8_D24_UNORM_PACK32,
5151 eD32Sfloat = VK_FORMAT_D32_SFLOAT,
5152 eS8Uint = VK_FORMAT_S8_UINT,
5153 eD16UnormS8Uint = VK_FORMAT_D16_UNORM_S8_UINT,
5154 eD24UnormS8Uint = VK_FORMAT_D24_UNORM_S8_UINT,
5155 eD32SfloatS8Uint = VK_FORMAT_D32_SFLOAT_S8_UINT,
5156 eBc1RgbUnormBlock = VK_FORMAT_BC1_RGB_UNORM_BLOCK,
5157 eBc1RgbSrgbBlock = VK_FORMAT_BC1_RGB_SRGB_BLOCK,
5158 eBc1RgbaUnormBlock = VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
5159 eBc1RgbaSrgbBlock = VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
5160 eBc2UnormBlock = VK_FORMAT_BC2_UNORM_BLOCK,
5161 eBc2SrgbBlock = VK_FORMAT_BC2_SRGB_BLOCK,
5162 eBc3UnormBlock = VK_FORMAT_BC3_UNORM_BLOCK,
5163 eBc3SrgbBlock = VK_FORMAT_BC3_SRGB_BLOCK,
5164 eBc4UnormBlock = VK_FORMAT_BC4_UNORM_BLOCK,
5165 eBc4SnormBlock = VK_FORMAT_BC4_SNORM_BLOCK,
5166 eBc5UnormBlock = VK_FORMAT_BC5_UNORM_BLOCK,
5167 eBc5SnormBlock = VK_FORMAT_BC5_SNORM_BLOCK,
5168 eBc6HUfloatBlock = VK_FORMAT_BC6H_UFLOAT_BLOCK,
5169 eBc6HSfloatBlock = VK_FORMAT_BC6H_SFLOAT_BLOCK,
5170 eBc7UnormBlock = VK_FORMAT_BC7_UNORM_BLOCK,
5171 eBc7SrgbBlock = VK_FORMAT_BC7_SRGB_BLOCK,
5172 eEtc2R8G8B8UnormBlock = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
5173 eEtc2R8G8B8SrgbBlock = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
5174 eEtc2R8G8B8A1UnormBlock = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
5175 eEtc2R8G8B8A1SrgbBlock = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
5176 eEtc2R8G8B8A8UnormBlock = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
5177 eEtc2R8G8B8A8SrgbBlock = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
5178 eEacR11UnormBlock = VK_FORMAT_EAC_R11_UNORM_BLOCK,
5179 eEacR11SnormBlock = VK_FORMAT_EAC_R11_SNORM_BLOCK,
5180 eEacR11G11UnormBlock = VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
5181 eEacR11G11SnormBlock = VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
5182 eAstc4x4UnormBlock = VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
5183 eAstc4x4SrgbBlock = VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
5184 eAstc5x4UnormBlock = VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
5185 eAstc5x4SrgbBlock = VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
5186 eAstc5x5UnormBlock = VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
5187 eAstc5x5SrgbBlock = VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
5188 eAstc6x5UnormBlock = VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
5189 eAstc6x5SrgbBlock = VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
5190 eAstc6x6UnormBlock = VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
5191 eAstc6x6SrgbBlock = VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
5192 eAstc8x5UnormBlock = VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
5193 eAstc8x5SrgbBlock = VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
5194 eAstc8x6UnormBlock = VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
5195 eAstc8x6SrgbBlock = VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
5196 eAstc8x8UnormBlock = VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
5197 eAstc8x8SrgbBlock = VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
5198 eAstc10x5UnormBlock = VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
5199 eAstc10x5SrgbBlock = VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
5200 eAstc10x6UnormBlock = VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
5201 eAstc10x6SrgbBlock = VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
5202 eAstc10x8UnormBlock = VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
5203 eAstc10x8SrgbBlock = VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
5204 eAstc10x10UnormBlock = VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
5205 eAstc10x10SrgbBlock = VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
5206 eAstc12x10UnormBlock = VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
5207 eAstc12x10SrgbBlock = VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
5208 eAstc12x12UnormBlock = VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
Lenny Komowebf33162016-08-26 14:10:08 -06005209 eAstc12x12SrgbBlock = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
5210 ePvrtc12BppUnormBlockIMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
5211 ePvrtc14BppUnormBlockIMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
5212 ePvrtc22BppUnormBlockIMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
5213 ePvrtc24BppUnormBlockIMG = VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
5214 ePvrtc12BppSrgbBlockIMG = VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
5215 ePvrtc14BppSrgbBlockIMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
5216 ePvrtc22BppSrgbBlockIMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
5217 ePvrtc24BppSrgbBlockIMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG
Lenny Komowbed9b5c2016-08-11 11:23:15 -06005218 };
5219
5220 struct VertexInputAttributeDescription
5221 {
5222 VertexInputAttributeDescription( uint32_t location_ = 0, uint32_t binding_ = 0, Format format_ = Format::eUndefined, uint32_t offset_ = 0 )
5223 : location( location_ )
5224 , binding( binding_ )
5225 , format( format_ )
5226 , offset( offset_ )
5227 {
5228 }
5229
5230 VertexInputAttributeDescription( VkVertexInputAttributeDescription const & rhs )
5231 {
5232 memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
5233 }
5234
5235 VertexInputAttributeDescription& operator=( VkVertexInputAttributeDescription const & rhs )
5236 {
5237 memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
5238 return *this;
5239 }
5240
5241 VertexInputAttributeDescription& setLocation( uint32_t location_ )
5242 {
5243 location = location_;
5244 return *this;
5245 }
5246
5247 VertexInputAttributeDescription& setBinding( uint32_t binding_ )
5248 {
5249 binding = binding_;
5250 return *this;
5251 }
5252
5253 VertexInputAttributeDescription& setFormat( Format format_ )
5254 {
5255 format = format_;
5256 return *this;
5257 }
5258
5259 VertexInputAttributeDescription& setOffset( uint32_t offset_ )
5260 {
5261 offset = offset_;
5262 return *this;
5263 }
5264
5265 operator const VkVertexInputAttributeDescription&() const
5266 {
5267 return *reinterpret_cast<const VkVertexInputAttributeDescription*>(this);
5268 }
5269
5270 bool operator==( VertexInputAttributeDescription const& rhs ) const
5271 {
5272 return ( location == rhs.location )
5273 && ( binding == rhs.binding )
5274 && ( format == rhs.format )
5275 && ( offset == rhs.offset );
5276 }
5277
5278 bool operator!=( VertexInputAttributeDescription const& rhs ) const
5279 {
5280 return !operator==( rhs );
5281 }
5282
5283 uint32_t location;
5284 uint32_t binding;
5285 Format format;
5286 uint32_t offset;
5287 };
5288 static_assert( sizeof( VertexInputAttributeDescription ) == sizeof( VkVertexInputAttributeDescription ), "struct and wrapper have different size!" );
5289
5290 enum class StructureType
5291 {
5292 eApplicationInfo = VK_STRUCTURE_TYPE_APPLICATION_INFO,
5293 eInstanceCreateInfo = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
5294 eDeviceQueueCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
5295 eDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
5296 eSubmitInfo = VK_STRUCTURE_TYPE_SUBMIT_INFO,
5297 eMemoryAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
5298 eMappedMemoryRange = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
5299 eBindSparseInfo = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
5300 eFenceCreateInfo = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
5301 eSemaphoreCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
5302 eEventCreateInfo = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO,
5303 eQueryPoolCreateInfo = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
5304 eBufferCreateInfo = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
5305 eBufferViewCreateInfo = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO,
5306 eImageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
5307 eImageViewCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
5308 eShaderModuleCreateInfo = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
5309 ePipelineCacheCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,
5310 ePipelineShaderStageCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
5311 ePipelineVertexInputStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
5312 ePipelineInputAssemblyStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
5313 ePipelineTessellationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
5314 ePipelineViewportStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
5315 ePipelineRasterizationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
5316 ePipelineMultisampleStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
5317 ePipelineDepthStencilStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
5318 ePipelineColorBlendStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
5319 ePipelineDynamicStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
5320 eGraphicsPipelineCreateInfo = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
5321 eComputePipelineCreateInfo = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
5322 ePipelineLayoutCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
5323 eSamplerCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
5324 eDescriptorSetLayoutCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
5325 eDescriptorPoolCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
5326 eDescriptorSetAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
5327 eWriteDescriptorSet = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
5328 eCopyDescriptorSet = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
5329 eFramebufferCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
5330 eRenderPassCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
5331 eCommandPoolCreateInfo = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
5332 eCommandBufferAllocateInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
5333 eCommandBufferInheritanceInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
5334 eCommandBufferBeginInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
5335 eRenderPassBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
5336 eBufferMemoryBarrier = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
5337 eImageMemoryBarrier = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
5338 eMemoryBarrier = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
5339 eLoaderInstanceCreateInfo = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
5340 eLoaderDeviceCreateInfo = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
5341 eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
5342 ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
5343 eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
5344 eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
5345 eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
5346 eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
5347 eXcbSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
5348 eWaylandSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
5349 eMirSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR,
5350 eAndroidSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
5351 eWin32SurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
5352 eDebugReportCallbackCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
5353 ePipelineRasterizationStateRasterizationOrderAMD = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD,
5354 eDebugMarkerObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
5355 eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
5356 eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
5357 eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
5358 eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
Lenny Komow6501c122016-08-31 15:03:49 -06005359 eDedicatedAllocationMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,
5360 eExternalMemoryImageCreateInfoNV = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV,
5361 eExportMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV,
5362 eImportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV,
5363 eExportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV,
Lenny Komow68432d72016-09-29 14:16:59 -06005364 eWin32KeyedMutexAcquireReleaseInfoNV = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV,
5365 eValidationFlagsEXT = VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT
Lenny Komowbed9b5c2016-08-11 11:23:15 -06005366 };
5367
5368 struct ApplicationInfo
5369 {
5370 ApplicationInfo( const char* pApplicationName_ = nullptr, uint32_t applicationVersion_ = 0, const char* pEngineName_ = nullptr, uint32_t engineVersion_ = 0, uint32_t apiVersion_ = 0 )
5371 : sType( StructureType::eApplicationInfo )
5372 , pNext( nullptr )
5373 , pApplicationName( pApplicationName_ )
5374 , applicationVersion( applicationVersion_ )
5375 , pEngineName( pEngineName_ )
5376 , engineVersion( engineVersion_ )
5377 , apiVersion( apiVersion_ )
5378 {
5379 }
5380
5381 ApplicationInfo( VkApplicationInfo const & rhs )
5382 {
5383 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5384 }
5385
5386 ApplicationInfo& operator=( VkApplicationInfo const & rhs )
5387 {
5388 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5389 return *this;
5390 }
5391
5392 ApplicationInfo& setSType( StructureType sType_ )
5393 {
5394 sType = sType_;
5395 return *this;
5396 }
5397
5398 ApplicationInfo& setPNext( const void* pNext_ )
5399 {
5400 pNext = pNext_;
5401 return *this;
5402 }
5403
5404 ApplicationInfo& setPApplicationName( const char* pApplicationName_ )
5405 {
5406 pApplicationName = pApplicationName_;
5407 return *this;
5408 }
5409
5410 ApplicationInfo& setApplicationVersion( uint32_t applicationVersion_ )
5411 {
5412 applicationVersion = applicationVersion_;
5413 return *this;
5414 }
5415
5416 ApplicationInfo& setPEngineName( const char* pEngineName_ )
5417 {
5418 pEngineName = pEngineName_;
5419 return *this;
5420 }
5421
5422 ApplicationInfo& setEngineVersion( uint32_t engineVersion_ )
5423 {
5424 engineVersion = engineVersion_;
5425 return *this;
5426 }
5427
5428 ApplicationInfo& setApiVersion( uint32_t apiVersion_ )
5429 {
5430 apiVersion = apiVersion_;
5431 return *this;
5432 }
5433
5434 operator const VkApplicationInfo&() const
5435 {
5436 return *reinterpret_cast<const VkApplicationInfo*>(this);
5437 }
5438
5439 bool operator==( ApplicationInfo const& rhs ) const
5440 {
5441 return ( sType == rhs.sType )
5442 && ( pNext == rhs.pNext )
5443 && ( pApplicationName == rhs.pApplicationName )
5444 && ( applicationVersion == rhs.applicationVersion )
5445 && ( pEngineName == rhs.pEngineName )
5446 && ( engineVersion == rhs.engineVersion )
5447 && ( apiVersion == rhs.apiVersion );
5448 }
5449
5450 bool operator!=( ApplicationInfo const& rhs ) const
5451 {
5452 return !operator==( rhs );
5453 }
5454
5455 private:
5456 StructureType sType;
5457
5458 public:
5459 const void* pNext;
5460 const char* pApplicationName;
5461 uint32_t applicationVersion;
5462 const char* pEngineName;
5463 uint32_t engineVersion;
5464 uint32_t apiVersion;
5465 };
5466 static_assert( sizeof( ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" );
5467
5468 struct DeviceQueueCreateInfo
5469 {
5470 DeviceQueueCreateInfo( DeviceQueueCreateFlags flags_ = DeviceQueueCreateFlags(), uint32_t queueFamilyIndex_ = 0, uint32_t queueCount_ = 0, const float* pQueuePriorities_ = nullptr )
5471 : sType( StructureType::eDeviceQueueCreateInfo )
5472 , pNext( nullptr )
5473 , flags( flags_ )
5474 , queueFamilyIndex( queueFamilyIndex_ )
5475 , queueCount( queueCount_ )
5476 , pQueuePriorities( pQueuePriorities_ )
5477 {
5478 }
5479
5480 DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs )
5481 {
5482 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5483 }
5484
5485 DeviceQueueCreateInfo& operator=( VkDeviceQueueCreateInfo const & rhs )
5486 {
5487 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5488 return *this;
5489 }
5490
5491 DeviceQueueCreateInfo& setSType( StructureType sType_ )
5492 {
5493 sType = sType_;
5494 return *this;
5495 }
5496
5497 DeviceQueueCreateInfo& setPNext( const void* pNext_ )
5498 {
5499 pNext = pNext_;
5500 return *this;
5501 }
5502
5503 DeviceQueueCreateInfo& setFlags( DeviceQueueCreateFlags flags_ )
5504 {
5505 flags = flags_;
5506 return *this;
5507 }
5508
5509 DeviceQueueCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
5510 {
5511 queueFamilyIndex = queueFamilyIndex_;
5512 return *this;
5513 }
5514
5515 DeviceQueueCreateInfo& setQueueCount( uint32_t queueCount_ )
5516 {
5517 queueCount = queueCount_;
5518 return *this;
5519 }
5520
5521 DeviceQueueCreateInfo& setPQueuePriorities( const float* pQueuePriorities_ )
5522 {
5523 pQueuePriorities = pQueuePriorities_;
5524 return *this;
5525 }
5526
5527 operator const VkDeviceQueueCreateInfo&() const
5528 {
5529 return *reinterpret_cast<const VkDeviceQueueCreateInfo*>(this);
5530 }
5531
5532 bool operator==( DeviceQueueCreateInfo const& rhs ) const
5533 {
5534 return ( sType == rhs.sType )
5535 && ( pNext == rhs.pNext )
5536 && ( flags == rhs.flags )
5537 && ( queueFamilyIndex == rhs.queueFamilyIndex )
5538 && ( queueCount == rhs.queueCount )
5539 && ( pQueuePriorities == rhs.pQueuePriorities );
5540 }
5541
5542 bool operator!=( DeviceQueueCreateInfo const& rhs ) const
5543 {
5544 return !operator==( rhs );
5545 }
5546
5547 private:
5548 StructureType sType;
5549
5550 public:
5551 const void* pNext;
5552 DeviceQueueCreateFlags flags;
5553 uint32_t queueFamilyIndex;
5554 uint32_t queueCount;
5555 const float* pQueuePriorities;
5556 };
5557 static_assert( sizeof( DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ), "struct and wrapper have different size!" );
5558
5559 struct DeviceCreateInfo
5560 {
5561 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 )
5562 : sType( StructureType::eDeviceCreateInfo )
5563 , pNext( nullptr )
5564 , flags( flags_ )
5565 , queueCreateInfoCount( queueCreateInfoCount_ )
5566 , pQueueCreateInfos( pQueueCreateInfos_ )
5567 , enabledLayerCount( enabledLayerCount_ )
5568 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5569 , enabledExtensionCount( enabledExtensionCount_ )
5570 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5571 , pEnabledFeatures( pEnabledFeatures_ )
5572 {
5573 }
5574
5575 DeviceCreateInfo( VkDeviceCreateInfo const & rhs )
5576 {
5577 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5578 }
5579
5580 DeviceCreateInfo& operator=( VkDeviceCreateInfo const & rhs )
5581 {
5582 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5583 return *this;
5584 }
5585
5586 DeviceCreateInfo& setSType( StructureType sType_ )
5587 {
5588 sType = sType_;
5589 return *this;
5590 }
5591
5592 DeviceCreateInfo& setPNext( const void* pNext_ )
5593 {
5594 pNext = pNext_;
5595 return *this;
5596 }
5597
5598 DeviceCreateInfo& setFlags( DeviceCreateFlags flags_ )
5599 {
5600 flags = flags_;
5601 return *this;
5602 }
5603
5604 DeviceCreateInfo& setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ )
5605 {
5606 queueCreateInfoCount = queueCreateInfoCount_;
5607 return *this;
5608 }
5609
5610 DeviceCreateInfo& setPQueueCreateInfos( const DeviceQueueCreateInfo* pQueueCreateInfos_ )
5611 {
5612 pQueueCreateInfos = pQueueCreateInfos_;
5613 return *this;
5614 }
5615
5616 DeviceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5617 {
5618 enabledLayerCount = enabledLayerCount_;
5619 return *this;
5620 }
5621
5622 DeviceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5623 {
5624 ppEnabledLayerNames = ppEnabledLayerNames_;
5625 return *this;
5626 }
5627
5628 DeviceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5629 {
5630 enabledExtensionCount = enabledExtensionCount_;
5631 return *this;
5632 }
5633
5634 DeviceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5635 {
5636 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5637 return *this;
5638 }
5639
5640 DeviceCreateInfo& setPEnabledFeatures( const PhysicalDeviceFeatures* pEnabledFeatures_ )
5641 {
5642 pEnabledFeatures = pEnabledFeatures_;
5643 return *this;
5644 }
5645
5646 operator const VkDeviceCreateInfo&() const
5647 {
5648 return *reinterpret_cast<const VkDeviceCreateInfo*>(this);
5649 }
5650
5651 bool operator==( DeviceCreateInfo const& rhs ) const
5652 {
5653 return ( sType == rhs.sType )
5654 && ( pNext == rhs.pNext )
5655 && ( flags == rhs.flags )
5656 && ( queueCreateInfoCount == rhs.queueCreateInfoCount )
5657 && ( pQueueCreateInfos == rhs.pQueueCreateInfos )
5658 && ( enabledLayerCount == rhs.enabledLayerCount )
5659 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5660 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5661 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames )
5662 && ( pEnabledFeatures == rhs.pEnabledFeatures );
5663 }
5664
5665 bool operator!=( DeviceCreateInfo const& rhs ) const
5666 {
5667 return !operator==( rhs );
5668 }
5669
5670 private:
5671 StructureType sType;
5672
5673 public:
5674 const void* pNext;
5675 DeviceCreateFlags flags;
5676 uint32_t queueCreateInfoCount;
5677 const DeviceQueueCreateInfo* pQueueCreateInfos;
5678 uint32_t enabledLayerCount;
5679 const char* const* ppEnabledLayerNames;
5680 uint32_t enabledExtensionCount;
5681 const char* const* ppEnabledExtensionNames;
5682 const PhysicalDeviceFeatures* pEnabledFeatures;
5683 };
5684 static_assert( sizeof( DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ), "struct and wrapper have different size!" );
5685
5686 struct InstanceCreateInfo
5687 {
5688 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 )
5689 : sType( StructureType::eInstanceCreateInfo )
5690 , pNext( nullptr )
5691 , flags( flags_ )
5692 , pApplicationInfo( pApplicationInfo_ )
5693 , enabledLayerCount( enabledLayerCount_ )
5694 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5695 , enabledExtensionCount( enabledExtensionCount_ )
5696 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5697 {
5698 }
5699
5700 InstanceCreateInfo( VkInstanceCreateInfo const & rhs )
5701 {
5702 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5703 }
5704
5705 InstanceCreateInfo& operator=( VkInstanceCreateInfo const & rhs )
5706 {
5707 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5708 return *this;
5709 }
5710
5711 InstanceCreateInfo& setSType( StructureType sType_ )
5712 {
5713 sType = sType_;
5714 return *this;
5715 }
5716
5717 InstanceCreateInfo& setPNext( const void* pNext_ )
5718 {
5719 pNext = pNext_;
5720 return *this;
5721 }
5722
5723 InstanceCreateInfo& setFlags( InstanceCreateFlags flags_ )
5724 {
5725 flags = flags_;
5726 return *this;
5727 }
5728
5729 InstanceCreateInfo& setPApplicationInfo( const ApplicationInfo* pApplicationInfo_ )
5730 {
5731 pApplicationInfo = pApplicationInfo_;
5732 return *this;
5733 }
5734
5735 InstanceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5736 {
5737 enabledLayerCount = enabledLayerCount_;
5738 return *this;
5739 }
5740
5741 InstanceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5742 {
5743 ppEnabledLayerNames = ppEnabledLayerNames_;
5744 return *this;
5745 }
5746
5747 InstanceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5748 {
5749 enabledExtensionCount = enabledExtensionCount_;
5750 return *this;
5751 }
5752
5753 InstanceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5754 {
5755 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5756 return *this;
5757 }
5758
5759 operator const VkInstanceCreateInfo&() const
5760 {
5761 return *reinterpret_cast<const VkInstanceCreateInfo*>(this);
5762 }
5763
5764 bool operator==( InstanceCreateInfo const& rhs ) const
5765 {
5766 return ( sType == rhs.sType )
5767 && ( pNext == rhs.pNext )
5768 && ( flags == rhs.flags )
5769 && ( pApplicationInfo == rhs.pApplicationInfo )
5770 && ( enabledLayerCount == rhs.enabledLayerCount )
5771 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5772 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5773 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames );
5774 }
5775
5776 bool operator!=( InstanceCreateInfo const& rhs ) const
5777 {
5778 return !operator==( rhs );
5779 }
5780
5781 private:
5782 StructureType sType;
5783
5784 public:
5785 const void* pNext;
5786 InstanceCreateFlags flags;
5787 const ApplicationInfo* pApplicationInfo;
5788 uint32_t enabledLayerCount;
5789 const char* const* ppEnabledLayerNames;
5790 uint32_t enabledExtensionCount;
5791 const char* const* ppEnabledExtensionNames;
5792 };
5793 static_assert( sizeof( InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ), "struct and wrapper have different size!" );
5794
5795 struct MemoryAllocateInfo
5796 {
5797 MemoryAllocateInfo( DeviceSize allocationSize_ = 0, uint32_t memoryTypeIndex_ = 0 )
5798 : sType( StructureType::eMemoryAllocateInfo )
5799 , pNext( nullptr )
5800 , allocationSize( allocationSize_ )
5801 , memoryTypeIndex( memoryTypeIndex_ )
5802 {
5803 }
5804
5805 MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs )
5806 {
5807 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5808 }
5809
5810 MemoryAllocateInfo& operator=( VkMemoryAllocateInfo const & rhs )
5811 {
5812 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5813 return *this;
5814 }
5815
5816 MemoryAllocateInfo& setSType( StructureType sType_ )
5817 {
5818 sType = sType_;
5819 return *this;
5820 }
5821
5822 MemoryAllocateInfo& setPNext( const void* pNext_ )
5823 {
5824 pNext = pNext_;
5825 return *this;
5826 }
5827
5828 MemoryAllocateInfo& setAllocationSize( DeviceSize allocationSize_ )
5829 {
5830 allocationSize = allocationSize_;
5831 return *this;
5832 }
5833
5834 MemoryAllocateInfo& setMemoryTypeIndex( uint32_t memoryTypeIndex_ )
5835 {
5836 memoryTypeIndex = memoryTypeIndex_;
5837 return *this;
5838 }
5839
5840 operator const VkMemoryAllocateInfo&() const
5841 {
5842 return *reinterpret_cast<const VkMemoryAllocateInfo*>(this);
5843 }
5844
5845 bool operator==( MemoryAllocateInfo const& rhs ) const
5846 {
5847 return ( sType == rhs.sType )
5848 && ( pNext == rhs.pNext )
5849 && ( allocationSize == rhs.allocationSize )
5850 && ( memoryTypeIndex == rhs.memoryTypeIndex );
5851 }
5852
5853 bool operator!=( MemoryAllocateInfo const& rhs ) const
5854 {
5855 return !operator==( rhs );
5856 }
5857
5858 private:
5859 StructureType sType;
5860
5861 public:
5862 const void* pNext;
5863 DeviceSize allocationSize;
5864 uint32_t memoryTypeIndex;
5865 };
5866 static_assert( sizeof( MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ), "struct and wrapper have different size!" );
5867
5868 struct MappedMemoryRange
5869 {
5870 MappedMemoryRange( DeviceMemory memory_ = DeviceMemory(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
5871 : sType( StructureType::eMappedMemoryRange )
5872 , pNext( nullptr )
5873 , memory( memory_ )
5874 , offset( offset_ )
5875 , size( size_ )
5876 {
5877 }
5878
5879 MappedMemoryRange( VkMappedMemoryRange const & rhs )
5880 {
5881 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5882 }
5883
5884 MappedMemoryRange& operator=( VkMappedMemoryRange const & rhs )
5885 {
5886 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5887 return *this;
5888 }
5889
5890 MappedMemoryRange& setSType( StructureType sType_ )
5891 {
5892 sType = sType_;
5893 return *this;
5894 }
5895
5896 MappedMemoryRange& setPNext( const void* pNext_ )
5897 {
5898 pNext = pNext_;
5899 return *this;
5900 }
5901
5902 MappedMemoryRange& setMemory( DeviceMemory memory_ )
5903 {
5904 memory = memory_;
5905 return *this;
5906 }
5907
5908 MappedMemoryRange& setOffset( DeviceSize offset_ )
5909 {
5910 offset = offset_;
5911 return *this;
5912 }
5913
5914 MappedMemoryRange& setSize( DeviceSize size_ )
5915 {
5916 size = size_;
5917 return *this;
5918 }
5919
5920 operator const VkMappedMemoryRange&() const
5921 {
5922 return *reinterpret_cast<const VkMappedMemoryRange*>(this);
5923 }
5924
5925 bool operator==( MappedMemoryRange const& rhs ) const
5926 {
5927 return ( sType == rhs.sType )
5928 && ( pNext == rhs.pNext )
5929 && ( memory == rhs.memory )
5930 && ( offset == rhs.offset )
5931 && ( size == rhs.size );
5932 }
5933
5934 bool operator!=( MappedMemoryRange const& rhs ) const
5935 {
5936 return !operator==( rhs );
5937 }
5938
5939 private:
5940 StructureType sType;
5941
5942 public:
5943 const void* pNext;
5944 DeviceMemory memory;
5945 DeviceSize offset;
5946 DeviceSize size;
5947 };
5948 static_assert( sizeof( MappedMemoryRange ) == sizeof( VkMappedMemoryRange ), "struct and wrapper have different size!" );
5949
5950 struct WriteDescriptorSet
5951 {
5952 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 )
5953 : sType( StructureType::eWriteDescriptorSet )
5954 , pNext( nullptr )
5955 , dstSet( dstSet_ )
5956 , dstBinding( dstBinding_ )
5957 , dstArrayElement( dstArrayElement_ )
5958 , descriptorCount( descriptorCount_ )
5959 , descriptorType( descriptorType_ )
5960 , pImageInfo( pImageInfo_ )
5961 , pBufferInfo( pBufferInfo_ )
5962 , pTexelBufferView( pTexelBufferView_ )
5963 {
5964 }
5965
5966 WriteDescriptorSet( VkWriteDescriptorSet const & rhs )
5967 {
5968 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
5969 }
5970
5971 WriteDescriptorSet& operator=( VkWriteDescriptorSet const & rhs )
5972 {
5973 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
5974 return *this;
5975 }
5976
5977 WriteDescriptorSet& setSType( StructureType sType_ )
5978 {
5979 sType = sType_;
5980 return *this;
5981 }
5982
5983 WriteDescriptorSet& setPNext( const void* pNext_ )
5984 {
5985 pNext = pNext_;
5986 return *this;
5987 }
5988
5989 WriteDescriptorSet& setDstSet( DescriptorSet dstSet_ )
5990 {
5991 dstSet = dstSet_;
5992 return *this;
5993 }
5994
5995 WriteDescriptorSet& setDstBinding( uint32_t dstBinding_ )
5996 {
5997 dstBinding = dstBinding_;
5998 return *this;
5999 }
6000
6001 WriteDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6002 {
6003 dstArrayElement = dstArrayElement_;
6004 return *this;
6005 }
6006
6007 WriteDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6008 {
6009 descriptorCount = descriptorCount_;
6010 return *this;
6011 }
6012
6013 WriteDescriptorSet& setDescriptorType( DescriptorType descriptorType_ )
6014 {
6015 descriptorType = descriptorType_;
6016 return *this;
6017 }
6018
6019 WriteDescriptorSet& setPImageInfo( const DescriptorImageInfo* pImageInfo_ )
6020 {
6021 pImageInfo = pImageInfo_;
6022 return *this;
6023 }
6024
6025 WriteDescriptorSet& setPBufferInfo( const DescriptorBufferInfo* pBufferInfo_ )
6026 {
6027 pBufferInfo = pBufferInfo_;
6028 return *this;
6029 }
6030
6031 WriteDescriptorSet& setPTexelBufferView( const BufferView* pTexelBufferView_ )
6032 {
6033 pTexelBufferView = pTexelBufferView_;
6034 return *this;
6035 }
6036
6037 operator const VkWriteDescriptorSet&() const
6038 {
6039 return *reinterpret_cast<const VkWriteDescriptorSet*>(this);
6040 }
6041
6042 bool operator==( WriteDescriptorSet const& rhs ) const
6043 {
6044 return ( sType == rhs.sType )
6045 && ( pNext == rhs.pNext )
6046 && ( dstSet == rhs.dstSet )
6047 && ( dstBinding == rhs.dstBinding )
6048 && ( dstArrayElement == rhs.dstArrayElement )
6049 && ( descriptorCount == rhs.descriptorCount )
6050 && ( descriptorType == rhs.descriptorType )
6051 && ( pImageInfo == rhs.pImageInfo )
6052 && ( pBufferInfo == rhs.pBufferInfo )
6053 && ( pTexelBufferView == rhs.pTexelBufferView );
6054 }
6055
6056 bool operator!=( WriteDescriptorSet const& rhs ) const
6057 {
6058 return !operator==( rhs );
6059 }
6060
6061 private:
6062 StructureType sType;
6063
6064 public:
6065 const void* pNext;
6066 DescriptorSet dstSet;
6067 uint32_t dstBinding;
6068 uint32_t dstArrayElement;
6069 uint32_t descriptorCount;
6070 DescriptorType descriptorType;
6071 const DescriptorImageInfo* pImageInfo;
6072 const DescriptorBufferInfo* pBufferInfo;
6073 const BufferView* pTexelBufferView;
6074 };
6075 static_assert( sizeof( WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ), "struct and wrapper have different size!" );
6076
6077 struct CopyDescriptorSet
6078 {
6079 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 )
6080 : sType( StructureType::eCopyDescriptorSet )
6081 , pNext( nullptr )
6082 , srcSet( srcSet_ )
6083 , srcBinding( srcBinding_ )
6084 , srcArrayElement( srcArrayElement_ )
6085 , dstSet( dstSet_ )
6086 , dstBinding( dstBinding_ )
6087 , dstArrayElement( dstArrayElement_ )
6088 , descriptorCount( descriptorCount_ )
6089 {
6090 }
6091
6092 CopyDescriptorSet( VkCopyDescriptorSet const & rhs )
6093 {
6094 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6095 }
6096
6097 CopyDescriptorSet& operator=( VkCopyDescriptorSet const & rhs )
6098 {
6099 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6100 return *this;
6101 }
6102
6103 CopyDescriptorSet& setSType( StructureType sType_ )
6104 {
6105 sType = sType_;
6106 return *this;
6107 }
6108
6109 CopyDescriptorSet& setPNext( const void* pNext_ )
6110 {
6111 pNext = pNext_;
6112 return *this;
6113 }
6114
6115 CopyDescriptorSet& setSrcSet( DescriptorSet srcSet_ )
6116 {
6117 srcSet = srcSet_;
6118 return *this;
6119 }
6120
6121 CopyDescriptorSet& setSrcBinding( uint32_t srcBinding_ )
6122 {
6123 srcBinding = srcBinding_;
6124 return *this;
6125 }
6126
6127 CopyDescriptorSet& setSrcArrayElement( uint32_t srcArrayElement_ )
6128 {
6129 srcArrayElement = srcArrayElement_;
6130 return *this;
6131 }
6132
6133 CopyDescriptorSet& setDstSet( DescriptorSet dstSet_ )
6134 {
6135 dstSet = dstSet_;
6136 return *this;
6137 }
6138
6139 CopyDescriptorSet& setDstBinding( uint32_t dstBinding_ )
6140 {
6141 dstBinding = dstBinding_;
6142 return *this;
6143 }
6144
6145 CopyDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6146 {
6147 dstArrayElement = dstArrayElement_;
6148 return *this;
6149 }
6150
6151 CopyDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6152 {
6153 descriptorCount = descriptorCount_;
6154 return *this;
6155 }
6156
6157 operator const VkCopyDescriptorSet&() const
6158 {
6159 return *reinterpret_cast<const VkCopyDescriptorSet*>(this);
6160 }
6161
6162 bool operator==( CopyDescriptorSet const& rhs ) const
6163 {
6164 return ( sType == rhs.sType )
6165 && ( pNext == rhs.pNext )
6166 && ( srcSet == rhs.srcSet )
6167 && ( srcBinding == rhs.srcBinding )
6168 && ( srcArrayElement == rhs.srcArrayElement )
6169 && ( dstSet == rhs.dstSet )
6170 && ( dstBinding == rhs.dstBinding )
6171 && ( dstArrayElement == rhs.dstArrayElement )
6172 && ( descriptorCount == rhs.descriptorCount );
6173 }
6174
6175 bool operator!=( CopyDescriptorSet const& rhs ) const
6176 {
6177 return !operator==( rhs );
6178 }
6179
6180 private:
6181 StructureType sType;
6182
6183 public:
6184 const void* pNext;
6185 DescriptorSet srcSet;
6186 uint32_t srcBinding;
6187 uint32_t srcArrayElement;
6188 DescriptorSet dstSet;
6189 uint32_t dstBinding;
6190 uint32_t dstArrayElement;
6191 uint32_t descriptorCount;
6192 };
6193 static_assert( sizeof( CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ), "struct and wrapper have different size!" );
6194
6195 struct BufferViewCreateInfo
6196 {
6197 BufferViewCreateInfo( BufferViewCreateFlags flags_ = BufferViewCreateFlags(), Buffer buffer_ = Buffer(), Format format_ = Format::eUndefined, DeviceSize offset_ = 0, DeviceSize range_ = 0 )
6198 : sType( StructureType::eBufferViewCreateInfo )
6199 , pNext( nullptr )
6200 , flags( flags_ )
6201 , buffer( buffer_ )
6202 , format( format_ )
6203 , offset( offset_ )
6204 , range( range_ )
6205 {
6206 }
6207
6208 BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs )
6209 {
6210 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6211 }
6212
6213 BufferViewCreateInfo& operator=( VkBufferViewCreateInfo const & rhs )
6214 {
6215 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6216 return *this;
6217 }
6218
6219 BufferViewCreateInfo& setSType( StructureType sType_ )
6220 {
6221 sType = sType_;
6222 return *this;
6223 }
6224
6225 BufferViewCreateInfo& setPNext( const void* pNext_ )
6226 {
6227 pNext = pNext_;
6228 return *this;
6229 }
6230
6231 BufferViewCreateInfo& setFlags( BufferViewCreateFlags flags_ )
6232 {
6233 flags = flags_;
6234 return *this;
6235 }
6236
6237 BufferViewCreateInfo& setBuffer( Buffer buffer_ )
6238 {
6239 buffer = buffer_;
6240 return *this;
6241 }
6242
6243 BufferViewCreateInfo& setFormat( Format format_ )
6244 {
6245 format = format_;
6246 return *this;
6247 }
6248
6249 BufferViewCreateInfo& setOffset( DeviceSize offset_ )
6250 {
6251 offset = offset_;
6252 return *this;
6253 }
6254
6255 BufferViewCreateInfo& setRange( DeviceSize range_ )
6256 {
6257 range = range_;
6258 return *this;
6259 }
6260
6261 operator const VkBufferViewCreateInfo&() const
6262 {
6263 return *reinterpret_cast<const VkBufferViewCreateInfo*>(this);
6264 }
6265
6266 bool operator==( BufferViewCreateInfo const& rhs ) const
6267 {
6268 return ( sType == rhs.sType )
6269 && ( pNext == rhs.pNext )
6270 && ( flags == rhs.flags )
6271 && ( buffer == rhs.buffer )
6272 && ( format == rhs.format )
6273 && ( offset == rhs.offset )
6274 && ( range == rhs.range );
6275 }
6276
6277 bool operator!=( BufferViewCreateInfo const& rhs ) const
6278 {
6279 return !operator==( rhs );
6280 }
6281
6282 private:
6283 StructureType sType;
6284
6285 public:
6286 const void* pNext;
6287 BufferViewCreateFlags flags;
6288 Buffer buffer;
6289 Format format;
6290 DeviceSize offset;
6291 DeviceSize range;
6292 };
6293 static_assert( sizeof( BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ), "struct and wrapper have different size!" );
6294
6295 struct ShaderModuleCreateInfo
6296 {
6297 ShaderModuleCreateInfo( ShaderModuleCreateFlags flags_ = ShaderModuleCreateFlags(), size_t codeSize_ = 0, const uint32_t* pCode_ = nullptr )
6298 : sType( StructureType::eShaderModuleCreateInfo )
6299 , pNext( nullptr )
6300 , flags( flags_ )
6301 , codeSize( codeSize_ )
6302 , pCode( pCode_ )
6303 {
6304 }
6305
6306 ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs )
6307 {
6308 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6309 }
6310
6311 ShaderModuleCreateInfo& operator=( VkShaderModuleCreateInfo const & rhs )
6312 {
6313 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6314 return *this;
6315 }
6316
6317 ShaderModuleCreateInfo& setSType( StructureType sType_ )
6318 {
6319 sType = sType_;
6320 return *this;
6321 }
6322
6323 ShaderModuleCreateInfo& setPNext( const void* pNext_ )
6324 {
6325 pNext = pNext_;
6326 return *this;
6327 }
6328
6329 ShaderModuleCreateInfo& setFlags( ShaderModuleCreateFlags flags_ )
6330 {
6331 flags = flags_;
6332 return *this;
6333 }
6334
6335 ShaderModuleCreateInfo& setCodeSize( size_t codeSize_ )
6336 {
6337 codeSize = codeSize_;
6338 return *this;
6339 }
6340
6341 ShaderModuleCreateInfo& setPCode( const uint32_t* pCode_ )
6342 {
6343 pCode = pCode_;
6344 return *this;
6345 }
6346
6347 operator const VkShaderModuleCreateInfo&() const
6348 {
6349 return *reinterpret_cast<const VkShaderModuleCreateInfo*>(this);
6350 }
6351
6352 bool operator==( ShaderModuleCreateInfo const& rhs ) const
6353 {
6354 return ( sType == rhs.sType )
6355 && ( pNext == rhs.pNext )
6356 && ( flags == rhs.flags )
6357 && ( codeSize == rhs.codeSize )
6358 && ( pCode == rhs.pCode );
6359 }
6360
6361 bool operator!=( ShaderModuleCreateInfo const& rhs ) const
6362 {
6363 return !operator==( rhs );
6364 }
6365
6366 private:
6367 StructureType sType;
6368
6369 public:
6370 const void* pNext;
6371 ShaderModuleCreateFlags flags;
6372 size_t codeSize;
6373 const uint32_t* pCode;
6374 };
6375 static_assert( sizeof( ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ), "struct and wrapper have different size!" );
6376
6377 struct DescriptorSetAllocateInfo
6378 {
6379 DescriptorSetAllocateInfo( DescriptorPool descriptorPool_ = DescriptorPool(), uint32_t descriptorSetCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr )
6380 : sType( StructureType::eDescriptorSetAllocateInfo )
6381 , pNext( nullptr )
6382 , descriptorPool( descriptorPool_ )
6383 , descriptorSetCount( descriptorSetCount_ )
6384 , pSetLayouts( pSetLayouts_ )
6385 {
6386 }
6387
6388 DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs )
6389 {
6390 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6391 }
6392
6393 DescriptorSetAllocateInfo& operator=( VkDescriptorSetAllocateInfo const & rhs )
6394 {
6395 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6396 return *this;
6397 }
6398
6399 DescriptorSetAllocateInfo& setSType( StructureType sType_ )
6400 {
6401 sType = sType_;
6402 return *this;
6403 }
6404
6405 DescriptorSetAllocateInfo& setPNext( const void* pNext_ )
6406 {
6407 pNext = pNext_;
6408 return *this;
6409 }
6410
6411 DescriptorSetAllocateInfo& setDescriptorPool( DescriptorPool descriptorPool_ )
6412 {
6413 descriptorPool = descriptorPool_;
6414 return *this;
6415 }
6416
6417 DescriptorSetAllocateInfo& setDescriptorSetCount( uint32_t descriptorSetCount_ )
6418 {
6419 descriptorSetCount = descriptorSetCount_;
6420 return *this;
6421 }
6422
6423 DescriptorSetAllocateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
6424 {
6425 pSetLayouts = pSetLayouts_;
6426 return *this;
6427 }
6428
6429 operator const VkDescriptorSetAllocateInfo&() const
6430 {
6431 return *reinterpret_cast<const VkDescriptorSetAllocateInfo*>(this);
6432 }
6433
6434 bool operator==( DescriptorSetAllocateInfo const& rhs ) const
6435 {
6436 return ( sType == rhs.sType )
6437 && ( pNext == rhs.pNext )
6438 && ( descriptorPool == rhs.descriptorPool )
6439 && ( descriptorSetCount == rhs.descriptorSetCount )
6440 && ( pSetLayouts == rhs.pSetLayouts );
6441 }
6442
6443 bool operator!=( DescriptorSetAllocateInfo const& rhs ) const
6444 {
6445 return !operator==( rhs );
6446 }
6447
6448 private:
6449 StructureType sType;
6450
6451 public:
6452 const void* pNext;
6453 DescriptorPool descriptorPool;
6454 uint32_t descriptorSetCount;
6455 const DescriptorSetLayout* pSetLayouts;
6456 };
6457 static_assert( sizeof( DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ), "struct and wrapper have different size!" );
6458
6459 struct PipelineVertexInputStateCreateInfo
6460 {
6461 PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateFlags flags_ = PipelineVertexInputStateCreateFlags(), uint32_t vertexBindingDescriptionCount_ = 0, const VertexInputBindingDescription* pVertexBindingDescriptions_ = nullptr, uint32_t vertexAttributeDescriptionCount_ = 0, const VertexInputAttributeDescription* pVertexAttributeDescriptions_ = nullptr )
6462 : sType( StructureType::ePipelineVertexInputStateCreateInfo )
6463 , pNext( nullptr )
6464 , flags( flags_ )
6465 , vertexBindingDescriptionCount( vertexBindingDescriptionCount_ )
6466 , pVertexBindingDescriptions( pVertexBindingDescriptions_ )
6467 , vertexAttributeDescriptionCount( vertexAttributeDescriptionCount_ )
6468 , pVertexAttributeDescriptions( pVertexAttributeDescriptions_ )
6469 {
6470 }
6471
6472 PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs )
6473 {
6474 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6475 }
6476
6477 PipelineVertexInputStateCreateInfo& operator=( VkPipelineVertexInputStateCreateInfo const & rhs )
6478 {
6479 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6480 return *this;
6481 }
6482
6483 PipelineVertexInputStateCreateInfo& setSType( StructureType sType_ )
6484 {
6485 sType = sType_;
6486 return *this;
6487 }
6488
6489 PipelineVertexInputStateCreateInfo& setPNext( const void* pNext_ )
6490 {
6491 pNext = pNext_;
6492 return *this;
6493 }
6494
6495 PipelineVertexInputStateCreateInfo& setFlags( PipelineVertexInputStateCreateFlags flags_ )
6496 {
6497 flags = flags_;
6498 return *this;
6499 }
6500
6501 PipelineVertexInputStateCreateInfo& setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ )
6502 {
6503 vertexBindingDescriptionCount = vertexBindingDescriptionCount_;
6504 return *this;
6505 }
6506
6507 PipelineVertexInputStateCreateInfo& setPVertexBindingDescriptions( const VertexInputBindingDescription* pVertexBindingDescriptions_ )
6508 {
6509 pVertexBindingDescriptions = pVertexBindingDescriptions_;
6510 return *this;
6511 }
6512
6513 PipelineVertexInputStateCreateInfo& setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ )
6514 {
6515 vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_;
6516 return *this;
6517 }
6518
6519 PipelineVertexInputStateCreateInfo& setPVertexAttributeDescriptions( const VertexInputAttributeDescription* pVertexAttributeDescriptions_ )
6520 {
6521 pVertexAttributeDescriptions = pVertexAttributeDescriptions_;
6522 return *this;
6523 }
6524
6525 operator const VkPipelineVertexInputStateCreateInfo&() const
6526 {
6527 return *reinterpret_cast<const VkPipelineVertexInputStateCreateInfo*>(this);
6528 }
6529
6530 bool operator==( PipelineVertexInputStateCreateInfo const& rhs ) const
6531 {
6532 return ( sType == rhs.sType )
6533 && ( pNext == rhs.pNext )
6534 && ( flags == rhs.flags )
6535 && ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount )
6536 && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions )
6537 && ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount )
6538 && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions );
6539 }
6540
6541 bool operator!=( PipelineVertexInputStateCreateInfo const& rhs ) const
6542 {
6543 return !operator==( rhs );
6544 }
6545
6546 private:
6547 StructureType sType;
6548
6549 public:
6550 const void* pNext;
6551 PipelineVertexInputStateCreateFlags flags;
6552 uint32_t vertexBindingDescriptionCount;
6553 const VertexInputBindingDescription* pVertexBindingDescriptions;
6554 uint32_t vertexAttributeDescriptionCount;
6555 const VertexInputAttributeDescription* pVertexAttributeDescriptions;
6556 };
6557 static_assert( sizeof( PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ), "struct and wrapper have different size!" );
6558
6559 struct PipelineInputAssemblyStateCreateInfo
6560 {
6561 PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateFlags flags_ = PipelineInputAssemblyStateCreateFlags(), PrimitiveTopology topology_ = PrimitiveTopology::ePointList, Bool32 primitiveRestartEnable_ = 0 )
6562 : sType( StructureType::ePipelineInputAssemblyStateCreateInfo )
6563 , pNext( nullptr )
6564 , flags( flags_ )
6565 , topology( topology_ )
6566 , primitiveRestartEnable( primitiveRestartEnable_ )
6567 {
6568 }
6569
6570 PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6571 {
6572 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6573 }
6574
6575 PipelineInputAssemblyStateCreateInfo& operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6576 {
6577 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6578 return *this;
6579 }
6580
6581 PipelineInputAssemblyStateCreateInfo& setSType( StructureType sType_ )
6582 {
6583 sType = sType_;
6584 return *this;
6585 }
6586
6587 PipelineInputAssemblyStateCreateInfo& setPNext( const void* pNext_ )
6588 {
6589 pNext = pNext_;
6590 return *this;
6591 }
6592
6593 PipelineInputAssemblyStateCreateInfo& setFlags( PipelineInputAssemblyStateCreateFlags flags_ )
6594 {
6595 flags = flags_;
6596 return *this;
6597 }
6598
6599 PipelineInputAssemblyStateCreateInfo& setTopology( PrimitiveTopology topology_ )
6600 {
6601 topology = topology_;
6602 return *this;
6603 }
6604
6605 PipelineInputAssemblyStateCreateInfo& setPrimitiveRestartEnable( Bool32 primitiveRestartEnable_ )
6606 {
6607 primitiveRestartEnable = primitiveRestartEnable_;
6608 return *this;
6609 }
6610
6611 operator const VkPipelineInputAssemblyStateCreateInfo&() const
6612 {
6613 return *reinterpret_cast<const VkPipelineInputAssemblyStateCreateInfo*>(this);
6614 }
6615
6616 bool operator==( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6617 {
6618 return ( sType == rhs.sType )
6619 && ( pNext == rhs.pNext )
6620 && ( flags == rhs.flags )
6621 && ( topology == rhs.topology )
6622 && ( primitiveRestartEnable == rhs.primitiveRestartEnable );
6623 }
6624
6625 bool operator!=( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6626 {
6627 return !operator==( rhs );
6628 }
6629
6630 private:
6631 StructureType sType;
6632
6633 public:
6634 const void* pNext;
6635 PipelineInputAssemblyStateCreateFlags flags;
6636 PrimitiveTopology topology;
6637 Bool32 primitiveRestartEnable;
6638 };
6639 static_assert( sizeof( PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ), "struct and wrapper have different size!" );
6640
6641 struct PipelineTessellationStateCreateInfo
6642 {
6643 PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateFlags flags_ = PipelineTessellationStateCreateFlags(), uint32_t patchControlPoints_ = 0 )
6644 : sType( StructureType::ePipelineTessellationStateCreateInfo )
6645 , pNext( nullptr )
6646 , flags( flags_ )
6647 , patchControlPoints( patchControlPoints_ )
6648 {
6649 }
6650
6651 PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs )
6652 {
6653 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6654 }
6655
6656 PipelineTessellationStateCreateInfo& operator=( VkPipelineTessellationStateCreateInfo const & rhs )
6657 {
6658 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6659 return *this;
6660 }
6661
6662 PipelineTessellationStateCreateInfo& setSType( StructureType sType_ )
6663 {
6664 sType = sType_;
6665 return *this;
6666 }
6667
6668 PipelineTessellationStateCreateInfo& setPNext( const void* pNext_ )
6669 {
6670 pNext = pNext_;
6671 return *this;
6672 }
6673
6674 PipelineTessellationStateCreateInfo& setFlags( PipelineTessellationStateCreateFlags flags_ )
6675 {
6676 flags = flags_;
6677 return *this;
6678 }
6679
6680 PipelineTessellationStateCreateInfo& setPatchControlPoints( uint32_t patchControlPoints_ )
6681 {
6682 patchControlPoints = patchControlPoints_;
6683 return *this;
6684 }
6685
6686 operator const VkPipelineTessellationStateCreateInfo&() const
6687 {
6688 return *reinterpret_cast<const VkPipelineTessellationStateCreateInfo*>(this);
6689 }
6690
6691 bool operator==( PipelineTessellationStateCreateInfo const& rhs ) const
6692 {
6693 return ( sType == rhs.sType )
6694 && ( pNext == rhs.pNext )
6695 && ( flags == rhs.flags )
6696 && ( patchControlPoints == rhs.patchControlPoints );
6697 }
6698
6699 bool operator!=( PipelineTessellationStateCreateInfo const& rhs ) const
6700 {
6701 return !operator==( rhs );
6702 }
6703
6704 private:
6705 StructureType sType;
6706
6707 public:
6708 const void* pNext;
6709 PipelineTessellationStateCreateFlags flags;
6710 uint32_t patchControlPoints;
6711 };
6712 static_assert( sizeof( PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ), "struct and wrapper have different size!" );
6713
6714 struct PipelineViewportStateCreateInfo
6715 {
6716 PipelineViewportStateCreateInfo( PipelineViewportStateCreateFlags flags_ = PipelineViewportStateCreateFlags(), uint32_t viewportCount_ = 0, const Viewport* pViewports_ = nullptr, uint32_t scissorCount_ = 0, const Rect2D* pScissors_ = nullptr )
6717 : sType( StructureType::ePipelineViewportStateCreateInfo )
6718 , pNext( nullptr )
6719 , flags( flags_ )
6720 , viewportCount( viewportCount_ )
6721 , pViewports( pViewports_ )
6722 , scissorCount( scissorCount_ )
6723 , pScissors( pScissors_ )
6724 {
6725 }
6726
6727 PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs )
6728 {
6729 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6730 }
6731
6732 PipelineViewportStateCreateInfo& operator=( VkPipelineViewportStateCreateInfo const & rhs )
6733 {
6734 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6735 return *this;
6736 }
6737
6738 PipelineViewportStateCreateInfo& setSType( StructureType sType_ )
6739 {
6740 sType = sType_;
6741 return *this;
6742 }
6743
6744 PipelineViewportStateCreateInfo& setPNext( const void* pNext_ )
6745 {
6746 pNext = pNext_;
6747 return *this;
6748 }
6749
6750 PipelineViewportStateCreateInfo& setFlags( PipelineViewportStateCreateFlags flags_ )
6751 {
6752 flags = flags_;
6753 return *this;
6754 }
6755
6756 PipelineViewportStateCreateInfo& setViewportCount( uint32_t viewportCount_ )
6757 {
6758 viewportCount = viewportCount_;
6759 return *this;
6760 }
6761
6762 PipelineViewportStateCreateInfo& setPViewports( const Viewport* pViewports_ )
6763 {
6764 pViewports = pViewports_;
6765 return *this;
6766 }
6767
6768 PipelineViewportStateCreateInfo& setScissorCount( uint32_t scissorCount_ )
6769 {
6770 scissorCount = scissorCount_;
6771 return *this;
6772 }
6773
6774 PipelineViewportStateCreateInfo& setPScissors( const Rect2D* pScissors_ )
6775 {
6776 pScissors = pScissors_;
6777 return *this;
6778 }
6779
6780 operator const VkPipelineViewportStateCreateInfo&() const
6781 {
6782 return *reinterpret_cast<const VkPipelineViewportStateCreateInfo*>(this);
6783 }
6784
6785 bool operator==( PipelineViewportStateCreateInfo const& rhs ) const
6786 {
6787 return ( sType == rhs.sType )
6788 && ( pNext == rhs.pNext )
6789 && ( flags == rhs.flags )
6790 && ( viewportCount == rhs.viewportCount )
6791 && ( pViewports == rhs.pViewports )
6792 && ( scissorCount == rhs.scissorCount )
6793 && ( pScissors == rhs.pScissors );
6794 }
6795
6796 bool operator!=( PipelineViewportStateCreateInfo const& rhs ) const
6797 {
6798 return !operator==( rhs );
6799 }
6800
6801 private:
6802 StructureType sType;
6803
6804 public:
6805 const void* pNext;
6806 PipelineViewportStateCreateFlags flags;
6807 uint32_t viewportCount;
6808 const Viewport* pViewports;
6809 uint32_t scissorCount;
6810 const Rect2D* pScissors;
6811 };
6812 static_assert( sizeof( PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ), "struct and wrapper have different size!" );
6813
6814 struct PipelineRasterizationStateCreateInfo
6815 {
6816 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 )
6817 : sType( StructureType::ePipelineRasterizationStateCreateInfo )
6818 , pNext( nullptr )
6819 , flags( flags_ )
6820 , depthClampEnable( depthClampEnable_ )
6821 , rasterizerDiscardEnable( rasterizerDiscardEnable_ )
6822 , polygonMode( polygonMode_ )
6823 , cullMode( cullMode_ )
6824 , frontFace( frontFace_ )
6825 , depthBiasEnable( depthBiasEnable_ )
6826 , depthBiasConstantFactor( depthBiasConstantFactor_ )
6827 , depthBiasClamp( depthBiasClamp_ )
6828 , depthBiasSlopeFactor( depthBiasSlopeFactor_ )
6829 , lineWidth( lineWidth_ )
6830 {
6831 }
6832
6833 PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs )
6834 {
6835 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6836 }
6837
6838 PipelineRasterizationStateCreateInfo& operator=( VkPipelineRasterizationStateCreateInfo const & rhs )
6839 {
6840 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6841 return *this;
6842 }
6843
6844 PipelineRasterizationStateCreateInfo& setSType( StructureType sType_ )
6845 {
6846 sType = sType_;
6847 return *this;
6848 }
6849
6850 PipelineRasterizationStateCreateInfo& setPNext( const void* pNext_ )
6851 {
6852 pNext = pNext_;
6853 return *this;
6854 }
6855
6856 PipelineRasterizationStateCreateInfo& setFlags( PipelineRasterizationStateCreateFlags flags_ )
6857 {
6858 flags = flags_;
6859 return *this;
6860 }
6861
6862 PipelineRasterizationStateCreateInfo& setDepthClampEnable( Bool32 depthClampEnable_ )
6863 {
6864 depthClampEnable = depthClampEnable_;
6865 return *this;
6866 }
6867
6868 PipelineRasterizationStateCreateInfo& setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable_ )
6869 {
6870 rasterizerDiscardEnable = rasterizerDiscardEnable_;
6871 return *this;
6872 }
6873
6874 PipelineRasterizationStateCreateInfo& setPolygonMode( PolygonMode polygonMode_ )
6875 {
6876 polygonMode = polygonMode_;
6877 return *this;
6878 }
6879
6880 PipelineRasterizationStateCreateInfo& setCullMode( CullModeFlags cullMode_ )
6881 {
6882 cullMode = cullMode_;
6883 return *this;
6884 }
6885
6886 PipelineRasterizationStateCreateInfo& setFrontFace( FrontFace frontFace_ )
6887 {
6888 frontFace = frontFace_;
6889 return *this;
6890 }
6891
6892 PipelineRasterizationStateCreateInfo& setDepthBiasEnable( Bool32 depthBiasEnable_ )
6893 {
6894 depthBiasEnable = depthBiasEnable_;
6895 return *this;
6896 }
6897
6898 PipelineRasterizationStateCreateInfo& setDepthBiasConstantFactor( float depthBiasConstantFactor_ )
6899 {
6900 depthBiasConstantFactor = depthBiasConstantFactor_;
6901 return *this;
6902 }
6903
6904 PipelineRasterizationStateCreateInfo& setDepthBiasClamp( float depthBiasClamp_ )
6905 {
6906 depthBiasClamp = depthBiasClamp_;
6907 return *this;
6908 }
6909
6910 PipelineRasterizationStateCreateInfo& setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ )
6911 {
6912 depthBiasSlopeFactor = depthBiasSlopeFactor_;
6913 return *this;
6914 }
6915
6916 PipelineRasterizationStateCreateInfo& setLineWidth( float lineWidth_ )
6917 {
6918 lineWidth = lineWidth_;
6919 return *this;
6920 }
6921
6922 operator const VkPipelineRasterizationStateCreateInfo&() const
6923 {
6924 return *reinterpret_cast<const VkPipelineRasterizationStateCreateInfo*>(this);
6925 }
6926
6927 bool operator==( PipelineRasterizationStateCreateInfo const& rhs ) const
6928 {
6929 return ( sType == rhs.sType )
6930 && ( pNext == rhs.pNext )
6931 && ( flags == rhs.flags )
6932 && ( depthClampEnable == rhs.depthClampEnable )
6933 && ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable )
6934 && ( polygonMode == rhs.polygonMode )
6935 && ( cullMode == rhs.cullMode )
6936 && ( frontFace == rhs.frontFace )
6937 && ( depthBiasEnable == rhs.depthBiasEnable )
6938 && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor )
6939 && ( depthBiasClamp == rhs.depthBiasClamp )
6940 && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor )
6941 && ( lineWidth == rhs.lineWidth );
6942 }
6943
6944 bool operator!=( PipelineRasterizationStateCreateInfo const& rhs ) const
6945 {
6946 return !operator==( rhs );
6947 }
6948
6949 private:
6950 StructureType sType;
6951
6952 public:
6953 const void* pNext;
6954 PipelineRasterizationStateCreateFlags flags;
6955 Bool32 depthClampEnable;
6956 Bool32 rasterizerDiscardEnable;
6957 PolygonMode polygonMode;
6958 CullModeFlags cullMode;
6959 FrontFace frontFace;
6960 Bool32 depthBiasEnable;
6961 float depthBiasConstantFactor;
6962 float depthBiasClamp;
6963 float depthBiasSlopeFactor;
6964 float lineWidth;
6965 };
6966 static_assert( sizeof( PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ), "struct and wrapper have different size!" );
6967
6968 struct PipelineDepthStencilStateCreateInfo
6969 {
6970 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 )
6971 : sType( StructureType::ePipelineDepthStencilStateCreateInfo )
6972 , pNext( nullptr )
6973 , flags( flags_ )
6974 , depthTestEnable( depthTestEnable_ )
6975 , depthWriteEnable( depthWriteEnable_ )
6976 , depthCompareOp( depthCompareOp_ )
6977 , depthBoundsTestEnable( depthBoundsTestEnable_ )
6978 , stencilTestEnable( stencilTestEnable_ )
6979 , front( front_ )
6980 , back( back_ )
6981 , minDepthBounds( minDepthBounds_ )
6982 , maxDepthBounds( maxDepthBounds_ )
6983 {
6984 }
6985
6986 PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs )
6987 {
6988 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
6989 }
6990
6991 PipelineDepthStencilStateCreateInfo& operator=( VkPipelineDepthStencilStateCreateInfo const & rhs )
6992 {
6993 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
6994 return *this;
6995 }
6996
6997 PipelineDepthStencilStateCreateInfo& setSType( StructureType sType_ )
6998 {
6999 sType = sType_;
7000 return *this;
7001 }
7002
7003 PipelineDepthStencilStateCreateInfo& setPNext( const void* pNext_ )
7004 {
7005 pNext = pNext_;
7006 return *this;
7007 }
7008
7009 PipelineDepthStencilStateCreateInfo& setFlags( PipelineDepthStencilStateCreateFlags flags_ )
7010 {
7011 flags = flags_;
7012 return *this;
7013 }
7014
7015 PipelineDepthStencilStateCreateInfo& setDepthTestEnable( Bool32 depthTestEnable_ )
7016 {
7017 depthTestEnable = depthTestEnable_;
7018 return *this;
7019 }
7020
7021 PipelineDepthStencilStateCreateInfo& setDepthWriteEnable( Bool32 depthWriteEnable_ )
7022 {
7023 depthWriteEnable = depthWriteEnable_;
7024 return *this;
7025 }
7026
7027 PipelineDepthStencilStateCreateInfo& setDepthCompareOp( CompareOp depthCompareOp_ )
7028 {
7029 depthCompareOp = depthCompareOp_;
7030 return *this;
7031 }
7032
7033 PipelineDepthStencilStateCreateInfo& setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable_ )
7034 {
7035 depthBoundsTestEnable = depthBoundsTestEnable_;
7036 return *this;
7037 }
7038
7039 PipelineDepthStencilStateCreateInfo& setStencilTestEnable( Bool32 stencilTestEnable_ )
7040 {
7041 stencilTestEnable = stencilTestEnable_;
7042 return *this;
7043 }
7044
7045 PipelineDepthStencilStateCreateInfo& setFront( StencilOpState front_ )
7046 {
7047 front = front_;
7048 return *this;
7049 }
7050
7051 PipelineDepthStencilStateCreateInfo& setBack( StencilOpState back_ )
7052 {
7053 back = back_;
7054 return *this;
7055 }
7056
7057 PipelineDepthStencilStateCreateInfo& setMinDepthBounds( float minDepthBounds_ )
7058 {
7059 minDepthBounds = minDepthBounds_;
7060 return *this;
7061 }
7062
7063 PipelineDepthStencilStateCreateInfo& setMaxDepthBounds( float maxDepthBounds_ )
7064 {
7065 maxDepthBounds = maxDepthBounds_;
7066 return *this;
7067 }
7068
7069 operator const VkPipelineDepthStencilStateCreateInfo&() const
7070 {
7071 return *reinterpret_cast<const VkPipelineDepthStencilStateCreateInfo*>(this);
7072 }
7073
7074 bool operator==( PipelineDepthStencilStateCreateInfo const& rhs ) const
7075 {
7076 return ( sType == rhs.sType )
7077 && ( pNext == rhs.pNext )
7078 && ( flags == rhs.flags )
7079 && ( depthTestEnable == rhs.depthTestEnable )
7080 && ( depthWriteEnable == rhs.depthWriteEnable )
7081 && ( depthCompareOp == rhs.depthCompareOp )
7082 && ( depthBoundsTestEnable == rhs.depthBoundsTestEnable )
7083 && ( stencilTestEnable == rhs.stencilTestEnable )
7084 && ( front == rhs.front )
7085 && ( back == rhs.back )
7086 && ( minDepthBounds == rhs.minDepthBounds )
7087 && ( maxDepthBounds == rhs.maxDepthBounds );
7088 }
7089
7090 bool operator!=( PipelineDepthStencilStateCreateInfo const& rhs ) const
7091 {
7092 return !operator==( rhs );
7093 }
7094
7095 private:
7096 StructureType sType;
7097
7098 public:
7099 const void* pNext;
7100 PipelineDepthStencilStateCreateFlags flags;
7101 Bool32 depthTestEnable;
7102 Bool32 depthWriteEnable;
7103 CompareOp depthCompareOp;
7104 Bool32 depthBoundsTestEnable;
7105 Bool32 stencilTestEnable;
7106 StencilOpState front;
7107 StencilOpState back;
7108 float minDepthBounds;
7109 float maxDepthBounds;
7110 };
7111 static_assert( sizeof( PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ), "struct and wrapper have different size!" );
7112
7113 struct PipelineCacheCreateInfo
7114 {
7115 PipelineCacheCreateInfo( PipelineCacheCreateFlags flags_ = PipelineCacheCreateFlags(), size_t initialDataSize_ = 0, const void* pInitialData_ = nullptr )
7116 : sType( StructureType::ePipelineCacheCreateInfo )
7117 , pNext( nullptr )
7118 , flags( flags_ )
7119 , initialDataSize( initialDataSize_ )
7120 , pInitialData( pInitialData_ )
7121 {
7122 }
7123
7124 PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs )
7125 {
7126 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7127 }
7128
7129 PipelineCacheCreateInfo& operator=( VkPipelineCacheCreateInfo const & rhs )
7130 {
7131 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7132 return *this;
7133 }
7134
7135 PipelineCacheCreateInfo& setSType( StructureType sType_ )
7136 {
7137 sType = sType_;
7138 return *this;
7139 }
7140
7141 PipelineCacheCreateInfo& setPNext( const void* pNext_ )
7142 {
7143 pNext = pNext_;
7144 return *this;
7145 }
7146
7147 PipelineCacheCreateInfo& setFlags( PipelineCacheCreateFlags flags_ )
7148 {
7149 flags = flags_;
7150 return *this;
7151 }
7152
7153 PipelineCacheCreateInfo& setInitialDataSize( size_t initialDataSize_ )
7154 {
7155 initialDataSize = initialDataSize_;
7156 return *this;
7157 }
7158
7159 PipelineCacheCreateInfo& setPInitialData( const void* pInitialData_ )
7160 {
7161 pInitialData = pInitialData_;
7162 return *this;
7163 }
7164
7165 operator const VkPipelineCacheCreateInfo&() const
7166 {
7167 return *reinterpret_cast<const VkPipelineCacheCreateInfo*>(this);
7168 }
7169
7170 bool operator==( PipelineCacheCreateInfo const& rhs ) const
7171 {
7172 return ( sType == rhs.sType )
7173 && ( pNext == rhs.pNext )
7174 && ( flags == rhs.flags )
7175 && ( initialDataSize == rhs.initialDataSize )
7176 && ( pInitialData == rhs.pInitialData );
7177 }
7178
7179 bool operator!=( PipelineCacheCreateInfo const& rhs ) const
7180 {
7181 return !operator==( rhs );
7182 }
7183
7184 private:
7185 StructureType sType;
7186
7187 public:
7188 const void* pNext;
7189 PipelineCacheCreateFlags flags;
7190 size_t initialDataSize;
7191 const void* pInitialData;
7192 };
7193 static_assert( sizeof( PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ), "struct and wrapper have different size!" );
7194
7195 struct SamplerCreateInfo
7196 {
7197 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 )
7198 : sType( StructureType::eSamplerCreateInfo )
7199 , pNext( nullptr )
7200 , flags( flags_ )
7201 , magFilter( magFilter_ )
7202 , minFilter( minFilter_ )
7203 , mipmapMode( mipmapMode_ )
7204 , addressModeU( addressModeU_ )
7205 , addressModeV( addressModeV_ )
7206 , addressModeW( addressModeW_ )
7207 , mipLodBias( mipLodBias_ )
7208 , anisotropyEnable( anisotropyEnable_ )
7209 , maxAnisotropy( maxAnisotropy_ )
7210 , compareEnable( compareEnable_ )
7211 , compareOp( compareOp_ )
7212 , minLod( minLod_ )
7213 , maxLod( maxLod_ )
7214 , borderColor( borderColor_ )
7215 , unnormalizedCoordinates( unnormalizedCoordinates_ )
7216 {
7217 }
7218
7219 SamplerCreateInfo( VkSamplerCreateInfo const & rhs )
7220 {
7221 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7222 }
7223
7224 SamplerCreateInfo& operator=( VkSamplerCreateInfo const & rhs )
7225 {
7226 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7227 return *this;
7228 }
7229
7230 SamplerCreateInfo& setSType( StructureType sType_ )
7231 {
7232 sType = sType_;
7233 return *this;
7234 }
7235
7236 SamplerCreateInfo& setPNext( const void* pNext_ )
7237 {
7238 pNext = pNext_;
7239 return *this;
7240 }
7241
7242 SamplerCreateInfo& setFlags( SamplerCreateFlags flags_ )
7243 {
7244 flags = flags_;
7245 return *this;
7246 }
7247
7248 SamplerCreateInfo& setMagFilter( Filter magFilter_ )
7249 {
7250 magFilter = magFilter_;
7251 return *this;
7252 }
7253
7254 SamplerCreateInfo& setMinFilter( Filter minFilter_ )
7255 {
7256 minFilter = minFilter_;
7257 return *this;
7258 }
7259
7260 SamplerCreateInfo& setMipmapMode( SamplerMipmapMode mipmapMode_ )
7261 {
7262 mipmapMode = mipmapMode_;
7263 return *this;
7264 }
7265
7266 SamplerCreateInfo& setAddressModeU( SamplerAddressMode addressModeU_ )
7267 {
7268 addressModeU = addressModeU_;
7269 return *this;
7270 }
7271
7272 SamplerCreateInfo& setAddressModeV( SamplerAddressMode addressModeV_ )
7273 {
7274 addressModeV = addressModeV_;
7275 return *this;
7276 }
7277
7278 SamplerCreateInfo& setAddressModeW( SamplerAddressMode addressModeW_ )
7279 {
7280 addressModeW = addressModeW_;
7281 return *this;
7282 }
7283
7284 SamplerCreateInfo& setMipLodBias( float mipLodBias_ )
7285 {
7286 mipLodBias = mipLodBias_;
7287 return *this;
7288 }
7289
7290 SamplerCreateInfo& setAnisotropyEnable( Bool32 anisotropyEnable_ )
7291 {
7292 anisotropyEnable = anisotropyEnable_;
7293 return *this;
7294 }
7295
7296 SamplerCreateInfo& setMaxAnisotropy( float maxAnisotropy_ )
7297 {
7298 maxAnisotropy = maxAnisotropy_;
7299 return *this;
7300 }
7301
7302 SamplerCreateInfo& setCompareEnable( Bool32 compareEnable_ )
7303 {
7304 compareEnable = compareEnable_;
7305 return *this;
7306 }
7307
7308 SamplerCreateInfo& setCompareOp( CompareOp compareOp_ )
7309 {
7310 compareOp = compareOp_;
7311 return *this;
7312 }
7313
7314 SamplerCreateInfo& setMinLod( float minLod_ )
7315 {
7316 minLod = minLod_;
7317 return *this;
7318 }
7319
7320 SamplerCreateInfo& setMaxLod( float maxLod_ )
7321 {
7322 maxLod = maxLod_;
7323 return *this;
7324 }
7325
7326 SamplerCreateInfo& setBorderColor( BorderColor borderColor_ )
7327 {
7328 borderColor = borderColor_;
7329 return *this;
7330 }
7331
7332 SamplerCreateInfo& setUnnormalizedCoordinates( Bool32 unnormalizedCoordinates_ )
7333 {
7334 unnormalizedCoordinates = unnormalizedCoordinates_;
7335 return *this;
7336 }
7337
7338 operator const VkSamplerCreateInfo&() const
7339 {
7340 return *reinterpret_cast<const VkSamplerCreateInfo*>(this);
7341 }
7342
7343 bool operator==( SamplerCreateInfo const& rhs ) const
7344 {
7345 return ( sType == rhs.sType )
7346 && ( pNext == rhs.pNext )
7347 && ( flags == rhs.flags )
7348 && ( magFilter == rhs.magFilter )
7349 && ( minFilter == rhs.minFilter )
7350 && ( mipmapMode == rhs.mipmapMode )
7351 && ( addressModeU == rhs.addressModeU )
7352 && ( addressModeV == rhs.addressModeV )
7353 && ( addressModeW == rhs.addressModeW )
7354 && ( mipLodBias == rhs.mipLodBias )
7355 && ( anisotropyEnable == rhs.anisotropyEnable )
7356 && ( maxAnisotropy == rhs.maxAnisotropy )
7357 && ( compareEnable == rhs.compareEnable )
7358 && ( compareOp == rhs.compareOp )
7359 && ( minLod == rhs.minLod )
7360 && ( maxLod == rhs.maxLod )
7361 && ( borderColor == rhs.borderColor )
7362 && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates );
7363 }
7364
7365 bool operator!=( SamplerCreateInfo const& rhs ) const
7366 {
7367 return !operator==( rhs );
7368 }
7369
7370 private:
7371 StructureType sType;
7372
7373 public:
7374 const void* pNext;
7375 SamplerCreateFlags flags;
7376 Filter magFilter;
7377 Filter minFilter;
7378 SamplerMipmapMode mipmapMode;
7379 SamplerAddressMode addressModeU;
7380 SamplerAddressMode addressModeV;
7381 SamplerAddressMode addressModeW;
7382 float mipLodBias;
7383 Bool32 anisotropyEnable;
7384 float maxAnisotropy;
7385 Bool32 compareEnable;
7386 CompareOp compareOp;
7387 float minLod;
7388 float maxLod;
7389 BorderColor borderColor;
7390 Bool32 unnormalizedCoordinates;
7391 };
7392 static_assert( sizeof( SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ), "struct and wrapper have different size!" );
7393
7394 struct CommandBufferAllocateInfo
7395 {
7396 CommandBufferAllocateInfo( CommandPool commandPool_ = CommandPool(), CommandBufferLevel level_ = CommandBufferLevel::ePrimary, uint32_t commandBufferCount_ = 0 )
7397 : sType( StructureType::eCommandBufferAllocateInfo )
7398 , pNext( nullptr )
7399 , commandPool( commandPool_ )
7400 , level( level_ )
7401 , commandBufferCount( commandBufferCount_ )
7402 {
7403 }
7404
7405 CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs )
7406 {
7407 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7408 }
7409
7410 CommandBufferAllocateInfo& operator=( VkCommandBufferAllocateInfo const & rhs )
7411 {
7412 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7413 return *this;
7414 }
7415
7416 CommandBufferAllocateInfo& setSType( StructureType sType_ )
7417 {
7418 sType = sType_;
7419 return *this;
7420 }
7421
7422 CommandBufferAllocateInfo& setPNext( const void* pNext_ )
7423 {
7424 pNext = pNext_;
7425 return *this;
7426 }
7427
7428 CommandBufferAllocateInfo& setCommandPool( CommandPool commandPool_ )
7429 {
7430 commandPool = commandPool_;
7431 return *this;
7432 }
7433
7434 CommandBufferAllocateInfo& setLevel( CommandBufferLevel level_ )
7435 {
7436 level = level_;
7437 return *this;
7438 }
7439
7440 CommandBufferAllocateInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
7441 {
7442 commandBufferCount = commandBufferCount_;
7443 return *this;
7444 }
7445
7446 operator const VkCommandBufferAllocateInfo&() const
7447 {
7448 return *reinterpret_cast<const VkCommandBufferAllocateInfo*>(this);
7449 }
7450
7451 bool operator==( CommandBufferAllocateInfo const& rhs ) const
7452 {
7453 return ( sType == rhs.sType )
7454 && ( pNext == rhs.pNext )
7455 && ( commandPool == rhs.commandPool )
7456 && ( level == rhs.level )
7457 && ( commandBufferCount == rhs.commandBufferCount );
7458 }
7459
7460 bool operator!=( CommandBufferAllocateInfo const& rhs ) const
7461 {
7462 return !operator==( rhs );
7463 }
7464
7465 private:
7466 StructureType sType;
7467
7468 public:
7469 const void* pNext;
7470 CommandPool commandPool;
7471 CommandBufferLevel level;
7472 uint32_t commandBufferCount;
7473 };
7474 static_assert( sizeof( CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ), "struct and wrapper have different size!" );
7475
7476 struct RenderPassBeginInfo
7477 {
7478 RenderPassBeginInfo( RenderPass renderPass_ = RenderPass(), Framebuffer framebuffer_ = Framebuffer(), Rect2D renderArea_ = Rect2D(), uint32_t clearValueCount_ = 0, const ClearValue* pClearValues_ = nullptr )
7479 : sType( StructureType::eRenderPassBeginInfo )
7480 , pNext( nullptr )
7481 , renderPass( renderPass_ )
7482 , framebuffer( framebuffer_ )
7483 , renderArea( renderArea_ )
7484 , clearValueCount( clearValueCount_ )
7485 , pClearValues( pClearValues_ )
7486 {
7487 }
7488
7489 RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs )
7490 {
7491 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7492 }
7493
7494 RenderPassBeginInfo& operator=( VkRenderPassBeginInfo const & rhs )
7495 {
7496 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7497 return *this;
7498 }
7499
7500 RenderPassBeginInfo& setSType( StructureType sType_ )
7501 {
7502 sType = sType_;
7503 return *this;
7504 }
7505
7506 RenderPassBeginInfo& setPNext( const void* pNext_ )
7507 {
7508 pNext = pNext_;
7509 return *this;
7510 }
7511
7512 RenderPassBeginInfo& setRenderPass( RenderPass renderPass_ )
7513 {
7514 renderPass = renderPass_;
7515 return *this;
7516 }
7517
7518 RenderPassBeginInfo& setFramebuffer( Framebuffer framebuffer_ )
7519 {
7520 framebuffer = framebuffer_;
7521 return *this;
7522 }
7523
7524 RenderPassBeginInfo& setRenderArea( Rect2D renderArea_ )
7525 {
7526 renderArea = renderArea_;
7527 return *this;
7528 }
7529
7530 RenderPassBeginInfo& setClearValueCount( uint32_t clearValueCount_ )
7531 {
7532 clearValueCount = clearValueCount_;
7533 return *this;
7534 }
7535
7536 RenderPassBeginInfo& setPClearValues( const ClearValue* pClearValues_ )
7537 {
7538 pClearValues = pClearValues_;
7539 return *this;
7540 }
7541
7542 operator const VkRenderPassBeginInfo&() const
7543 {
7544 return *reinterpret_cast<const VkRenderPassBeginInfo*>(this);
7545 }
7546
7547 bool operator==( RenderPassBeginInfo const& rhs ) const
7548 {
7549 return ( sType == rhs.sType )
7550 && ( pNext == rhs.pNext )
7551 && ( renderPass == rhs.renderPass )
7552 && ( framebuffer == rhs.framebuffer )
7553 && ( renderArea == rhs.renderArea )
7554 && ( clearValueCount == rhs.clearValueCount )
7555 && ( pClearValues == rhs.pClearValues );
7556 }
7557
7558 bool operator!=( RenderPassBeginInfo const& rhs ) const
7559 {
7560 return !operator==( rhs );
7561 }
7562
7563 private:
7564 StructureType sType;
7565
7566 public:
7567 const void* pNext;
7568 RenderPass renderPass;
7569 Framebuffer framebuffer;
7570 Rect2D renderArea;
7571 uint32_t clearValueCount;
7572 const ClearValue* pClearValues;
7573 };
7574 static_assert( sizeof( RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ), "struct and wrapper have different size!" );
7575
7576 struct EventCreateInfo
7577 {
7578 EventCreateInfo( EventCreateFlags flags_ = EventCreateFlags() )
7579 : sType( StructureType::eEventCreateInfo )
7580 , pNext( nullptr )
7581 , flags( flags_ )
7582 {
7583 }
7584
7585 EventCreateInfo( VkEventCreateInfo const & rhs )
7586 {
7587 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7588 }
7589
7590 EventCreateInfo& operator=( VkEventCreateInfo const & rhs )
7591 {
7592 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7593 return *this;
7594 }
7595
7596 EventCreateInfo& setSType( StructureType sType_ )
7597 {
7598 sType = sType_;
7599 return *this;
7600 }
7601
7602 EventCreateInfo& setPNext( const void* pNext_ )
7603 {
7604 pNext = pNext_;
7605 return *this;
7606 }
7607
7608 EventCreateInfo& setFlags( EventCreateFlags flags_ )
7609 {
7610 flags = flags_;
7611 return *this;
7612 }
7613
7614 operator const VkEventCreateInfo&() const
7615 {
7616 return *reinterpret_cast<const VkEventCreateInfo*>(this);
7617 }
7618
7619 bool operator==( EventCreateInfo const& rhs ) const
7620 {
7621 return ( sType == rhs.sType )
7622 && ( pNext == rhs.pNext )
7623 && ( flags == rhs.flags );
7624 }
7625
7626 bool operator!=( EventCreateInfo const& rhs ) const
7627 {
7628 return !operator==( rhs );
7629 }
7630
7631 private:
7632 StructureType sType;
7633
7634 public:
7635 const void* pNext;
7636 EventCreateFlags flags;
7637 };
7638 static_assert( sizeof( EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" );
7639
7640 struct SemaphoreCreateInfo
7641 {
7642 SemaphoreCreateInfo( SemaphoreCreateFlags flags_ = SemaphoreCreateFlags() )
7643 : sType( StructureType::eSemaphoreCreateInfo )
7644 , pNext( nullptr )
7645 , flags( flags_ )
7646 {
7647 }
7648
7649 SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs )
7650 {
7651 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7652 }
7653
7654 SemaphoreCreateInfo& operator=( VkSemaphoreCreateInfo const & rhs )
7655 {
7656 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7657 return *this;
7658 }
7659
7660 SemaphoreCreateInfo& setSType( StructureType sType_ )
7661 {
7662 sType = sType_;
7663 return *this;
7664 }
7665
7666 SemaphoreCreateInfo& setPNext( const void* pNext_ )
7667 {
7668 pNext = pNext_;
7669 return *this;
7670 }
7671
7672 SemaphoreCreateInfo& setFlags( SemaphoreCreateFlags flags_ )
7673 {
7674 flags = flags_;
7675 return *this;
7676 }
7677
7678 operator const VkSemaphoreCreateInfo&() const
7679 {
7680 return *reinterpret_cast<const VkSemaphoreCreateInfo*>(this);
7681 }
7682
7683 bool operator==( SemaphoreCreateInfo const& rhs ) const
7684 {
7685 return ( sType == rhs.sType )
7686 && ( pNext == rhs.pNext )
7687 && ( flags == rhs.flags );
7688 }
7689
7690 bool operator!=( SemaphoreCreateInfo const& rhs ) const
7691 {
7692 return !operator==( rhs );
7693 }
7694
7695 private:
7696 StructureType sType;
7697
7698 public:
7699 const void* pNext;
7700 SemaphoreCreateFlags flags;
7701 };
7702 static_assert( sizeof( SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ), "struct and wrapper have different size!" );
7703
7704 struct FramebufferCreateInfo
7705 {
7706 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 )
7707 : sType( StructureType::eFramebufferCreateInfo )
7708 , pNext( nullptr )
7709 , flags( flags_ )
7710 , renderPass( renderPass_ )
7711 , attachmentCount( attachmentCount_ )
7712 , pAttachments( pAttachments_ )
7713 , width( width_ )
7714 , height( height_ )
7715 , layers( layers_ )
7716 {
7717 }
7718
7719 FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs )
7720 {
7721 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7722 }
7723
7724 FramebufferCreateInfo& operator=( VkFramebufferCreateInfo const & rhs )
7725 {
7726 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7727 return *this;
7728 }
7729
7730 FramebufferCreateInfo& setSType( StructureType sType_ )
7731 {
7732 sType = sType_;
7733 return *this;
7734 }
7735
7736 FramebufferCreateInfo& setPNext( const void* pNext_ )
7737 {
7738 pNext = pNext_;
7739 return *this;
7740 }
7741
7742 FramebufferCreateInfo& setFlags( FramebufferCreateFlags flags_ )
7743 {
7744 flags = flags_;
7745 return *this;
7746 }
7747
7748 FramebufferCreateInfo& setRenderPass( RenderPass renderPass_ )
7749 {
7750 renderPass = renderPass_;
7751 return *this;
7752 }
7753
7754 FramebufferCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
7755 {
7756 attachmentCount = attachmentCount_;
7757 return *this;
7758 }
7759
7760 FramebufferCreateInfo& setPAttachments( const ImageView* pAttachments_ )
7761 {
7762 pAttachments = pAttachments_;
7763 return *this;
7764 }
7765
7766 FramebufferCreateInfo& setWidth( uint32_t width_ )
7767 {
7768 width = width_;
7769 return *this;
7770 }
7771
7772 FramebufferCreateInfo& setHeight( uint32_t height_ )
7773 {
7774 height = height_;
7775 return *this;
7776 }
7777
7778 FramebufferCreateInfo& setLayers( uint32_t layers_ )
7779 {
7780 layers = layers_;
7781 return *this;
7782 }
7783
7784 operator const VkFramebufferCreateInfo&() const
7785 {
7786 return *reinterpret_cast<const VkFramebufferCreateInfo*>(this);
7787 }
7788
7789 bool operator==( FramebufferCreateInfo const& rhs ) const
7790 {
7791 return ( sType == rhs.sType )
7792 && ( pNext == rhs.pNext )
7793 && ( flags == rhs.flags )
7794 && ( renderPass == rhs.renderPass )
7795 && ( attachmentCount == rhs.attachmentCount )
7796 && ( pAttachments == rhs.pAttachments )
7797 && ( width == rhs.width )
7798 && ( height == rhs.height )
7799 && ( layers == rhs.layers );
7800 }
7801
7802 bool operator!=( FramebufferCreateInfo const& rhs ) const
7803 {
7804 return !operator==( rhs );
7805 }
7806
7807 private:
7808 StructureType sType;
7809
7810 public:
7811 const void* pNext;
7812 FramebufferCreateFlags flags;
7813 RenderPass renderPass;
7814 uint32_t attachmentCount;
7815 const ImageView* pAttachments;
7816 uint32_t width;
7817 uint32_t height;
7818 uint32_t layers;
7819 };
7820 static_assert( sizeof( FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ), "struct and wrapper have different size!" );
7821
7822 struct DisplayModeCreateInfoKHR
7823 {
7824 DisplayModeCreateInfoKHR( DisplayModeCreateFlagsKHR flags_ = DisplayModeCreateFlagsKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
7825 : sType( StructureType::eDisplayModeCreateInfoKHR )
7826 , pNext( nullptr )
7827 , flags( flags_ )
7828 , parameters( parameters_ )
7829 {
7830 }
7831
7832 DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs )
7833 {
7834 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7835 }
7836
7837 DisplayModeCreateInfoKHR& operator=( VkDisplayModeCreateInfoKHR const & rhs )
7838 {
7839 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7840 return *this;
7841 }
7842
7843 DisplayModeCreateInfoKHR& setSType( StructureType sType_ )
7844 {
7845 sType = sType_;
7846 return *this;
7847 }
7848
7849 DisplayModeCreateInfoKHR& setPNext( const void* pNext_ )
7850 {
7851 pNext = pNext_;
7852 return *this;
7853 }
7854
7855 DisplayModeCreateInfoKHR& setFlags( DisplayModeCreateFlagsKHR flags_ )
7856 {
7857 flags = flags_;
7858 return *this;
7859 }
7860
7861 DisplayModeCreateInfoKHR& setParameters( DisplayModeParametersKHR parameters_ )
7862 {
7863 parameters = parameters_;
7864 return *this;
7865 }
7866
7867 operator const VkDisplayModeCreateInfoKHR&() const
7868 {
7869 return *reinterpret_cast<const VkDisplayModeCreateInfoKHR*>(this);
7870 }
7871
7872 bool operator==( DisplayModeCreateInfoKHR const& rhs ) const
7873 {
7874 return ( sType == rhs.sType )
7875 && ( pNext == rhs.pNext )
7876 && ( flags == rhs.flags )
7877 && ( parameters == rhs.parameters );
7878 }
7879
7880 bool operator!=( DisplayModeCreateInfoKHR const& rhs ) const
7881 {
7882 return !operator==( rhs );
7883 }
7884
7885 private:
7886 StructureType sType;
7887
7888 public:
7889 const void* pNext;
7890 DisplayModeCreateFlagsKHR flags;
7891 DisplayModeParametersKHR parameters;
7892 };
7893 static_assert( sizeof( DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ), "struct and wrapper have different size!" );
7894
7895 struct DisplayPresentInfoKHR
7896 {
7897 DisplayPresentInfoKHR( Rect2D srcRect_ = Rect2D(), Rect2D dstRect_ = Rect2D(), Bool32 persistent_ = 0 )
7898 : sType( StructureType::eDisplayPresentInfoKHR )
7899 , pNext( nullptr )
7900 , srcRect( srcRect_ )
7901 , dstRect( dstRect_ )
7902 , persistent( persistent_ )
7903 {
7904 }
7905
7906 DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs )
7907 {
7908 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7909 }
7910
7911 DisplayPresentInfoKHR& operator=( VkDisplayPresentInfoKHR const & rhs )
7912 {
7913 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7914 return *this;
7915 }
7916
7917 DisplayPresentInfoKHR& setSType( StructureType sType_ )
7918 {
7919 sType = sType_;
7920 return *this;
7921 }
7922
7923 DisplayPresentInfoKHR& setPNext( const void* pNext_ )
7924 {
7925 pNext = pNext_;
7926 return *this;
7927 }
7928
7929 DisplayPresentInfoKHR& setSrcRect( Rect2D srcRect_ )
7930 {
7931 srcRect = srcRect_;
7932 return *this;
7933 }
7934
7935 DisplayPresentInfoKHR& setDstRect( Rect2D dstRect_ )
7936 {
7937 dstRect = dstRect_;
7938 return *this;
7939 }
7940
7941 DisplayPresentInfoKHR& setPersistent( Bool32 persistent_ )
7942 {
7943 persistent = persistent_;
7944 return *this;
7945 }
7946
7947 operator const VkDisplayPresentInfoKHR&() const
7948 {
7949 return *reinterpret_cast<const VkDisplayPresentInfoKHR*>(this);
7950 }
7951
7952 bool operator==( DisplayPresentInfoKHR const& rhs ) const
7953 {
7954 return ( sType == rhs.sType )
7955 && ( pNext == rhs.pNext )
7956 && ( srcRect == rhs.srcRect )
7957 && ( dstRect == rhs.dstRect )
7958 && ( persistent == rhs.persistent );
7959 }
7960
7961 bool operator!=( DisplayPresentInfoKHR const& rhs ) const
7962 {
7963 return !operator==( rhs );
7964 }
7965
7966 private:
7967 StructureType sType;
7968
7969 public:
7970 const void* pNext;
7971 Rect2D srcRect;
7972 Rect2D dstRect;
7973 Bool32 persistent;
7974 };
7975 static_assert( sizeof( DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ), "struct and wrapper have different size!" );
7976
7977#ifdef VK_USE_PLATFORM_ANDROID_KHR
7978 struct AndroidSurfaceCreateInfoKHR
7979 {
7980 AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateFlagsKHR flags_ = AndroidSurfaceCreateFlagsKHR(), ANativeWindow* window_ = nullptr )
7981 : sType( StructureType::eAndroidSurfaceCreateInfoKHR )
7982 , pNext( nullptr )
7983 , flags( flags_ )
7984 , window( window_ )
7985 {
7986 }
7987
7988 AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs )
7989 {
7990 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
7991 }
7992
7993 AndroidSurfaceCreateInfoKHR& operator=( VkAndroidSurfaceCreateInfoKHR const & rhs )
7994 {
7995 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
7996 return *this;
7997 }
7998
7999 AndroidSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8000 {
8001 sType = sType_;
8002 return *this;
8003 }
8004
8005 AndroidSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8006 {
8007 pNext = pNext_;
8008 return *this;
8009 }
8010
8011 AndroidSurfaceCreateInfoKHR& setFlags( AndroidSurfaceCreateFlagsKHR flags_ )
8012 {
8013 flags = flags_;
8014 return *this;
8015 }
8016
8017 AndroidSurfaceCreateInfoKHR& setWindow( ANativeWindow* window_ )
8018 {
8019 window = window_;
8020 return *this;
8021 }
8022
8023 operator const VkAndroidSurfaceCreateInfoKHR&() const
8024 {
8025 return *reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>(this);
8026 }
8027
8028 bool operator==( AndroidSurfaceCreateInfoKHR const& rhs ) const
8029 {
8030 return ( sType == rhs.sType )
8031 && ( pNext == rhs.pNext )
8032 && ( flags == rhs.flags )
8033 && ( window == rhs.window );
8034 }
8035
8036 bool operator!=( AndroidSurfaceCreateInfoKHR const& rhs ) const
8037 {
8038 return !operator==( rhs );
8039 }
8040
8041 private:
8042 StructureType sType;
8043
8044 public:
8045 const void* pNext;
8046 AndroidSurfaceCreateFlagsKHR flags;
8047 ANativeWindow* window;
8048 };
8049 static_assert( sizeof( AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8050#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
8051
8052#ifdef VK_USE_PLATFORM_MIR_KHR
8053 struct MirSurfaceCreateInfoKHR
8054 {
8055 MirSurfaceCreateInfoKHR( MirSurfaceCreateFlagsKHR flags_ = MirSurfaceCreateFlagsKHR(), MirConnection* connection_ = nullptr, MirSurface* mirSurface_ = nullptr )
8056 : sType( StructureType::eMirSurfaceCreateInfoKHR )
8057 , pNext( nullptr )
8058 , flags( flags_ )
8059 , connection( connection_ )
8060 , mirSurface( mirSurface_ )
8061 {
8062 }
8063
8064 MirSurfaceCreateInfoKHR( VkMirSurfaceCreateInfoKHR const & rhs )
8065 {
8066 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8067 }
8068
8069 MirSurfaceCreateInfoKHR& operator=( VkMirSurfaceCreateInfoKHR const & rhs )
8070 {
8071 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8072 return *this;
8073 }
8074
8075 MirSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8076 {
8077 sType = sType_;
8078 return *this;
8079 }
8080
8081 MirSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8082 {
8083 pNext = pNext_;
8084 return *this;
8085 }
8086
8087 MirSurfaceCreateInfoKHR& setFlags( MirSurfaceCreateFlagsKHR flags_ )
8088 {
8089 flags = flags_;
8090 return *this;
8091 }
8092
8093 MirSurfaceCreateInfoKHR& setConnection( MirConnection* connection_ )
8094 {
8095 connection = connection_;
8096 return *this;
8097 }
8098
8099 MirSurfaceCreateInfoKHR& setMirSurface( MirSurface* mirSurface_ )
8100 {
8101 mirSurface = mirSurface_;
8102 return *this;
8103 }
8104
8105 operator const VkMirSurfaceCreateInfoKHR&() const
8106 {
8107 return *reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>(this);
8108 }
8109
8110 bool operator==( MirSurfaceCreateInfoKHR const& rhs ) const
8111 {
8112 return ( sType == rhs.sType )
8113 && ( pNext == rhs.pNext )
8114 && ( flags == rhs.flags )
8115 && ( connection == rhs.connection )
8116 && ( mirSurface == rhs.mirSurface );
8117 }
8118
8119 bool operator!=( MirSurfaceCreateInfoKHR const& rhs ) const
8120 {
8121 return !operator==( rhs );
8122 }
8123
8124 private:
8125 StructureType sType;
8126
8127 public:
8128 const void* pNext;
8129 MirSurfaceCreateFlagsKHR flags;
8130 MirConnection* connection;
8131 MirSurface* mirSurface;
8132 };
8133 static_assert( sizeof( MirSurfaceCreateInfoKHR ) == sizeof( VkMirSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8134#endif /*VK_USE_PLATFORM_MIR_KHR*/
8135
8136#ifdef VK_USE_PLATFORM_WAYLAND_KHR
8137 struct WaylandSurfaceCreateInfoKHR
8138 {
8139 WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateFlagsKHR flags_ = WaylandSurfaceCreateFlagsKHR(), struct wl_display* display_ = nullptr, struct wl_surface* surface_ = nullptr )
8140 : sType( StructureType::eWaylandSurfaceCreateInfoKHR )
8141 , pNext( nullptr )
8142 , flags( flags_ )
8143 , display( display_ )
8144 , surface( surface_ )
8145 {
8146 }
8147
8148 WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs )
8149 {
8150 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8151 }
8152
8153 WaylandSurfaceCreateInfoKHR& operator=( VkWaylandSurfaceCreateInfoKHR const & rhs )
8154 {
8155 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8156 return *this;
8157 }
8158
8159 WaylandSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8160 {
8161 sType = sType_;
8162 return *this;
8163 }
8164
8165 WaylandSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8166 {
8167 pNext = pNext_;
8168 return *this;
8169 }
8170
8171 WaylandSurfaceCreateInfoKHR& setFlags( WaylandSurfaceCreateFlagsKHR flags_ )
8172 {
8173 flags = flags_;
8174 return *this;
8175 }
8176
8177 WaylandSurfaceCreateInfoKHR& setDisplay( struct wl_display* display_ )
8178 {
8179 display = display_;
8180 return *this;
8181 }
8182
8183 WaylandSurfaceCreateInfoKHR& setSurface( struct wl_surface* surface_ )
8184 {
8185 surface = surface_;
8186 return *this;
8187 }
8188
8189 operator const VkWaylandSurfaceCreateInfoKHR&() const
8190 {
8191 return *reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>(this);
8192 }
8193
8194 bool operator==( WaylandSurfaceCreateInfoKHR const& rhs ) const
8195 {
8196 return ( sType == rhs.sType )
8197 && ( pNext == rhs.pNext )
8198 && ( flags == rhs.flags )
8199 && ( display == rhs.display )
8200 && ( surface == rhs.surface );
8201 }
8202
8203 bool operator!=( WaylandSurfaceCreateInfoKHR const& rhs ) const
8204 {
8205 return !operator==( rhs );
8206 }
8207
8208 private:
8209 StructureType sType;
8210
8211 public:
8212 const void* pNext;
8213 WaylandSurfaceCreateFlagsKHR flags;
8214 struct wl_display* display;
8215 struct wl_surface* surface;
8216 };
8217 static_assert( sizeof( WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8218#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
8219
8220#ifdef VK_USE_PLATFORM_WIN32_KHR
8221 struct Win32SurfaceCreateInfoKHR
8222 {
8223 Win32SurfaceCreateInfoKHR( Win32SurfaceCreateFlagsKHR flags_ = Win32SurfaceCreateFlagsKHR(), HINSTANCE hinstance_ = 0, HWND hwnd_ = 0 )
8224 : sType( StructureType::eWin32SurfaceCreateInfoKHR )
8225 , pNext( nullptr )
8226 , flags( flags_ )
8227 , hinstance( hinstance_ )
8228 , hwnd( hwnd_ )
8229 {
8230 }
8231
8232 Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs )
8233 {
8234 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8235 }
8236
8237 Win32SurfaceCreateInfoKHR& operator=( VkWin32SurfaceCreateInfoKHR const & rhs )
8238 {
8239 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8240 return *this;
8241 }
8242
8243 Win32SurfaceCreateInfoKHR& setSType( StructureType sType_ )
8244 {
8245 sType = sType_;
8246 return *this;
8247 }
8248
8249 Win32SurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8250 {
8251 pNext = pNext_;
8252 return *this;
8253 }
8254
8255 Win32SurfaceCreateInfoKHR& setFlags( Win32SurfaceCreateFlagsKHR flags_ )
8256 {
8257 flags = flags_;
8258 return *this;
8259 }
8260
8261 Win32SurfaceCreateInfoKHR& setHinstance( HINSTANCE hinstance_ )
8262 {
8263 hinstance = hinstance_;
8264 return *this;
8265 }
8266
8267 Win32SurfaceCreateInfoKHR& setHwnd( HWND hwnd_ )
8268 {
8269 hwnd = hwnd_;
8270 return *this;
8271 }
8272
8273 operator const VkWin32SurfaceCreateInfoKHR&() const
8274 {
8275 return *reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>(this);
8276 }
8277
8278 bool operator==( Win32SurfaceCreateInfoKHR const& rhs ) const
8279 {
8280 return ( sType == rhs.sType )
8281 && ( pNext == rhs.pNext )
8282 && ( flags == rhs.flags )
8283 && ( hinstance == rhs.hinstance )
8284 && ( hwnd == rhs.hwnd );
8285 }
8286
8287 bool operator!=( Win32SurfaceCreateInfoKHR const& rhs ) const
8288 {
8289 return !operator==( rhs );
8290 }
8291
8292 private:
8293 StructureType sType;
8294
8295 public:
8296 const void* pNext;
8297 Win32SurfaceCreateFlagsKHR flags;
8298 HINSTANCE hinstance;
8299 HWND hwnd;
8300 };
8301 static_assert( sizeof( Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8302#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8303
8304#ifdef VK_USE_PLATFORM_XLIB_KHR
8305 struct XlibSurfaceCreateInfoKHR
8306 {
8307 XlibSurfaceCreateInfoKHR( XlibSurfaceCreateFlagsKHR flags_ = XlibSurfaceCreateFlagsKHR(), Display* dpy_ = nullptr, Window window_ = 0 )
8308 : sType( StructureType::eXlibSurfaceCreateInfoKHR )
8309 , pNext( nullptr )
8310 , flags( flags_ )
8311 , dpy( dpy_ )
8312 , window( window_ )
8313 {
8314 }
8315
8316 XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs )
8317 {
8318 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8319 }
8320
8321 XlibSurfaceCreateInfoKHR& operator=( VkXlibSurfaceCreateInfoKHR const & rhs )
8322 {
8323 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8324 return *this;
8325 }
8326
8327 XlibSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8328 {
8329 sType = sType_;
8330 return *this;
8331 }
8332
8333 XlibSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8334 {
8335 pNext = pNext_;
8336 return *this;
8337 }
8338
8339 XlibSurfaceCreateInfoKHR& setFlags( XlibSurfaceCreateFlagsKHR flags_ )
8340 {
8341 flags = flags_;
8342 return *this;
8343 }
8344
8345 XlibSurfaceCreateInfoKHR& setDpy( Display* dpy_ )
8346 {
8347 dpy = dpy_;
8348 return *this;
8349 }
8350
8351 XlibSurfaceCreateInfoKHR& setWindow( Window window_ )
8352 {
8353 window = window_;
8354 return *this;
8355 }
8356
8357 operator const VkXlibSurfaceCreateInfoKHR&() const
8358 {
8359 return *reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>(this);
8360 }
8361
8362 bool operator==( XlibSurfaceCreateInfoKHR const& rhs ) const
8363 {
8364 return ( sType == rhs.sType )
8365 && ( pNext == rhs.pNext )
8366 && ( flags == rhs.flags )
8367 && ( dpy == rhs.dpy )
8368 && ( window == rhs.window );
8369 }
8370
8371 bool operator!=( XlibSurfaceCreateInfoKHR const& rhs ) const
8372 {
8373 return !operator==( rhs );
8374 }
8375
8376 private:
8377 StructureType sType;
8378
8379 public:
8380 const void* pNext;
8381 XlibSurfaceCreateFlagsKHR flags;
8382 Display* dpy;
8383 Window window;
8384 };
8385 static_assert( sizeof( XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8386#endif /*VK_USE_PLATFORM_XLIB_KHR*/
8387
8388#ifdef VK_USE_PLATFORM_XCB_KHR
8389 struct XcbSurfaceCreateInfoKHR
8390 {
8391 XcbSurfaceCreateInfoKHR( XcbSurfaceCreateFlagsKHR flags_ = XcbSurfaceCreateFlagsKHR(), xcb_connection_t* connection_ = nullptr, xcb_window_t window_ = 0 )
8392 : sType( StructureType::eXcbSurfaceCreateInfoKHR )
8393 , pNext( nullptr )
8394 , flags( flags_ )
8395 , connection( connection_ )
8396 , window( window_ )
8397 {
8398 }
8399
8400 XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs )
8401 {
8402 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8403 }
8404
8405 XcbSurfaceCreateInfoKHR& operator=( VkXcbSurfaceCreateInfoKHR const & rhs )
8406 {
8407 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8408 return *this;
8409 }
8410
8411 XcbSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8412 {
8413 sType = sType_;
8414 return *this;
8415 }
8416
8417 XcbSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8418 {
8419 pNext = pNext_;
8420 return *this;
8421 }
8422
8423 XcbSurfaceCreateInfoKHR& setFlags( XcbSurfaceCreateFlagsKHR flags_ )
8424 {
8425 flags = flags_;
8426 return *this;
8427 }
8428
8429 XcbSurfaceCreateInfoKHR& setConnection( xcb_connection_t* connection_ )
8430 {
8431 connection = connection_;
8432 return *this;
8433 }
8434
8435 XcbSurfaceCreateInfoKHR& setWindow( xcb_window_t window_ )
8436 {
8437 window = window_;
8438 return *this;
8439 }
8440
8441 operator const VkXcbSurfaceCreateInfoKHR&() const
8442 {
8443 return *reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>(this);
8444 }
8445
8446 bool operator==( XcbSurfaceCreateInfoKHR const& rhs ) const
8447 {
8448 return ( sType == rhs.sType )
8449 && ( pNext == rhs.pNext )
8450 && ( flags == rhs.flags )
8451 && ( connection == rhs.connection )
8452 && ( window == rhs.window );
8453 }
8454
8455 bool operator!=( XcbSurfaceCreateInfoKHR const& rhs ) const
8456 {
8457 return !operator==( rhs );
8458 }
8459
8460 private:
8461 StructureType sType;
8462
8463 public:
8464 const void* pNext;
8465 XcbSurfaceCreateFlagsKHR flags;
8466 xcb_connection_t* connection;
8467 xcb_window_t window;
8468 };
8469 static_assert( sizeof( XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8470#endif /*VK_USE_PLATFORM_XCB_KHR*/
8471
8472 struct DebugMarkerMarkerInfoEXT
8473 {
8474 DebugMarkerMarkerInfoEXT( const char* pMarkerName_ = nullptr, std::array<float,4> const& color_ = { { 0, 0, 0, 0 } } )
8475 : sType( StructureType::eDebugMarkerMarkerInfoEXT )
8476 , pNext( nullptr )
8477 , pMarkerName( pMarkerName_ )
8478 {
8479 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8480 }
8481
8482 DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs )
8483 {
8484 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8485 }
8486
8487 DebugMarkerMarkerInfoEXT& operator=( VkDebugMarkerMarkerInfoEXT const & rhs )
8488 {
8489 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8490 return *this;
8491 }
8492
8493 DebugMarkerMarkerInfoEXT& setSType( StructureType sType_ )
8494 {
8495 sType = sType_;
8496 return *this;
8497 }
8498
8499 DebugMarkerMarkerInfoEXT& setPNext( const void* pNext_ )
8500 {
8501 pNext = pNext_;
8502 return *this;
8503 }
8504
8505 DebugMarkerMarkerInfoEXT& setPMarkerName( const char* pMarkerName_ )
8506 {
8507 pMarkerName = pMarkerName_;
8508 return *this;
8509 }
8510
8511 DebugMarkerMarkerInfoEXT& setColor( std::array<float,4> color_ )
8512 {
8513 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8514 return *this;
8515 }
8516
8517 operator const VkDebugMarkerMarkerInfoEXT&() const
8518 {
8519 return *reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>(this);
8520 }
8521
8522 bool operator==( DebugMarkerMarkerInfoEXT const& rhs ) const
8523 {
8524 return ( sType == rhs.sType )
8525 && ( pNext == rhs.pNext )
8526 && ( pMarkerName == rhs.pMarkerName )
8527 && ( memcmp( color, rhs.color, 4 * sizeof( float ) ) == 0 );
8528 }
8529
8530 bool operator!=( DebugMarkerMarkerInfoEXT const& rhs ) const
8531 {
8532 return !operator==( rhs );
8533 }
8534
8535 private:
8536 StructureType sType;
8537
8538 public:
8539 const void* pNext;
8540 const char* pMarkerName;
8541 float color[4];
8542 };
8543 static_assert( sizeof( DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ), "struct and wrapper have different size!" );
8544
8545 struct DedicatedAllocationImageCreateInfoNV
8546 {
8547 DedicatedAllocationImageCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8548 : sType( StructureType::eDedicatedAllocationImageCreateInfoNV )
8549 , pNext( nullptr )
8550 , dedicatedAllocation( dedicatedAllocation_ )
8551 {
8552 }
8553
8554 DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8555 {
8556 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8557 }
8558
8559 DedicatedAllocationImageCreateInfoNV& operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8560 {
8561 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8562 return *this;
8563 }
8564
8565 DedicatedAllocationImageCreateInfoNV& setSType( StructureType sType_ )
8566 {
8567 sType = sType_;
8568 return *this;
8569 }
8570
8571 DedicatedAllocationImageCreateInfoNV& setPNext( const void* pNext_ )
8572 {
8573 pNext = pNext_;
8574 return *this;
8575 }
8576
8577 DedicatedAllocationImageCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8578 {
8579 dedicatedAllocation = dedicatedAllocation_;
8580 return *this;
8581 }
8582
8583 operator const VkDedicatedAllocationImageCreateInfoNV&() const
8584 {
8585 return *reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(this);
8586 }
8587
8588 bool operator==( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8589 {
8590 return ( sType == rhs.sType )
8591 && ( pNext == rhs.pNext )
8592 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8593 }
8594
8595 bool operator!=( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8596 {
8597 return !operator==( rhs );
8598 }
8599
8600 private:
8601 StructureType sType;
8602
8603 public:
8604 const void* pNext;
8605 Bool32 dedicatedAllocation;
8606 };
8607 static_assert( sizeof( DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ), "struct and wrapper have different size!" );
8608
8609 struct DedicatedAllocationBufferCreateInfoNV
8610 {
8611 DedicatedAllocationBufferCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8612 : sType( StructureType::eDedicatedAllocationBufferCreateInfoNV )
8613 , pNext( nullptr )
8614 , dedicatedAllocation( dedicatedAllocation_ )
8615 {
8616 }
8617
8618 DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8619 {
8620 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8621 }
8622
8623 DedicatedAllocationBufferCreateInfoNV& operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8624 {
8625 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8626 return *this;
8627 }
8628
8629 DedicatedAllocationBufferCreateInfoNV& setSType( StructureType sType_ )
8630 {
8631 sType = sType_;
8632 return *this;
8633 }
8634
8635 DedicatedAllocationBufferCreateInfoNV& setPNext( const void* pNext_ )
8636 {
8637 pNext = pNext_;
8638 return *this;
8639 }
8640
8641 DedicatedAllocationBufferCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8642 {
8643 dedicatedAllocation = dedicatedAllocation_;
8644 return *this;
8645 }
8646
8647 operator const VkDedicatedAllocationBufferCreateInfoNV&() const
8648 {
8649 return *reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(this);
8650 }
8651
8652 bool operator==( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8653 {
8654 return ( sType == rhs.sType )
8655 && ( pNext == rhs.pNext )
8656 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8657 }
8658
8659 bool operator!=( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8660 {
8661 return !operator==( rhs );
8662 }
8663
8664 private:
8665 StructureType sType;
8666
8667 public:
8668 const void* pNext;
8669 Bool32 dedicatedAllocation;
8670 };
8671 static_assert( sizeof( DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ), "struct and wrapper have different size!" );
8672
8673 struct DedicatedAllocationMemoryAllocateInfoNV
8674 {
8675 DedicatedAllocationMemoryAllocateInfoNV( Image image_ = Image(), Buffer buffer_ = Buffer() )
8676 : sType( StructureType::eDedicatedAllocationMemoryAllocateInfoNV )
8677 , pNext( nullptr )
8678 , image( image_ )
8679 , buffer( buffer_ )
8680 {
8681 }
8682
8683 DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8684 {
8685 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8686 }
8687
8688 DedicatedAllocationMemoryAllocateInfoNV& operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8689 {
8690 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8691 return *this;
8692 }
8693
8694 DedicatedAllocationMemoryAllocateInfoNV& setSType( StructureType sType_ )
8695 {
8696 sType = sType_;
8697 return *this;
8698 }
8699
8700 DedicatedAllocationMemoryAllocateInfoNV& setPNext( const void* pNext_ )
8701 {
8702 pNext = pNext_;
8703 return *this;
8704 }
8705
8706 DedicatedAllocationMemoryAllocateInfoNV& setImage( Image image_ )
8707 {
8708 image = image_;
8709 return *this;
8710 }
8711
8712 DedicatedAllocationMemoryAllocateInfoNV& setBuffer( Buffer buffer_ )
8713 {
8714 buffer = buffer_;
8715 return *this;
8716 }
8717
8718 operator const VkDedicatedAllocationMemoryAllocateInfoNV&() const
8719 {
8720 return *reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(this);
8721 }
8722
8723 bool operator==( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8724 {
8725 return ( sType == rhs.sType )
8726 && ( pNext == rhs.pNext )
8727 && ( image == rhs.image )
8728 && ( buffer == rhs.buffer );
8729 }
8730
8731 bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8732 {
8733 return !operator==( rhs );
8734 }
8735
8736 private:
8737 StructureType sType;
8738
8739 public:
8740 const void* pNext;
8741 Image image;
8742 Buffer buffer;
8743 };
8744 static_assert( sizeof( DedicatedAllocationMemoryAllocateInfoNV ) == sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
8745
Lenny Komow6501c122016-08-31 15:03:49 -06008746#ifdef VK_USE_PLATFORM_WIN32_KHR
8747 struct ExportMemoryWin32HandleInfoNV
8748 {
8749 ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0 )
8750 : sType( StructureType::eExportMemoryWin32HandleInfoNV )
8751 , pNext( nullptr )
8752 , pAttributes( pAttributes_ )
8753 , dwAccess( dwAccess_ )
8754 {
8755 }
8756
8757 ExportMemoryWin32HandleInfoNV( VkExportMemoryWin32HandleInfoNV const & rhs )
8758 {
8759 memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
8760 }
8761
8762 ExportMemoryWin32HandleInfoNV& operator=( VkExportMemoryWin32HandleInfoNV const & rhs )
8763 {
8764 memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
8765 return *this;
8766 }
8767
8768 ExportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
8769 {
8770 sType = sType_;
8771 return *this;
8772 }
8773
8774 ExportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
8775 {
8776 pNext = pNext_;
8777 return *this;
8778 }
8779
8780 ExportMemoryWin32HandleInfoNV& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
8781 {
8782 pAttributes = pAttributes_;
8783 return *this;
8784 }
8785
8786 ExportMemoryWin32HandleInfoNV& setDwAccess( DWORD dwAccess_ )
8787 {
8788 dwAccess = dwAccess_;
8789 return *this;
8790 }
8791
8792 operator const VkExportMemoryWin32HandleInfoNV&() const
8793 {
8794 return *reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(this);
8795 }
8796
8797 bool operator==( ExportMemoryWin32HandleInfoNV const& rhs ) const
8798 {
8799 return ( sType == rhs.sType )
8800 && ( pNext == rhs.pNext )
8801 && ( pAttributes == rhs.pAttributes )
8802 && ( dwAccess == rhs.dwAccess );
8803 }
8804
8805 bool operator!=( ExportMemoryWin32HandleInfoNV const& rhs ) const
8806 {
8807 return !operator==( rhs );
8808 }
8809
8810 private:
8811 StructureType sType;
8812
8813 public:
8814 const void* pNext;
8815 const SECURITY_ATTRIBUTES* pAttributes;
8816 DWORD dwAccess;
8817 };
8818 static_assert( sizeof( ExportMemoryWin32HandleInfoNV ) == sizeof( VkExportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
8819#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8820
8821#ifdef VK_USE_PLATFORM_WIN32_KHR
8822 struct Win32KeyedMutexAcquireReleaseInfoNV
8823 {
8824 Win32KeyedMutexAcquireReleaseInfoNV( uint32_t acquireCount_ = 0, const DeviceMemory* pAcquireSyncs_ = nullptr, const uint64_t* pAcquireKeys_ = nullptr, const uint32_t* pAcquireTimeoutMilliseconds_ = nullptr, uint32_t releaseCount_ = 0, const DeviceMemory* pReleaseSyncs_ = nullptr, const uint64_t* pReleaseKeys_ = nullptr )
8825 : sType( StructureType::eWin32KeyedMutexAcquireReleaseInfoNV )
8826 , pNext( nullptr )
8827 , acquireCount( acquireCount_ )
8828 , pAcquireSyncs( pAcquireSyncs_ )
8829 , pAcquireKeys( pAcquireKeys_ )
8830 , pAcquireTimeoutMilliseconds( pAcquireTimeoutMilliseconds_ )
8831 , releaseCount( releaseCount_ )
8832 , pReleaseSyncs( pReleaseSyncs_ )
8833 , pReleaseKeys( pReleaseKeys_ )
8834 {
8835 }
8836
8837 Win32KeyedMutexAcquireReleaseInfoNV( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
8838 {
8839 memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
8840 }
8841
8842 Win32KeyedMutexAcquireReleaseInfoNV& operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
8843 {
8844 memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
8845 return *this;
8846 }
8847
8848 Win32KeyedMutexAcquireReleaseInfoNV& setSType( StructureType sType_ )
8849 {
8850 sType = sType_;
8851 return *this;
8852 }
8853
8854 Win32KeyedMutexAcquireReleaseInfoNV& setPNext( const void* pNext_ )
8855 {
8856 pNext = pNext_;
8857 return *this;
8858 }
8859
8860 Win32KeyedMutexAcquireReleaseInfoNV& setAcquireCount( uint32_t acquireCount_ )
8861 {
8862 acquireCount = acquireCount_;
8863 return *this;
8864 }
8865
8866 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireSyncs( const DeviceMemory* pAcquireSyncs_ )
8867 {
8868 pAcquireSyncs = pAcquireSyncs_;
8869 return *this;
8870 }
8871
8872 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireKeys( const uint64_t* pAcquireKeys_ )
8873 {
8874 pAcquireKeys = pAcquireKeys_;
8875 return *this;
8876 }
8877
8878 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireTimeoutMilliseconds( const uint32_t* pAcquireTimeoutMilliseconds_ )
8879 {
8880 pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_;
8881 return *this;
8882 }
8883
8884 Win32KeyedMutexAcquireReleaseInfoNV& setReleaseCount( uint32_t releaseCount_ )
8885 {
8886 releaseCount = releaseCount_;
8887 return *this;
8888 }
8889
8890 Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseSyncs( const DeviceMemory* pReleaseSyncs_ )
8891 {
8892 pReleaseSyncs = pReleaseSyncs_;
8893 return *this;
8894 }
8895
8896 Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseKeys( const uint64_t* pReleaseKeys_ )
8897 {
8898 pReleaseKeys = pReleaseKeys_;
8899 return *this;
8900 }
8901
8902 operator const VkWin32KeyedMutexAcquireReleaseInfoNV&() const
8903 {
8904 return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(this);
8905 }
8906
8907 bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
8908 {
8909 return ( sType == rhs.sType )
8910 && ( pNext == rhs.pNext )
8911 && ( acquireCount == rhs.acquireCount )
8912 && ( pAcquireSyncs == rhs.pAcquireSyncs )
8913 && ( pAcquireKeys == rhs.pAcquireKeys )
8914 && ( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds )
8915 && ( releaseCount == rhs.releaseCount )
8916 && ( pReleaseSyncs == rhs.pReleaseSyncs )
8917 && ( pReleaseKeys == rhs.pReleaseKeys );
8918 }
8919
8920 bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
8921 {
8922 return !operator==( rhs );
8923 }
8924
8925 private:
8926 StructureType sType;
8927
8928 public:
8929 const void* pNext;
8930 uint32_t acquireCount;
8931 const DeviceMemory* pAcquireSyncs;
8932 const uint64_t* pAcquireKeys;
8933 const uint32_t* pAcquireTimeoutMilliseconds;
8934 uint32_t releaseCount;
8935 const DeviceMemory* pReleaseSyncs;
8936 const uint64_t* pReleaseKeys;
8937 };
8938 static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ), "struct and wrapper have different size!" );
8939#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8940
Lenny Komowbed9b5c2016-08-11 11:23:15 -06008941 enum class SubpassContents
8942 {
8943 eInline = VK_SUBPASS_CONTENTS_INLINE,
8944 eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
8945 };
8946
8947 struct PresentInfoKHR
8948 {
8949 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 )
8950 : sType( StructureType::ePresentInfoKHR )
8951 , pNext( nullptr )
8952 , waitSemaphoreCount( waitSemaphoreCount_ )
8953 , pWaitSemaphores( pWaitSemaphores_ )
8954 , swapchainCount( swapchainCount_ )
8955 , pSwapchains( pSwapchains_ )
8956 , pImageIndices( pImageIndices_ )
8957 , pResults( pResults_ )
8958 {
8959 }
8960
8961 PresentInfoKHR( VkPresentInfoKHR const & rhs )
8962 {
8963 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
8964 }
8965
8966 PresentInfoKHR& operator=( VkPresentInfoKHR const & rhs )
8967 {
8968 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
8969 return *this;
8970 }
8971
8972 PresentInfoKHR& setSType( StructureType sType_ )
8973 {
8974 sType = sType_;
8975 return *this;
8976 }
8977
8978 PresentInfoKHR& setPNext( const void* pNext_ )
8979 {
8980 pNext = pNext_;
8981 return *this;
8982 }
8983
8984 PresentInfoKHR& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
8985 {
8986 waitSemaphoreCount = waitSemaphoreCount_;
8987 return *this;
8988 }
8989
8990 PresentInfoKHR& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
8991 {
8992 pWaitSemaphores = pWaitSemaphores_;
8993 return *this;
8994 }
8995
8996 PresentInfoKHR& setSwapchainCount( uint32_t swapchainCount_ )
8997 {
8998 swapchainCount = swapchainCount_;
8999 return *this;
9000 }
9001
9002 PresentInfoKHR& setPSwapchains( const SwapchainKHR* pSwapchains_ )
9003 {
9004 pSwapchains = pSwapchains_;
9005 return *this;
9006 }
9007
9008 PresentInfoKHR& setPImageIndices( const uint32_t* pImageIndices_ )
9009 {
9010 pImageIndices = pImageIndices_;
9011 return *this;
9012 }
9013
9014 PresentInfoKHR& setPResults( Result* pResults_ )
9015 {
9016 pResults = pResults_;
9017 return *this;
9018 }
9019
9020 operator const VkPresentInfoKHR&() const
9021 {
9022 return *reinterpret_cast<const VkPresentInfoKHR*>(this);
9023 }
9024
9025 bool operator==( PresentInfoKHR const& rhs ) const
9026 {
9027 return ( sType == rhs.sType )
9028 && ( pNext == rhs.pNext )
9029 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
9030 && ( pWaitSemaphores == rhs.pWaitSemaphores )
9031 && ( swapchainCount == rhs.swapchainCount )
9032 && ( pSwapchains == rhs.pSwapchains )
9033 && ( pImageIndices == rhs.pImageIndices )
9034 && ( pResults == rhs.pResults );
9035 }
9036
9037 bool operator!=( PresentInfoKHR const& rhs ) const
9038 {
9039 return !operator==( rhs );
9040 }
9041
9042 private:
9043 StructureType sType;
9044
9045 public:
9046 const void* pNext;
9047 uint32_t waitSemaphoreCount;
9048 const Semaphore* pWaitSemaphores;
9049 uint32_t swapchainCount;
9050 const SwapchainKHR* pSwapchains;
9051 const uint32_t* pImageIndices;
9052 Result* pResults;
9053 };
9054 static_assert( sizeof( PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" );
9055
9056 enum class DynamicState
9057 {
9058 eViewport = VK_DYNAMIC_STATE_VIEWPORT,
9059 eScissor = VK_DYNAMIC_STATE_SCISSOR,
9060 eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH,
9061 eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS,
9062 eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS,
9063 eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS,
9064 eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
9065 eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
9066 eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE
9067 };
9068
9069 struct PipelineDynamicStateCreateInfo
9070 {
9071 PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateFlags flags_ = PipelineDynamicStateCreateFlags(), uint32_t dynamicStateCount_ = 0, const DynamicState* pDynamicStates_ = nullptr )
9072 : sType( StructureType::ePipelineDynamicStateCreateInfo )
9073 , pNext( nullptr )
9074 , flags( flags_ )
9075 , dynamicStateCount( dynamicStateCount_ )
9076 , pDynamicStates( pDynamicStates_ )
9077 {
9078 }
9079
9080 PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs )
9081 {
9082 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
9083 }
9084
9085 PipelineDynamicStateCreateInfo& operator=( VkPipelineDynamicStateCreateInfo const & rhs )
9086 {
9087 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
9088 return *this;
9089 }
9090
9091 PipelineDynamicStateCreateInfo& setSType( StructureType sType_ )
9092 {
9093 sType = sType_;
9094 return *this;
9095 }
9096
9097 PipelineDynamicStateCreateInfo& setPNext( const void* pNext_ )
9098 {
9099 pNext = pNext_;
9100 return *this;
9101 }
9102
9103 PipelineDynamicStateCreateInfo& setFlags( PipelineDynamicStateCreateFlags flags_ )
9104 {
9105 flags = flags_;
9106 return *this;
9107 }
9108
9109 PipelineDynamicStateCreateInfo& setDynamicStateCount( uint32_t dynamicStateCount_ )
9110 {
9111 dynamicStateCount = dynamicStateCount_;
9112 return *this;
9113 }
9114
9115 PipelineDynamicStateCreateInfo& setPDynamicStates( const DynamicState* pDynamicStates_ )
9116 {
9117 pDynamicStates = pDynamicStates_;
9118 return *this;
9119 }
9120
9121 operator const VkPipelineDynamicStateCreateInfo&() const
9122 {
9123 return *reinterpret_cast<const VkPipelineDynamicStateCreateInfo*>(this);
9124 }
9125
9126 bool operator==( PipelineDynamicStateCreateInfo const& rhs ) const
9127 {
9128 return ( sType == rhs.sType )
9129 && ( pNext == rhs.pNext )
9130 && ( flags == rhs.flags )
9131 && ( dynamicStateCount == rhs.dynamicStateCount )
9132 && ( pDynamicStates == rhs.pDynamicStates );
9133 }
9134
9135 bool operator!=( PipelineDynamicStateCreateInfo const& rhs ) const
9136 {
9137 return !operator==( rhs );
9138 }
9139
9140 private:
9141 StructureType sType;
9142
9143 public:
9144 const void* pNext;
9145 PipelineDynamicStateCreateFlags flags;
9146 uint32_t dynamicStateCount;
9147 const DynamicState* pDynamicStates;
9148 };
9149 static_assert( sizeof( PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ), "struct and wrapper have different size!" );
9150
9151 enum class QueueFlagBits
9152 {
9153 eGraphics = VK_QUEUE_GRAPHICS_BIT,
9154 eCompute = VK_QUEUE_COMPUTE_BIT,
9155 eTransfer = VK_QUEUE_TRANSFER_BIT,
9156 eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT
9157 };
9158
9159 using QueueFlags = Flags<QueueFlagBits, VkQueueFlags>;
9160
9161 inline QueueFlags operator|( QueueFlagBits bit0, QueueFlagBits bit1 )
9162 {
9163 return QueueFlags( bit0 ) | bit1;
9164 }
9165
9166 struct QueueFamilyProperties
9167 {
9168 operator const VkQueueFamilyProperties&() const
9169 {
9170 return *reinterpret_cast<const VkQueueFamilyProperties*>(this);
9171 }
9172
9173 bool operator==( QueueFamilyProperties const& rhs ) const
9174 {
9175 return ( queueFlags == rhs.queueFlags )
9176 && ( queueCount == rhs.queueCount )
9177 && ( timestampValidBits == rhs.timestampValidBits )
9178 && ( minImageTransferGranularity == rhs.minImageTransferGranularity );
9179 }
9180
9181 bool operator!=( QueueFamilyProperties const& rhs ) const
9182 {
9183 return !operator==( rhs );
9184 }
9185
9186 QueueFlags queueFlags;
9187 uint32_t queueCount;
9188 uint32_t timestampValidBits;
9189 Extent3D minImageTransferGranularity;
9190 };
9191 static_assert( sizeof( QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ), "struct and wrapper have different size!" );
9192
9193 enum class MemoryPropertyFlagBits
9194 {
9195 eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
9196 eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
9197 eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
9198 eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
9199 eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
9200 };
9201
9202 using MemoryPropertyFlags = Flags<MemoryPropertyFlagBits, VkMemoryPropertyFlags>;
9203
9204 inline MemoryPropertyFlags operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 )
9205 {
9206 return MemoryPropertyFlags( bit0 ) | bit1;
9207 }
9208
9209 struct MemoryType
9210 {
9211 operator const VkMemoryType&() const
9212 {
9213 return *reinterpret_cast<const VkMemoryType*>(this);
9214 }
9215
9216 bool operator==( MemoryType const& rhs ) const
9217 {
9218 return ( propertyFlags == rhs.propertyFlags )
9219 && ( heapIndex == rhs.heapIndex );
9220 }
9221
9222 bool operator!=( MemoryType const& rhs ) const
9223 {
9224 return !operator==( rhs );
9225 }
9226
9227 MemoryPropertyFlags propertyFlags;
9228 uint32_t heapIndex;
9229 };
9230 static_assert( sizeof( MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" );
9231
9232 enum class MemoryHeapFlagBits
9233 {
9234 eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
9235 };
9236
9237 using MemoryHeapFlags = Flags<MemoryHeapFlagBits, VkMemoryHeapFlags>;
9238
9239 inline MemoryHeapFlags operator|( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 )
9240 {
9241 return MemoryHeapFlags( bit0 ) | bit1;
9242 }
9243
9244 struct MemoryHeap
9245 {
9246 operator const VkMemoryHeap&() const
9247 {
9248 return *reinterpret_cast<const VkMemoryHeap*>(this);
9249 }
9250
9251 bool operator==( MemoryHeap const& rhs ) const
9252 {
9253 return ( size == rhs.size )
9254 && ( flags == rhs.flags );
9255 }
9256
9257 bool operator!=( MemoryHeap const& rhs ) const
9258 {
9259 return !operator==( rhs );
9260 }
9261
9262 DeviceSize size;
9263 MemoryHeapFlags flags;
9264 };
9265 static_assert( sizeof( MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" );
9266
9267 struct PhysicalDeviceMemoryProperties
9268 {
9269 operator const VkPhysicalDeviceMemoryProperties&() const
9270 {
9271 return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties*>(this);
9272 }
9273
9274 bool operator==( PhysicalDeviceMemoryProperties const& rhs ) const
9275 {
9276 return ( memoryTypeCount == rhs.memoryTypeCount )
9277 && ( memcmp( memoryTypes, rhs.memoryTypes, VK_MAX_MEMORY_TYPES * sizeof( MemoryType ) ) == 0 )
9278 && ( memoryHeapCount == rhs.memoryHeapCount )
9279 && ( memcmp( memoryHeaps, rhs.memoryHeaps, VK_MAX_MEMORY_HEAPS * sizeof( MemoryHeap ) ) == 0 );
9280 }
9281
9282 bool operator!=( PhysicalDeviceMemoryProperties const& rhs ) const
9283 {
9284 return !operator==( rhs );
9285 }
9286
9287 uint32_t memoryTypeCount;
9288 MemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
9289 uint32_t memoryHeapCount;
9290 MemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
9291 };
9292 static_assert( sizeof( PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ), "struct and wrapper have different size!" );
9293
9294 enum class AccessFlagBits
9295 {
9296 eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
9297 eIndexRead = VK_ACCESS_INDEX_READ_BIT,
9298 eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
9299 eUniformRead = VK_ACCESS_UNIFORM_READ_BIT,
9300 eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
9301 eShaderRead = VK_ACCESS_SHADER_READ_BIT,
9302 eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT,
9303 eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
9304 eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
9305 eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
9306 eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
9307 eTransferRead = VK_ACCESS_TRANSFER_READ_BIT,
9308 eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT,
9309 eHostRead = VK_ACCESS_HOST_READ_BIT,
9310 eHostWrite = VK_ACCESS_HOST_WRITE_BIT,
9311 eMemoryRead = VK_ACCESS_MEMORY_READ_BIT,
9312 eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT
9313 };
9314
9315 using AccessFlags = Flags<AccessFlagBits, VkAccessFlags>;
9316
9317 inline AccessFlags operator|( AccessFlagBits bit0, AccessFlagBits bit1 )
9318 {
9319 return AccessFlags( bit0 ) | bit1;
9320 }
9321
9322 struct MemoryBarrier
9323 {
9324 MemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags() )
9325 : sType( StructureType::eMemoryBarrier )
9326 , pNext( nullptr )
9327 , srcAccessMask( srcAccessMask_ )
9328 , dstAccessMask( dstAccessMask_ )
9329 {
9330 }
9331
9332 MemoryBarrier( VkMemoryBarrier const & rhs )
9333 {
9334 memcpy( this, &rhs, sizeof(MemoryBarrier) );
9335 }
9336
9337 MemoryBarrier& operator=( VkMemoryBarrier const & rhs )
9338 {
9339 memcpy( this, &rhs, sizeof(MemoryBarrier) );
9340 return *this;
9341 }
9342
9343 MemoryBarrier& setSType( StructureType sType_ )
9344 {
9345 sType = sType_;
9346 return *this;
9347 }
9348
9349 MemoryBarrier& setPNext( const void* pNext_ )
9350 {
9351 pNext = pNext_;
9352 return *this;
9353 }
9354
9355 MemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9356 {
9357 srcAccessMask = srcAccessMask_;
9358 return *this;
9359 }
9360
9361 MemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9362 {
9363 dstAccessMask = dstAccessMask_;
9364 return *this;
9365 }
9366
9367 operator const VkMemoryBarrier&() const
9368 {
9369 return *reinterpret_cast<const VkMemoryBarrier*>(this);
9370 }
9371
9372 bool operator==( MemoryBarrier const& rhs ) const
9373 {
9374 return ( sType == rhs.sType )
9375 && ( pNext == rhs.pNext )
9376 && ( srcAccessMask == rhs.srcAccessMask )
9377 && ( dstAccessMask == rhs.dstAccessMask );
9378 }
9379
9380 bool operator!=( MemoryBarrier const& rhs ) const
9381 {
9382 return !operator==( rhs );
9383 }
9384
9385 private:
9386 StructureType sType;
9387
9388 public:
9389 const void* pNext;
9390 AccessFlags srcAccessMask;
9391 AccessFlags dstAccessMask;
9392 };
9393 static_assert( sizeof( MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" );
9394
9395 struct BufferMemoryBarrier
9396 {
9397 BufferMemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), uint32_t srcQueueFamilyIndex_ = 0, uint32_t dstQueueFamilyIndex_ = 0, Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
9398 : sType( StructureType::eBufferMemoryBarrier )
9399 , pNext( nullptr )
9400 , srcAccessMask( srcAccessMask_ )
9401 , dstAccessMask( dstAccessMask_ )
9402 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
9403 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
9404 , buffer( buffer_ )
9405 , offset( offset_ )
9406 , size( size_ )
9407 {
9408 }
9409
9410 BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs )
9411 {
9412 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9413 }
9414
9415 BufferMemoryBarrier& operator=( VkBufferMemoryBarrier const & rhs )
9416 {
9417 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9418 return *this;
9419 }
9420
9421 BufferMemoryBarrier& setSType( StructureType sType_ )
9422 {
9423 sType = sType_;
9424 return *this;
9425 }
9426
9427 BufferMemoryBarrier& setPNext( const void* pNext_ )
9428 {
9429 pNext = pNext_;
9430 return *this;
9431 }
9432
9433 BufferMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9434 {
9435 srcAccessMask = srcAccessMask_;
9436 return *this;
9437 }
9438
9439 BufferMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9440 {
9441 dstAccessMask = dstAccessMask_;
9442 return *this;
9443 }
9444
9445 BufferMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
9446 {
9447 srcQueueFamilyIndex = srcQueueFamilyIndex_;
9448 return *this;
9449 }
9450
9451 BufferMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
9452 {
9453 dstQueueFamilyIndex = dstQueueFamilyIndex_;
9454 return *this;
9455 }
9456
9457 BufferMemoryBarrier& setBuffer( Buffer buffer_ )
9458 {
9459 buffer = buffer_;
9460 return *this;
9461 }
9462
9463 BufferMemoryBarrier& setOffset( DeviceSize offset_ )
9464 {
9465 offset = offset_;
9466 return *this;
9467 }
9468
9469 BufferMemoryBarrier& setSize( DeviceSize size_ )
9470 {
9471 size = size_;
9472 return *this;
9473 }
9474
9475 operator const VkBufferMemoryBarrier&() const
9476 {
9477 return *reinterpret_cast<const VkBufferMemoryBarrier*>(this);
9478 }
9479
9480 bool operator==( BufferMemoryBarrier const& rhs ) const
9481 {
9482 return ( sType == rhs.sType )
9483 && ( pNext == rhs.pNext )
9484 && ( srcAccessMask == rhs.srcAccessMask )
9485 && ( dstAccessMask == rhs.dstAccessMask )
9486 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
9487 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
9488 && ( buffer == rhs.buffer )
9489 && ( offset == rhs.offset )
9490 && ( size == rhs.size );
9491 }
9492
9493 bool operator!=( BufferMemoryBarrier const& rhs ) const
9494 {
9495 return !operator==( rhs );
9496 }
9497
9498 private:
9499 StructureType sType;
9500
9501 public:
9502 const void* pNext;
9503 AccessFlags srcAccessMask;
9504 AccessFlags dstAccessMask;
9505 uint32_t srcQueueFamilyIndex;
9506 uint32_t dstQueueFamilyIndex;
9507 Buffer buffer;
9508 DeviceSize offset;
9509 DeviceSize size;
9510 };
9511 static_assert( sizeof( BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ), "struct and wrapper have different size!" );
9512
9513 enum class BufferUsageFlagBits
9514 {
9515 eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
9516 eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
9517 eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,
9518 eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,
9519 eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
9520 eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
9521 eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
9522 eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
9523 eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
9524 };
9525
9526 using BufferUsageFlags = Flags<BufferUsageFlagBits, VkBufferUsageFlags>;
9527
9528 inline BufferUsageFlags operator|( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 )
9529 {
9530 return BufferUsageFlags( bit0 ) | bit1;
9531 }
9532
9533 enum class BufferCreateFlagBits
9534 {
9535 eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
9536 eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
9537 eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
9538 };
9539
9540 using BufferCreateFlags = Flags<BufferCreateFlagBits, VkBufferCreateFlags>;
9541
9542 inline BufferCreateFlags operator|( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 )
9543 {
9544 return BufferCreateFlags( bit0 ) | bit1;
9545 }
9546
9547 struct BufferCreateInfo
9548 {
9549 BufferCreateInfo( BufferCreateFlags flags_ = BufferCreateFlags(), DeviceSize size_ = 0, BufferUsageFlags usage_ = BufferUsageFlags(), SharingMode sharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr )
9550 : sType( StructureType::eBufferCreateInfo )
9551 , pNext( nullptr )
9552 , flags( flags_ )
9553 , size( size_ )
9554 , usage( usage_ )
9555 , sharingMode( sharingMode_ )
9556 , queueFamilyIndexCount( queueFamilyIndexCount_ )
9557 , pQueueFamilyIndices( pQueueFamilyIndices_ )
9558 {
9559 }
9560
9561 BufferCreateInfo( VkBufferCreateInfo const & rhs )
9562 {
9563 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9564 }
9565
9566 BufferCreateInfo& operator=( VkBufferCreateInfo const & rhs )
9567 {
9568 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9569 return *this;
9570 }
9571
9572 BufferCreateInfo& setSType( StructureType sType_ )
9573 {
9574 sType = sType_;
9575 return *this;
9576 }
9577
9578 BufferCreateInfo& setPNext( const void* pNext_ )
9579 {
9580 pNext = pNext_;
9581 return *this;
9582 }
9583
9584 BufferCreateInfo& setFlags( BufferCreateFlags flags_ )
9585 {
9586 flags = flags_;
9587 return *this;
9588 }
9589
9590 BufferCreateInfo& setSize( DeviceSize size_ )
9591 {
9592 size = size_;
9593 return *this;
9594 }
9595
9596 BufferCreateInfo& setUsage( BufferUsageFlags usage_ )
9597 {
9598 usage = usage_;
9599 return *this;
9600 }
9601
9602 BufferCreateInfo& setSharingMode( SharingMode sharingMode_ )
9603 {
9604 sharingMode = sharingMode_;
9605 return *this;
9606 }
9607
9608 BufferCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
9609 {
9610 queueFamilyIndexCount = queueFamilyIndexCount_;
9611 return *this;
9612 }
9613
9614 BufferCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
9615 {
9616 pQueueFamilyIndices = pQueueFamilyIndices_;
9617 return *this;
9618 }
9619
9620 operator const VkBufferCreateInfo&() const
9621 {
9622 return *reinterpret_cast<const VkBufferCreateInfo*>(this);
9623 }
9624
9625 bool operator==( BufferCreateInfo const& rhs ) const
9626 {
9627 return ( sType == rhs.sType )
9628 && ( pNext == rhs.pNext )
9629 && ( flags == rhs.flags )
9630 && ( size == rhs.size )
9631 && ( usage == rhs.usage )
9632 && ( sharingMode == rhs.sharingMode )
9633 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
9634 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
9635 }
9636
9637 bool operator!=( BufferCreateInfo const& rhs ) const
9638 {
9639 return !operator==( rhs );
9640 }
9641
9642 private:
9643 StructureType sType;
9644
9645 public:
9646 const void* pNext;
9647 BufferCreateFlags flags;
9648 DeviceSize size;
9649 BufferUsageFlags usage;
9650 SharingMode sharingMode;
9651 uint32_t queueFamilyIndexCount;
9652 const uint32_t* pQueueFamilyIndices;
9653 };
9654 static_assert( sizeof( BufferCreateInfo ) == sizeof( VkBufferCreateInfo ), "struct and wrapper have different size!" );
9655
9656 enum class ShaderStageFlagBits
9657 {
9658 eVertex = VK_SHADER_STAGE_VERTEX_BIT,
9659 eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
9660 eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
9661 eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT,
9662 eFragment = VK_SHADER_STAGE_FRAGMENT_BIT,
9663 eCompute = VK_SHADER_STAGE_COMPUTE_BIT,
9664 eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS,
9665 eAll = VK_SHADER_STAGE_ALL
9666 };
9667
9668 using ShaderStageFlags = Flags<ShaderStageFlagBits, VkShaderStageFlags>;
9669
9670 inline ShaderStageFlags operator|( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 )
9671 {
9672 return ShaderStageFlags( bit0 ) | bit1;
9673 }
9674
9675 struct DescriptorSetLayoutBinding
9676 {
9677 DescriptorSetLayoutBinding( uint32_t binding_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0, ShaderStageFlags stageFlags_ = ShaderStageFlags(), const Sampler* pImmutableSamplers_ = nullptr )
9678 : binding( binding_ )
9679 , descriptorType( descriptorType_ )
9680 , descriptorCount( descriptorCount_ )
9681 , stageFlags( stageFlags_ )
9682 , pImmutableSamplers( pImmutableSamplers_ )
9683 {
9684 }
9685
9686 DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs )
9687 {
9688 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9689 }
9690
9691 DescriptorSetLayoutBinding& operator=( VkDescriptorSetLayoutBinding const & rhs )
9692 {
9693 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9694 return *this;
9695 }
9696
9697 DescriptorSetLayoutBinding& setBinding( uint32_t binding_ )
9698 {
9699 binding = binding_;
9700 return *this;
9701 }
9702
9703 DescriptorSetLayoutBinding& setDescriptorType( DescriptorType descriptorType_ )
9704 {
9705 descriptorType = descriptorType_;
9706 return *this;
9707 }
9708
9709 DescriptorSetLayoutBinding& setDescriptorCount( uint32_t descriptorCount_ )
9710 {
9711 descriptorCount = descriptorCount_;
9712 return *this;
9713 }
9714
9715 DescriptorSetLayoutBinding& setStageFlags( ShaderStageFlags stageFlags_ )
9716 {
9717 stageFlags = stageFlags_;
9718 return *this;
9719 }
9720
9721 DescriptorSetLayoutBinding& setPImmutableSamplers( const Sampler* pImmutableSamplers_ )
9722 {
9723 pImmutableSamplers = pImmutableSamplers_;
9724 return *this;
9725 }
9726
9727 operator const VkDescriptorSetLayoutBinding&() const
9728 {
9729 return *reinterpret_cast<const VkDescriptorSetLayoutBinding*>(this);
9730 }
9731
9732 bool operator==( DescriptorSetLayoutBinding const& rhs ) const
9733 {
9734 return ( binding == rhs.binding )
9735 && ( descriptorType == rhs.descriptorType )
9736 && ( descriptorCount == rhs.descriptorCount )
9737 && ( stageFlags == rhs.stageFlags )
9738 && ( pImmutableSamplers == rhs.pImmutableSamplers );
9739 }
9740
9741 bool operator!=( DescriptorSetLayoutBinding const& rhs ) const
9742 {
9743 return !operator==( rhs );
9744 }
9745
9746 uint32_t binding;
9747 DescriptorType descriptorType;
9748 uint32_t descriptorCount;
9749 ShaderStageFlags stageFlags;
9750 const Sampler* pImmutableSamplers;
9751 };
9752 static_assert( sizeof( DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ), "struct and wrapper have different size!" );
9753
9754 struct DescriptorSetLayoutCreateInfo
9755 {
9756 DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateFlags flags_ = DescriptorSetLayoutCreateFlags(), uint32_t bindingCount_ = 0, const DescriptorSetLayoutBinding* pBindings_ = nullptr )
9757 : sType( StructureType::eDescriptorSetLayoutCreateInfo )
9758 , pNext( nullptr )
9759 , flags( flags_ )
9760 , bindingCount( bindingCount_ )
9761 , pBindings( pBindings_ )
9762 {
9763 }
9764
9765 DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs )
9766 {
9767 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9768 }
9769
9770 DescriptorSetLayoutCreateInfo& operator=( VkDescriptorSetLayoutCreateInfo const & rhs )
9771 {
9772 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9773 return *this;
9774 }
9775
9776 DescriptorSetLayoutCreateInfo& setSType( StructureType sType_ )
9777 {
9778 sType = sType_;
9779 return *this;
9780 }
9781
9782 DescriptorSetLayoutCreateInfo& setPNext( const void* pNext_ )
9783 {
9784 pNext = pNext_;
9785 return *this;
9786 }
9787
9788 DescriptorSetLayoutCreateInfo& setFlags( DescriptorSetLayoutCreateFlags flags_ )
9789 {
9790 flags = flags_;
9791 return *this;
9792 }
9793
9794 DescriptorSetLayoutCreateInfo& setBindingCount( uint32_t bindingCount_ )
9795 {
9796 bindingCount = bindingCount_;
9797 return *this;
9798 }
9799
9800 DescriptorSetLayoutCreateInfo& setPBindings( const DescriptorSetLayoutBinding* pBindings_ )
9801 {
9802 pBindings = pBindings_;
9803 return *this;
9804 }
9805
9806 operator const VkDescriptorSetLayoutCreateInfo&() const
9807 {
9808 return *reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>(this);
9809 }
9810
9811 bool operator==( DescriptorSetLayoutCreateInfo const& rhs ) const
9812 {
9813 return ( sType == rhs.sType )
9814 && ( pNext == rhs.pNext )
9815 && ( flags == rhs.flags )
9816 && ( bindingCount == rhs.bindingCount )
9817 && ( pBindings == rhs.pBindings );
9818 }
9819
9820 bool operator!=( DescriptorSetLayoutCreateInfo const& rhs ) const
9821 {
9822 return !operator==( rhs );
9823 }
9824
9825 private:
9826 StructureType sType;
9827
9828 public:
9829 const void* pNext;
9830 DescriptorSetLayoutCreateFlags flags;
9831 uint32_t bindingCount;
9832 const DescriptorSetLayoutBinding* pBindings;
9833 };
9834 static_assert( sizeof( DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ), "struct and wrapper have different size!" );
9835
9836 struct PipelineShaderStageCreateInfo
9837 {
9838 PipelineShaderStageCreateInfo( PipelineShaderStageCreateFlags flags_ = PipelineShaderStageCreateFlags(), ShaderStageFlagBits stage_ = ShaderStageFlagBits::eVertex, ShaderModule module_ = ShaderModule(), const char* pName_ = nullptr, const SpecializationInfo* pSpecializationInfo_ = nullptr )
9839 : sType( StructureType::ePipelineShaderStageCreateInfo )
9840 , pNext( nullptr )
9841 , flags( flags_ )
9842 , stage( stage_ )
9843 , module( module_ )
9844 , pName( pName_ )
9845 , pSpecializationInfo( pSpecializationInfo_ )
9846 {
9847 }
9848
9849 PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs )
9850 {
9851 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9852 }
9853
9854 PipelineShaderStageCreateInfo& operator=( VkPipelineShaderStageCreateInfo const & rhs )
9855 {
9856 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9857 return *this;
9858 }
9859
9860 PipelineShaderStageCreateInfo& setSType( StructureType sType_ )
9861 {
9862 sType = sType_;
9863 return *this;
9864 }
9865
9866 PipelineShaderStageCreateInfo& setPNext( const void* pNext_ )
9867 {
9868 pNext = pNext_;
9869 return *this;
9870 }
9871
9872 PipelineShaderStageCreateInfo& setFlags( PipelineShaderStageCreateFlags flags_ )
9873 {
9874 flags = flags_;
9875 return *this;
9876 }
9877
9878 PipelineShaderStageCreateInfo& setStage( ShaderStageFlagBits stage_ )
9879 {
9880 stage = stage_;
9881 return *this;
9882 }
9883
9884 PipelineShaderStageCreateInfo& setModule( ShaderModule module_ )
9885 {
9886 module = module_;
9887 return *this;
9888 }
9889
9890 PipelineShaderStageCreateInfo& setPName( const char* pName_ )
9891 {
9892 pName = pName_;
9893 return *this;
9894 }
9895
9896 PipelineShaderStageCreateInfo& setPSpecializationInfo( const SpecializationInfo* pSpecializationInfo_ )
9897 {
9898 pSpecializationInfo = pSpecializationInfo_;
9899 return *this;
9900 }
9901
9902 operator const VkPipelineShaderStageCreateInfo&() const
9903 {
9904 return *reinterpret_cast<const VkPipelineShaderStageCreateInfo*>(this);
9905 }
9906
9907 bool operator==( PipelineShaderStageCreateInfo const& rhs ) const
9908 {
9909 return ( sType == rhs.sType )
9910 && ( pNext == rhs.pNext )
9911 && ( flags == rhs.flags )
9912 && ( stage == rhs.stage )
9913 && ( module == rhs.module )
9914 && ( pName == rhs.pName )
9915 && ( pSpecializationInfo == rhs.pSpecializationInfo );
9916 }
9917
9918 bool operator!=( PipelineShaderStageCreateInfo const& rhs ) const
9919 {
9920 return !operator==( rhs );
9921 }
9922
9923 private:
9924 StructureType sType;
9925
9926 public:
9927 const void* pNext;
9928 PipelineShaderStageCreateFlags flags;
9929 ShaderStageFlagBits stage;
9930 ShaderModule module;
9931 const char* pName;
9932 const SpecializationInfo* pSpecializationInfo;
9933 };
9934 static_assert( sizeof( PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ), "struct and wrapper have different size!" );
9935
9936 struct PushConstantRange
9937 {
9938 PushConstantRange( ShaderStageFlags stageFlags_ = ShaderStageFlags(), uint32_t offset_ = 0, uint32_t size_ = 0 )
9939 : stageFlags( stageFlags_ )
9940 , offset( offset_ )
9941 , size( size_ )
9942 {
9943 }
9944
9945 PushConstantRange( VkPushConstantRange const & rhs )
9946 {
9947 memcpy( this, &rhs, sizeof(PushConstantRange) );
9948 }
9949
9950 PushConstantRange& operator=( VkPushConstantRange const & rhs )
9951 {
9952 memcpy( this, &rhs, sizeof(PushConstantRange) );
9953 return *this;
9954 }
9955
9956 PushConstantRange& setStageFlags( ShaderStageFlags stageFlags_ )
9957 {
9958 stageFlags = stageFlags_;
9959 return *this;
9960 }
9961
9962 PushConstantRange& setOffset( uint32_t offset_ )
9963 {
9964 offset = offset_;
9965 return *this;
9966 }
9967
9968 PushConstantRange& setSize( uint32_t size_ )
9969 {
9970 size = size_;
9971 return *this;
9972 }
9973
9974 operator const VkPushConstantRange&() const
9975 {
9976 return *reinterpret_cast<const VkPushConstantRange*>(this);
9977 }
9978
9979 bool operator==( PushConstantRange const& rhs ) const
9980 {
9981 return ( stageFlags == rhs.stageFlags )
9982 && ( offset == rhs.offset )
9983 && ( size == rhs.size );
9984 }
9985
9986 bool operator!=( PushConstantRange const& rhs ) const
9987 {
9988 return !operator==( rhs );
9989 }
9990
9991 ShaderStageFlags stageFlags;
9992 uint32_t offset;
9993 uint32_t size;
9994 };
9995 static_assert( sizeof( PushConstantRange ) == sizeof( VkPushConstantRange ), "struct and wrapper have different size!" );
9996
9997 struct PipelineLayoutCreateInfo
9998 {
9999 PipelineLayoutCreateInfo( PipelineLayoutCreateFlags flags_ = PipelineLayoutCreateFlags(), uint32_t setLayoutCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr, uint32_t pushConstantRangeCount_ = 0, const PushConstantRange* pPushConstantRanges_ = nullptr )
10000 : sType( StructureType::ePipelineLayoutCreateInfo )
10001 , pNext( nullptr )
10002 , flags( flags_ )
10003 , setLayoutCount( setLayoutCount_ )
10004 , pSetLayouts( pSetLayouts_ )
10005 , pushConstantRangeCount( pushConstantRangeCount_ )
10006 , pPushConstantRanges( pPushConstantRanges_ )
10007 {
10008 }
10009
10010 PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs )
10011 {
10012 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
10013 }
10014
10015 PipelineLayoutCreateInfo& operator=( VkPipelineLayoutCreateInfo const & rhs )
10016 {
10017 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
10018 return *this;
10019 }
10020
10021 PipelineLayoutCreateInfo& setSType( StructureType sType_ )
10022 {
10023 sType = sType_;
10024 return *this;
10025 }
10026
10027 PipelineLayoutCreateInfo& setPNext( const void* pNext_ )
10028 {
10029 pNext = pNext_;
10030 return *this;
10031 }
10032
10033 PipelineLayoutCreateInfo& setFlags( PipelineLayoutCreateFlags flags_ )
10034 {
10035 flags = flags_;
10036 return *this;
10037 }
10038
10039 PipelineLayoutCreateInfo& setSetLayoutCount( uint32_t setLayoutCount_ )
10040 {
10041 setLayoutCount = setLayoutCount_;
10042 return *this;
10043 }
10044
10045 PipelineLayoutCreateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
10046 {
10047 pSetLayouts = pSetLayouts_;
10048 return *this;
10049 }
10050
10051 PipelineLayoutCreateInfo& setPushConstantRangeCount( uint32_t pushConstantRangeCount_ )
10052 {
10053 pushConstantRangeCount = pushConstantRangeCount_;
10054 return *this;
10055 }
10056
10057 PipelineLayoutCreateInfo& setPPushConstantRanges( const PushConstantRange* pPushConstantRanges_ )
10058 {
10059 pPushConstantRanges = pPushConstantRanges_;
10060 return *this;
10061 }
10062
10063 operator const VkPipelineLayoutCreateInfo&() const
10064 {
10065 return *reinterpret_cast<const VkPipelineLayoutCreateInfo*>(this);
10066 }
10067
10068 bool operator==( PipelineLayoutCreateInfo const& rhs ) const
10069 {
10070 return ( sType == rhs.sType )
10071 && ( pNext == rhs.pNext )
10072 && ( flags == rhs.flags )
10073 && ( setLayoutCount == rhs.setLayoutCount )
10074 && ( pSetLayouts == rhs.pSetLayouts )
10075 && ( pushConstantRangeCount == rhs.pushConstantRangeCount )
10076 && ( pPushConstantRanges == rhs.pPushConstantRanges );
10077 }
10078
10079 bool operator!=( PipelineLayoutCreateInfo const& rhs ) const
10080 {
10081 return !operator==( rhs );
10082 }
10083
10084 private:
10085 StructureType sType;
10086
10087 public:
10088 const void* pNext;
10089 PipelineLayoutCreateFlags flags;
10090 uint32_t setLayoutCount;
10091 const DescriptorSetLayout* pSetLayouts;
10092 uint32_t pushConstantRangeCount;
10093 const PushConstantRange* pPushConstantRanges;
10094 };
10095 static_assert( sizeof( PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ), "struct and wrapper have different size!" );
10096
10097 enum class ImageUsageFlagBits
10098 {
10099 eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
10100 eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT,
10101 eSampled = VK_IMAGE_USAGE_SAMPLED_BIT,
10102 eStorage = VK_IMAGE_USAGE_STORAGE_BIT,
10103 eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
10104 eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
10105 eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
10106 eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
10107 };
10108
10109 using ImageUsageFlags = Flags<ImageUsageFlagBits, VkImageUsageFlags>;
10110
10111 inline ImageUsageFlags operator|( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 )
10112 {
10113 return ImageUsageFlags( bit0 ) | bit1;
10114 }
10115
10116 enum class ImageCreateFlagBits
10117 {
10118 eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
10119 eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
10120 eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,
10121 eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
10122 eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
10123 };
10124
10125 using ImageCreateFlags = Flags<ImageCreateFlagBits, VkImageCreateFlags>;
10126
10127 inline ImageCreateFlags operator|( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 )
10128 {
10129 return ImageCreateFlags( bit0 ) | bit1;
10130 }
10131
10132 enum class PipelineCreateFlagBits
10133 {
10134 eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
10135 eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
10136 eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT
10137 };
10138
10139 using PipelineCreateFlags = Flags<PipelineCreateFlagBits, VkPipelineCreateFlags>;
10140
10141 inline PipelineCreateFlags operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 )
10142 {
10143 return PipelineCreateFlags( bit0 ) | bit1;
10144 }
10145
10146 struct ComputePipelineCreateInfo
10147 {
10148 ComputePipelineCreateInfo( PipelineCreateFlags flags_ = PipelineCreateFlags(), PipelineShaderStageCreateInfo stage_ = PipelineShaderStageCreateInfo(), PipelineLayout layout_ = PipelineLayout(), Pipeline basePipelineHandle_ = Pipeline(), int32_t basePipelineIndex_ = 0 )
10149 : sType( StructureType::eComputePipelineCreateInfo )
10150 , pNext( nullptr )
10151 , flags( flags_ )
10152 , stage( stage_ )
10153 , layout( layout_ )
10154 , basePipelineHandle( basePipelineHandle_ )
10155 , basePipelineIndex( basePipelineIndex_ )
10156 {
10157 }
10158
10159 ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs )
10160 {
10161 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10162 }
10163
10164 ComputePipelineCreateInfo& operator=( VkComputePipelineCreateInfo const & rhs )
10165 {
10166 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10167 return *this;
10168 }
10169
10170 ComputePipelineCreateInfo& setSType( StructureType sType_ )
10171 {
10172 sType = sType_;
10173 return *this;
10174 }
10175
10176 ComputePipelineCreateInfo& setPNext( const void* pNext_ )
10177 {
10178 pNext = pNext_;
10179 return *this;
10180 }
10181
10182 ComputePipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
10183 {
10184 flags = flags_;
10185 return *this;
10186 }
10187
10188 ComputePipelineCreateInfo& setStage( PipelineShaderStageCreateInfo stage_ )
10189 {
10190 stage = stage_;
10191 return *this;
10192 }
10193
10194 ComputePipelineCreateInfo& setLayout( PipelineLayout layout_ )
10195 {
10196 layout = layout_;
10197 return *this;
10198 }
10199
10200 ComputePipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
10201 {
10202 basePipelineHandle = basePipelineHandle_;
10203 return *this;
10204 }
10205
10206 ComputePipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
10207 {
10208 basePipelineIndex = basePipelineIndex_;
10209 return *this;
10210 }
10211
10212 operator const VkComputePipelineCreateInfo&() const
10213 {
10214 return *reinterpret_cast<const VkComputePipelineCreateInfo*>(this);
10215 }
10216
10217 bool operator==( ComputePipelineCreateInfo const& rhs ) const
10218 {
10219 return ( sType == rhs.sType )
10220 && ( pNext == rhs.pNext )
10221 && ( flags == rhs.flags )
10222 && ( stage == rhs.stage )
10223 && ( layout == rhs.layout )
10224 && ( basePipelineHandle == rhs.basePipelineHandle )
10225 && ( basePipelineIndex == rhs.basePipelineIndex );
10226 }
10227
10228 bool operator!=( ComputePipelineCreateInfo const& rhs ) const
10229 {
10230 return !operator==( rhs );
10231 }
10232
10233 private:
10234 StructureType sType;
10235
10236 public:
10237 const void* pNext;
10238 PipelineCreateFlags flags;
10239 PipelineShaderStageCreateInfo stage;
10240 PipelineLayout layout;
10241 Pipeline basePipelineHandle;
10242 int32_t basePipelineIndex;
10243 };
10244 static_assert( sizeof( ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ), "struct and wrapper have different size!" );
10245
10246 enum class ColorComponentFlagBits
10247 {
10248 eR = VK_COLOR_COMPONENT_R_BIT,
10249 eG = VK_COLOR_COMPONENT_G_BIT,
10250 eB = VK_COLOR_COMPONENT_B_BIT,
10251 eA = VK_COLOR_COMPONENT_A_BIT
10252 };
10253
10254 using ColorComponentFlags = Flags<ColorComponentFlagBits, VkColorComponentFlags>;
10255
10256 inline ColorComponentFlags operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 )
10257 {
10258 return ColorComponentFlags( bit0 ) | bit1;
10259 }
10260
10261 struct PipelineColorBlendAttachmentState
10262 {
10263 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() )
10264 : blendEnable( blendEnable_ )
10265 , srcColorBlendFactor( srcColorBlendFactor_ )
10266 , dstColorBlendFactor( dstColorBlendFactor_ )
10267 , colorBlendOp( colorBlendOp_ )
10268 , srcAlphaBlendFactor( srcAlphaBlendFactor_ )
10269 , dstAlphaBlendFactor( dstAlphaBlendFactor_ )
10270 , alphaBlendOp( alphaBlendOp_ )
10271 , colorWriteMask( colorWriteMask_ )
10272 {
10273 }
10274
10275 PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs )
10276 {
10277 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10278 }
10279
10280 PipelineColorBlendAttachmentState& operator=( VkPipelineColorBlendAttachmentState const & rhs )
10281 {
10282 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10283 return *this;
10284 }
10285
10286 PipelineColorBlendAttachmentState& setBlendEnable( Bool32 blendEnable_ )
10287 {
10288 blendEnable = blendEnable_;
10289 return *this;
10290 }
10291
10292 PipelineColorBlendAttachmentState& setSrcColorBlendFactor( BlendFactor srcColorBlendFactor_ )
10293 {
10294 srcColorBlendFactor = srcColorBlendFactor_;
10295 return *this;
10296 }
10297
10298 PipelineColorBlendAttachmentState& setDstColorBlendFactor( BlendFactor dstColorBlendFactor_ )
10299 {
10300 dstColorBlendFactor = dstColorBlendFactor_;
10301 return *this;
10302 }
10303
10304 PipelineColorBlendAttachmentState& setColorBlendOp( BlendOp colorBlendOp_ )
10305 {
10306 colorBlendOp = colorBlendOp_;
10307 return *this;
10308 }
10309
10310 PipelineColorBlendAttachmentState& setSrcAlphaBlendFactor( BlendFactor srcAlphaBlendFactor_ )
10311 {
10312 srcAlphaBlendFactor = srcAlphaBlendFactor_;
10313 return *this;
10314 }
10315
10316 PipelineColorBlendAttachmentState& setDstAlphaBlendFactor( BlendFactor dstAlphaBlendFactor_ )
10317 {
10318 dstAlphaBlendFactor = dstAlphaBlendFactor_;
10319 return *this;
10320 }
10321
10322 PipelineColorBlendAttachmentState& setAlphaBlendOp( BlendOp alphaBlendOp_ )
10323 {
10324 alphaBlendOp = alphaBlendOp_;
10325 return *this;
10326 }
10327
10328 PipelineColorBlendAttachmentState& setColorWriteMask( ColorComponentFlags colorWriteMask_ )
10329 {
10330 colorWriteMask = colorWriteMask_;
10331 return *this;
10332 }
10333
10334 operator const VkPipelineColorBlendAttachmentState&() const
10335 {
10336 return *reinterpret_cast<const VkPipelineColorBlendAttachmentState*>(this);
10337 }
10338
10339 bool operator==( PipelineColorBlendAttachmentState const& rhs ) const
10340 {
10341 return ( blendEnable == rhs.blendEnable )
10342 && ( srcColorBlendFactor == rhs.srcColorBlendFactor )
10343 && ( dstColorBlendFactor == rhs.dstColorBlendFactor )
10344 && ( colorBlendOp == rhs.colorBlendOp )
10345 && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor )
10346 && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor )
10347 && ( alphaBlendOp == rhs.alphaBlendOp )
10348 && ( colorWriteMask == rhs.colorWriteMask );
10349 }
10350
10351 bool operator!=( PipelineColorBlendAttachmentState const& rhs ) const
10352 {
10353 return !operator==( rhs );
10354 }
10355
10356 Bool32 blendEnable;
10357 BlendFactor srcColorBlendFactor;
10358 BlendFactor dstColorBlendFactor;
10359 BlendOp colorBlendOp;
10360 BlendFactor srcAlphaBlendFactor;
10361 BlendFactor dstAlphaBlendFactor;
10362 BlendOp alphaBlendOp;
10363 ColorComponentFlags colorWriteMask;
10364 };
10365 static_assert( sizeof( PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ), "struct and wrapper have different size!" );
10366
10367 struct PipelineColorBlendStateCreateInfo
10368 {
10369 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 } } )
10370 : sType( StructureType::ePipelineColorBlendStateCreateInfo )
10371 , pNext( nullptr )
10372 , flags( flags_ )
10373 , logicOpEnable( logicOpEnable_ )
10374 , logicOp( logicOp_ )
10375 , attachmentCount( attachmentCount_ )
10376 , pAttachments( pAttachments_ )
10377 {
10378 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10379 }
10380
10381 PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs )
10382 {
10383 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10384 }
10385
10386 PipelineColorBlendStateCreateInfo& operator=( VkPipelineColorBlendStateCreateInfo const & rhs )
10387 {
10388 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10389 return *this;
10390 }
10391
10392 PipelineColorBlendStateCreateInfo& setSType( StructureType sType_ )
10393 {
10394 sType = sType_;
10395 return *this;
10396 }
10397
10398 PipelineColorBlendStateCreateInfo& setPNext( const void* pNext_ )
10399 {
10400 pNext = pNext_;
10401 return *this;
10402 }
10403
10404 PipelineColorBlendStateCreateInfo& setFlags( PipelineColorBlendStateCreateFlags flags_ )
10405 {
10406 flags = flags_;
10407 return *this;
10408 }
10409
10410 PipelineColorBlendStateCreateInfo& setLogicOpEnable( Bool32 logicOpEnable_ )
10411 {
10412 logicOpEnable = logicOpEnable_;
10413 return *this;
10414 }
10415
10416 PipelineColorBlendStateCreateInfo& setLogicOp( LogicOp logicOp_ )
10417 {
10418 logicOp = logicOp_;
10419 return *this;
10420 }
10421
10422 PipelineColorBlendStateCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
10423 {
10424 attachmentCount = attachmentCount_;
10425 return *this;
10426 }
10427
10428 PipelineColorBlendStateCreateInfo& setPAttachments( const PipelineColorBlendAttachmentState* pAttachments_ )
10429 {
10430 pAttachments = pAttachments_;
10431 return *this;
10432 }
10433
10434 PipelineColorBlendStateCreateInfo& setBlendConstants( std::array<float,4> blendConstants_ )
10435 {
10436 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10437 return *this;
10438 }
10439
10440 operator const VkPipelineColorBlendStateCreateInfo&() const
10441 {
10442 return *reinterpret_cast<const VkPipelineColorBlendStateCreateInfo*>(this);
10443 }
10444
10445 bool operator==( PipelineColorBlendStateCreateInfo const& rhs ) const
10446 {
10447 return ( sType == rhs.sType )
10448 && ( pNext == rhs.pNext )
10449 && ( flags == rhs.flags )
10450 && ( logicOpEnable == rhs.logicOpEnable )
10451 && ( logicOp == rhs.logicOp )
10452 && ( attachmentCount == rhs.attachmentCount )
10453 && ( pAttachments == rhs.pAttachments )
10454 && ( memcmp( blendConstants, rhs.blendConstants, 4 * sizeof( float ) ) == 0 );
10455 }
10456
10457 bool operator!=( PipelineColorBlendStateCreateInfo const& rhs ) const
10458 {
10459 return !operator==( rhs );
10460 }
10461
10462 private:
10463 StructureType sType;
10464
10465 public:
10466 const void* pNext;
10467 PipelineColorBlendStateCreateFlags flags;
10468 Bool32 logicOpEnable;
10469 LogicOp logicOp;
10470 uint32_t attachmentCount;
10471 const PipelineColorBlendAttachmentState* pAttachments;
10472 float blendConstants[4];
10473 };
10474 static_assert( sizeof( PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ), "struct and wrapper have different size!" );
10475
10476 enum class FenceCreateFlagBits
10477 {
10478 eSignaled = VK_FENCE_CREATE_SIGNALED_BIT
10479 };
10480
10481 using FenceCreateFlags = Flags<FenceCreateFlagBits, VkFenceCreateFlags>;
10482
10483 inline FenceCreateFlags operator|( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 )
10484 {
10485 return FenceCreateFlags( bit0 ) | bit1;
10486 }
10487
10488 struct FenceCreateInfo
10489 {
10490 FenceCreateInfo( FenceCreateFlags flags_ = FenceCreateFlags() )
10491 : sType( StructureType::eFenceCreateInfo )
10492 , pNext( nullptr )
10493 , flags( flags_ )
10494 {
10495 }
10496
10497 FenceCreateInfo( VkFenceCreateInfo const & rhs )
10498 {
10499 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10500 }
10501
10502 FenceCreateInfo& operator=( VkFenceCreateInfo const & rhs )
10503 {
10504 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10505 return *this;
10506 }
10507
10508 FenceCreateInfo& setSType( StructureType sType_ )
10509 {
10510 sType = sType_;
10511 return *this;
10512 }
10513
10514 FenceCreateInfo& setPNext( const void* pNext_ )
10515 {
10516 pNext = pNext_;
10517 return *this;
10518 }
10519
10520 FenceCreateInfo& setFlags( FenceCreateFlags flags_ )
10521 {
10522 flags = flags_;
10523 return *this;
10524 }
10525
10526 operator const VkFenceCreateInfo&() const
10527 {
10528 return *reinterpret_cast<const VkFenceCreateInfo*>(this);
10529 }
10530
10531 bool operator==( FenceCreateInfo const& rhs ) const
10532 {
10533 return ( sType == rhs.sType )
10534 && ( pNext == rhs.pNext )
10535 && ( flags == rhs.flags );
10536 }
10537
10538 bool operator!=( FenceCreateInfo const& rhs ) const
10539 {
10540 return !operator==( rhs );
10541 }
10542
10543 private:
10544 StructureType sType;
10545
10546 public:
10547 const void* pNext;
10548 FenceCreateFlags flags;
10549 };
10550 static_assert( sizeof( FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" );
10551
10552 enum class FormatFeatureFlagBits
10553 {
10554 eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
10555 eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
10556 eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,
10557 eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,
10558 eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,
10559 eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,
10560 eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,
10561 eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
10562 eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,
10563 eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,
10564 eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT,
10565 eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT,
10566 eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
10567 eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
10568 };
10569
10570 using FormatFeatureFlags = Flags<FormatFeatureFlagBits, VkFormatFeatureFlags>;
10571
10572 inline FormatFeatureFlags operator|( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 )
10573 {
10574 return FormatFeatureFlags( bit0 ) | bit1;
10575 }
10576
10577 struct FormatProperties
10578 {
10579 operator const VkFormatProperties&() const
10580 {
10581 return *reinterpret_cast<const VkFormatProperties*>(this);
10582 }
10583
10584 bool operator==( FormatProperties const& rhs ) const
10585 {
10586 return ( linearTilingFeatures == rhs.linearTilingFeatures )
10587 && ( optimalTilingFeatures == rhs.optimalTilingFeatures )
10588 && ( bufferFeatures == rhs.bufferFeatures );
10589 }
10590
10591 bool operator!=( FormatProperties const& rhs ) const
10592 {
10593 return !operator==( rhs );
10594 }
10595
10596 FormatFeatureFlags linearTilingFeatures;
10597 FormatFeatureFlags optimalTilingFeatures;
10598 FormatFeatureFlags bufferFeatures;
10599 };
10600 static_assert( sizeof( FormatProperties ) == sizeof( VkFormatProperties ), "struct and wrapper have different size!" );
10601
10602 enum class QueryControlFlagBits
10603 {
10604 ePrecise = VK_QUERY_CONTROL_PRECISE_BIT
10605 };
10606
10607 using QueryControlFlags = Flags<QueryControlFlagBits, VkQueryControlFlags>;
10608
10609 inline QueryControlFlags operator|( QueryControlFlagBits bit0, QueryControlFlagBits bit1 )
10610 {
10611 return QueryControlFlags( bit0 ) | bit1;
10612 }
10613
10614 enum class QueryResultFlagBits
10615 {
10616 e64 = VK_QUERY_RESULT_64_BIT,
10617 eWait = VK_QUERY_RESULT_WAIT_BIT,
10618 eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
10619 ePartial = VK_QUERY_RESULT_PARTIAL_BIT
10620 };
10621
10622 using QueryResultFlags = Flags<QueryResultFlagBits, VkQueryResultFlags>;
10623
10624 inline QueryResultFlags operator|( QueryResultFlagBits bit0, QueryResultFlagBits bit1 )
10625 {
10626 return QueryResultFlags( bit0 ) | bit1;
10627 }
10628
10629 enum class CommandBufferUsageFlagBits
10630 {
10631 eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
10632 eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
10633 eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
10634 };
10635
10636 using CommandBufferUsageFlags = Flags<CommandBufferUsageFlagBits, VkCommandBufferUsageFlags>;
10637
10638 inline CommandBufferUsageFlags operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 )
10639 {
10640 return CommandBufferUsageFlags( bit0 ) | bit1;
10641 }
10642
10643 enum class QueryPipelineStatisticFlagBits
10644 {
10645 eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,
10646 eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,
10647 eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,
10648 eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,
10649 eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,
10650 eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,
10651 eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,
10652 eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,
10653 eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,
10654 eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,
10655 eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
10656 };
10657
10658 using QueryPipelineStatisticFlags = Flags<QueryPipelineStatisticFlagBits, VkQueryPipelineStatisticFlags>;
10659
10660 inline QueryPipelineStatisticFlags operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 )
10661 {
10662 return QueryPipelineStatisticFlags( bit0 ) | bit1;
10663 }
10664
10665 struct CommandBufferInheritanceInfo
10666 {
10667 CommandBufferInheritanceInfo( RenderPass renderPass_ = RenderPass(), uint32_t subpass_ = 0, Framebuffer framebuffer_ = Framebuffer(), Bool32 occlusionQueryEnable_ = 0, QueryControlFlags queryFlags_ = QueryControlFlags(), QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10668 : sType( StructureType::eCommandBufferInheritanceInfo )
10669 , pNext( nullptr )
10670 , renderPass( renderPass_ )
10671 , subpass( subpass_ )
10672 , framebuffer( framebuffer_ )
10673 , occlusionQueryEnable( occlusionQueryEnable_ )
10674 , queryFlags( queryFlags_ )
10675 , pipelineStatistics( pipelineStatistics_ )
10676 {
10677 }
10678
10679 CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs )
10680 {
10681 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10682 }
10683
10684 CommandBufferInheritanceInfo& operator=( VkCommandBufferInheritanceInfo const & rhs )
10685 {
10686 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10687 return *this;
10688 }
10689
10690 CommandBufferInheritanceInfo& setSType( StructureType sType_ )
10691 {
10692 sType = sType_;
10693 return *this;
10694 }
10695
10696 CommandBufferInheritanceInfo& setPNext( const void* pNext_ )
10697 {
10698 pNext = pNext_;
10699 return *this;
10700 }
10701
10702 CommandBufferInheritanceInfo& setRenderPass( RenderPass renderPass_ )
10703 {
10704 renderPass = renderPass_;
10705 return *this;
10706 }
10707
10708 CommandBufferInheritanceInfo& setSubpass( uint32_t subpass_ )
10709 {
10710 subpass = subpass_;
10711 return *this;
10712 }
10713
10714 CommandBufferInheritanceInfo& setFramebuffer( Framebuffer framebuffer_ )
10715 {
10716 framebuffer = framebuffer_;
10717 return *this;
10718 }
10719
10720 CommandBufferInheritanceInfo& setOcclusionQueryEnable( Bool32 occlusionQueryEnable_ )
10721 {
10722 occlusionQueryEnable = occlusionQueryEnable_;
10723 return *this;
10724 }
10725
10726 CommandBufferInheritanceInfo& setQueryFlags( QueryControlFlags queryFlags_ )
10727 {
10728 queryFlags = queryFlags_;
10729 return *this;
10730 }
10731
10732 CommandBufferInheritanceInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10733 {
10734 pipelineStatistics = pipelineStatistics_;
10735 return *this;
10736 }
10737
10738 operator const VkCommandBufferInheritanceInfo&() const
10739 {
10740 return *reinterpret_cast<const VkCommandBufferInheritanceInfo*>(this);
10741 }
10742
10743 bool operator==( CommandBufferInheritanceInfo const& rhs ) const
10744 {
10745 return ( sType == rhs.sType )
10746 && ( pNext == rhs.pNext )
10747 && ( renderPass == rhs.renderPass )
10748 && ( subpass == rhs.subpass )
10749 && ( framebuffer == rhs.framebuffer )
10750 && ( occlusionQueryEnable == rhs.occlusionQueryEnable )
10751 && ( queryFlags == rhs.queryFlags )
10752 && ( pipelineStatistics == rhs.pipelineStatistics );
10753 }
10754
10755 bool operator!=( CommandBufferInheritanceInfo const& rhs ) const
10756 {
10757 return !operator==( rhs );
10758 }
10759
10760 private:
10761 StructureType sType;
10762
10763 public:
10764 const void* pNext;
10765 RenderPass renderPass;
10766 uint32_t subpass;
10767 Framebuffer framebuffer;
10768 Bool32 occlusionQueryEnable;
10769 QueryControlFlags queryFlags;
10770 QueryPipelineStatisticFlags pipelineStatistics;
10771 };
10772 static_assert( sizeof( CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ), "struct and wrapper have different size!" );
10773
10774 struct CommandBufferBeginInfo
10775 {
10776 CommandBufferBeginInfo( CommandBufferUsageFlags flags_ = CommandBufferUsageFlags(), const CommandBufferInheritanceInfo* pInheritanceInfo_ = nullptr )
10777 : sType( StructureType::eCommandBufferBeginInfo )
10778 , pNext( nullptr )
10779 , flags( flags_ )
10780 , pInheritanceInfo( pInheritanceInfo_ )
10781 {
10782 }
10783
10784 CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs )
10785 {
10786 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10787 }
10788
10789 CommandBufferBeginInfo& operator=( VkCommandBufferBeginInfo const & rhs )
10790 {
10791 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10792 return *this;
10793 }
10794
10795 CommandBufferBeginInfo& setSType( StructureType sType_ )
10796 {
10797 sType = sType_;
10798 return *this;
10799 }
10800
10801 CommandBufferBeginInfo& setPNext( const void* pNext_ )
10802 {
10803 pNext = pNext_;
10804 return *this;
10805 }
10806
10807 CommandBufferBeginInfo& setFlags( CommandBufferUsageFlags flags_ )
10808 {
10809 flags = flags_;
10810 return *this;
10811 }
10812
10813 CommandBufferBeginInfo& setPInheritanceInfo( const CommandBufferInheritanceInfo* pInheritanceInfo_ )
10814 {
10815 pInheritanceInfo = pInheritanceInfo_;
10816 return *this;
10817 }
10818
10819 operator const VkCommandBufferBeginInfo&() const
10820 {
10821 return *reinterpret_cast<const VkCommandBufferBeginInfo*>(this);
10822 }
10823
10824 bool operator==( CommandBufferBeginInfo const& rhs ) const
10825 {
10826 return ( sType == rhs.sType )
10827 && ( pNext == rhs.pNext )
10828 && ( flags == rhs.flags )
10829 && ( pInheritanceInfo == rhs.pInheritanceInfo );
10830 }
10831
10832 bool operator!=( CommandBufferBeginInfo const& rhs ) const
10833 {
10834 return !operator==( rhs );
10835 }
10836
10837 private:
10838 StructureType sType;
10839
10840 public:
10841 const void* pNext;
10842 CommandBufferUsageFlags flags;
10843 const CommandBufferInheritanceInfo* pInheritanceInfo;
10844 };
10845 static_assert( sizeof( CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ), "struct and wrapper have different size!" );
10846
10847 struct QueryPoolCreateInfo
10848 {
10849 QueryPoolCreateInfo( QueryPoolCreateFlags flags_ = QueryPoolCreateFlags(), QueryType queryType_ = QueryType::eOcclusion, uint32_t queryCount_ = 0, QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10850 : sType( StructureType::eQueryPoolCreateInfo )
10851 , pNext( nullptr )
10852 , flags( flags_ )
10853 , queryType( queryType_ )
10854 , queryCount( queryCount_ )
10855 , pipelineStatistics( pipelineStatistics_ )
10856 {
10857 }
10858
10859 QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs )
10860 {
10861 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10862 }
10863
10864 QueryPoolCreateInfo& operator=( VkQueryPoolCreateInfo const & rhs )
10865 {
10866 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10867 return *this;
10868 }
10869
10870 QueryPoolCreateInfo& setSType( StructureType sType_ )
10871 {
10872 sType = sType_;
10873 return *this;
10874 }
10875
10876 QueryPoolCreateInfo& setPNext( const void* pNext_ )
10877 {
10878 pNext = pNext_;
10879 return *this;
10880 }
10881
10882 QueryPoolCreateInfo& setFlags( QueryPoolCreateFlags flags_ )
10883 {
10884 flags = flags_;
10885 return *this;
10886 }
10887
10888 QueryPoolCreateInfo& setQueryType( QueryType queryType_ )
10889 {
10890 queryType = queryType_;
10891 return *this;
10892 }
10893
10894 QueryPoolCreateInfo& setQueryCount( uint32_t queryCount_ )
10895 {
10896 queryCount = queryCount_;
10897 return *this;
10898 }
10899
10900 QueryPoolCreateInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10901 {
10902 pipelineStatistics = pipelineStatistics_;
10903 return *this;
10904 }
10905
10906 operator const VkQueryPoolCreateInfo&() const
10907 {
10908 return *reinterpret_cast<const VkQueryPoolCreateInfo*>(this);
10909 }
10910
10911 bool operator==( QueryPoolCreateInfo const& rhs ) const
10912 {
10913 return ( sType == rhs.sType )
10914 && ( pNext == rhs.pNext )
10915 && ( flags == rhs.flags )
10916 && ( queryType == rhs.queryType )
10917 && ( queryCount == rhs.queryCount )
10918 && ( pipelineStatistics == rhs.pipelineStatistics );
10919 }
10920
10921 bool operator!=( QueryPoolCreateInfo const& rhs ) const
10922 {
10923 return !operator==( rhs );
10924 }
10925
10926 private:
10927 StructureType sType;
10928
10929 public:
10930 const void* pNext;
10931 QueryPoolCreateFlags flags;
10932 QueryType queryType;
10933 uint32_t queryCount;
10934 QueryPipelineStatisticFlags pipelineStatistics;
10935 };
10936 static_assert( sizeof( QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ), "struct and wrapper have different size!" );
10937
10938 enum class ImageAspectFlagBits
10939 {
10940 eColor = VK_IMAGE_ASPECT_COLOR_BIT,
10941 eDepth = VK_IMAGE_ASPECT_DEPTH_BIT,
10942 eStencil = VK_IMAGE_ASPECT_STENCIL_BIT,
10943 eMetadata = VK_IMAGE_ASPECT_METADATA_BIT
10944 };
10945
10946 using ImageAspectFlags = Flags<ImageAspectFlagBits, VkImageAspectFlags>;
10947
10948 inline ImageAspectFlags operator|( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 )
10949 {
10950 return ImageAspectFlags( bit0 ) | bit1;
10951 }
10952
10953 struct ImageSubresource
10954 {
10955 ImageSubresource( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t arrayLayer_ = 0 )
10956 : aspectMask( aspectMask_ )
10957 , mipLevel( mipLevel_ )
10958 , arrayLayer( arrayLayer_ )
10959 {
10960 }
10961
10962 ImageSubresource( VkImageSubresource const & rhs )
10963 {
10964 memcpy( this, &rhs, sizeof(ImageSubresource) );
10965 }
10966
10967 ImageSubresource& operator=( VkImageSubresource const & rhs )
10968 {
10969 memcpy( this, &rhs, sizeof(ImageSubresource) );
10970 return *this;
10971 }
10972
10973 ImageSubresource& setAspectMask( ImageAspectFlags aspectMask_ )
10974 {
10975 aspectMask = aspectMask_;
10976 return *this;
10977 }
10978
10979 ImageSubresource& setMipLevel( uint32_t mipLevel_ )
10980 {
10981 mipLevel = mipLevel_;
10982 return *this;
10983 }
10984
10985 ImageSubresource& setArrayLayer( uint32_t arrayLayer_ )
10986 {
10987 arrayLayer = arrayLayer_;
10988 return *this;
10989 }
10990
10991 operator const VkImageSubresource&() const
10992 {
10993 return *reinterpret_cast<const VkImageSubresource*>(this);
10994 }
10995
10996 bool operator==( ImageSubresource const& rhs ) const
10997 {
10998 return ( aspectMask == rhs.aspectMask )
10999 && ( mipLevel == rhs.mipLevel )
11000 && ( arrayLayer == rhs.arrayLayer );
11001 }
11002
11003 bool operator!=( ImageSubresource const& rhs ) const
11004 {
11005 return !operator==( rhs );
11006 }
11007
11008 ImageAspectFlags aspectMask;
11009 uint32_t mipLevel;
11010 uint32_t arrayLayer;
11011 };
11012 static_assert( sizeof( ImageSubresource ) == sizeof( VkImageSubresource ), "struct and wrapper have different size!" );
11013
11014 struct ImageSubresourceLayers
11015 {
11016 ImageSubresourceLayers( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
11017 : aspectMask( aspectMask_ )
11018 , mipLevel( mipLevel_ )
11019 , baseArrayLayer( baseArrayLayer_ )
11020 , layerCount( layerCount_ )
11021 {
11022 }
11023
11024 ImageSubresourceLayers( VkImageSubresourceLayers const & rhs )
11025 {
11026 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
11027 }
11028
11029 ImageSubresourceLayers& operator=( VkImageSubresourceLayers const & rhs )
11030 {
11031 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
11032 return *this;
11033 }
11034
11035 ImageSubresourceLayers& setAspectMask( ImageAspectFlags aspectMask_ )
11036 {
11037 aspectMask = aspectMask_;
11038 return *this;
11039 }
11040
11041 ImageSubresourceLayers& setMipLevel( uint32_t mipLevel_ )
11042 {
11043 mipLevel = mipLevel_;
11044 return *this;
11045 }
11046
11047 ImageSubresourceLayers& setBaseArrayLayer( uint32_t baseArrayLayer_ )
11048 {
11049 baseArrayLayer = baseArrayLayer_;
11050 return *this;
11051 }
11052
11053 ImageSubresourceLayers& setLayerCount( uint32_t layerCount_ )
11054 {
11055 layerCount = layerCount_;
11056 return *this;
11057 }
11058
11059 operator const VkImageSubresourceLayers&() const
11060 {
11061 return *reinterpret_cast<const VkImageSubresourceLayers*>(this);
11062 }
11063
11064 bool operator==( ImageSubresourceLayers const& rhs ) const
11065 {
11066 return ( aspectMask == rhs.aspectMask )
11067 && ( mipLevel == rhs.mipLevel )
11068 && ( baseArrayLayer == rhs.baseArrayLayer )
11069 && ( layerCount == rhs.layerCount );
11070 }
11071
11072 bool operator!=( ImageSubresourceLayers const& rhs ) const
11073 {
11074 return !operator==( rhs );
11075 }
11076
11077 ImageAspectFlags aspectMask;
11078 uint32_t mipLevel;
11079 uint32_t baseArrayLayer;
11080 uint32_t layerCount;
11081 };
11082 static_assert( sizeof( ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ), "struct and wrapper have different size!" );
11083
11084 struct ImageSubresourceRange
11085 {
11086 ImageSubresourceRange( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t baseMipLevel_ = 0, uint32_t levelCount_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
11087 : aspectMask( aspectMask_ )
11088 , baseMipLevel( baseMipLevel_ )
11089 , levelCount( levelCount_ )
11090 , baseArrayLayer( baseArrayLayer_ )
11091 , layerCount( layerCount_ )
11092 {
11093 }
11094
11095 ImageSubresourceRange( VkImageSubresourceRange const & rhs )
11096 {
11097 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
11098 }
11099
11100 ImageSubresourceRange& operator=( VkImageSubresourceRange const & rhs )
11101 {
11102 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
11103 return *this;
11104 }
11105
11106 ImageSubresourceRange& setAspectMask( ImageAspectFlags aspectMask_ )
11107 {
11108 aspectMask = aspectMask_;
11109 return *this;
11110 }
11111
11112 ImageSubresourceRange& setBaseMipLevel( uint32_t baseMipLevel_ )
11113 {
11114 baseMipLevel = baseMipLevel_;
11115 return *this;
11116 }
11117
11118 ImageSubresourceRange& setLevelCount( uint32_t levelCount_ )
11119 {
11120 levelCount = levelCount_;
11121 return *this;
11122 }
11123
11124 ImageSubresourceRange& setBaseArrayLayer( uint32_t baseArrayLayer_ )
11125 {
11126 baseArrayLayer = baseArrayLayer_;
11127 return *this;
11128 }
11129
11130 ImageSubresourceRange& setLayerCount( uint32_t layerCount_ )
11131 {
11132 layerCount = layerCount_;
11133 return *this;
11134 }
11135
11136 operator const VkImageSubresourceRange&() const
11137 {
11138 return *reinterpret_cast<const VkImageSubresourceRange*>(this);
11139 }
11140
11141 bool operator==( ImageSubresourceRange const& rhs ) const
11142 {
11143 return ( aspectMask == rhs.aspectMask )
11144 && ( baseMipLevel == rhs.baseMipLevel )
11145 && ( levelCount == rhs.levelCount )
11146 && ( baseArrayLayer == rhs.baseArrayLayer )
11147 && ( layerCount == rhs.layerCount );
11148 }
11149
11150 bool operator!=( ImageSubresourceRange const& rhs ) const
11151 {
11152 return !operator==( rhs );
11153 }
11154
11155 ImageAspectFlags aspectMask;
11156 uint32_t baseMipLevel;
11157 uint32_t levelCount;
11158 uint32_t baseArrayLayer;
11159 uint32_t layerCount;
11160 };
11161 static_assert( sizeof( ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ), "struct and wrapper have different size!" );
11162
11163 struct ImageMemoryBarrier
11164 {
11165 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() )
11166 : sType( StructureType::eImageMemoryBarrier )
11167 , pNext( nullptr )
11168 , srcAccessMask( srcAccessMask_ )
11169 , dstAccessMask( dstAccessMask_ )
11170 , oldLayout( oldLayout_ )
11171 , newLayout( newLayout_ )
11172 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
11173 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
11174 , image( image_ )
11175 , subresourceRange( subresourceRange_ )
11176 {
11177 }
11178
11179 ImageMemoryBarrier( VkImageMemoryBarrier const & rhs )
11180 {
11181 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11182 }
11183
11184 ImageMemoryBarrier& operator=( VkImageMemoryBarrier const & rhs )
11185 {
11186 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11187 return *this;
11188 }
11189
11190 ImageMemoryBarrier& setSType( StructureType sType_ )
11191 {
11192 sType = sType_;
11193 return *this;
11194 }
11195
11196 ImageMemoryBarrier& setPNext( const void* pNext_ )
11197 {
11198 pNext = pNext_;
11199 return *this;
11200 }
11201
11202 ImageMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
11203 {
11204 srcAccessMask = srcAccessMask_;
11205 return *this;
11206 }
11207
11208 ImageMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
11209 {
11210 dstAccessMask = dstAccessMask_;
11211 return *this;
11212 }
11213
11214 ImageMemoryBarrier& setOldLayout( ImageLayout oldLayout_ )
11215 {
11216 oldLayout = oldLayout_;
11217 return *this;
11218 }
11219
11220 ImageMemoryBarrier& setNewLayout( ImageLayout newLayout_ )
11221 {
11222 newLayout = newLayout_;
11223 return *this;
11224 }
11225
11226 ImageMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
11227 {
11228 srcQueueFamilyIndex = srcQueueFamilyIndex_;
11229 return *this;
11230 }
11231
11232 ImageMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
11233 {
11234 dstQueueFamilyIndex = dstQueueFamilyIndex_;
11235 return *this;
11236 }
11237
11238 ImageMemoryBarrier& setImage( Image image_ )
11239 {
11240 image = image_;
11241 return *this;
11242 }
11243
11244 ImageMemoryBarrier& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11245 {
11246 subresourceRange = subresourceRange_;
11247 return *this;
11248 }
11249
11250 operator const VkImageMemoryBarrier&() const
11251 {
11252 return *reinterpret_cast<const VkImageMemoryBarrier*>(this);
11253 }
11254
11255 bool operator==( ImageMemoryBarrier const& rhs ) const
11256 {
11257 return ( sType == rhs.sType )
11258 && ( pNext == rhs.pNext )
11259 && ( srcAccessMask == rhs.srcAccessMask )
11260 && ( dstAccessMask == rhs.dstAccessMask )
11261 && ( oldLayout == rhs.oldLayout )
11262 && ( newLayout == rhs.newLayout )
11263 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
11264 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
11265 && ( image == rhs.image )
11266 && ( subresourceRange == rhs.subresourceRange );
11267 }
11268
11269 bool operator!=( ImageMemoryBarrier const& rhs ) const
11270 {
11271 return !operator==( rhs );
11272 }
11273
11274 private:
11275 StructureType sType;
11276
11277 public:
11278 const void* pNext;
11279 AccessFlags srcAccessMask;
11280 AccessFlags dstAccessMask;
11281 ImageLayout oldLayout;
11282 ImageLayout newLayout;
11283 uint32_t srcQueueFamilyIndex;
11284 uint32_t dstQueueFamilyIndex;
11285 Image image;
11286 ImageSubresourceRange subresourceRange;
11287 };
11288 static_assert( sizeof( ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ), "struct and wrapper have different size!" );
11289
11290 struct ImageViewCreateInfo
11291 {
11292 ImageViewCreateInfo( ImageViewCreateFlags flags_ = ImageViewCreateFlags(), Image image_ = Image(), ImageViewType viewType_ = ImageViewType::e1D, Format format_ = Format::eUndefined, ComponentMapping components_ = ComponentMapping(), ImageSubresourceRange subresourceRange_ = ImageSubresourceRange() )
11293 : sType( StructureType::eImageViewCreateInfo )
11294 , pNext( nullptr )
11295 , flags( flags_ )
11296 , image( image_ )
11297 , viewType( viewType_ )
11298 , format( format_ )
11299 , components( components_ )
11300 , subresourceRange( subresourceRange_ )
11301 {
11302 }
11303
11304 ImageViewCreateInfo( VkImageViewCreateInfo const & rhs )
11305 {
11306 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11307 }
11308
11309 ImageViewCreateInfo& operator=( VkImageViewCreateInfo const & rhs )
11310 {
11311 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11312 return *this;
11313 }
11314
11315 ImageViewCreateInfo& setSType( StructureType sType_ )
11316 {
11317 sType = sType_;
11318 return *this;
11319 }
11320
11321 ImageViewCreateInfo& setPNext( const void* pNext_ )
11322 {
11323 pNext = pNext_;
11324 return *this;
11325 }
11326
11327 ImageViewCreateInfo& setFlags( ImageViewCreateFlags flags_ )
11328 {
11329 flags = flags_;
11330 return *this;
11331 }
11332
11333 ImageViewCreateInfo& setImage( Image image_ )
11334 {
11335 image = image_;
11336 return *this;
11337 }
11338
11339 ImageViewCreateInfo& setViewType( ImageViewType viewType_ )
11340 {
11341 viewType = viewType_;
11342 return *this;
11343 }
11344
11345 ImageViewCreateInfo& setFormat( Format format_ )
11346 {
11347 format = format_;
11348 return *this;
11349 }
11350
11351 ImageViewCreateInfo& setComponents( ComponentMapping components_ )
11352 {
11353 components = components_;
11354 return *this;
11355 }
11356
11357 ImageViewCreateInfo& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11358 {
11359 subresourceRange = subresourceRange_;
11360 return *this;
11361 }
11362
11363 operator const VkImageViewCreateInfo&() const
11364 {
11365 return *reinterpret_cast<const VkImageViewCreateInfo*>(this);
11366 }
11367
11368 bool operator==( ImageViewCreateInfo const& rhs ) const
11369 {
11370 return ( sType == rhs.sType )
11371 && ( pNext == rhs.pNext )
11372 && ( flags == rhs.flags )
11373 && ( image == rhs.image )
11374 && ( viewType == rhs.viewType )
11375 && ( format == rhs.format )
11376 && ( components == rhs.components )
11377 && ( subresourceRange == rhs.subresourceRange );
11378 }
11379
11380 bool operator!=( ImageViewCreateInfo const& rhs ) const
11381 {
11382 return !operator==( rhs );
11383 }
11384
11385 private:
11386 StructureType sType;
11387
11388 public:
11389 const void* pNext;
11390 ImageViewCreateFlags flags;
11391 Image image;
11392 ImageViewType viewType;
11393 Format format;
11394 ComponentMapping components;
11395 ImageSubresourceRange subresourceRange;
11396 };
11397 static_assert( sizeof( ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ), "struct and wrapper have different size!" );
11398
11399 struct ImageCopy
11400 {
11401 ImageCopy( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11402 : srcSubresource( srcSubresource_ )
11403 , srcOffset( srcOffset_ )
11404 , dstSubresource( dstSubresource_ )
11405 , dstOffset( dstOffset_ )
11406 , extent( extent_ )
11407 {
11408 }
11409
11410 ImageCopy( VkImageCopy const & rhs )
11411 {
11412 memcpy( this, &rhs, sizeof(ImageCopy) );
11413 }
11414
11415 ImageCopy& operator=( VkImageCopy const & rhs )
11416 {
11417 memcpy( this, &rhs, sizeof(ImageCopy) );
11418 return *this;
11419 }
11420
11421 ImageCopy& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11422 {
11423 srcSubresource = srcSubresource_;
11424 return *this;
11425 }
11426
11427 ImageCopy& setSrcOffset( Offset3D srcOffset_ )
11428 {
11429 srcOffset = srcOffset_;
11430 return *this;
11431 }
11432
11433 ImageCopy& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11434 {
11435 dstSubresource = dstSubresource_;
11436 return *this;
11437 }
11438
11439 ImageCopy& setDstOffset( Offset3D dstOffset_ )
11440 {
11441 dstOffset = dstOffset_;
11442 return *this;
11443 }
11444
11445 ImageCopy& setExtent( Extent3D extent_ )
11446 {
11447 extent = extent_;
11448 return *this;
11449 }
11450
11451 operator const VkImageCopy&() const
11452 {
11453 return *reinterpret_cast<const VkImageCopy*>(this);
11454 }
11455
11456 bool operator==( ImageCopy const& rhs ) const
11457 {
11458 return ( srcSubresource == rhs.srcSubresource )
11459 && ( srcOffset == rhs.srcOffset )
11460 && ( dstSubresource == rhs.dstSubresource )
11461 && ( dstOffset == rhs.dstOffset )
11462 && ( extent == rhs.extent );
11463 }
11464
11465 bool operator!=( ImageCopy const& rhs ) const
11466 {
11467 return !operator==( rhs );
11468 }
11469
11470 ImageSubresourceLayers srcSubresource;
11471 Offset3D srcOffset;
11472 ImageSubresourceLayers dstSubresource;
11473 Offset3D dstOffset;
11474 Extent3D extent;
11475 };
11476 static_assert( sizeof( ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" );
11477
11478 struct ImageBlit
11479 {
11480 ImageBlit( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& srcOffsets_ = { { Offset3D(), Offset3D() } }, ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& dstOffsets_ = { { Offset3D(), Offset3D() } } )
11481 : srcSubresource( srcSubresource_ )
11482 , dstSubresource( dstSubresource_ )
11483 {
11484 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11485 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11486 }
11487
11488 ImageBlit( VkImageBlit const & rhs )
11489 {
11490 memcpy( this, &rhs, sizeof(ImageBlit) );
11491 }
11492
11493 ImageBlit& operator=( VkImageBlit const & rhs )
11494 {
11495 memcpy( this, &rhs, sizeof(ImageBlit) );
11496 return *this;
11497 }
11498
11499 ImageBlit& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11500 {
11501 srcSubresource = srcSubresource_;
11502 return *this;
11503 }
11504
11505 ImageBlit& setSrcOffsets( std::array<Offset3D,2> srcOffsets_ )
11506 {
11507 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11508 return *this;
11509 }
11510
11511 ImageBlit& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11512 {
11513 dstSubresource = dstSubresource_;
11514 return *this;
11515 }
11516
11517 ImageBlit& setDstOffsets( std::array<Offset3D,2> dstOffsets_ )
11518 {
11519 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11520 return *this;
11521 }
11522
11523 operator const VkImageBlit&() const
11524 {
11525 return *reinterpret_cast<const VkImageBlit*>(this);
11526 }
11527
11528 bool operator==( ImageBlit const& rhs ) const
11529 {
11530 return ( srcSubresource == rhs.srcSubresource )
11531 && ( memcmp( srcOffsets, rhs.srcOffsets, 2 * sizeof( Offset3D ) ) == 0 )
11532 && ( dstSubresource == rhs.dstSubresource )
11533 && ( memcmp( dstOffsets, rhs.dstOffsets, 2 * sizeof( Offset3D ) ) == 0 );
11534 }
11535
11536 bool operator!=( ImageBlit const& rhs ) const
11537 {
11538 return !operator==( rhs );
11539 }
11540
11541 ImageSubresourceLayers srcSubresource;
11542 Offset3D srcOffsets[2];
11543 ImageSubresourceLayers dstSubresource;
11544 Offset3D dstOffsets[2];
11545 };
11546 static_assert( sizeof( ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" );
11547
11548 struct BufferImageCopy
11549 {
11550 BufferImageCopy( DeviceSize bufferOffset_ = 0, uint32_t bufferRowLength_ = 0, uint32_t bufferImageHeight_ = 0, ImageSubresourceLayers imageSubresource_ = ImageSubresourceLayers(), Offset3D imageOffset_ = Offset3D(), Extent3D imageExtent_ = Extent3D() )
11551 : bufferOffset( bufferOffset_ )
11552 , bufferRowLength( bufferRowLength_ )
11553 , bufferImageHeight( bufferImageHeight_ )
11554 , imageSubresource( imageSubresource_ )
11555 , imageOffset( imageOffset_ )
11556 , imageExtent( imageExtent_ )
11557 {
11558 }
11559
11560 BufferImageCopy( VkBufferImageCopy const & rhs )
11561 {
11562 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11563 }
11564
11565 BufferImageCopy& operator=( VkBufferImageCopy const & rhs )
11566 {
11567 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11568 return *this;
11569 }
11570
11571 BufferImageCopy& setBufferOffset( DeviceSize bufferOffset_ )
11572 {
11573 bufferOffset = bufferOffset_;
11574 return *this;
11575 }
11576
11577 BufferImageCopy& setBufferRowLength( uint32_t bufferRowLength_ )
11578 {
11579 bufferRowLength = bufferRowLength_;
11580 return *this;
11581 }
11582
11583 BufferImageCopy& setBufferImageHeight( uint32_t bufferImageHeight_ )
11584 {
11585 bufferImageHeight = bufferImageHeight_;
11586 return *this;
11587 }
11588
11589 BufferImageCopy& setImageSubresource( ImageSubresourceLayers imageSubresource_ )
11590 {
11591 imageSubresource = imageSubresource_;
11592 return *this;
11593 }
11594
11595 BufferImageCopy& setImageOffset( Offset3D imageOffset_ )
11596 {
11597 imageOffset = imageOffset_;
11598 return *this;
11599 }
11600
11601 BufferImageCopy& setImageExtent( Extent3D imageExtent_ )
11602 {
11603 imageExtent = imageExtent_;
11604 return *this;
11605 }
11606
11607 operator const VkBufferImageCopy&() const
11608 {
11609 return *reinterpret_cast<const VkBufferImageCopy*>(this);
11610 }
11611
11612 bool operator==( BufferImageCopy const& rhs ) const
11613 {
11614 return ( bufferOffset == rhs.bufferOffset )
11615 && ( bufferRowLength == rhs.bufferRowLength )
11616 && ( bufferImageHeight == rhs.bufferImageHeight )
11617 && ( imageSubresource == rhs.imageSubresource )
11618 && ( imageOffset == rhs.imageOffset )
11619 && ( imageExtent == rhs.imageExtent );
11620 }
11621
11622 bool operator!=( BufferImageCopy const& rhs ) const
11623 {
11624 return !operator==( rhs );
11625 }
11626
11627 DeviceSize bufferOffset;
11628 uint32_t bufferRowLength;
11629 uint32_t bufferImageHeight;
11630 ImageSubresourceLayers imageSubresource;
11631 Offset3D imageOffset;
11632 Extent3D imageExtent;
11633 };
11634 static_assert( sizeof( BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" );
11635
11636 struct ImageResolve
11637 {
11638 ImageResolve( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11639 : srcSubresource( srcSubresource_ )
11640 , srcOffset( srcOffset_ )
11641 , dstSubresource( dstSubresource_ )
11642 , dstOffset( dstOffset_ )
11643 , extent( extent_ )
11644 {
11645 }
11646
11647 ImageResolve( VkImageResolve const & rhs )
11648 {
11649 memcpy( this, &rhs, sizeof(ImageResolve) );
11650 }
11651
11652 ImageResolve& operator=( VkImageResolve const & rhs )
11653 {
11654 memcpy( this, &rhs, sizeof(ImageResolve) );
11655 return *this;
11656 }
11657
11658 ImageResolve& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11659 {
11660 srcSubresource = srcSubresource_;
11661 return *this;
11662 }
11663
11664 ImageResolve& setSrcOffset( Offset3D srcOffset_ )
11665 {
11666 srcOffset = srcOffset_;
11667 return *this;
11668 }
11669
11670 ImageResolve& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11671 {
11672 dstSubresource = dstSubresource_;
11673 return *this;
11674 }
11675
11676 ImageResolve& setDstOffset( Offset3D dstOffset_ )
11677 {
11678 dstOffset = dstOffset_;
11679 return *this;
11680 }
11681
11682 ImageResolve& setExtent( Extent3D extent_ )
11683 {
11684 extent = extent_;
11685 return *this;
11686 }
11687
11688 operator const VkImageResolve&() const
11689 {
11690 return *reinterpret_cast<const VkImageResolve*>(this);
11691 }
11692
11693 bool operator==( ImageResolve const& rhs ) const
11694 {
11695 return ( srcSubresource == rhs.srcSubresource )
11696 && ( srcOffset == rhs.srcOffset )
11697 && ( dstSubresource == rhs.dstSubresource )
11698 && ( dstOffset == rhs.dstOffset )
11699 && ( extent == rhs.extent );
11700 }
11701
11702 bool operator!=( ImageResolve const& rhs ) const
11703 {
11704 return !operator==( rhs );
11705 }
11706
11707 ImageSubresourceLayers srcSubresource;
11708 Offset3D srcOffset;
11709 ImageSubresourceLayers dstSubresource;
11710 Offset3D dstOffset;
11711 Extent3D extent;
11712 };
11713 static_assert( sizeof( ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" );
11714
11715 struct ClearAttachment
11716 {
11717 ClearAttachment( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t colorAttachment_ = 0, ClearValue clearValue_ = ClearValue() )
11718 : aspectMask( aspectMask_ )
11719 , colorAttachment( colorAttachment_ )
11720 , clearValue( clearValue_ )
11721 {
11722 }
11723
11724 ClearAttachment( VkClearAttachment const & rhs )
11725 {
11726 memcpy( this, &rhs, sizeof(ClearAttachment) );
11727 }
11728
11729 ClearAttachment& operator=( VkClearAttachment const & rhs )
11730 {
11731 memcpy( this, &rhs, sizeof(ClearAttachment) );
11732 return *this;
11733 }
11734
11735 ClearAttachment& setAspectMask( ImageAspectFlags aspectMask_ )
11736 {
11737 aspectMask = aspectMask_;
11738 return *this;
11739 }
11740
11741 ClearAttachment& setColorAttachment( uint32_t colorAttachment_ )
11742 {
11743 colorAttachment = colorAttachment_;
11744 return *this;
11745 }
11746
11747 ClearAttachment& setClearValue( ClearValue clearValue_ )
11748 {
11749 clearValue = clearValue_;
11750 return *this;
11751 }
11752
11753 operator const VkClearAttachment&() const
11754 {
11755 return *reinterpret_cast<const VkClearAttachment*>(this);
11756 }
11757
11758 ImageAspectFlags aspectMask;
11759 uint32_t colorAttachment;
11760 ClearValue clearValue;
11761 };
11762 static_assert( sizeof( ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" );
11763
11764 enum class SparseImageFormatFlagBits
11765 {
11766 eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,
11767 eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,
11768 eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
11769 };
11770
11771 using SparseImageFormatFlags = Flags<SparseImageFormatFlagBits, VkSparseImageFormatFlags>;
11772
11773 inline SparseImageFormatFlags operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 )
11774 {
11775 return SparseImageFormatFlags( bit0 ) | bit1;
11776 }
11777
11778 struct SparseImageFormatProperties
11779 {
11780 operator const VkSparseImageFormatProperties&() const
11781 {
11782 return *reinterpret_cast<const VkSparseImageFormatProperties*>(this);
11783 }
11784
11785 bool operator==( SparseImageFormatProperties const& rhs ) const
11786 {
11787 return ( aspectMask == rhs.aspectMask )
11788 && ( imageGranularity == rhs.imageGranularity )
11789 && ( flags == rhs.flags );
11790 }
11791
11792 bool operator!=( SparseImageFormatProperties const& rhs ) const
11793 {
11794 return !operator==( rhs );
11795 }
11796
11797 ImageAspectFlags aspectMask;
11798 Extent3D imageGranularity;
11799 SparseImageFormatFlags flags;
11800 };
11801 static_assert( sizeof( SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ), "struct and wrapper have different size!" );
11802
11803 struct SparseImageMemoryRequirements
11804 {
11805 operator const VkSparseImageMemoryRequirements&() const
11806 {
11807 return *reinterpret_cast<const VkSparseImageMemoryRequirements*>(this);
11808 }
11809
11810 bool operator==( SparseImageMemoryRequirements const& rhs ) const
11811 {
11812 return ( formatProperties == rhs.formatProperties )
11813 && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod )
11814 && ( imageMipTailSize == rhs.imageMipTailSize )
11815 && ( imageMipTailOffset == rhs.imageMipTailOffset )
11816 && ( imageMipTailStride == rhs.imageMipTailStride );
11817 }
11818
11819 bool operator!=( SparseImageMemoryRequirements const& rhs ) const
11820 {
11821 return !operator==( rhs );
11822 }
11823
11824 SparseImageFormatProperties formatProperties;
11825 uint32_t imageMipTailFirstLod;
11826 DeviceSize imageMipTailSize;
11827 DeviceSize imageMipTailOffset;
11828 DeviceSize imageMipTailStride;
11829 };
11830 static_assert( sizeof( SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ), "struct and wrapper have different size!" );
11831
11832 enum class SparseMemoryBindFlagBits
11833 {
11834 eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT
11835 };
11836
11837 using SparseMemoryBindFlags = Flags<SparseMemoryBindFlagBits, VkSparseMemoryBindFlags>;
11838
11839 inline SparseMemoryBindFlags operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 )
11840 {
11841 return SparseMemoryBindFlags( bit0 ) | bit1;
11842 }
11843
11844 struct SparseMemoryBind
11845 {
11846 SparseMemoryBind( DeviceSize resourceOffset_ = 0, DeviceSize size_ = 0, DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11847 : resourceOffset( resourceOffset_ )
11848 , size( size_ )
11849 , memory( memory_ )
11850 , memoryOffset( memoryOffset_ )
11851 , flags( flags_ )
11852 {
11853 }
11854
11855 SparseMemoryBind( VkSparseMemoryBind const & rhs )
11856 {
11857 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11858 }
11859
11860 SparseMemoryBind& operator=( VkSparseMemoryBind const & rhs )
11861 {
11862 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11863 return *this;
11864 }
11865
11866 SparseMemoryBind& setResourceOffset( DeviceSize resourceOffset_ )
11867 {
11868 resourceOffset = resourceOffset_;
11869 return *this;
11870 }
11871
11872 SparseMemoryBind& setSize( DeviceSize size_ )
11873 {
11874 size = size_;
11875 return *this;
11876 }
11877
11878 SparseMemoryBind& setMemory( DeviceMemory memory_ )
11879 {
11880 memory = memory_;
11881 return *this;
11882 }
11883
11884 SparseMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
11885 {
11886 memoryOffset = memoryOffset_;
11887 return *this;
11888 }
11889
11890 SparseMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
11891 {
11892 flags = flags_;
11893 return *this;
11894 }
11895
11896 operator const VkSparseMemoryBind&() const
11897 {
11898 return *reinterpret_cast<const VkSparseMemoryBind*>(this);
11899 }
11900
11901 bool operator==( SparseMemoryBind const& rhs ) const
11902 {
11903 return ( resourceOffset == rhs.resourceOffset )
11904 && ( size == rhs.size )
11905 && ( memory == rhs.memory )
11906 && ( memoryOffset == rhs.memoryOffset )
11907 && ( flags == rhs.flags );
11908 }
11909
11910 bool operator!=( SparseMemoryBind const& rhs ) const
11911 {
11912 return !operator==( rhs );
11913 }
11914
11915 DeviceSize resourceOffset;
11916 DeviceSize size;
11917 DeviceMemory memory;
11918 DeviceSize memoryOffset;
11919 SparseMemoryBindFlags flags;
11920 };
11921 static_assert( sizeof( SparseMemoryBind ) == sizeof( VkSparseMemoryBind ), "struct and wrapper have different size!" );
11922
11923 struct SparseImageMemoryBind
11924 {
11925 SparseImageMemoryBind( ImageSubresource subresource_ = ImageSubresource(), Offset3D offset_ = Offset3D(), Extent3D extent_ = Extent3D(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11926 : subresource( subresource_ )
11927 , offset( offset_ )
11928 , extent( extent_ )
11929 , memory( memory_ )
11930 , memoryOffset( memoryOffset_ )
11931 , flags( flags_ )
11932 {
11933 }
11934
11935 SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs )
11936 {
11937 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
11938 }
11939
11940 SparseImageMemoryBind& operator=( VkSparseImageMemoryBind const & rhs )
11941 {
11942 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
11943 return *this;
11944 }
11945
11946 SparseImageMemoryBind& setSubresource( ImageSubresource subresource_ )
11947 {
11948 subresource = subresource_;
11949 return *this;
11950 }
11951
11952 SparseImageMemoryBind& setOffset( Offset3D offset_ )
11953 {
11954 offset = offset_;
11955 return *this;
11956 }
11957
11958 SparseImageMemoryBind& setExtent( Extent3D extent_ )
11959 {
11960 extent = extent_;
11961 return *this;
11962 }
11963
11964 SparseImageMemoryBind& setMemory( DeviceMemory memory_ )
11965 {
11966 memory = memory_;
11967 return *this;
11968 }
11969
11970 SparseImageMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
11971 {
11972 memoryOffset = memoryOffset_;
11973 return *this;
11974 }
11975
11976 SparseImageMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
11977 {
11978 flags = flags_;
11979 return *this;
11980 }
11981
11982 operator const VkSparseImageMemoryBind&() const
11983 {
11984 return *reinterpret_cast<const VkSparseImageMemoryBind*>(this);
11985 }
11986
11987 bool operator==( SparseImageMemoryBind const& rhs ) const
11988 {
11989 return ( subresource == rhs.subresource )
11990 && ( offset == rhs.offset )
11991 && ( extent == rhs.extent )
11992 && ( memory == rhs.memory )
11993 && ( memoryOffset == rhs.memoryOffset )
11994 && ( flags == rhs.flags );
11995 }
11996
11997 bool operator!=( SparseImageMemoryBind const& rhs ) const
11998 {
11999 return !operator==( rhs );
12000 }
12001
12002 ImageSubresource subresource;
12003 Offset3D offset;
12004 Extent3D extent;
12005 DeviceMemory memory;
12006 DeviceSize memoryOffset;
12007 SparseMemoryBindFlags flags;
12008 };
12009 static_assert( sizeof( SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ), "struct and wrapper have different size!" );
12010
12011 struct SparseBufferMemoryBindInfo
12012 {
12013 SparseBufferMemoryBindInfo( Buffer buffer_ = Buffer(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
12014 : buffer( buffer_ )
12015 , bindCount( bindCount_ )
12016 , pBinds( pBinds_ )
12017 {
12018 }
12019
12020 SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs )
12021 {
12022 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
12023 }
12024
12025 SparseBufferMemoryBindInfo& operator=( VkSparseBufferMemoryBindInfo const & rhs )
12026 {
12027 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
12028 return *this;
12029 }
12030
12031 SparseBufferMemoryBindInfo& setBuffer( Buffer buffer_ )
12032 {
12033 buffer = buffer_;
12034 return *this;
12035 }
12036
12037 SparseBufferMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12038 {
12039 bindCount = bindCount_;
12040 return *this;
12041 }
12042
12043 SparseBufferMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
12044 {
12045 pBinds = pBinds_;
12046 return *this;
12047 }
12048
12049 operator const VkSparseBufferMemoryBindInfo&() const
12050 {
12051 return *reinterpret_cast<const VkSparseBufferMemoryBindInfo*>(this);
12052 }
12053
12054 bool operator==( SparseBufferMemoryBindInfo const& rhs ) const
12055 {
12056 return ( buffer == rhs.buffer )
12057 && ( bindCount == rhs.bindCount )
12058 && ( pBinds == rhs.pBinds );
12059 }
12060
12061 bool operator!=( SparseBufferMemoryBindInfo const& rhs ) const
12062 {
12063 return !operator==( rhs );
12064 }
12065
12066 Buffer buffer;
12067 uint32_t bindCount;
12068 const SparseMemoryBind* pBinds;
12069 };
12070 static_assert( sizeof( SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ), "struct and wrapper have different size!" );
12071
12072 struct SparseImageOpaqueMemoryBindInfo
12073 {
12074 SparseImageOpaqueMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
12075 : image( image_ )
12076 , bindCount( bindCount_ )
12077 , pBinds( pBinds_ )
12078 {
12079 }
12080
12081 SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs )
12082 {
12083 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
12084 }
12085
12086 SparseImageOpaqueMemoryBindInfo& operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs )
12087 {
12088 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
12089 return *this;
12090 }
12091
12092 SparseImageOpaqueMemoryBindInfo& setImage( Image image_ )
12093 {
12094 image = image_;
12095 return *this;
12096 }
12097
12098 SparseImageOpaqueMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12099 {
12100 bindCount = bindCount_;
12101 return *this;
12102 }
12103
12104 SparseImageOpaqueMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
12105 {
12106 pBinds = pBinds_;
12107 return *this;
12108 }
12109
12110 operator const VkSparseImageOpaqueMemoryBindInfo&() const
12111 {
12112 return *reinterpret_cast<const VkSparseImageOpaqueMemoryBindInfo*>(this);
12113 }
12114
12115 bool operator==( SparseImageOpaqueMemoryBindInfo const& rhs ) const
12116 {
12117 return ( image == rhs.image )
12118 && ( bindCount == rhs.bindCount )
12119 && ( pBinds == rhs.pBinds );
12120 }
12121
12122 bool operator!=( SparseImageOpaqueMemoryBindInfo const& rhs ) const
12123 {
12124 return !operator==( rhs );
12125 }
12126
12127 Image image;
12128 uint32_t bindCount;
12129 const SparseMemoryBind* pBinds;
12130 };
12131 static_assert( sizeof( SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ), "struct and wrapper have different size!" );
12132
12133 struct SparseImageMemoryBindInfo
12134 {
12135 SparseImageMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseImageMemoryBind* pBinds_ = nullptr )
12136 : image( image_ )
12137 , bindCount( bindCount_ )
12138 , pBinds( pBinds_ )
12139 {
12140 }
12141
12142 SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs )
12143 {
12144 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12145 }
12146
12147 SparseImageMemoryBindInfo& operator=( VkSparseImageMemoryBindInfo const & rhs )
12148 {
12149 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12150 return *this;
12151 }
12152
12153 SparseImageMemoryBindInfo& setImage( Image image_ )
12154 {
12155 image = image_;
12156 return *this;
12157 }
12158
12159 SparseImageMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12160 {
12161 bindCount = bindCount_;
12162 return *this;
12163 }
12164
12165 SparseImageMemoryBindInfo& setPBinds( const SparseImageMemoryBind* pBinds_ )
12166 {
12167 pBinds = pBinds_;
12168 return *this;
12169 }
12170
12171 operator const VkSparseImageMemoryBindInfo&() const
12172 {
12173 return *reinterpret_cast<const VkSparseImageMemoryBindInfo*>(this);
12174 }
12175
12176 bool operator==( SparseImageMemoryBindInfo const& rhs ) const
12177 {
12178 return ( image == rhs.image )
12179 && ( bindCount == rhs.bindCount )
12180 && ( pBinds == rhs.pBinds );
12181 }
12182
12183 bool operator!=( SparseImageMemoryBindInfo const& rhs ) const
12184 {
12185 return !operator==( rhs );
12186 }
12187
12188 Image image;
12189 uint32_t bindCount;
12190 const SparseImageMemoryBind* pBinds;
12191 };
12192 static_assert( sizeof( SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ), "struct and wrapper have different size!" );
12193
12194 struct BindSparseInfo
12195 {
12196 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 )
12197 : sType( StructureType::eBindSparseInfo )
12198 , pNext( nullptr )
12199 , waitSemaphoreCount( waitSemaphoreCount_ )
12200 , pWaitSemaphores( pWaitSemaphores_ )
12201 , bufferBindCount( bufferBindCount_ )
12202 , pBufferBinds( pBufferBinds_ )
12203 , imageOpaqueBindCount( imageOpaqueBindCount_ )
12204 , pImageOpaqueBinds( pImageOpaqueBinds_ )
12205 , imageBindCount( imageBindCount_ )
12206 , pImageBinds( pImageBinds_ )
12207 , signalSemaphoreCount( signalSemaphoreCount_ )
12208 , pSignalSemaphores( pSignalSemaphores_ )
12209 {
12210 }
12211
12212 BindSparseInfo( VkBindSparseInfo const & rhs )
12213 {
12214 memcpy( this, &rhs, sizeof(BindSparseInfo) );
12215 }
12216
12217 BindSparseInfo& operator=( VkBindSparseInfo const & rhs )
12218 {
12219 memcpy( this, &rhs, sizeof(BindSparseInfo) );
12220 return *this;
12221 }
12222
12223 BindSparseInfo& setSType( StructureType sType_ )
12224 {
12225 sType = sType_;
12226 return *this;
12227 }
12228
12229 BindSparseInfo& setPNext( const void* pNext_ )
12230 {
12231 pNext = pNext_;
12232 return *this;
12233 }
12234
12235 BindSparseInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
12236 {
12237 waitSemaphoreCount = waitSemaphoreCount_;
12238 return *this;
12239 }
12240
12241 BindSparseInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
12242 {
12243 pWaitSemaphores = pWaitSemaphores_;
12244 return *this;
12245 }
12246
12247 BindSparseInfo& setBufferBindCount( uint32_t bufferBindCount_ )
12248 {
12249 bufferBindCount = bufferBindCount_;
12250 return *this;
12251 }
12252
12253 BindSparseInfo& setPBufferBinds( const SparseBufferMemoryBindInfo* pBufferBinds_ )
12254 {
12255 pBufferBinds = pBufferBinds_;
12256 return *this;
12257 }
12258
12259 BindSparseInfo& setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ )
12260 {
12261 imageOpaqueBindCount = imageOpaqueBindCount_;
12262 return *this;
12263 }
12264
12265 BindSparseInfo& setPImageOpaqueBinds( const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds_ )
12266 {
12267 pImageOpaqueBinds = pImageOpaqueBinds_;
12268 return *this;
12269 }
12270
12271 BindSparseInfo& setImageBindCount( uint32_t imageBindCount_ )
12272 {
12273 imageBindCount = imageBindCount_;
12274 return *this;
12275 }
12276
12277 BindSparseInfo& setPImageBinds( const SparseImageMemoryBindInfo* pImageBinds_ )
12278 {
12279 pImageBinds = pImageBinds_;
12280 return *this;
12281 }
12282
12283 BindSparseInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
12284 {
12285 signalSemaphoreCount = signalSemaphoreCount_;
12286 return *this;
12287 }
12288
12289 BindSparseInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
12290 {
12291 pSignalSemaphores = pSignalSemaphores_;
12292 return *this;
12293 }
12294
12295 operator const VkBindSparseInfo&() const
12296 {
12297 return *reinterpret_cast<const VkBindSparseInfo*>(this);
12298 }
12299
12300 bool operator==( BindSparseInfo const& rhs ) const
12301 {
12302 return ( sType == rhs.sType )
12303 && ( pNext == rhs.pNext )
12304 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
12305 && ( pWaitSemaphores == rhs.pWaitSemaphores )
12306 && ( bufferBindCount == rhs.bufferBindCount )
12307 && ( pBufferBinds == rhs.pBufferBinds )
12308 && ( imageOpaqueBindCount == rhs.imageOpaqueBindCount )
12309 && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds )
12310 && ( imageBindCount == rhs.imageBindCount )
12311 && ( pImageBinds == rhs.pImageBinds )
12312 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
12313 && ( pSignalSemaphores == rhs.pSignalSemaphores );
12314 }
12315
12316 bool operator!=( BindSparseInfo const& rhs ) const
12317 {
12318 return !operator==( rhs );
12319 }
12320
12321 private:
12322 StructureType sType;
12323
12324 public:
12325 const void* pNext;
12326 uint32_t waitSemaphoreCount;
12327 const Semaphore* pWaitSemaphores;
12328 uint32_t bufferBindCount;
12329 const SparseBufferMemoryBindInfo* pBufferBinds;
12330 uint32_t imageOpaqueBindCount;
12331 const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
12332 uint32_t imageBindCount;
12333 const SparseImageMemoryBindInfo* pImageBinds;
12334 uint32_t signalSemaphoreCount;
12335 const Semaphore* pSignalSemaphores;
12336 };
12337 static_assert( sizeof( BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" );
12338
12339 enum class PipelineStageFlagBits
12340 {
12341 eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
12342 eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
12343 eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
12344 eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
12345 eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
12346 eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
12347 eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
12348 eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
12349 eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
12350 eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
12351 eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
12352 eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
12353 eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT,
12354 eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
12355 eHost = VK_PIPELINE_STAGE_HOST_BIT,
12356 eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
12357 eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
12358 };
12359
12360 using PipelineStageFlags = Flags<PipelineStageFlagBits, VkPipelineStageFlags>;
12361
12362 inline PipelineStageFlags operator|( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 )
12363 {
12364 return PipelineStageFlags( bit0 ) | bit1;
12365 }
12366
12367 enum class CommandPoolCreateFlagBits
12368 {
12369 eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,
12370 eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
12371 };
12372
12373 using CommandPoolCreateFlags = Flags<CommandPoolCreateFlagBits, VkCommandPoolCreateFlags>;
12374
12375 inline CommandPoolCreateFlags operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 )
12376 {
12377 return CommandPoolCreateFlags( bit0 ) | bit1;
12378 }
12379
12380 struct CommandPoolCreateInfo
12381 {
12382 CommandPoolCreateInfo( CommandPoolCreateFlags flags_ = CommandPoolCreateFlags(), uint32_t queueFamilyIndex_ = 0 )
12383 : sType( StructureType::eCommandPoolCreateInfo )
12384 , pNext( nullptr )
12385 , flags( flags_ )
12386 , queueFamilyIndex( queueFamilyIndex_ )
12387 {
12388 }
12389
12390 CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs )
12391 {
12392 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12393 }
12394
12395 CommandPoolCreateInfo& operator=( VkCommandPoolCreateInfo const & rhs )
12396 {
12397 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12398 return *this;
12399 }
12400
12401 CommandPoolCreateInfo& setSType( StructureType sType_ )
12402 {
12403 sType = sType_;
12404 return *this;
12405 }
12406
12407 CommandPoolCreateInfo& setPNext( const void* pNext_ )
12408 {
12409 pNext = pNext_;
12410 return *this;
12411 }
12412
12413 CommandPoolCreateInfo& setFlags( CommandPoolCreateFlags flags_ )
12414 {
12415 flags = flags_;
12416 return *this;
12417 }
12418
12419 CommandPoolCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
12420 {
12421 queueFamilyIndex = queueFamilyIndex_;
12422 return *this;
12423 }
12424
12425 operator const VkCommandPoolCreateInfo&() const
12426 {
12427 return *reinterpret_cast<const VkCommandPoolCreateInfo*>(this);
12428 }
12429
12430 bool operator==( CommandPoolCreateInfo const& rhs ) const
12431 {
12432 return ( sType == rhs.sType )
12433 && ( pNext == rhs.pNext )
12434 && ( flags == rhs.flags )
12435 && ( queueFamilyIndex == rhs.queueFamilyIndex );
12436 }
12437
12438 bool operator!=( CommandPoolCreateInfo const& rhs ) const
12439 {
12440 return !operator==( rhs );
12441 }
12442
12443 private:
12444 StructureType sType;
12445
12446 public:
12447 const void* pNext;
12448 CommandPoolCreateFlags flags;
12449 uint32_t queueFamilyIndex;
12450 };
12451 static_assert( sizeof( CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ), "struct and wrapper have different size!" );
12452
12453 enum class CommandPoolResetFlagBits
12454 {
12455 eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
12456 };
12457
12458 using CommandPoolResetFlags = Flags<CommandPoolResetFlagBits, VkCommandPoolResetFlags>;
12459
12460 inline CommandPoolResetFlags operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 )
12461 {
12462 return CommandPoolResetFlags( bit0 ) | bit1;
12463 }
12464
12465 enum class CommandBufferResetFlagBits
12466 {
12467 eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
12468 };
12469
12470 using CommandBufferResetFlags = Flags<CommandBufferResetFlagBits, VkCommandBufferResetFlags>;
12471
12472 inline CommandBufferResetFlags operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 )
12473 {
12474 return CommandBufferResetFlags( bit0 ) | bit1;
12475 }
12476
12477 enum class SampleCountFlagBits
12478 {
12479 e1 = VK_SAMPLE_COUNT_1_BIT,
12480 e2 = VK_SAMPLE_COUNT_2_BIT,
12481 e4 = VK_SAMPLE_COUNT_4_BIT,
12482 e8 = VK_SAMPLE_COUNT_8_BIT,
12483 e16 = VK_SAMPLE_COUNT_16_BIT,
12484 e32 = VK_SAMPLE_COUNT_32_BIT,
12485 e64 = VK_SAMPLE_COUNT_64_BIT
12486 };
12487
12488 using SampleCountFlags = Flags<SampleCountFlagBits, VkSampleCountFlags>;
12489
12490 inline SampleCountFlags operator|( SampleCountFlagBits bit0, SampleCountFlagBits bit1 )
12491 {
12492 return SampleCountFlags( bit0 ) | bit1;
12493 }
12494
12495 struct ImageFormatProperties
12496 {
12497 operator const VkImageFormatProperties&() const
12498 {
12499 return *reinterpret_cast<const VkImageFormatProperties*>(this);
12500 }
12501
12502 bool operator==( ImageFormatProperties const& rhs ) const
12503 {
12504 return ( maxExtent == rhs.maxExtent )
12505 && ( maxMipLevels == rhs.maxMipLevels )
12506 && ( maxArrayLayers == rhs.maxArrayLayers )
12507 && ( sampleCounts == rhs.sampleCounts )
12508 && ( maxResourceSize == rhs.maxResourceSize );
12509 }
12510
12511 bool operator!=( ImageFormatProperties const& rhs ) const
12512 {
12513 return !operator==( rhs );
12514 }
12515
12516 Extent3D maxExtent;
12517 uint32_t maxMipLevels;
12518 uint32_t maxArrayLayers;
12519 SampleCountFlags sampleCounts;
12520 DeviceSize maxResourceSize;
12521 };
12522 static_assert( sizeof( ImageFormatProperties ) == sizeof( VkImageFormatProperties ), "struct and wrapper have different size!" );
12523
12524 struct ImageCreateInfo
12525 {
12526 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 )
12527 : sType( StructureType::eImageCreateInfo )
12528 , pNext( nullptr )
12529 , flags( flags_ )
12530 , imageType( imageType_ )
12531 , format( format_ )
12532 , extent( extent_ )
12533 , mipLevels( mipLevels_ )
12534 , arrayLayers( arrayLayers_ )
12535 , samples( samples_ )
12536 , tiling( tiling_ )
12537 , usage( usage_ )
12538 , sharingMode( sharingMode_ )
12539 , queueFamilyIndexCount( queueFamilyIndexCount_ )
12540 , pQueueFamilyIndices( pQueueFamilyIndices_ )
12541 , initialLayout( initialLayout_ )
12542 {
12543 }
12544
12545 ImageCreateInfo( VkImageCreateInfo const & rhs )
12546 {
12547 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12548 }
12549
12550 ImageCreateInfo& operator=( VkImageCreateInfo const & rhs )
12551 {
12552 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12553 return *this;
12554 }
12555
12556 ImageCreateInfo& setSType( StructureType sType_ )
12557 {
12558 sType = sType_;
12559 return *this;
12560 }
12561
12562 ImageCreateInfo& setPNext( const void* pNext_ )
12563 {
12564 pNext = pNext_;
12565 return *this;
12566 }
12567
12568 ImageCreateInfo& setFlags( ImageCreateFlags flags_ )
12569 {
12570 flags = flags_;
12571 return *this;
12572 }
12573
12574 ImageCreateInfo& setImageType( ImageType imageType_ )
12575 {
12576 imageType = imageType_;
12577 return *this;
12578 }
12579
12580 ImageCreateInfo& setFormat( Format format_ )
12581 {
12582 format = format_;
12583 return *this;
12584 }
12585
12586 ImageCreateInfo& setExtent( Extent3D extent_ )
12587 {
12588 extent = extent_;
12589 return *this;
12590 }
12591
12592 ImageCreateInfo& setMipLevels( uint32_t mipLevels_ )
12593 {
12594 mipLevels = mipLevels_;
12595 return *this;
12596 }
12597
12598 ImageCreateInfo& setArrayLayers( uint32_t arrayLayers_ )
12599 {
12600 arrayLayers = arrayLayers_;
12601 return *this;
12602 }
12603
12604 ImageCreateInfo& setSamples( SampleCountFlagBits samples_ )
12605 {
12606 samples = samples_;
12607 return *this;
12608 }
12609
12610 ImageCreateInfo& setTiling( ImageTiling tiling_ )
12611 {
12612 tiling = tiling_;
12613 return *this;
12614 }
12615
12616 ImageCreateInfo& setUsage( ImageUsageFlags usage_ )
12617 {
12618 usage = usage_;
12619 return *this;
12620 }
12621
12622 ImageCreateInfo& setSharingMode( SharingMode sharingMode_ )
12623 {
12624 sharingMode = sharingMode_;
12625 return *this;
12626 }
12627
12628 ImageCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
12629 {
12630 queueFamilyIndexCount = queueFamilyIndexCount_;
12631 return *this;
12632 }
12633
12634 ImageCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
12635 {
12636 pQueueFamilyIndices = pQueueFamilyIndices_;
12637 return *this;
12638 }
12639
12640 ImageCreateInfo& setInitialLayout( ImageLayout initialLayout_ )
12641 {
12642 initialLayout = initialLayout_;
12643 return *this;
12644 }
12645
12646 operator const VkImageCreateInfo&() const
12647 {
12648 return *reinterpret_cast<const VkImageCreateInfo*>(this);
12649 }
12650
12651 bool operator==( ImageCreateInfo const& rhs ) const
12652 {
12653 return ( sType == rhs.sType )
12654 && ( pNext == rhs.pNext )
12655 && ( flags == rhs.flags )
12656 && ( imageType == rhs.imageType )
12657 && ( format == rhs.format )
12658 && ( extent == rhs.extent )
12659 && ( mipLevels == rhs.mipLevels )
12660 && ( arrayLayers == rhs.arrayLayers )
12661 && ( samples == rhs.samples )
12662 && ( tiling == rhs.tiling )
12663 && ( usage == rhs.usage )
12664 && ( sharingMode == rhs.sharingMode )
12665 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
12666 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
12667 && ( initialLayout == rhs.initialLayout );
12668 }
12669
12670 bool operator!=( ImageCreateInfo const& rhs ) const
12671 {
12672 return !operator==( rhs );
12673 }
12674
12675 private:
12676 StructureType sType;
12677
12678 public:
12679 const void* pNext;
12680 ImageCreateFlags flags;
12681 ImageType imageType;
12682 Format format;
12683 Extent3D extent;
12684 uint32_t mipLevels;
12685 uint32_t arrayLayers;
12686 SampleCountFlagBits samples;
12687 ImageTiling tiling;
12688 ImageUsageFlags usage;
12689 SharingMode sharingMode;
12690 uint32_t queueFamilyIndexCount;
12691 const uint32_t* pQueueFamilyIndices;
12692 ImageLayout initialLayout;
12693 };
12694 static_assert( sizeof( ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" );
12695
12696 struct PipelineMultisampleStateCreateInfo
12697 {
12698 PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateFlags flags_ = PipelineMultisampleStateCreateFlags(), SampleCountFlagBits rasterizationSamples_ = SampleCountFlagBits::e1, Bool32 sampleShadingEnable_ = 0, float minSampleShading_ = 0, const SampleMask* pSampleMask_ = nullptr, Bool32 alphaToCoverageEnable_ = 0, Bool32 alphaToOneEnable_ = 0 )
12699 : sType( StructureType::ePipelineMultisampleStateCreateInfo )
12700 , pNext( nullptr )
12701 , flags( flags_ )
12702 , rasterizationSamples( rasterizationSamples_ )
12703 , sampleShadingEnable( sampleShadingEnable_ )
12704 , minSampleShading( minSampleShading_ )
12705 , pSampleMask( pSampleMask_ )
12706 , alphaToCoverageEnable( alphaToCoverageEnable_ )
12707 , alphaToOneEnable( alphaToOneEnable_ )
12708 {
12709 }
12710
12711 PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs )
12712 {
12713 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12714 }
12715
12716 PipelineMultisampleStateCreateInfo& operator=( VkPipelineMultisampleStateCreateInfo const & rhs )
12717 {
12718 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12719 return *this;
12720 }
12721
12722 PipelineMultisampleStateCreateInfo& setSType( StructureType sType_ )
12723 {
12724 sType = sType_;
12725 return *this;
12726 }
12727
12728 PipelineMultisampleStateCreateInfo& setPNext( const void* pNext_ )
12729 {
12730 pNext = pNext_;
12731 return *this;
12732 }
12733
12734 PipelineMultisampleStateCreateInfo& setFlags( PipelineMultisampleStateCreateFlags flags_ )
12735 {
12736 flags = flags_;
12737 return *this;
12738 }
12739
12740 PipelineMultisampleStateCreateInfo& setRasterizationSamples( SampleCountFlagBits rasterizationSamples_ )
12741 {
12742 rasterizationSamples = rasterizationSamples_;
12743 return *this;
12744 }
12745
12746 PipelineMultisampleStateCreateInfo& setSampleShadingEnable( Bool32 sampleShadingEnable_ )
12747 {
12748 sampleShadingEnable = sampleShadingEnable_;
12749 return *this;
12750 }
12751
12752 PipelineMultisampleStateCreateInfo& setMinSampleShading( float minSampleShading_ )
12753 {
12754 minSampleShading = minSampleShading_;
12755 return *this;
12756 }
12757
12758 PipelineMultisampleStateCreateInfo& setPSampleMask( const SampleMask* pSampleMask_ )
12759 {
12760 pSampleMask = pSampleMask_;
12761 return *this;
12762 }
12763
12764 PipelineMultisampleStateCreateInfo& setAlphaToCoverageEnable( Bool32 alphaToCoverageEnable_ )
12765 {
12766 alphaToCoverageEnable = alphaToCoverageEnable_;
12767 return *this;
12768 }
12769
12770 PipelineMultisampleStateCreateInfo& setAlphaToOneEnable( Bool32 alphaToOneEnable_ )
12771 {
12772 alphaToOneEnable = alphaToOneEnable_;
12773 return *this;
12774 }
12775
12776 operator const VkPipelineMultisampleStateCreateInfo&() const
12777 {
12778 return *reinterpret_cast<const VkPipelineMultisampleStateCreateInfo*>(this);
12779 }
12780
12781 bool operator==( PipelineMultisampleStateCreateInfo const& rhs ) const
12782 {
12783 return ( sType == rhs.sType )
12784 && ( pNext == rhs.pNext )
12785 && ( flags == rhs.flags )
12786 && ( rasterizationSamples == rhs.rasterizationSamples )
12787 && ( sampleShadingEnable == rhs.sampleShadingEnable )
12788 && ( minSampleShading == rhs.minSampleShading )
12789 && ( pSampleMask == rhs.pSampleMask )
12790 && ( alphaToCoverageEnable == rhs.alphaToCoverageEnable )
12791 && ( alphaToOneEnable == rhs.alphaToOneEnable );
12792 }
12793
12794 bool operator!=( PipelineMultisampleStateCreateInfo const& rhs ) const
12795 {
12796 return !operator==( rhs );
12797 }
12798
12799 private:
12800 StructureType sType;
12801
12802 public:
12803 const void* pNext;
12804 PipelineMultisampleStateCreateFlags flags;
12805 SampleCountFlagBits rasterizationSamples;
12806 Bool32 sampleShadingEnable;
12807 float minSampleShading;
12808 const SampleMask* pSampleMask;
12809 Bool32 alphaToCoverageEnable;
12810 Bool32 alphaToOneEnable;
12811 };
12812 static_assert( sizeof( PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ), "struct and wrapper have different size!" );
12813
12814 struct GraphicsPipelineCreateInfo
12815 {
12816 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 )
12817 : sType( StructureType::eGraphicsPipelineCreateInfo )
12818 , pNext( nullptr )
12819 , flags( flags_ )
12820 , stageCount( stageCount_ )
12821 , pStages( pStages_ )
12822 , pVertexInputState( pVertexInputState_ )
12823 , pInputAssemblyState( pInputAssemblyState_ )
12824 , pTessellationState( pTessellationState_ )
12825 , pViewportState( pViewportState_ )
12826 , pRasterizationState( pRasterizationState_ )
12827 , pMultisampleState( pMultisampleState_ )
12828 , pDepthStencilState( pDepthStencilState_ )
12829 , pColorBlendState( pColorBlendState_ )
12830 , pDynamicState( pDynamicState_ )
12831 , layout( layout_ )
12832 , renderPass( renderPass_ )
12833 , subpass( subpass_ )
12834 , basePipelineHandle( basePipelineHandle_ )
12835 , basePipelineIndex( basePipelineIndex_ )
12836 {
12837 }
12838
12839 GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs )
12840 {
12841 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12842 }
12843
12844 GraphicsPipelineCreateInfo& operator=( VkGraphicsPipelineCreateInfo const & rhs )
12845 {
12846 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12847 return *this;
12848 }
12849
12850 GraphicsPipelineCreateInfo& setSType( StructureType sType_ )
12851 {
12852 sType = sType_;
12853 return *this;
12854 }
12855
12856 GraphicsPipelineCreateInfo& setPNext( const void* pNext_ )
12857 {
12858 pNext = pNext_;
12859 return *this;
12860 }
12861
12862 GraphicsPipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
12863 {
12864 flags = flags_;
12865 return *this;
12866 }
12867
12868 GraphicsPipelineCreateInfo& setStageCount( uint32_t stageCount_ )
12869 {
12870 stageCount = stageCount_;
12871 return *this;
12872 }
12873
12874 GraphicsPipelineCreateInfo& setPStages( const PipelineShaderStageCreateInfo* pStages_ )
12875 {
12876 pStages = pStages_;
12877 return *this;
12878 }
12879
12880 GraphicsPipelineCreateInfo& setPVertexInputState( const PipelineVertexInputStateCreateInfo* pVertexInputState_ )
12881 {
12882 pVertexInputState = pVertexInputState_;
12883 return *this;
12884 }
12885
12886 GraphicsPipelineCreateInfo& setPInputAssemblyState( const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState_ )
12887 {
12888 pInputAssemblyState = pInputAssemblyState_;
12889 return *this;
12890 }
12891
12892 GraphicsPipelineCreateInfo& setPTessellationState( const PipelineTessellationStateCreateInfo* pTessellationState_ )
12893 {
12894 pTessellationState = pTessellationState_;
12895 return *this;
12896 }
12897
12898 GraphicsPipelineCreateInfo& setPViewportState( const PipelineViewportStateCreateInfo* pViewportState_ )
12899 {
12900 pViewportState = pViewportState_;
12901 return *this;
12902 }
12903
12904 GraphicsPipelineCreateInfo& setPRasterizationState( const PipelineRasterizationStateCreateInfo* pRasterizationState_ )
12905 {
12906 pRasterizationState = pRasterizationState_;
12907 return *this;
12908 }
12909
12910 GraphicsPipelineCreateInfo& setPMultisampleState( const PipelineMultisampleStateCreateInfo* pMultisampleState_ )
12911 {
12912 pMultisampleState = pMultisampleState_;
12913 return *this;
12914 }
12915
12916 GraphicsPipelineCreateInfo& setPDepthStencilState( const PipelineDepthStencilStateCreateInfo* pDepthStencilState_ )
12917 {
12918 pDepthStencilState = pDepthStencilState_;
12919 return *this;
12920 }
12921
12922 GraphicsPipelineCreateInfo& setPColorBlendState( const PipelineColorBlendStateCreateInfo* pColorBlendState_ )
12923 {
12924 pColorBlendState = pColorBlendState_;
12925 return *this;
12926 }
12927
12928 GraphicsPipelineCreateInfo& setPDynamicState( const PipelineDynamicStateCreateInfo* pDynamicState_ )
12929 {
12930 pDynamicState = pDynamicState_;
12931 return *this;
12932 }
12933
12934 GraphicsPipelineCreateInfo& setLayout( PipelineLayout layout_ )
12935 {
12936 layout = layout_;
12937 return *this;
12938 }
12939
12940 GraphicsPipelineCreateInfo& setRenderPass( RenderPass renderPass_ )
12941 {
12942 renderPass = renderPass_;
12943 return *this;
12944 }
12945
12946 GraphicsPipelineCreateInfo& setSubpass( uint32_t subpass_ )
12947 {
12948 subpass = subpass_;
12949 return *this;
12950 }
12951
12952 GraphicsPipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
12953 {
12954 basePipelineHandle = basePipelineHandle_;
12955 return *this;
12956 }
12957
12958 GraphicsPipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
12959 {
12960 basePipelineIndex = basePipelineIndex_;
12961 return *this;
12962 }
12963
12964 operator const VkGraphicsPipelineCreateInfo&() const
12965 {
12966 return *reinterpret_cast<const VkGraphicsPipelineCreateInfo*>(this);
12967 }
12968
12969 bool operator==( GraphicsPipelineCreateInfo const& rhs ) const
12970 {
12971 return ( sType == rhs.sType )
12972 && ( pNext == rhs.pNext )
12973 && ( flags == rhs.flags )
12974 && ( stageCount == rhs.stageCount )
12975 && ( pStages == rhs.pStages )
12976 && ( pVertexInputState == rhs.pVertexInputState )
12977 && ( pInputAssemblyState == rhs.pInputAssemblyState )
12978 && ( pTessellationState == rhs.pTessellationState )
12979 && ( pViewportState == rhs.pViewportState )
12980 && ( pRasterizationState == rhs.pRasterizationState )
12981 && ( pMultisampleState == rhs.pMultisampleState )
12982 && ( pDepthStencilState == rhs.pDepthStencilState )
12983 && ( pColorBlendState == rhs.pColorBlendState )
12984 && ( pDynamicState == rhs.pDynamicState )
12985 && ( layout == rhs.layout )
12986 && ( renderPass == rhs.renderPass )
12987 && ( subpass == rhs.subpass )
12988 && ( basePipelineHandle == rhs.basePipelineHandle )
12989 && ( basePipelineIndex == rhs.basePipelineIndex );
12990 }
12991
12992 bool operator!=( GraphicsPipelineCreateInfo const& rhs ) const
12993 {
12994 return !operator==( rhs );
12995 }
12996
12997 private:
12998 StructureType sType;
12999
13000 public:
13001 const void* pNext;
13002 PipelineCreateFlags flags;
13003 uint32_t stageCount;
13004 const PipelineShaderStageCreateInfo* pStages;
13005 const PipelineVertexInputStateCreateInfo* pVertexInputState;
13006 const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
13007 const PipelineTessellationStateCreateInfo* pTessellationState;
13008 const PipelineViewportStateCreateInfo* pViewportState;
13009 const PipelineRasterizationStateCreateInfo* pRasterizationState;
13010 const PipelineMultisampleStateCreateInfo* pMultisampleState;
13011 const PipelineDepthStencilStateCreateInfo* pDepthStencilState;
13012 const PipelineColorBlendStateCreateInfo* pColorBlendState;
13013 const PipelineDynamicStateCreateInfo* pDynamicState;
13014 PipelineLayout layout;
13015 RenderPass renderPass;
13016 uint32_t subpass;
13017 Pipeline basePipelineHandle;
13018 int32_t basePipelineIndex;
13019 };
13020 static_assert( sizeof( GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ), "struct and wrapper have different size!" );
13021
13022 struct PhysicalDeviceLimits
13023 {
13024 operator const VkPhysicalDeviceLimits&() const
13025 {
13026 return *reinterpret_cast<const VkPhysicalDeviceLimits*>(this);
13027 }
13028
13029 bool operator==( PhysicalDeviceLimits const& rhs ) const
13030 {
13031 return ( maxImageDimension1D == rhs.maxImageDimension1D )
13032 && ( maxImageDimension2D == rhs.maxImageDimension2D )
13033 && ( maxImageDimension3D == rhs.maxImageDimension3D )
13034 && ( maxImageDimensionCube == rhs.maxImageDimensionCube )
13035 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
13036 && ( maxTexelBufferElements == rhs.maxTexelBufferElements )
13037 && ( maxUniformBufferRange == rhs.maxUniformBufferRange )
13038 && ( maxStorageBufferRange == rhs.maxStorageBufferRange )
13039 && ( maxPushConstantsSize == rhs.maxPushConstantsSize )
13040 && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount )
13041 && ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount )
13042 && ( bufferImageGranularity == rhs.bufferImageGranularity )
13043 && ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize )
13044 && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets )
13045 && ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers )
13046 && ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers )
13047 && ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers )
13048 && ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages )
13049 && ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages )
13050 && ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments )
13051 && ( maxPerStageResources == rhs.maxPerStageResources )
13052 && ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers )
13053 && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers )
13054 && ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic )
13055 && ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers )
13056 && ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic )
13057 && ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages )
13058 && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages )
13059 && ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments )
13060 && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes )
13061 && ( maxVertexInputBindings == rhs.maxVertexInputBindings )
13062 && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset )
13063 && ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride )
13064 && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents )
13065 && ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel )
13066 && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize )
13067 && ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents )
13068 && ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents )
13069 && ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents )
13070 && ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents )
13071 && ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents )
13072 && ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents )
13073 && ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations )
13074 && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents )
13075 && ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents )
13076 && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices )
13077 && ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents )
13078 && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents )
13079 && ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments )
13080 && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments )
13081 && ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources )
13082 && ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize )
13083 && ( memcmp( maxComputeWorkGroupCount, rhs.maxComputeWorkGroupCount, 3 * sizeof( uint32_t ) ) == 0 )
13084 && ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations )
13085 && ( memcmp( maxComputeWorkGroupSize, rhs.maxComputeWorkGroupSize, 3 * sizeof( uint32_t ) ) == 0 )
13086 && ( subPixelPrecisionBits == rhs.subPixelPrecisionBits )
13087 && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits )
13088 && ( mipmapPrecisionBits == rhs.mipmapPrecisionBits )
13089 && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue )
13090 && ( maxDrawIndirectCount == rhs.maxDrawIndirectCount )
13091 && ( maxSamplerLodBias == rhs.maxSamplerLodBias )
13092 && ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy )
13093 && ( maxViewports == rhs.maxViewports )
13094 && ( memcmp( maxViewportDimensions, rhs.maxViewportDimensions, 2 * sizeof( uint32_t ) ) == 0 )
13095 && ( memcmp( viewportBoundsRange, rhs.viewportBoundsRange, 2 * sizeof( float ) ) == 0 )
13096 && ( viewportSubPixelBits == rhs.viewportSubPixelBits )
13097 && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment )
13098 && ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment )
13099 && ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment )
13100 && ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment )
13101 && ( minTexelOffset == rhs.minTexelOffset )
13102 && ( maxTexelOffset == rhs.maxTexelOffset )
13103 && ( minTexelGatherOffset == rhs.minTexelGatherOffset )
13104 && ( maxTexelGatherOffset == rhs.maxTexelGatherOffset )
13105 && ( minInterpolationOffset == rhs.minInterpolationOffset )
13106 && ( maxInterpolationOffset == rhs.maxInterpolationOffset )
13107 && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits )
13108 && ( maxFramebufferWidth == rhs.maxFramebufferWidth )
13109 && ( maxFramebufferHeight == rhs.maxFramebufferHeight )
13110 && ( maxFramebufferLayers == rhs.maxFramebufferLayers )
13111 && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts )
13112 && ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts )
13113 && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts )
13114 && ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts )
13115 && ( maxColorAttachments == rhs.maxColorAttachments )
13116 && ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts )
13117 && ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts )
13118 && ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts )
13119 && ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts )
13120 && ( storageImageSampleCounts == rhs.storageImageSampleCounts )
13121 && ( maxSampleMaskWords == rhs.maxSampleMaskWords )
13122 && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics )
13123 && ( timestampPeriod == rhs.timestampPeriod )
13124 && ( maxClipDistances == rhs.maxClipDistances )
13125 && ( maxCullDistances == rhs.maxCullDistances )
13126 && ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances )
13127 && ( discreteQueuePriorities == rhs.discreteQueuePriorities )
13128 && ( memcmp( pointSizeRange, rhs.pointSizeRange, 2 * sizeof( float ) ) == 0 )
13129 && ( memcmp( lineWidthRange, rhs.lineWidthRange, 2 * sizeof( float ) ) == 0 )
13130 && ( pointSizeGranularity == rhs.pointSizeGranularity )
13131 && ( lineWidthGranularity == rhs.lineWidthGranularity )
13132 && ( strictLines == rhs.strictLines )
13133 && ( standardSampleLocations == rhs.standardSampleLocations )
13134 && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment )
13135 && ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment )
13136 && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize );
13137 }
13138
13139 bool operator!=( PhysicalDeviceLimits const& rhs ) const
13140 {
13141 return !operator==( rhs );
13142 }
13143
13144 uint32_t maxImageDimension1D;
13145 uint32_t maxImageDimension2D;
13146 uint32_t maxImageDimension3D;
13147 uint32_t maxImageDimensionCube;
13148 uint32_t maxImageArrayLayers;
13149 uint32_t maxTexelBufferElements;
13150 uint32_t maxUniformBufferRange;
13151 uint32_t maxStorageBufferRange;
13152 uint32_t maxPushConstantsSize;
13153 uint32_t maxMemoryAllocationCount;
13154 uint32_t maxSamplerAllocationCount;
13155 DeviceSize bufferImageGranularity;
13156 DeviceSize sparseAddressSpaceSize;
13157 uint32_t maxBoundDescriptorSets;
13158 uint32_t maxPerStageDescriptorSamplers;
13159 uint32_t maxPerStageDescriptorUniformBuffers;
13160 uint32_t maxPerStageDescriptorStorageBuffers;
13161 uint32_t maxPerStageDescriptorSampledImages;
13162 uint32_t maxPerStageDescriptorStorageImages;
13163 uint32_t maxPerStageDescriptorInputAttachments;
13164 uint32_t maxPerStageResources;
13165 uint32_t maxDescriptorSetSamplers;
13166 uint32_t maxDescriptorSetUniformBuffers;
13167 uint32_t maxDescriptorSetUniformBuffersDynamic;
13168 uint32_t maxDescriptorSetStorageBuffers;
13169 uint32_t maxDescriptorSetStorageBuffersDynamic;
13170 uint32_t maxDescriptorSetSampledImages;
13171 uint32_t maxDescriptorSetStorageImages;
13172 uint32_t maxDescriptorSetInputAttachments;
13173 uint32_t maxVertexInputAttributes;
13174 uint32_t maxVertexInputBindings;
13175 uint32_t maxVertexInputAttributeOffset;
13176 uint32_t maxVertexInputBindingStride;
13177 uint32_t maxVertexOutputComponents;
13178 uint32_t maxTessellationGenerationLevel;
13179 uint32_t maxTessellationPatchSize;
13180 uint32_t maxTessellationControlPerVertexInputComponents;
13181 uint32_t maxTessellationControlPerVertexOutputComponents;
13182 uint32_t maxTessellationControlPerPatchOutputComponents;
13183 uint32_t maxTessellationControlTotalOutputComponents;
13184 uint32_t maxTessellationEvaluationInputComponents;
13185 uint32_t maxTessellationEvaluationOutputComponents;
13186 uint32_t maxGeometryShaderInvocations;
13187 uint32_t maxGeometryInputComponents;
13188 uint32_t maxGeometryOutputComponents;
13189 uint32_t maxGeometryOutputVertices;
13190 uint32_t maxGeometryTotalOutputComponents;
13191 uint32_t maxFragmentInputComponents;
13192 uint32_t maxFragmentOutputAttachments;
13193 uint32_t maxFragmentDualSrcAttachments;
13194 uint32_t maxFragmentCombinedOutputResources;
13195 uint32_t maxComputeSharedMemorySize;
13196 uint32_t maxComputeWorkGroupCount[3];
13197 uint32_t maxComputeWorkGroupInvocations;
13198 uint32_t maxComputeWorkGroupSize[3];
13199 uint32_t subPixelPrecisionBits;
13200 uint32_t subTexelPrecisionBits;
13201 uint32_t mipmapPrecisionBits;
13202 uint32_t maxDrawIndexedIndexValue;
13203 uint32_t maxDrawIndirectCount;
13204 float maxSamplerLodBias;
13205 float maxSamplerAnisotropy;
13206 uint32_t maxViewports;
13207 uint32_t maxViewportDimensions[2];
13208 float viewportBoundsRange[2];
13209 uint32_t viewportSubPixelBits;
13210 size_t minMemoryMapAlignment;
13211 DeviceSize minTexelBufferOffsetAlignment;
13212 DeviceSize minUniformBufferOffsetAlignment;
13213 DeviceSize minStorageBufferOffsetAlignment;
13214 int32_t minTexelOffset;
13215 uint32_t maxTexelOffset;
13216 int32_t minTexelGatherOffset;
13217 uint32_t maxTexelGatherOffset;
13218 float minInterpolationOffset;
13219 float maxInterpolationOffset;
13220 uint32_t subPixelInterpolationOffsetBits;
13221 uint32_t maxFramebufferWidth;
13222 uint32_t maxFramebufferHeight;
13223 uint32_t maxFramebufferLayers;
13224 SampleCountFlags framebufferColorSampleCounts;
13225 SampleCountFlags framebufferDepthSampleCounts;
13226 SampleCountFlags framebufferStencilSampleCounts;
13227 SampleCountFlags framebufferNoAttachmentsSampleCounts;
13228 uint32_t maxColorAttachments;
13229 SampleCountFlags sampledImageColorSampleCounts;
13230 SampleCountFlags sampledImageIntegerSampleCounts;
13231 SampleCountFlags sampledImageDepthSampleCounts;
13232 SampleCountFlags sampledImageStencilSampleCounts;
13233 SampleCountFlags storageImageSampleCounts;
13234 uint32_t maxSampleMaskWords;
13235 Bool32 timestampComputeAndGraphics;
13236 float timestampPeriod;
13237 uint32_t maxClipDistances;
13238 uint32_t maxCullDistances;
13239 uint32_t maxCombinedClipAndCullDistances;
13240 uint32_t discreteQueuePriorities;
13241 float pointSizeRange[2];
13242 float lineWidthRange[2];
13243 float pointSizeGranularity;
13244 float lineWidthGranularity;
13245 Bool32 strictLines;
13246 Bool32 standardSampleLocations;
13247 DeviceSize optimalBufferCopyOffsetAlignment;
13248 DeviceSize optimalBufferCopyRowPitchAlignment;
13249 DeviceSize nonCoherentAtomSize;
13250 };
13251 static_assert( sizeof( PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ), "struct and wrapper have different size!" );
13252
13253 struct PhysicalDeviceProperties
13254 {
13255 operator const VkPhysicalDeviceProperties&() const
13256 {
13257 return *reinterpret_cast<const VkPhysicalDeviceProperties*>(this);
13258 }
13259
13260 bool operator==( PhysicalDeviceProperties const& rhs ) const
13261 {
13262 return ( apiVersion == rhs.apiVersion )
13263 && ( driverVersion == rhs.driverVersion )
13264 && ( vendorID == rhs.vendorID )
13265 && ( deviceID == rhs.deviceID )
13266 && ( deviceType == rhs.deviceType )
13267 && ( memcmp( deviceName, rhs.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof( char ) ) == 0 )
13268 && ( memcmp( pipelineCacheUUID, rhs.pipelineCacheUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
13269 && ( limits == rhs.limits )
13270 && ( sparseProperties == rhs.sparseProperties );
13271 }
13272
13273 bool operator!=( PhysicalDeviceProperties const& rhs ) const
13274 {
13275 return !operator==( rhs );
13276 }
13277
13278 uint32_t apiVersion;
13279 uint32_t driverVersion;
13280 uint32_t vendorID;
13281 uint32_t deviceID;
13282 PhysicalDeviceType deviceType;
13283 char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
13284 uint8_t pipelineCacheUUID[VK_UUID_SIZE];
13285 PhysicalDeviceLimits limits;
13286 PhysicalDeviceSparseProperties sparseProperties;
13287 };
13288 static_assert( sizeof( PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ), "struct and wrapper have different size!" );
13289
13290 enum class AttachmentDescriptionFlagBits
13291 {
13292 eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
13293 };
13294
13295 using AttachmentDescriptionFlags = Flags<AttachmentDescriptionFlagBits, VkAttachmentDescriptionFlags>;
13296
13297 inline AttachmentDescriptionFlags operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 )
13298 {
13299 return AttachmentDescriptionFlags( bit0 ) | bit1;
13300 }
13301
13302 struct AttachmentDescription
13303 {
13304 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 )
13305 : flags( flags_ )
13306 , format( format_ )
13307 , samples( samples_ )
13308 , loadOp( loadOp_ )
13309 , storeOp( storeOp_ )
13310 , stencilLoadOp( stencilLoadOp_ )
13311 , stencilStoreOp( stencilStoreOp_ )
13312 , initialLayout( initialLayout_ )
13313 , finalLayout( finalLayout_ )
13314 {
13315 }
13316
13317 AttachmentDescription( VkAttachmentDescription const & rhs )
13318 {
13319 memcpy( this, &rhs, sizeof(AttachmentDescription) );
13320 }
13321
13322 AttachmentDescription& operator=( VkAttachmentDescription const & rhs )
13323 {
13324 memcpy( this, &rhs, sizeof(AttachmentDescription) );
13325 return *this;
13326 }
13327
13328 AttachmentDescription& setFlags( AttachmentDescriptionFlags flags_ )
13329 {
13330 flags = flags_;
13331 return *this;
13332 }
13333
13334 AttachmentDescription& setFormat( Format format_ )
13335 {
13336 format = format_;
13337 return *this;
13338 }
13339
13340 AttachmentDescription& setSamples( SampleCountFlagBits samples_ )
13341 {
13342 samples = samples_;
13343 return *this;
13344 }
13345
13346 AttachmentDescription& setLoadOp( AttachmentLoadOp loadOp_ )
13347 {
13348 loadOp = loadOp_;
13349 return *this;
13350 }
13351
13352 AttachmentDescription& setStoreOp( AttachmentStoreOp storeOp_ )
13353 {
13354 storeOp = storeOp_;
13355 return *this;
13356 }
13357
13358 AttachmentDescription& setStencilLoadOp( AttachmentLoadOp stencilLoadOp_ )
13359 {
13360 stencilLoadOp = stencilLoadOp_;
13361 return *this;
13362 }
13363
13364 AttachmentDescription& setStencilStoreOp( AttachmentStoreOp stencilStoreOp_ )
13365 {
13366 stencilStoreOp = stencilStoreOp_;
13367 return *this;
13368 }
13369
13370 AttachmentDescription& setInitialLayout( ImageLayout initialLayout_ )
13371 {
13372 initialLayout = initialLayout_;
13373 return *this;
13374 }
13375
13376 AttachmentDescription& setFinalLayout( ImageLayout finalLayout_ )
13377 {
13378 finalLayout = finalLayout_;
13379 return *this;
13380 }
13381
13382 operator const VkAttachmentDescription&() const
13383 {
13384 return *reinterpret_cast<const VkAttachmentDescription*>(this);
13385 }
13386
13387 bool operator==( AttachmentDescription const& rhs ) const
13388 {
13389 return ( flags == rhs.flags )
13390 && ( format == rhs.format )
13391 && ( samples == rhs.samples )
13392 && ( loadOp == rhs.loadOp )
13393 && ( storeOp == rhs.storeOp )
13394 && ( stencilLoadOp == rhs.stencilLoadOp )
13395 && ( stencilStoreOp == rhs.stencilStoreOp )
13396 && ( initialLayout == rhs.initialLayout )
13397 && ( finalLayout == rhs.finalLayout );
13398 }
13399
13400 bool operator!=( AttachmentDescription const& rhs ) const
13401 {
13402 return !operator==( rhs );
13403 }
13404
13405 AttachmentDescriptionFlags flags;
13406 Format format;
13407 SampleCountFlagBits samples;
13408 AttachmentLoadOp loadOp;
13409 AttachmentStoreOp storeOp;
13410 AttachmentLoadOp stencilLoadOp;
13411 AttachmentStoreOp stencilStoreOp;
13412 ImageLayout initialLayout;
13413 ImageLayout finalLayout;
13414 };
13415 static_assert( sizeof( AttachmentDescription ) == sizeof( VkAttachmentDescription ), "struct and wrapper have different size!" );
13416
13417 enum class StencilFaceFlagBits
13418 {
13419 eFront = VK_STENCIL_FACE_FRONT_BIT,
13420 eBack = VK_STENCIL_FACE_BACK_BIT,
13421 eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK
13422 };
13423
13424 using StencilFaceFlags = Flags<StencilFaceFlagBits, VkStencilFaceFlags>;
13425
13426 inline StencilFaceFlags operator|( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 )
13427 {
13428 return StencilFaceFlags( bit0 ) | bit1;
13429 }
13430
13431 enum class DescriptorPoolCreateFlagBits
13432 {
13433 eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
13434 };
13435
13436 using DescriptorPoolCreateFlags = Flags<DescriptorPoolCreateFlagBits, VkDescriptorPoolCreateFlags>;
13437
13438 inline DescriptorPoolCreateFlags operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 )
13439 {
13440 return DescriptorPoolCreateFlags( bit0 ) | bit1;
13441 }
13442
13443 struct DescriptorPoolCreateInfo
13444 {
13445 DescriptorPoolCreateInfo( DescriptorPoolCreateFlags flags_ = DescriptorPoolCreateFlags(), uint32_t maxSets_ = 0, uint32_t poolSizeCount_ = 0, const DescriptorPoolSize* pPoolSizes_ = nullptr )
13446 : sType( StructureType::eDescriptorPoolCreateInfo )
13447 , pNext( nullptr )
13448 , flags( flags_ )
13449 , maxSets( maxSets_ )
13450 , poolSizeCount( poolSizeCount_ )
13451 , pPoolSizes( pPoolSizes_ )
13452 {
13453 }
13454
13455 DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs )
13456 {
13457 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13458 }
13459
13460 DescriptorPoolCreateInfo& operator=( VkDescriptorPoolCreateInfo const & rhs )
13461 {
13462 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13463 return *this;
13464 }
13465
13466 DescriptorPoolCreateInfo& setSType( StructureType sType_ )
13467 {
13468 sType = sType_;
13469 return *this;
13470 }
13471
13472 DescriptorPoolCreateInfo& setPNext( const void* pNext_ )
13473 {
13474 pNext = pNext_;
13475 return *this;
13476 }
13477
13478 DescriptorPoolCreateInfo& setFlags( DescriptorPoolCreateFlags flags_ )
13479 {
13480 flags = flags_;
13481 return *this;
13482 }
13483
13484 DescriptorPoolCreateInfo& setMaxSets( uint32_t maxSets_ )
13485 {
13486 maxSets = maxSets_;
13487 return *this;
13488 }
13489
13490 DescriptorPoolCreateInfo& setPoolSizeCount( uint32_t poolSizeCount_ )
13491 {
13492 poolSizeCount = poolSizeCount_;
13493 return *this;
13494 }
13495
13496 DescriptorPoolCreateInfo& setPPoolSizes( const DescriptorPoolSize* pPoolSizes_ )
13497 {
13498 pPoolSizes = pPoolSizes_;
13499 return *this;
13500 }
13501
13502 operator const VkDescriptorPoolCreateInfo&() const
13503 {
13504 return *reinterpret_cast<const VkDescriptorPoolCreateInfo*>(this);
13505 }
13506
13507 bool operator==( DescriptorPoolCreateInfo const& rhs ) const
13508 {
13509 return ( sType == rhs.sType )
13510 && ( pNext == rhs.pNext )
13511 && ( flags == rhs.flags )
13512 && ( maxSets == rhs.maxSets )
13513 && ( poolSizeCount == rhs.poolSizeCount )
13514 && ( pPoolSizes == rhs.pPoolSizes );
13515 }
13516
13517 bool operator!=( DescriptorPoolCreateInfo const& rhs ) const
13518 {
13519 return !operator==( rhs );
13520 }
13521
13522 private:
13523 StructureType sType;
13524
13525 public:
13526 const void* pNext;
13527 DescriptorPoolCreateFlags flags;
13528 uint32_t maxSets;
13529 uint32_t poolSizeCount;
13530 const DescriptorPoolSize* pPoolSizes;
13531 };
13532 static_assert( sizeof( DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ), "struct and wrapper have different size!" );
13533
13534 enum class DependencyFlagBits
13535 {
13536 eByRegion = VK_DEPENDENCY_BY_REGION_BIT
13537 };
13538
13539 using DependencyFlags = Flags<DependencyFlagBits, VkDependencyFlags>;
13540
13541 inline DependencyFlags operator|( DependencyFlagBits bit0, DependencyFlagBits bit1 )
13542 {
13543 return DependencyFlags( bit0 ) | bit1;
13544 }
13545
13546 class CommandBuffer
13547 {
13548 public:
13549 CommandBuffer()
13550 : m_commandBuffer(VK_NULL_HANDLE)
13551 {}
13552
13553#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
13554 CommandBuffer(VkCommandBuffer commandBuffer)
13555 : m_commandBuffer(commandBuffer)
13556 {}
13557
13558 CommandBuffer& operator=(VkCommandBuffer commandBuffer)
13559 {
13560 m_commandBuffer = commandBuffer;
13561 return *this;
13562 }
13563#endif
13564
Lenny Komowebf33162016-08-26 14:10:08 -060013565 bool operator==(CommandBuffer const &rhs) const
13566 {
13567 return m_commandBuffer == rhs.m_commandBuffer;
13568 }
13569
13570 bool operator!=(CommandBuffer const &rhs) const
13571 {
13572 return m_commandBuffer != rhs.m_commandBuffer;
13573 }
13574
13575 bool operator<(CommandBuffer const &rhs) const
13576 {
13577 return m_commandBuffer < rhs.m_commandBuffer;
13578 }
13579
Lenny Komowbed9b5c2016-08-11 11:23:15 -060013580 Result begin( const CommandBufferBeginInfo* pBeginInfo ) const
13581 {
13582 return static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( pBeginInfo ) ) );
13583 }
13584
13585#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13586 ResultValueType<void>::type begin( const CommandBufferBeginInfo & beginInfo ) const
13587 {
13588 Result result = static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( &beginInfo ) ) );
13589 return createResultValue( result, "vk::CommandBuffer::begin" );
13590 }
13591#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13592
13593#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13594 Result end( ) const
13595 {
13596 return static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13597 }
13598#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13599
13600#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13601 ResultValueType<void>::type end() const
13602 {
13603 Result result = static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13604 return createResultValue( result, "vk::CommandBuffer::end" );
13605 }
13606#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13607
13608#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13609 Result reset( CommandBufferResetFlags flags ) const
13610 {
13611 return static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13612 }
13613#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13614
13615#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13616 ResultValueType<void>::type reset( CommandBufferResetFlags flags ) const
13617 {
13618 Result result = static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13619 return createResultValue( result, "vk::CommandBuffer::reset" );
13620 }
13621#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13622
13623#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13624 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13625 {
13626 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13627 }
13628#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13629
13630#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13631 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13632 {
13633 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13634 }
13635#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13636
13637 void setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport* pViewports ) const
13638 {
13639 vkCmdSetViewport( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast<const VkViewport*>( pViewports ) );
13640 }
13641
13642#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13643 void setViewport( uint32_t firstViewport, ArrayProxy<const Viewport> viewports ) const
13644 {
13645 vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size() , reinterpret_cast<const VkViewport*>( viewports.data() ) );
13646 }
13647#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13648
13649 void setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D* pScissors ) const
13650 {
13651 vkCmdSetScissor( m_commandBuffer, firstScissor, scissorCount, reinterpret_cast<const VkRect2D*>( pScissors ) );
13652 }
13653
13654#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13655 void setScissor( uint32_t firstScissor, ArrayProxy<const Rect2D> scissors ) const
13656 {
13657 vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size() , reinterpret_cast<const VkRect2D*>( scissors.data() ) );
13658 }
13659#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13660
13661#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13662 void setLineWidth( float lineWidth ) const
13663 {
13664 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13665 }
13666#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13667
13668#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13669 void setLineWidth( float lineWidth ) const
13670 {
13671 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13672 }
13673#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13674
13675#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13676 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13677 {
13678 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13679 }
13680#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13681
13682#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13683 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13684 {
13685 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13686 }
13687#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13688
13689#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13690 void setBlendConstants( const float blendConstants[4] ) const
13691 {
13692 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13693 }
13694#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13695
13696#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13697 void setBlendConstants( const float blendConstants[4] ) const
13698 {
13699 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13700 }
13701#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13702
13703#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13704 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13705 {
13706 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13707 }
13708#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13709
13710#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13711 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13712 {
13713 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13714 }
13715#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13716
13717#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13718 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13719 {
13720 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13721 }
13722#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13723
13724#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13725 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13726 {
13727 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13728 }
13729#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13730
13731#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13732 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13733 {
13734 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13735 }
13736#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13737
13738#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13739 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13740 {
13741 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13742 }
13743#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13744
13745#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13746 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13747 {
13748 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13749 }
13750#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13751
13752#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13753 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13754 {
13755 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13756 }
13757#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13758
13759 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets ) const
13760 {
13761 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ), dynamicOffsetCount, pDynamicOffsets );
13762 }
13763
13764#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13765 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, ArrayProxy<const DescriptorSet> descriptorSets, ArrayProxy<const uint32_t> dynamicOffsets ) const
13766 {
13767 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ), dynamicOffsets.size() , dynamicOffsets.data() );
13768 }
13769#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13770
13771#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13772 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13773 {
13774 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13775 }
13776#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13777
13778#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13779 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13780 {
13781 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13782 }
13783#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13784
13785 void bindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const Buffer* pBuffers, const DeviceSize* pOffsets ) const
13786 {
13787 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, bindingCount, reinterpret_cast<const VkBuffer*>( pBuffers ), pOffsets );
13788 }
13789
13790#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13791 void bindVertexBuffers( uint32_t firstBinding, ArrayProxy<const Buffer> buffers, ArrayProxy<const DeviceSize> offsets ) const
13792 {
13793#ifdef VULKAN_HPP_NO_EXCEPTIONS
13794 assert( buffers.size() == offsets.size() );
13795#else
13796 if ( buffers.size() != offsets.size() )
13797 {
13798 throw std::logic_error( "vk::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" );
13799 }
13800#endif // VULKAN_HPP_NO_EXCEPTIONS
13801 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, buffers.size() , reinterpret_cast<const VkBuffer*>( buffers.data() ), offsets.data() );
13802 }
13803#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13804
13805#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13806 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13807 {
13808 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13809 }
13810#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13811
13812#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13813 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13814 {
13815 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13816 }
13817#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13818
13819#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13820 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13821 {
13822 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13823 }
13824#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13825
13826#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13827 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13828 {
13829 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13830 }
13831#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13832
13833#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13834 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13835 {
13836 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13837 }
13838#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13839
13840#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13841 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13842 {
13843 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13844 }
13845#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13846
13847#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13848 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13849 {
13850 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13851 }
13852#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13853
13854#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13855 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13856 {
13857 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13858 }
13859#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13860
13861#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13862 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13863 {
13864 vkCmdDispatch( m_commandBuffer, x, y, z );
13865 }
13866#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13867
13868#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13869 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13870 {
13871 vkCmdDispatch( m_commandBuffer, x, y, z );
13872 }
13873#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13874
13875#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13876 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13877 {
13878 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13879 }
13880#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13881
13882#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13883 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13884 {
13885 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13886 }
13887#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13888
13889 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy* pRegions ) const
13890 {
13891 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferCopy*>( pRegions ) );
13892 }
13893
13894#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13895 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy<const BufferCopy> regions ) const
13896 {
13897 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferCopy*>( regions.data() ) );
13898 }
13899#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13900
13901 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageCopy* pRegions ) const
13902 {
13903 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 ) );
13904 }
13905
13906#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13907 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageCopy> regions ) const
13908 {
13909 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() ) );
13910 }
13911#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13912
13913 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageBlit* pRegions, Filter filter ) const
13914 {
13915 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 ) );
13916 }
13917
13918#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13919 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageBlit> regions, Filter filter ) const
13920 {
13921 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 ) );
13922 }
13923#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13924
13925 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13926 {
13927 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13928 }
13929
13930#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13931 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const BufferImageCopy> regions ) const
13932 {
13933 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
13934 }
13935#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13936
13937 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13938 {
13939 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13940 }
13941
13942#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13943 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, ArrayProxy<const BufferImageCopy> regions ) const
13944 {
13945 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
13946 }
13947#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13948
13949 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void* pData ) const
13950 {
13951 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, dataSize, pData );
13952 }
13953
13954#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13955 template <typename T>
13956 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy<const T> data ) const
13957 {
13958 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, data.size() * sizeof( T ) , reinterpret_cast<const void*>( data.data() ) );
13959 }
13960#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13961
13962#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13963 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
13964 {
13965 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
13966 }
13967#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13968
13969#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13970 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
13971 {
13972 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
13973 }
13974#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13975
13976 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue* pColor, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
13977 {
13978 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( pColor ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
13979 }
13980
13981#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13982 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ArrayProxy<const ImageSubresourceRange> ranges ) const
13983 {
13984 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( &color ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
13985 }
13986#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13987
13988 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
13989 {
13990 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( pDepthStencil ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
13991 }
13992
13993#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13994 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ArrayProxy<const ImageSubresourceRange> ranges ) const
13995 {
13996 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( &depthStencil ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
13997 }
13998#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13999
14000 void clearAttachments( uint32_t attachmentCount, const ClearAttachment* pAttachments, uint32_t rectCount, const ClearRect* pRects ) const
14001 {
14002 vkCmdClearAttachments( m_commandBuffer, attachmentCount, reinterpret_cast<const VkClearAttachment*>( pAttachments ), rectCount, reinterpret_cast<const VkClearRect*>( pRects ) );
14003 }
14004
14005#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14006 void clearAttachments( ArrayProxy<const ClearAttachment> attachments, ArrayProxy<const ClearRect> rects ) const
14007 {
14008 vkCmdClearAttachments( m_commandBuffer, attachments.size() , reinterpret_cast<const VkClearAttachment*>( attachments.data() ), rects.size() , reinterpret_cast<const VkClearRect*>( rects.data() ) );
14009 }
14010#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14011
14012 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageResolve* pRegions ) const
14013 {
14014 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 ) );
14015 }
14016
14017#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14018 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageResolve> regions ) const
14019 {
14020 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() ) );
14021 }
14022#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14023
14024#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14025 void setEvent( Event event, PipelineStageFlags stageMask ) const
14026 {
14027 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14028 }
14029#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14030
14031#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14032 void setEvent( Event event, PipelineStageFlags stageMask ) const
14033 {
14034 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14035 }
14036#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14037
14038#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14039 void resetEvent( Event event, PipelineStageFlags stageMask ) const
14040 {
14041 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14042 }
14043#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14044
14045#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14046 void resetEvent( Event event, PipelineStageFlags stageMask ) const
14047 {
14048 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14049 }
14050#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14051
14052 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
14053 {
14054 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 ) );
14055 }
14056
14057#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14058 void waitEvents( ArrayProxy<const Event> events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
14059 {
14060 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() ) );
14061 }
14062#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14063
14064 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
14065 {
14066 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 ) );
14067 }
14068
14069#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14070 void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
14071 {
14072 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() ) );
14073 }
14074#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14075
14076#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14077 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
14078 {
14079 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
14080 }
14081#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14082
14083#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14084 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
14085 {
14086 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
14087 }
14088#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14089
14090#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14091 void endQuery( QueryPool queryPool, uint32_t query ) const
14092 {
14093 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
14094 }
14095#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14096
14097#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14098 void endQuery( QueryPool queryPool, uint32_t query ) const
14099 {
14100 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
14101 }
14102#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14103
14104#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14105 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
14106 {
14107 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
14108 }
14109#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14110
14111#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14112 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
14113 {
14114 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
14115 }
14116#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14117
14118#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14119 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
14120 {
14121 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
14122 }
14123#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14124
14125#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14126 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
14127 {
14128 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
14129 }
14130#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14131
14132#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14133 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
14134 {
14135 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14136 }
14137#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14138
14139#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14140 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
14141 {
14142 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14143 }
14144#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14145
14146 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues ) const
14147 {
14148 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, size, pValues );
14149 }
14150
14151#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14152 template <typename T>
14153 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, ArrayProxy<const T> values ) const
14154 {
14155 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, values.size() * sizeof( T ) , reinterpret_cast<const void*>( values.data() ) );
14156 }
14157#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14158
14159 void beginRenderPass( const RenderPassBeginInfo* pRenderPassBegin, SubpassContents contents ) const
14160 {
14161 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( pRenderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14162 }
14163
14164#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14165 void beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents ) const
14166 {
14167 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( &renderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14168 }
14169#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14170
14171#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14172 void nextSubpass( SubpassContents contents ) const
14173 {
14174 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14175 }
14176#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14177
14178#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14179 void nextSubpass( SubpassContents contents ) const
14180 {
14181 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14182 }
14183#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14184
14185#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14186 void endRenderPass( ) const
14187 {
14188 vkCmdEndRenderPass( m_commandBuffer );
14189 }
14190#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14191
14192#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14193 void endRenderPass() const
14194 {
14195 vkCmdEndRenderPass( m_commandBuffer );
14196 }
14197#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14198
14199 void executeCommands( uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
14200 {
14201 vkCmdExecuteCommands( m_commandBuffer, commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
14202 }
14203
14204#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14205 void executeCommands( ArrayProxy<const CommandBuffer> commandBuffers ) const
14206 {
14207 vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
14208 }
14209#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14210
14211 void debugMarkerBeginEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14212 {
14213 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14214 }
14215
14216#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14217 DebugMarkerMarkerInfoEXT debugMarkerBeginEXT() const
14218 {
14219 DebugMarkerMarkerInfoEXT markerInfo;
14220 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14221 return markerInfo;
14222 }
14223#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14224
14225#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14226 void debugMarkerEndEXT( ) const
14227 {
14228 vkCmdDebugMarkerEndEXT( m_commandBuffer );
14229 }
14230#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14231
14232#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14233 void debugMarkerEndEXT() const
14234 {
14235 vkCmdDebugMarkerEndEXT( m_commandBuffer );
14236 }
14237#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14238
14239 void debugMarkerInsertEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14240 {
14241 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14242 }
14243
14244#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14245 DebugMarkerMarkerInfoEXT debugMarkerInsertEXT() const
14246 {
14247 DebugMarkerMarkerInfoEXT markerInfo;
14248 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14249 return markerInfo;
14250 }
14251#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14252
Lenny Komow6501c122016-08-31 15:03:49 -060014253#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14254 void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14255 {
14256 vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14257 }
14258#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14259
14260#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14261 void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14262 {
14263 vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14264 }
14265#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14266
14267#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14268 void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14269 {
14270 vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14271 }
14272#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14273
14274#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14275 void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14276 {
14277 vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14278 }
14279#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14280
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014281#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14282 explicit
14283#endif
14284 operator VkCommandBuffer() const
14285 {
14286 return m_commandBuffer;
14287 }
14288
14289 explicit operator bool() const
14290 {
14291 return m_commandBuffer != VK_NULL_HANDLE;
14292 }
14293
14294 bool operator!() const
14295 {
14296 return m_commandBuffer == VK_NULL_HANDLE;
14297 }
14298
14299 private:
14300 VkCommandBuffer m_commandBuffer;
14301 };
14302 static_assert( sizeof( CommandBuffer ) == sizeof( VkCommandBuffer ), "handle and wrapper have different size!" );
14303
14304 struct SubpassDependency
14305 {
14306 SubpassDependency( uint32_t srcSubpass_ = 0, uint32_t dstSubpass_ = 0, PipelineStageFlags srcStageMask_ = PipelineStageFlags(), PipelineStageFlags dstStageMask_ = PipelineStageFlags(), AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), DependencyFlags dependencyFlags_ = DependencyFlags() )
14307 : srcSubpass( srcSubpass_ )
14308 , dstSubpass( dstSubpass_ )
14309 , srcStageMask( srcStageMask_ )
14310 , dstStageMask( dstStageMask_ )
14311 , srcAccessMask( srcAccessMask_ )
14312 , dstAccessMask( dstAccessMask_ )
14313 , dependencyFlags( dependencyFlags_ )
14314 {
14315 }
14316
14317 SubpassDependency( VkSubpassDependency const & rhs )
14318 {
14319 memcpy( this, &rhs, sizeof(SubpassDependency) );
14320 }
14321
14322 SubpassDependency& operator=( VkSubpassDependency const & rhs )
14323 {
14324 memcpy( this, &rhs, sizeof(SubpassDependency) );
14325 return *this;
14326 }
14327
14328 SubpassDependency& setSrcSubpass( uint32_t srcSubpass_ )
14329 {
14330 srcSubpass = srcSubpass_;
14331 return *this;
14332 }
14333
14334 SubpassDependency& setDstSubpass( uint32_t dstSubpass_ )
14335 {
14336 dstSubpass = dstSubpass_;
14337 return *this;
14338 }
14339
14340 SubpassDependency& setSrcStageMask( PipelineStageFlags srcStageMask_ )
14341 {
14342 srcStageMask = srcStageMask_;
14343 return *this;
14344 }
14345
14346 SubpassDependency& setDstStageMask( PipelineStageFlags dstStageMask_ )
14347 {
14348 dstStageMask = dstStageMask_;
14349 return *this;
14350 }
14351
14352 SubpassDependency& setSrcAccessMask( AccessFlags srcAccessMask_ )
14353 {
14354 srcAccessMask = srcAccessMask_;
14355 return *this;
14356 }
14357
14358 SubpassDependency& setDstAccessMask( AccessFlags dstAccessMask_ )
14359 {
14360 dstAccessMask = dstAccessMask_;
14361 return *this;
14362 }
14363
14364 SubpassDependency& setDependencyFlags( DependencyFlags dependencyFlags_ )
14365 {
14366 dependencyFlags = dependencyFlags_;
14367 return *this;
14368 }
14369
14370 operator const VkSubpassDependency&() const
14371 {
14372 return *reinterpret_cast<const VkSubpassDependency*>(this);
14373 }
14374
14375 bool operator==( SubpassDependency const& rhs ) const
14376 {
14377 return ( srcSubpass == rhs.srcSubpass )
14378 && ( dstSubpass == rhs.dstSubpass )
14379 && ( srcStageMask == rhs.srcStageMask )
14380 && ( dstStageMask == rhs.dstStageMask )
14381 && ( srcAccessMask == rhs.srcAccessMask )
14382 && ( dstAccessMask == rhs.dstAccessMask )
14383 && ( dependencyFlags == rhs.dependencyFlags );
14384 }
14385
14386 bool operator!=( SubpassDependency const& rhs ) const
14387 {
14388 return !operator==( rhs );
14389 }
14390
14391 uint32_t srcSubpass;
14392 uint32_t dstSubpass;
14393 PipelineStageFlags srcStageMask;
14394 PipelineStageFlags dstStageMask;
14395 AccessFlags srcAccessMask;
14396 AccessFlags dstAccessMask;
14397 DependencyFlags dependencyFlags;
14398 };
14399 static_assert( sizeof( SubpassDependency ) == sizeof( VkSubpassDependency ), "struct and wrapper have different size!" );
14400
14401 struct RenderPassCreateInfo
14402 {
14403 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 )
14404 : sType( StructureType::eRenderPassCreateInfo )
14405 , pNext( nullptr )
14406 , flags( flags_ )
14407 , attachmentCount( attachmentCount_ )
14408 , pAttachments( pAttachments_ )
14409 , subpassCount( subpassCount_ )
14410 , pSubpasses( pSubpasses_ )
14411 , dependencyCount( dependencyCount_ )
14412 , pDependencies( pDependencies_ )
14413 {
14414 }
14415
14416 RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs )
14417 {
14418 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14419 }
14420
14421 RenderPassCreateInfo& operator=( VkRenderPassCreateInfo const & rhs )
14422 {
14423 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14424 return *this;
14425 }
14426
14427 RenderPassCreateInfo& setSType( StructureType sType_ )
14428 {
14429 sType = sType_;
14430 return *this;
14431 }
14432
14433 RenderPassCreateInfo& setPNext( const void* pNext_ )
14434 {
14435 pNext = pNext_;
14436 return *this;
14437 }
14438
14439 RenderPassCreateInfo& setFlags( RenderPassCreateFlags flags_ )
14440 {
14441 flags = flags_;
14442 return *this;
14443 }
14444
14445 RenderPassCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
14446 {
14447 attachmentCount = attachmentCount_;
14448 return *this;
14449 }
14450
14451 RenderPassCreateInfo& setPAttachments( const AttachmentDescription* pAttachments_ )
14452 {
14453 pAttachments = pAttachments_;
14454 return *this;
14455 }
14456
14457 RenderPassCreateInfo& setSubpassCount( uint32_t subpassCount_ )
14458 {
14459 subpassCount = subpassCount_;
14460 return *this;
14461 }
14462
14463 RenderPassCreateInfo& setPSubpasses( const SubpassDescription* pSubpasses_ )
14464 {
14465 pSubpasses = pSubpasses_;
14466 return *this;
14467 }
14468
14469 RenderPassCreateInfo& setDependencyCount( uint32_t dependencyCount_ )
14470 {
14471 dependencyCount = dependencyCount_;
14472 return *this;
14473 }
14474
14475 RenderPassCreateInfo& setPDependencies( const SubpassDependency* pDependencies_ )
14476 {
14477 pDependencies = pDependencies_;
14478 return *this;
14479 }
14480
14481 operator const VkRenderPassCreateInfo&() const
14482 {
14483 return *reinterpret_cast<const VkRenderPassCreateInfo*>(this);
14484 }
14485
14486 bool operator==( RenderPassCreateInfo const& rhs ) const
14487 {
14488 return ( sType == rhs.sType )
14489 && ( pNext == rhs.pNext )
14490 && ( flags == rhs.flags )
14491 && ( attachmentCount == rhs.attachmentCount )
14492 && ( pAttachments == rhs.pAttachments )
14493 && ( subpassCount == rhs.subpassCount )
14494 && ( pSubpasses == rhs.pSubpasses )
14495 && ( dependencyCount == rhs.dependencyCount )
14496 && ( pDependencies == rhs.pDependencies );
14497 }
14498
14499 bool operator!=( RenderPassCreateInfo const& rhs ) const
14500 {
14501 return !operator==( rhs );
14502 }
14503
14504 private:
14505 StructureType sType;
14506
14507 public:
14508 const void* pNext;
14509 RenderPassCreateFlags flags;
14510 uint32_t attachmentCount;
14511 const AttachmentDescription* pAttachments;
14512 uint32_t subpassCount;
14513 const SubpassDescription* pSubpasses;
14514 uint32_t dependencyCount;
14515 const SubpassDependency* pDependencies;
14516 };
14517 static_assert( sizeof( RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ), "struct and wrapper have different size!" );
14518
14519 struct SubmitInfo
14520 {
14521 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 )
14522 : sType( StructureType::eSubmitInfo )
14523 , pNext( nullptr )
14524 , waitSemaphoreCount( waitSemaphoreCount_ )
14525 , pWaitSemaphores( pWaitSemaphores_ )
14526 , pWaitDstStageMask( pWaitDstStageMask_ )
14527 , commandBufferCount( commandBufferCount_ )
14528 , pCommandBuffers( pCommandBuffers_ )
14529 , signalSemaphoreCount( signalSemaphoreCount_ )
14530 , pSignalSemaphores( pSignalSemaphores_ )
14531 {
14532 }
14533
14534 SubmitInfo( VkSubmitInfo const & rhs )
14535 {
14536 memcpy( this, &rhs, sizeof(SubmitInfo) );
14537 }
14538
14539 SubmitInfo& operator=( VkSubmitInfo const & rhs )
14540 {
14541 memcpy( this, &rhs, sizeof(SubmitInfo) );
14542 return *this;
14543 }
14544
14545 SubmitInfo& setSType( StructureType sType_ )
14546 {
14547 sType = sType_;
14548 return *this;
14549 }
14550
14551 SubmitInfo& setPNext( const void* pNext_ )
14552 {
14553 pNext = pNext_;
14554 return *this;
14555 }
14556
14557 SubmitInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
14558 {
14559 waitSemaphoreCount = waitSemaphoreCount_;
14560 return *this;
14561 }
14562
14563 SubmitInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
14564 {
14565 pWaitSemaphores = pWaitSemaphores_;
14566 return *this;
14567 }
14568
14569 SubmitInfo& setPWaitDstStageMask( const PipelineStageFlags* pWaitDstStageMask_ )
14570 {
14571 pWaitDstStageMask = pWaitDstStageMask_;
14572 return *this;
14573 }
14574
14575 SubmitInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
14576 {
14577 commandBufferCount = commandBufferCount_;
14578 return *this;
14579 }
14580
14581 SubmitInfo& setPCommandBuffers( const CommandBuffer* pCommandBuffers_ )
14582 {
14583 pCommandBuffers = pCommandBuffers_;
14584 return *this;
14585 }
14586
14587 SubmitInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
14588 {
14589 signalSemaphoreCount = signalSemaphoreCount_;
14590 return *this;
14591 }
14592
14593 SubmitInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
14594 {
14595 pSignalSemaphores = pSignalSemaphores_;
14596 return *this;
14597 }
14598
14599 operator const VkSubmitInfo&() const
14600 {
14601 return *reinterpret_cast<const VkSubmitInfo*>(this);
14602 }
14603
14604 bool operator==( SubmitInfo const& rhs ) const
14605 {
14606 return ( sType == rhs.sType )
14607 && ( pNext == rhs.pNext )
14608 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
14609 && ( pWaitSemaphores == rhs.pWaitSemaphores )
14610 && ( pWaitDstStageMask == rhs.pWaitDstStageMask )
14611 && ( commandBufferCount == rhs.commandBufferCount )
14612 && ( pCommandBuffers == rhs.pCommandBuffers )
14613 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
14614 && ( pSignalSemaphores == rhs.pSignalSemaphores );
14615 }
14616
14617 bool operator!=( SubmitInfo const& rhs ) const
14618 {
14619 return !operator==( rhs );
14620 }
14621
14622 private:
14623 StructureType sType;
14624
14625 public:
14626 const void* pNext;
14627 uint32_t waitSemaphoreCount;
14628 const Semaphore* pWaitSemaphores;
14629 const PipelineStageFlags* pWaitDstStageMask;
14630 uint32_t commandBufferCount;
14631 const CommandBuffer* pCommandBuffers;
14632 uint32_t signalSemaphoreCount;
14633 const Semaphore* pSignalSemaphores;
14634 };
14635 static_assert( sizeof( SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" );
14636
14637 class Queue
14638 {
14639 public:
14640 Queue()
14641 : m_queue(VK_NULL_HANDLE)
14642 {}
14643
14644#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14645 Queue(VkQueue queue)
14646 : m_queue(queue)
14647 {}
14648
14649 Queue& operator=(VkQueue queue)
14650 {
14651 m_queue = queue;
14652 return *this;
14653 }
14654#endif
14655
Lenny Komowebf33162016-08-26 14:10:08 -060014656 bool operator==(Queue const &rhs) const
14657 {
14658 return m_queue == rhs.m_queue;
14659 }
14660
14661 bool operator!=(Queue const &rhs) const
14662 {
14663 return m_queue != rhs.m_queue;
14664 }
14665
14666 bool operator<(Queue const &rhs) const
14667 {
14668 return m_queue < rhs.m_queue;
14669 }
14670
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014671 Result submit( uint32_t submitCount, const SubmitInfo* pSubmits, Fence fence ) const
14672 {
14673 return static_cast<Result>( vkQueueSubmit( m_queue, submitCount, reinterpret_cast<const VkSubmitInfo*>( pSubmits ), static_cast<VkFence>( fence ) ) );
14674 }
14675
14676#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14677 ResultValueType<void>::type submit( ArrayProxy<const SubmitInfo> submits, Fence fence ) const
14678 {
14679 Result result = static_cast<Result>( vkQueueSubmit( m_queue, submits.size() , reinterpret_cast<const VkSubmitInfo*>( submits.data() ), static_cast<VkFence>( fence ) ) );
14680 return createResultValue( result, "vk::Queue::submit" );
14681 }
14682#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14683
14684#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14685 Result waitIdle( ) const
14686 {
14687 return static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14688 }
14689#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14690
14691#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14692 ResultValueType<void>::type waitIdle() const
14693 {
14694 Result result = static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14695 return createResultValue( result, "vk::Queue::waitIdle" );
14696 }
14697#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14698
14699 Result bindSparse( uint32_t bindInfoCount, const BindSparseInfo* pBindInfo, Fence fence ) const
14700 {
14701 return static_cast<Result>( vkQueueBindSparse( m_queue, bindInfoCount, reinterpret_cast<const VkBindSparseInfo*>( pBindInfo ), static_cast<VkFence>( fence ) ) );
14702 }
14703
14704#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14705 ResultValueType<void>::type bindSparse( ArrayProxy<const BindSparseInfo> bindInfo, Fence fence ) const
14706 {
14707 Result result = static_cast<Result>( vkQueueBindSparse( m_queue, bindInfo.size() , reinterpret_cast<const VkBindSparseInfo*>( bindInfo.data() ), static_cast<VkFence>( fence ) ) );
14708 return createResultValue( result, "vk::Queue::bindSparse" );
14709 }
14710#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14711
14712 Result presentKHR( const PresentInfoKHR* pPresentInfo ) const
14713 {
14714 return static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( pPresentInfo ) ) );
14715 }
14716
14717#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14718 Result presentKHR( const PresentInfoKHR & presentInfo ) const
14719 {
14720 Result result = static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( &presentInfo ) ) );
14721 return createResultValue( result, "vk::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } );
14722 }
14723#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14724
14725#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14726 explicit
14727#endif
14728 operator VkQueue() const
14729 {
14730 return m_queue;
14731 }
14732
14733 explicit operator bool() const
14734 {
14735 return m_queue != VK_NULL_HANDLE;
14736 }
14737
14738 bool operator!() const
14739 {
14740 return m_queue == VK_NULL_HANDLE;
14741 }
14742
14743 private:
14744 VkQueue m_queue;
14745 };
14746 static_assert( sizeof( Queue ) == sizeof( VkQueue ), "handle and wrapper have different size!" );
14747
14748 enum class PresentModeKHR
14749 {
14750 eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR,
14751 eMailbox = VK_PRESENT_MODE_MAILBOX_KHR,
14752 eFifo = VK_PRESENT_MODE_FIFO_KHR,
14753 eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR
14754 };
14755
14756 enum class ColorSpaceKHR
14757 {
14758 eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
14759 };
14760
14761 struct SurfaceFormatKHR
14762 {
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014763 operator const VkSurfaceFormatKHR&() const
14764 {
14765 return *reinterpret_cast<const VkSurfaceFormatKHR*>(this);
14766 }
14767
14768 bool operator==( SurfaceFormatKHR const& rhs ) const
14769 {
14770 return ( format == rhs.format )
14771 && ( colorSpace == rhs.colorSpace );
14772 }
14773
14774 bool operator!=( SurfaceFormatKHR const& rhs ) const
14775 {
14776 return !operator==( rhs );
14777 }
14778
14779 Format format;
14780 ColorSpaceKHR colorSpace;
14781 };
14782 static_assert( sizeof( SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ), "struct and wrapper have different size!" );
14783
14784 enum class DisplayPlaneAlphaFlagBitsKHR
14785 {
14786 eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,
14787 eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,
14788 ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,
14789 ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
14790 };
14791
14792 using DisplayPlaneAlphaFlagsKHR = Flags<DisplayPlaneAlphaFlagBitsKHR, VkDisplayPlaneAlphaFlagsKHR>;
14793
14794 inline DisplayPlaneAlphaFlagsKHR operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 )
14795 {
14796 return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1;
14797 }
14798
14799 struct DisplayPlaneCapabilitiesKHR
14800 {
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014801 operator const VkDisplayPlaneCapabilitiesKHR&() const
14802 {
14803 return *reinterpret_cast<const VkDisplayPlaneCapabilitiesKHR*>(this);
14804 }
14805
14806 bool operator==( DisplayPlaneCapabilitiesKHR const& rhs ) const
14807 {
14808 return ( supportedAlpha == rhs.supportedAlpha )
14809 && ( minSrcPosition == rhs.minSrcPosition )
14810 && ( maxSrcPosition == rhs.maxSrcPosition )
14811 && ( minSrcExtent == rhs.minSrcExtent )
14812 && ( maxSrcExtent == rhs.maxSrcExtent )
14813 && ( minDstPosition == rhs.minDstPosition )
14814 && ( maxDstPosition == rhs.maxDstPosition )
14815 && ( minDstExtent == rhs.minDstExtent )
14816 && ( maxDstExtent == rhs.maxDstExtent );
14817 }
14818
14819 bool operator!=( DisplayPlaneCapabilitiesKHR const& rhs ) const
14820 {
14821 return !operator==( rhs );
14822 }
14823
14824 DisplayPlaneAlphaFlagsKHR supportedAlpha;
14825 Offset2D minSrcPosition;
14826 Offset2D maxSrcPosition;
14827 Extent2D minSrcExtent;
14828 Extent2D maxSrcExtent;
14829 Offset2D minDstPosition;
14830 Offset2D maxDstPosition;
14831 Extent2D minDstExtent;
14832 Extent2D maxDstExtent;
14833 };
14834 static_assert( sizeof( DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ), "struct and wrapper have different size!" );
14835
14836 enum class CompositeAlphaFlagBitsKHR
14837 {
14838 eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
14839 ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
14840 ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
14841 eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
14842 };
14843
14844 using CompositeAlphaFlagsKHR = Flags<CompositeAlphaFlagBitsKHR, VkCompositeAlphaFlagsKHR>;
14845
14846 inline CompositeAlphaFlagsKHR operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 )
14847 {
14848 return CompositeAlphaFlagsKHR( bit0 ) | bit1;
14849 }
14850
14851 enum class SurfaceTransformFlagBitsKHR
14852 {
14853 eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
14854 eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
14855 eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,
14856 eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,
14857 eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,
14858 eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,
14859 eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,
14860 eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,
14861 eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
14862 };
14863
14864 using SurfaceTransformFlagsKHR = Flags<SurfaceTransformFlagBitsKHR, VkSurfaceTransformFlagsKHR>;
14865
14866 inline SurfaceTransformFlagsKHR operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 )
14867 {
14868 return SurfaceTransformFlagsKHR( bit0 ) | bit1;
14869 }
14870
14871 struct DisplayPropertiesKHR
14872 {
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014873 operator const VkDisplayPropertiesKHR&() const
14874 {
14875 return *reinterpret_cast<const VkDisplayPropertiesKHR*>(this);
14876 }
14877
14878 bool operator==( DisplayPropertiesKHR const& rhs ) const
14879 {
14880 return ( display == rhs.display )
14881 && ( displayName == rhs.displayName )
14882 && ( physicalDimensions == rhs.physicalDimensions )
14883 && ( physicalResolution == rhs.physicalResolution )
14884 && ( supportedTransforms == rhs.supportedTransforms )
14885 && ( planeReorderPossible == rhs.planeReorderPossible )
14886 && ( persistentContent == rhs.persistentContent );
14887 }
14888
14889 bool operator!=( DisplayPropertiesKHR const& rhs ) const
14890 {
14891 return !operator==( rhs );
14892 }
14893
14894 DisplayKHR display;
14895 const char* displayName;
14896 Extent2D physicalDimensions;
14897 Extent2D physicalResolution;
14898 SurfaceTransformFlagsKHR supportedTransforms;
14899 Bool32 planeReorderPossible;
14900 Bool32 persistentContent;
14901 };
14902 static_assert( sizeof( DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ), "struct and wrapper have different size!" );
14903
14904 struct DisplaySurfaceCreateInfoKHR
14905 {
14906 DisplaySurfaceCreateInfoKHR( DisplaySurfaceCreateFlagsKHR flags_ = DisplaySurfaceCreateFlagsKHR(), DisplayModeKHR displayMode_ = DisplayModeKHR(), uint32_t planeIndex_ = 0, uint32_t planeStackIndex_ = 0, SurfaceTransformFlagBitsKHR transform_ = SurfaceTransformFlagBitsKHR::eIdentity, float globalAlpha_ = 0, DisplayPlaneAlphaFlagBitsKHR alphaMode_ = DisplayPlaneAlphaFlagBitsKHR::eOpaque, Extent2D imageExtent_ = Extent2D() )
14907 : sType( StructureType::eDisplaySurfaceCreateInfoKHR )
14908 , pNext( nullptr )
14909 , flags( flags_ )
14910 , displayMode( displayMode_ )
14911 , planeIndex( planeIndex_ )
14912 , planeStackIndex( planeStackIndex_ )
14913 , transform( transform_ )
14914 , globalAlpha( globalAlpha_ )
14915 , alphaMode( alphaMode_ )
14916 , imageExtent( imageExtent_ )
14917 {
14918 }
14919
14920 DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs )
14921 {
14922 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
14923 }
14924
14925 DisplaySurfaceCreateInfoKHR& operator=( VkDisplaySurfaceCreateInfoKHR const & rhs )
14926 {
14927 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
14928 return *this;
14929 }
14930
14931 DisplaySurfaceCreateInfoKHR& setSType( StructureType sType_ )
14932 {
14933 sType = sType_;
14934 return *this;
14935 }
14936
14937 DisplaySurfaceCreateInfoKHR& setPNext( const void* pNext_ )
14938 {
14939 pNext = pNext_;
14940 return *this;
14941 }
14942
14943 DisplaySurfaceCreateInfoKHR& setFlags( DisplaySurfaceCreateFlagsKHR flags_ )
14944 {
14945 flags = flags_;
14946 return *this;
14947 }
14948
14949 DisplaySurfaceCreateInfoKHR& setDisplayMode( DisplayModeKHR displayMode_ )
14950 {
14951 displayMode = displayMode_;
14952 return *this;
14953 }
14954
14955 DisplaySurfaceCreateInfoKHR& setPlaneIndex( uint32_t planeIndex_ )
14956 {
14957 planeIndex = planeIndex_;
14958 return *this;
14959 }
14960
14961 DisplaySurfaceCreateInfoKHR& setPlaneStackIndex( uint32_t planeStackIndex_ )
14962 {
14963 planeStackIndex = planeStackIndex_;
14964 return *this;
14965 }
14966
14967 DisplaySurfaceCreateInfoKHR& setTransform( SurfaceTransformFlagBitsKHR transform_ )
14968 {
14969 transform = transform_;
14970 return *this;
14971 }
14972
14973 DisplaySurfaceCreateInfoKHR& setGlobalAlpha( float globalAlpha_ )
14974 {
14975 globalAlpha = globalAlpha_;
14976 return *this;
14977 }
14978
14979 DisplaySurfaceCreateInfoKHR& setAlphaMode( DisplayPlaneAlphaFlagBitsKHR alphaMode_ )
14980 {
14981 alphaMode = alphaMode_;
14982 return *this;
14983 }
14984
14985 DisplaySurfaceCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
14986 {
14987 imageExtent = imageExtent_;
14988 return *this;
14989 }
14990
14991 operator const VkDisplaySurfaceCreateInfoKHR&() const
14992 {
14993 return *reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>(this);
14994 }
14995
14996 bool operator==( DisplaySurfaceCreateInfoKHR const& rhs ) const
14997 {
14998 return ( sType == rhs.sType )
14999 && ( pNext == rhs.pNext )
15000 && ( flags == rhs.flags )
15001 && ( displayMode == rhs.displayMode )
15002 && ( planeIndex == rhs.planeIndex )
15003 && ( planeStackIndex == rhs.planeStackIndex )
15004 && ( transform == rhs.transform )
15005 && ( globalAlpha == rhs.globalAlpha )
15006 && ( alphaMode == rhs.alphaMode )
15007 && ( imageExtent == rhs.imageExtent );
15008 }
15009
15010 bool operator!=( DisplaySurfaceCreateInfoKHR const& rhs ) const
15011 {
15012 return !operator==( rhs );
15013 }
15014
15015 private:
15016 StructureType sType;
15017
15018 public:
15019 const void* pNext;
15020 DisplaySurfaceCreateFlagsKHR flags;
15021 DisplayModeKHR displayMode;
15022 uint32_t planeIndex;
15023 uint32_t planeStackIndex;
15024 SurfaceTransformFlagBitsKHR transform;
15025 float globalAlpha;
15026 DisplayPlaneAlphaFlagBitsKHR alphaMode;
15027 Extent2D imageExtent;
15028 };
15029 static_assert( sizeof( DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
15030
15031 struct SurfaceCapabilitiesKHR
15032 {
Lenny Komowbed9b5c2016-08-11 11:23:15 -060015033 operator const VkSurfaceCapabilitiesKHR&() const
15034 {
15035 return *reinterpret_cast<const VkSurfaceCapabilitiesKHR*>(this);
15036 }
15037
15038 bool operator==( SurfaceCapabilitiesKHR const& rhs ) const
15039 {
15040 return ( minImageCount == rhs.minImageCount )
15041 && ( maxImageCount == rhs.maxImageCount )
15042 && ( currentExtent == rhs.currentExtent )
15043 && ( minImageExtent == rhs.minImageExtent )
15044 && ( maxImageExtent == rhs.maxImageExtent )
15045 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
15046 && ( supportedTransforms == rhs.supportedTransforms )
15047 && ( currentTransform == rhs.currentTransform )
15048 && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha )
15049 && ( supportedUsageFlags == rhs.supportedUsageFlags );
15050 }
15051
15052 bool operator!=( SurfaceCapabilitiesKHR const& rhs ) const
15053 {
15054 return !operator==( rhs );
15055 }
15056
15057 uint32_t minImageCount;
15058 uint32_t maxImageCount;
15059 Extent2D currentExtent;
15060 Extent2D minImageExtent;
15061 Extent2D maxImageExtent;
15062 uint32_t maxImageArrayLayers;
15063 SurfaceTransformFlagsKHR supportedTransforms;
15064 SurfaceTransformFlagBitsKHR currentTransform;
15065 CompositeAlphaFlagsKHR supportedCompositeAlpha;
15066 ImageUsageFlags supportedUsageFlags;
15067 };
15068 static_assert( sizeof( SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ), "struct and wrapper have different size!" );
15069
15070 struct SwapchainCreateInfoKHR
15071 {
15072 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() )
15073 : sType( StructureType::eSwapchainCreateInfoKHR )
15074 , pNext( nullptr )
15075 , flags( flags_ )
15076 , surface( surface_ )
15077 , minImageCount( minImageCount_ )
15078 , imageFormat( imageFormat_ )
15079 , imageColorSpace( imageColorSpace_ )
15080 , imageExtent( imageExtent_ )
15081 , imageArrayLayers( imageArrayLayers_ )
15082 , imageUsage( imageUsage_ )
15083 , imageSharingMode( imageSharingMode_ )
15084 , queueFamilyIndexCount( queueFamilyIndexCount_ )
15085 , pQueueFamilyIndices( pQueueFamilyIndices_ )
15086 , preTransform( preTransform_ )
15087 , compositeAlpha( compositeAlpha_ )
15088 , presentMode( presentMode_ )
15089 , clipped( clipped_ )
15090 , oldSwapchain( oldSwapchain_ )
15091 {
15092 }
15093
15094 SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs )
15095 {
15096 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15097 }
15098
15099 SwapchainCreateInfoKHR& operator=( VkSwapchainCreateInfoKHR const & rhs )
15100 {
15101 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15102 return *this;
15103 }
15104
15105 SwapchainCreateInfoKHR& setSType( StructureType sType_ )
15106 {
15107 sType = sType_;
15108 return *this;
15109 }
15110
15111 SwapchainCreateInfoKHR& setPNext( const void* pNext_ )
15112 {
15113 pNext = pNext_;
15114 return *this;
15115 }
15116
15117 SwapchainCreateInfoKHR& setFlags( SwapchainCreateFlagsKHR flags_ )
15118 {
15119 flags = flags_;
15120 return *this;
15121 }
15122
15123 SwapchainCreateInfoKHR& setSurface( SurfaceKHR surface_ )
15124 {
15125 surface = surface_;
15126 return *this;
15127 }
15128
15129 SwapchainCreateInfoKHR& setMinImageCount( uint32_t minImageCount_ )
15130 {
15131 minImageCount = minImageCount_;
15132 return *this;
15133 }
15134
15135 SwapchainCreateInfoKHR& setImageFormat( Format imageFormat_ )
15136 {
15137 imageFormat = imageFormat_;
15138 return *this;
15139 }
15140
15141 SwapchainCreateInfoKHR& setImageColorSpace( ColorSpaceKHR imageColorSpace_ )
15142 {
15143 imageColorSpace = imageColorSpace_;
15144 return *this;
15145 }
15146
15147 SwapchainCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
15148 {
15149 imageExtent = imageExtent_;
15150 return *this;
15151 }
15152
15153 SwapchainCreateInfoKHR& setImageArrayLayers( uint32_t imageArrayLayers_ )
15154 {
15155 imageArrayLayers = imageArrayLayers_;
15156 return *this;
15157 }
15158
15159 SwapchainCreateInfoKHR& setImageUsage( ImageUsageFlags imageUsage_ )
15160 {
15161 imageUsage = imageUsage_;
15162 return *this;
15163 }
15164
15165 SwapchainCreateInfoKHR& setImageSharingMode( SharingMode imageSharingMode_ )
15166 {
15167 imageSharingMode = imageSharingMode_;
15168 return *this;
15169 }
15170
15171 SwapchainCreateInfoKHR& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
15172 {
15173 queueFamilyIndexCount = queueFamilyIndexCount_;
15174 return *this;
15175 }
15176
15177 SwapchainCreateInfoKHR& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
15178 {
15179 pQueueFamilyIndices = pQueueFamilyIndices_;
15180 return *this;
15181 }
15182
15183 SwapchainCreateInfoKHR& setPreTransform( SurfaceTransformFlagBitsKHR preTransform_ )
15184 {
15185 preTransform = preTransform_;
15186 return *this;
15187 }
15188
15189 SwapchainCreateInfoKHR& setCompositeAlpha( CompositeAlphaFlagBitsKHR compositeAlpha_ )
15190 {
15191 compositeAlpha = compositeAlpha_;
15192 return *this;
15193 }
15194
15195 SwapchainCreateInfoKHR& setPresentMode( PresentModeKHR presentMode_ )
15196 {
15197 presentMode = presentMode_;
15198 return *this;
15199 }
15200
15201 SwapchainCreateInfoKHR& setClipped( Bool32 clipped_ )
15202 {
15203 clipped = clipped_;
15204 return *this;
15205 }
15206
15207 SwapchainCreateInfoKHR& setOldSwapchain( SwapchainKHR oldSwapchain_ )
15208 {
15209 oldSwapchain = oldSwapchain_;
15210 return *this;
15211 }
15212
15213 operator const VkSwapchainCreateInfoKHR&() const
15214 {
15215 return *reinterpret_cast<const VkSwapchainCreateInfoKHR*>(this);
15216 }
15217
15218 bool operator==( SwapchainCreateInfoKHR const& rhs ) const
15219 {
15220 return ( sType == rhs.sType )
15221 && ( pNext == rhs.pNext )
15222 && ( flags == rhs.flags )
15223 && ( surface == rhs.surface )
15224 && ( minImageCount == rhs.minImageCount )
15225 && ( imageFormat == rhs.imageFormat )
15226 && ( imageColorSpace == rhs.imageColorSpace )
15227 && ( imageExtent == rhs.imageExtent )
15228 && ( imageArrayLayers == rhs.imageArrayLayers )
15229 && ( imageUsage == rhs.imageUsage )
15230 && ( imageSharingMode == rhs.imageSharingMode )
15231 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
15232 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
15233 && ( preTransform == rhs.preTransform )
15234 && ( compositeAlpha == rhs.compositeAlpha )
15235 && ( presentMode == rhs.presentMode )
15236 && ( clipped == rhs.clipped )
15237 && ( oldSwapchain == rhs.oldSwapchain );
15238 }
15239
15240 bool operator!=( SwapchainCreateInfoKHR const& rhs ) const
15241 {
15242 return !operator==( rhs );
15243 }
15244
15245 private:
15246 StructureType sType;
15247
15248 public:
15249 const void* pNext;
15250 SwapchainCreateFlagsKHR flags;
15251 SurfaceKHR surface;
15252 uint32_t minImageCount;
15253 Format imageFormat;
15254 ColorSpaceKHR imageColorSpace;
15255 Extent2D imageExtent;
15256 uint32_t imageArrayLayers;
15257 ImageUsageFlags imageUsage;
15258 SharingMode imageSharingMode;
15259 uint32_t queueFamilyIndexCount;
15260 const uint32_t* pQueueFamilyIndices;
15261 SurfaceTransformFlagBitsKHR preTransform;
15262 CompositeAlphaFlagBitsKHR compositeAlpha;
15263 PresentModeKHR presentMode;
15264 Bool32 clipped;
15265 SwapchainKHR oldSwapchain;
15266 };
15267 static_assert( sizeof( SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ), "struct and wrapper have different size!" );
15268
15269 enum class DebugReportFlagBitsEXT
15270 {
15271 eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT,
15272 eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT,
15273 ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
15274 eError = VK_DEBUG_REPORT_ERROR_BIT_EXT,
15275 eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT
15276 };
15277
15278 using DebugReportFlagsEXT = Flags<DebugReportFlagBitsEXT, VkDebugReportFlagsEXT>;
15279
15280 inline DebugReportFlagsEXT operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 )
15281 {
15282 return DebugReportFlagsEXT( bit0 ) | bit1;
15283 }
15284
15285 struct DebugReportCallbackCreateInfoEXT
15286 {
15287 DebugReportCallbackCreateInfoEXT( DebugReportFlagsEXT flags_ = DebugReportFlagsEXT(), PFN_vkDebugReportCallbackEXT pfnCallback_ = nullptr, void* pUserData_ = nullptr )
15288 : sType( StructureType::eDebugReportCallbackCreateInfoEXT )
15289 , pNext( nullptr )
15290 , flags( flags_ )
15291 , pfnCallback( pfnCallback_ )
15292 , pUserData( pUserData_ )
15293 {
15294 }
15295
15296 DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs )
15297 {
15298 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15299 }
15300
15301 DebugReportCallbackCreateInfoEXT& operator=( VkDebugReportCallbackCreateInfoEXT const & rhs )
15302 {
15303 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15304 return *this;
15305 }
15306
15307 DebugReportCallbackCreateInfoEXT& setSType( StructureType sType_ )
15308 {
15309 sType = sType_;
15310 return *this;
15311 }
15312
15313 DebugReportCallbackCreateInfoEXT& setPNext( const void* pNext_ )
15314 {
15315 pNext = pNext_;
15316 return *this;
15317 }
15318
15319 DebugReportCallbackCreateInfoEXT& setFlags( DebugReportFlagsEXT flags_ )
15320 {
15321 flags = flags_;
15322 return *this;
15323 }
15324
15325 DebugReportCallbackCreateInfoEXT& setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ )
15326 {
15327 pfnCallback = pfnCallback_;
15328 return *this;
15329 }
15330
15331 DebugReportCallbackCreateInfoEXT& setPUserData( void* pUserData_ )
15332 {
15333 pUserData = pUserData_;
15334 return *this;
15335 }
15336
15337 operator const VkDebugReportCallbackCreateInfoEXT&() const
15338 {
15339 return *reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(this);
15340 }
15341
15342 bool operator==( DebugReportCallbackCreateInfoEXT const& rhs ) const
15343 {
15344 return ( sType == rhs.sType )
15345 && ( pNext == rhs.pNext )
15346 && ( flags == rhs.flags )
15347 && ( pfnCallback == rhs.pfnCallback )
15348 && ( pUserData == rhs.pUserData );
15349 }
15350
15351 bool operator!=( DebugReportCallbackCreateInfoEXT const& rhs ) const
15352 {
15353 return !operator==( rhs );
15354 }
15355
15356 private:
15357 StructureType sType;
15358
15359 public:
15360 const void* pNext;
15361 DebugReportFlagsEXT flags;
15362 PFN_vkDebugReportCallbackEXT pfnCallback;
15363 void* pUserData;
15364 };
15365 static_assert( sizeof( DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ), "struct and wrapper have different size!" );
15366
15367 enum class DebugReportObjectTypeEXT
15368 {
15369 eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
15370 eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
15371 ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
15372 eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
15373 eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
15374 eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
15375 eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
15376 eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
15377 eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
15378 eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
15379 eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
15380 eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
15381 eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
15382 eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
15383 eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
15384 eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
15385 ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
15386 ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
15387 eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
15388 ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
15389 eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
15390 eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
15391 eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
15392 eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
15393 eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
15394 eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
15395 eSurfaceKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
15396 eSwapchainKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
15397 eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT
15398 };
15399
15400 struct DebugMarkerObjectNameInfoEXT
15401 {
15402 DebugMarkerObjectNameInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, const char* pObjectName_ = nullptr )
15403 : sType( StructureType::eDebugMarkerObjectNameInfoEXT )
15404 , pNext( nullptr )
15405 , objectType( objectType_ )
15406 , object( object_ )
15407 , pObjectName( pObjectName_ )
15408 {
15409 }
15410
15411 DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs )
15412 {
15413 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15414 }
15415
15416 DebugMarkerObjectNameInfoEXT& operator=( VkDebugMarkerObjectNameInfoEXT const & rhs )
15417 {
15418 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15419 return *this;
15420 }
15421
15422 DebugMarkerObjectNameInfoEXT& setSType( StructureType sType_ )
15423 {
15424 sType = sType_;
15425 return *this;
15426 }
15427
15428 DebugMarkerObjectNameInfoEXT& setPNext( const void* pNext_ )
15429 {
15430 pNext = pNext_;
15431 return *this;
15432 }
15433
15434 DebugMarkerObjectNameInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15435 {
15436 objectType = objectType_;
15437 return *this;
15438 }
15439
15440 DebugMarkerObjectNameInfoEXT& setObject( uint64_t object_ )
15441 {
15442 object = object_;
15443 return *this;
15444 }
15445
15446 DebugMarkerObjectNameInfoEXT& setPObjectName( const char* pObjectName_ )
15447 {
15448 pObjectName = pObjectName_;
15449 return *this;
15450 }
15451
15452 operator const VkDebugMarkerObjectNameInfoEXT&() const
15453 {
15454 return *reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>(this);
15455 }
15456
15457 bool operator==( DebugMarkerObjectNameInfoEXT const& rhs ) const
15458 {
15459 return ( sType == rhs.sType )
15460 && ( pNext == rhs.pNext )
15461 && ( objectType == rhs.objectType )
15462 && ( object == rhs.object )
15463 && ( pObjectName == rhs.pObjectName );
15464 }
15465
15466 bool operator!=( DebugMarkerObjectNameInfoEXT const& rhs ) const
15467 {
15468 return !operator==( rhs );
15469 }
15470
15471 private:
15472 StructureType sType;
15473
15474 public:
15475 const void* pNext;
15476 DebugReportObjectTypeEXT objectType;
15477 uint64_t object;
15478 const char* pObjectName;
15479 };
15480 static_assert( sizeof( DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ), "struct and wrapper have different size!" );
15481
15482 struct DebugMarkerObjectTagInfoEXT
15483 {
15484 DebugMarkerObjectTagInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, uint64_t tagName_ = 0, size_t tagSize_ = 0, const void* pTag_ = nullptr )
15485 : sType( StructureType::eDebugMarkerObjectTagInfoEXT )
15486 , pNext( nullptr )
15487 , objectType( objectType_ )
15488 , object( object_ )
15489 , tagName( tagName_ )
15490 , tagSize( tagSize_ )
15491 , pTag( pTag_ )
15492 {
15493 }
15494
15495 DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs )
15496 {
15497 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15498 }
15499
15500 DebugMarkerObjectTagInfoEXT& operator=( VkDebugMarkerObjectTagInfoEXT const & rhs )
15501 {
15502 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15503 return *this;
15504 }
15505
15506 DebugMarkerObjectTagInfoEXT& setSType( StructureType sType_ )
15507 {
15508 sType = sType_;
15509 return *this;
15510 }
15511
15512 DebugMarkerObjectTagInfoEXT& setPNext( const void* pNext_ )
15513 {
15514 pNext = pNext_;
15515 return *this;
15516 }
15517
15518 DebugMarkerObjectTagInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15519 {
15520 objectType = objectType_;
15521 return *this;
15522 }
15523
15524 DebugMarkerObjectTagInfoEXT& setObject( uint64_t object_ )
15525 {
15526 object = object_;
15527 return *this;
15528 }
15529
15530 DebugMarkerObjectTagInfoEXT& setTagName( uint64_t tagName_ )
15531 {
15532 tagName = tagName_;
15533 return *this;
15534 }
15535
15536 DebugMarkerObjectTagInfoEXT& setTagSize( size_t tagSize_ )
15537 {
15538 tagSize = tagSize_;
15539 return *this;
15540 }
15541
15542 DebugMarkerObjectTagInfoEXT& setPTag( const void* pTag_ )
15543 {
15544 pTag = pTag_;
15545 return *this;
15546 }
15547
15548 operator const VkDebugMarkerObjectTagInfoEXT&() const
15549 {
15550 return *reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>(this);
15551 }
15552
15553 bool operator==( DebugMarkerObjectTagInfoEXT const& rhs ) const
15554 {
15555 return ( sType == rhs.sType )
15556 && ( pNext == rhs.pNext )
15557 && ( objectType == rhs.objectType )
15558 && ( object == rhs.object )
15559 && ( tagName == rhs.tagName )
15560 && ( tagSize == rhs.tagSize )
15561 && ( pTag == rhs.pTag );
15562 }
15563
15564 bool operator!=( DebugMarkerObjectTagInfoEXT const& rhs ) const
15565 {
15566 return !operator==( rhs );
15567 }
15568
15569 private:
15570 StructureType sType;
15571
15572 public:
15573 const void* pNext;
15574 DebugReportObjectTypeEXT objectType;
15575 uint64_t object;
15576 uint64_t tagName;
15577 size_t tagSize;
15578 const void* pTag;
15579 };
15580 static_assert( sizeof( DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ), "struct and wrapper have different size!" );
15581
Lenny Komow6501c122016-08-31 15:03:49 -060015582 enum class DebugReportErrorEXT
15583 {
15584 eNone = VK_DEBUG_REPORT_ERROR_NONE_EXT,
15585 eCallbackRef = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT
15586 };
15587
15588 enum class RasterizationOrderAMD
15589 {
15590 eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD,
15591 eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD
15592 };
15593
15594 struct PipelineRasterizationStateRasterizationOrderAMD
15595 {
15596 PipelineRasterizationStateRasterizationOrderAMD( RasterizationOrderAMD rasterizationOrder_ = RasterizationOrderAMD::eStrict )
15597 : sType( StructureType::ePipelineRasterizationStateRasterizationOrderAMD )
15598 , pNext( nullptr )
15599 , rasterizationOrder( rasterizationOrder_ )
15600 {
15601 }
15602
15603 PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15604 {
15605 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15606 }
15607
15608 PipelineRasterizationStateRasterizationOrderAMD& operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15609 {
15610 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15611 return *this;
15612 }
15613
15614 PipelineRasterizationStateRasterizationOrderAMD& setSType( StructureType sType_ )
15615 {
15616 sType = sType_;
15617 return *this;
15618 }
15619
15620 PipelineRasterizationStateRasterizationOrderAMD& setPNext( const void* pNext_ )
15621 {
15622 pNext = pNext_;
15623 return *this;
15624 }
15625
15626 PipelineRasterizationStateRasterizationOrderAMD& setRasterizationOrder( RasterizationOrderAMD rasterizationOrder_ )
15627 {
15628 rasterizationOrder = rasterizationOrder_;
15629 return *this;
15630 }
15631
15632 operator const VkPipelineRasterizationStateRasterizationOrderAMD&() const
15633 {
15634 return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(this);
15635 }
15636
15637 bool operator==( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15638 {
15639 return ( sType == rhs.sType )
15640 && ( pNext == rhs.pNext )
15641 && ( rasterizationOrder == rhs.rasterizationOrder );
15642 }
15643
15644 bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15645 {
15646 return !operator==( rhs );
15647 }
15648
15649 private:
15650 StructureType sType;
15651
15652 public:
15653 const void* pNext;
15654 RasterizationOrderAMD rasterizationOrder;
15655 };
15656 static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) == sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), "struct and wrapper have different size!" );
15657
15658 enum class ExternalMemoryHandleTypeFlagBitsNV
15659 {
15660 eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV,
15661 eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV,
15662 eD3D11Image = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV,
15663 eD3D11ImageKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
15664 };
15665
15666 using ExternalMemoryHandleTypeFlagsNV = Flags<ExternalMemoryHandleTypeFlagBitsNV, VkExternalMemoryHandleTypeFlagsNV>;
15667
15668 inline ExternalMemoryHandleTypeFlagsNV operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 )
15669 {
15670 return ExternalMemoryHandleTypeFlagsNV( bit0 ) | bit1;
15671 }
15672
Lenny Komowbed9b5c2016-08-11 11:23:15 -060015673 class Device
15674 {
15675 public:
15676 Device()
15677 : m_device(VK_NULL_HANDLE)
15678 {}
15679
15680#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
15681 Device(VkDevice device)
15682 : m_device(device)
15683 {}
15684
15685 Device& operator=(VkDevice device)
15686 {
15687 m_device = device;
15688 return *this;
15689 }
15690#endif
15691
Lenny Komowebf33162016-08-26 14:10:08 -060015692 bool operator==(Device const &rhs) const
15693 {
15694 return m_device == rhs.m_device;
15695 }
15696
15697 bool operator!=(Device const &rhs) const
15698 {
15699 return m_device != rhs.m_device;
15700 }
15701
15702 bool operator<(Device const &rhs) const
15703 {
15704 return m_device < rhs.m_device;
15705 }
15706
Lenny Komowbed9b5c2016-08-11 11:23:15 -060015707 PFN_vkVoidFunction getProcAddr( const char* pName ) const
15708 {
15709 return vkGetDeviceProcAddr( m_device, pName );
15710 }
15711
15712#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15713 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
15714 {
15715 return vkGetDeviceProcAddr( m_device, name.c_str() );
15716 }
15717#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15718
15719 void destroy( const AllocationCallbacks* pAllocator ) const
15720 {
15721 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15722 }
15723
15724#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15725 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
15726 {
15727 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15728 }
15729#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15730
15731 void getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue* pQueue ) const
15732 {
15733 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( pQueue ) );
15734 }
15735
15736#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15737 Queue getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const
15738 {
15739 Queue queue;
15740 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( &queue ) );
15741 return queue;
15742 }
15743#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15744
15745#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15746 Result waitIdle( ) const
15747 {
15748 return static_cast<Result>( vkDeviceWaitIdle( m_device ) );
15749 }
15750#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15751
15752#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15753 ResultValueType<void>::type waitIdle() const
15754 {
15755 Result result = static_cast<Result>( vkDeviceWaitIdle( m_device ) );
15756 return createResultValue( result, "vk::Device::waitIdle" );
15757 }
15758#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15759
15760 Result allocateMemory( const MemoryAllocateInfo* pAllocateInfo, const AllocationCallbacks* pAllocator, DeviceMemory* pMemory ) const
15761 {
15762 return static_cast<Result>( vkAllocateMemory( m_device, reinterpret_cast<const VkMemoryAllocateInfo*>( pAllocateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDeviceMemory*>( pMemory ) ) );
15763 }
15764
15765#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15766 ResultValueType<DeviceMemory>::type allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15767 {
15768 DeviceMemory memory;
15769 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 ) ) );
15770 return createResultValue( result, memory, "vk::Device::allocateMemory" );
15771 }
15772#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15773
15774 void freeMemory( DeviceMemory memory, const AllocationCallbacks* pAllocator ) const
15775 {
15776 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15777 }
15778
15779#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15780 void freeMemory( DeviceMemory memory, Optional<const AllocationCallbacks> allocator = nullptr ) const
15781 {
15782 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15783 }
15784#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15785
15786#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15787 Result mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void** ppData ) const
15788 {
15789 return static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), ppData ) );
15790 }
15791#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15792
15793#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15794 ResultValueType<void*>::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags = MemoryMapFlags() ) const
15795 {
15796 void* pData;
15797 Result result = static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), &pData ) );
15798 return createResultValue( result, pData, "vk::Device::mapMemory" );
15799 }
15800#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15801
15802#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15803 void unmapMemory( DeviceMemory memory ) const
15804 {
15805 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
15806 }
15807#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15808
15809#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15810 void unmapMemory( DeviceMemory memory ) const
15811 {
15812 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
15813 }
15814#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15815
15816 Result flushMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
15817 {
15818 return static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
15819 }
15820
15821#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15822 ResultValueType<void>::type flushMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
15823 {
15824 Result result = static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
15825 return createResultValue( result, "vk::Device::flushMappedMemoryRanges" );
15826 }
15827#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15828
15829 Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
15830 {
15831 return static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
15832 }
15833
15834#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15835 ResultValueType<void>::type invalidateMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
15836 {
15837 Result result = static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
15838 return createResultValue( result, "vk::Device::invalidateMappedMemoryRanges" );
15839 }
15840#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15841
15842 void getMemoryCommitment( DeviceMemory memory, DeviceSize* pCommittedMemoryInBytes ) const
15843 {
15844 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), pCommittedMemoryInBytes );
15845 }
15846
15847#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15848 DeviceSize getMemoryCommitment( DeviceMemory memory ) const
15849 {
15850 DeviceSize committedMemoryInBytes;
15851 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), &committedMemoryInBytes );
15852 return committedMemoryInBytes;
15853 }
15854#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15855
15856 void getBufferMemoryRequirements( Buffer buffer, MemoryRequirements* pMemoryRequirements ) const
15857 {
15858 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
15859 }
15860
15861#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15862 MemoryRequirements getBufferMemoryRequirements( Buffer buffer ) const
15863 {
15864 MemoryRequirements memoryRequirements;
15865 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
15866 return memoryRequirements;
15867 }
15868#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15869
15870#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15871 Result bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
15872 {
15873 return static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15874 }
15875#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15876
15877#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15878 ResultValueType<void>::type bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
15879 {
15880 Result result = static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15881 return createResultValue( result, "vk::Device::bindBufferMemory" );
15882 }
15883#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15884
15885 void getImageMemoryRequirements( Image image, MemoryRequirements* pMemoryRequirements ) const
15886 {
15887 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
15888 }
15889
15890#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15891 MemoryRequirements getImageMemoryRequirements( Image image ) const
15892 {
15893 MemoryRequirements memoryRequirements;
15894 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
15895 return memoryRequirements;
15896 }
15897#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15898
15899#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15900 Result bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
15901 {
15902 return static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15903 }
15904#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15905
15906#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15907 ResultValueType<void>::type bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
15908 {
15909 Result result = static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
15910 return createResultValue( result, "vk::Device::bindImageMemory" );
15911 }
15912#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15913
15914 void getImageSparseMemoryRequirements( Image image, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements* pSparseMemoryRequirements ) const
15915 {
15916 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), pSparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( pSparseMemoryRequirements ) );
15917 }
15918
15919#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15920 template <typename Allocator = std::allocator<SparseImageMemoryRequirements>>
15921 std::vector<SparseImageMemoryRequirements,Allocator> getImageSparseMemoryRequirements( Image image ) const
15922 {
15923 std::vector<SparseImageMemoryRequirements,Allocator> sparseMemoryRequirements;
15924 uint32_t sparseMemoryRequirementCount;
15925 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, nullptr );
15926 sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
15927 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( sparseMemoryRequirements.data() ) );
15928 return sparseMemoryRequirements;
15929 }
15930#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15931
15932 Result createFence( const FenceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
15933 {
15934 return static_cast<Result>( vkCreateFence( m_device, reinterpret_cast<const VkFenceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
15935 }
15936
15937#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15938 ResultValueType<Fence>::type createFence( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
15939 {
15940 Fence fence;
15941 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 ) ) );
15942 return createResultValue( result, fence, "vk::Device::createFence" );
15943 }
15944#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15945
15946 void destroyFence( Fence fence, const AllocationCallbacks* pAllocator ) const
15947 {
15948 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
15949 }
15950
15951#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15952 void destroyFence( Fence fence, Optional<const AllocationCallbacks> allocator = nullptr ) const
15953 {
15954 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
15955 }
15956#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15957
15958 Result resetFences( uint32_t fenceCount, const Fence* pFences ) const
15959 {
15960 return static_cast<Result>( vkResetFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ) ) );
15961 }
15962
15963#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15964 ResultValueType<void>::type resetFences( ArrayProxy<const Fence> fences ) const
15965 {
15966 Result result = static_cast<Result>( vkResetFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ) ) );
15967 return createResultValue( result, "vk::Device::resetFences" );
15968 }
15969#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15970
15971#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
15972 Result getFenceStatus( Fence fence ) const
15973 {
15974 return static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
15975 }
15976#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15977
15978#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15979 Result getFenceStatus( Fence fence ) const
15980 {
15981 Result result = static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
15982 return createResultValue( result, "vk::Device::getFenceStatus", { Result::eSuccess, Result::eNotReady } );
15983 }
15984#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15985
15986 Result waitForFences( uint32_t fenceCount, const Fence* pFences, Bool32 waitAll, uint64_t timeout ) const
15987 {
15988 return static_cast<Result>( vkWaitForFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ), waitAll, timeout ) );
15989 }
15990
15991#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
15992 Result waitForFences( ArrayProxy<const Fence> fences, Bool32 waitAll, uint64_t timeout ) const
15993 {
15994 Result result = static_cast<Result>( vkWaitForFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ), waitAll, timeout ) );
15995 return createResultValue( result, "vk::Device::waitForFences", { Result::eSuccess, Result::eTimeout } );
15996 }
15997#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
15998
15999 Result createSemaphore( const SemaphoreCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Semaphore* pSemaphore ) const
16000 {
16001 return static_cast<Result>( vkCreateSemaphore( m_device, reinterpret_cast<const VkSemaphoreCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSemaphore*>( pSemaphore ) ) );
16002 }
16003
16004#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16005 ResultValueType<Semaphore>::type createSemaphore( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16006 {
16007 Semaphore semaphore;
16008 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 ) ) );
16009 return createResultValue( result, semaphore, "vk::Device::createSemaphore" );
16010 }
16011#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16012
16013 void destroySemaphore( Semaphore semaphore, const AllocationCallbacks* pAllocator ) const
16014 {
16015 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16016 }
16017
16018#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16019 void destroySemaphore( Semaphore semaphore, Optional<const AllocationCallbacks> allocator = nullptr ) const
16020 {
16021 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16022 }
16023#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16024
16025 Result createEvent( const EventCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Event* pEvent ) const
16026 {
16027 return static_cast<Result>( vkCreateEvent( m_device, reinterpret_cast<const VkEventCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkEvent*>( pEvent ) ) );
16028 }
16029
16030#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16031 ResultValueType<Event>::type createEvent( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16032 {
16033 Event event;
16034 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 ) ) );
16035 return createResultValue( result, event, "vk::Device::createEvent" );
16036 }
16037#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16038
16039 void destroyEvent( Event event, const AllocationCallbacks* pAllocator ) const
16040 {
16041 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16042 }
16043
16044#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16045 void destroyEvent( Event event, Optional<const AllocationCallbacks> allocator = nullptr ) const
16046 {
16047 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16048 }
16049#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16050
16051#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16052 Result getEventStatus( Event event ) const
16053 {
16054 return static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16055 }
16056#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16057
16058#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16059 Result getEventStatus( Event event ) const
16060 {
16061 Result result = static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16062 return createResultValue( result, "vk::Device::getEventStatus", { Result::eEventSet, Result::eEventReset } );
16063 }
16064#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16065
16066#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16067 Result setEvent( Event event ) const
16068 {
16069 return static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16070 }
16071#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16072
16073#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16074 ResultValueType<void>::type setEvent( Event event ) const
16075 {
16076 Result result = static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16077 return createResultValue( result, "vk::Device::setEvent" );
16078 }
16079#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16080
16081#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16082 Result resetEvent( Event event ) const
16083 {
16084 return static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16085 }
16086#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16087
16088#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16089 ResultValueType<void>::type resetEvent( Event event ) const
16090 {
16091 Result result = static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16092 return createResultValue( result, "vk::Device::resetEvent" );
16093 }
16094#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16095
16096 Result createQueryPool( const QueryPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, QueryPool* pQueryPool ) const
16097 {
16098 return static_cast<Result>( vkCreateQueryPool( m_device, reinterpret_cast<const VkQueryPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkQueryPool*>( pQueryPool ) ) );
16099 }
16100
16101#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16102 ResultValueType<QueryPool>::type createQueryPool( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16103 {
16104 QueryPool queryPool;
16105 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 ) ) );
16106 return createResultValue( result, queryPool, "vk::Device::createQueryPool" );
16107 }
16108#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16109
16110 void destroyQueryPool( QueryPool queryPool, const AllocationCallbacks* pAllocator ) const
16111 {
16112 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16113 }
16114
16115#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16116 void destroyQueryPool( QueryPool queryPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16117 {
16118 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16119 }
16120#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16121
16122 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, DeviceSize stride, QueryResultFlags flags ) const
16123 {
16124 return static_cast<Result>( vkGetQueryPoolResults( m_device, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, dataSize, pData, stride, static_cast<VkQueryResultFlags>( flags ) ) );
16125 }
16126
16127#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16128 template <typename T>
16129 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, ArrayProxy<T> data, DeviceSize stride, QueryResultFlags flags ) const
16130 {
16131 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 ) ) );
16132 return createResultValue( result, "vk::Device::getQueryPoolResults", { Result::eSuccess, Result::eNotReady } );
16133 }
16134#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16135
16136 Result createBuffer( const BufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Buffer* pBuffer ) const
16137 {
16138 return static_cast<Result>( vkCreateBuffer( m_device, reinterpret_cast<const VkBufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBuffer*>( pBuffer ) ) );
16139 }
16140
16141#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16142 ResultValueType<Buffer>::type createBuffer( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16143 {
16144 Buffer buffer;
16145 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 ) ) );
16146 return createResultValue( result, buffer, "vk::Device::createBuffer" );
16147 }
16148#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16149
16150 void destroyBuffer( Buffer buffer, const AllocationCallbacks* pAllocator ) const
16151 {
16152 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16153 }
16154
16155#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16156 void destroyBuffer( Buffer buffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16157 {
16158 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16159 }
16160#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16161
16162 Result createBufferView( const BufferViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, BufferView* pView ) const
16163 {
16164 return static_cast<Result>( vkCreateBufferView( m_device, reinterpret_cast<const VkBufferViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBufferView*>( pView ) ) );
16165 }
16166
16167#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16168 ResultValueType<BufferView>::type createBufferView( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16169 {
16170 BufferView view;
16171 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 ) ) );
16172 return createResultValue( result, view, "vk::Device::createBufferView" );
16173 }
16174#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16175
16176 void destroyBufferView( BufferView bufferView, const AllocationCallbacks* pAllocator ) const
16177 {
16178 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16179 }
16180
16181#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16182 void destroyBufferView( BufferView bufferView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16183 {
16184 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16185 }
16186#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16187
16188 Result createImage( const ImageCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Image* pImage ) const
16189 {
16190 return static_cast<Result>( vkCreateImage( m_device, reinterpret_cast<const VkImageCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImage*>( pImage ) ) );
16191 }
16192
16193#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16194 ResultValueType<Image>::type createImage( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16195 {
16196 Image image;
16197 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 ) ) );
16198 return createResultValue( result, image, "vk::Device::createImage" );
16199 }
16200#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16201
16202 void destroyImage( Image image, const AllocationCallbacks* pAllocator ) const
16203 {
16204 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16205 }
16206
16207#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16208 void destroyImage( Image image, Optional<const AllocationCallbacks> allocator = nullptr ) const
16209 {
16210 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16211 }
16212#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16213
16214 void getImageSubresourceLayout( Image image, const ImageSubresource* pSubresource, SubresourceLayout* pLayout ) const
16215 {
16216 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( pSubresource ), reinterpret_cast<VkSubresourceLayout*>( pLayout ) );
16217 }
16218
16219#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16220 SubresourceLayout getImageSubresourceLayout( Image image, const ImageSubresource & subresource ) const
16221 {
16222 SubresourceLayout layout;
16223 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( &subresource ), reinterpret_cast<VkSubresourceLayout*>( &layout ) );
16224 return layout;
16225 }
16226#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16227
16228 Result createImageView( const ImageViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ImageView* pView ) const
16229 {
16230 return static_cast<Result>( vkCreateImageView( m_device, reinterpret_cast<const VkImageViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImageView*>( pView ) ) );
16231 }
16232
16233#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16234 ResultValueType<ImageView>::type createImageView( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16235 {
16236 ImageView view;
16237 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 ) ) );
16238 return createResultValue( result, view, "vk::Device::createImageView" );
16239 }
16240#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16241
16242 void destroyImageView( ImageView imageView, const AllocationCallbacks* pAllocator ) const
16243 {
16244 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16245 }
16246
16247#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16248 void destroyImageView( ImageView imageView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16249 {
16250 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16251 }
16252#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16253
16254 Result createShaderModule( const ShaderModuleCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ShaderModule* pShaderModule ) const
16255 {
16256 return static_cast<Result>( vkCreateShaderModule( m_device, reinterpret_cast<const VkShaderModuleCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkShaderModule*>( pShaderModule ) ) );
16257 }
16258
16259#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16260 ResultValueType<ShaderModule>::type createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16261 {
16262 ShaderModule shaderModule;
16263 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 ) ) );
16264 return createResultValue( result, shaderModule, "vk::Device::createShaderModule" );
16265 }
16266#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16267
16268 void destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks* pAllocator ) const
16269 {
16270 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16271 }
16272
16273#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16274 void destroyShaderModule( ShaderModule shaderModule, Optional<const AllocationCallbacks> allocator = nullptr ) const
16275 {
16276 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16277 }
16278#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16279
16280 Result createPipelineCache( const PipelineCacheCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineCache* pPipelineCache ) const
16281 {
16282 return static_cast<Result>( vkCreatePipelineCache( m_device, reinterpret_cast<const VkPipelineCacheCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineCache*>( pPipelineCache ) ) );
16283 }
16284
16285#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16286 ResultValueType<PipelineCache>::type createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16287 {
16288 PipelineCache pipelineCache;
16289 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 ) ) );
16290 return createResultValue( result, pipelineCache, "vk::Device::createPipelineCache" );
16291 }
16292#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16293
16294 void destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks* pAllocator ) const
16295 {
16296 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16297 }
16298
16299#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16300 void destroyPipelineCache( PipelineCache pipelineCache, Optional<const AllocationCallbacks> allocator = nullptr ) const
16301 {
16302 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16303 }
16304#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16305
16306 Result getPipelineCacheData( PipelineCache pipelineCache, size_t* pDataSize, void* pData ) const
16307 {
16308 return static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), pDataSize, pData ) );
16309 }
16310
16311#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16312 template <typename Allocator = std::allocator<uint8_t>>
16313 typename ResultValueType<std::vector<uint8_t,Allocator>>::type getPipelineCacheData( PipelineCache pipelineCache ) const
16314 {
16315 std::vector<uint8_t,Allocator> data;
16316 size_t dataSize;
16317 Result result;
16318 do
16319 {
16320 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, nullptr ) );
16321 if ( ( result == Result::eSuccess ) && dataSize )
16322 {
16323 data.resize( dataSize );
16324 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, reinterpret_cast<void*>( data.data() ) ) );
16325 }
16326 } while ( result == Result::eIncomplete );
16327 assert( dataSize <= data.size() );
16328 data.resize( dataSize );
16329 return createResultValue( result, data, "vk::Device::getPipelineCacheData" );
16330 }
16331#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16332
16333 Result mergePipelineCaches( PipelineCache dstCache, uint32_t srcCacheCount, const PipelineCache* pSrcCaches ) const
16334 {
16335 return static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCacheCount, reinterpret_cast<const VkPipelineCache*>( pSrcCaches ) ) );
16336 }
16337
16338#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16339 ResultValueType<void>::type mergePipelineCaches( PipelineCache dstCache, ArrayProxy<const PipelineCache> srcCaches ) const
16340 {
16341 Result result = static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCaches.size() , reinterpret_cast<const VkPipelineCache*>( srcCaches.data() ) ) );
16342 return createResultValue( result, "vk::Device::mergePipelineCaches" );
16343 }
16344#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16345
16346 Result createGraphicsPipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const GraphicsPipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16347 {
16348 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 ) ) );
16349 }
16350
16351#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16352 template <typename Allocator = std::allocator<Pipeline>>
16353 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createGraphicsPipelines( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16354 {
16355 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16356 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() ) ) );
16357 return createResultValue( result, pipelines, "vk::Device::createGraphicsPipelines" );
16358 }
16359
16360 ResultValueType<Pipeline>::type createGraphicsPipeline( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16361 {
16362 Pipeline pipeline;
16363 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 ) ) );
16364 return createResultValue( result, pipeline, "vk::Device::createGraphicsPipeline" );
16365 }
16366#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16367
16368 Result createComputePipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const ComputePipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16369 {
16370 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 ) ) );
16371 }
16372
16373#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16374 template <typename Allocator = std::allocator<Pipeline>>
16375 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createComputePipelines( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16376 {
16377 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16378 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() ) ) );
16379 return createResultValue( result, pipelines, "vk::Device::createComputePipelines" );
16380 }
16381
16382 ResultValueType<Pipeline>::type createComputePipeline( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16383 {
16384 Pipeline pipeline;
16385 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 ) ) );
16386 return createResultValue( result, pipeline, "vk::Device::createComputePipeline" );
16387 }
16388#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16389
16390 void destroyPipeline( Pipeline pipeline, const AllocationCallbacks* pAllocator ) const
16391 {
16392 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16393 }
16394
16395#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16396 void destroyPipeline( Pipeline pipeline, Optional<const AllocationCallbacks> allocator = nullptr ) const
16397 {
16398 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16399 }
16400#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16401
16402 Result createPipelineLayout( const PipelineLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineLayout* pPipelineLayout ) const
16403 {
16404 return static_cast<Result>( vkCreatePipelineLayout( m_device, reinterpret_cast<const VkPipelineLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineLayout*>( pPipelineLayout ) ) );
16405 }
16406
16407#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16408 ResultValueType<PipelineLayout>::type createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16409 {
16410 PipelineLayout pipelineLayout;
16411 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 ) ) );
16412 return createResultValue( result, pipelineLayout, "vk::Device::createPipelineLayout" );
16413 }
16414#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16415
16416 void destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks* pAllocator ) const
16417 {
16418 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16419 }
16420
16421#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16422 void destroyPipelineLayout( PipelineLayout pipelineLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16423 {
16424 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16425 }
16426#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16427
16428 Result createSampler( const SamplerCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Sampler* pSampler ) const
16429 {
16430 return static_cast<Result>( vkCreateSampler( m_device, reinterpret_cast<const VkSamplerCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSampler*>( pSampler ) ) );
16431 }
16432
16433#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16434 ResultValueType<Sampler>::type createSampler( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16435 {
16436 Sampler sampler;
16437 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 ) ) );
16438 return createResultValue( result, sampler, "vk::Device::createSampler" );
16439 }
16440#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16441
16442 void destroySampler( Sampler sampler, const AllocationCallbacks* pAllocator ) const
16443 {
16444 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16445 }
16446
16447#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16448 void destroySampler( Sampler sampler, Optional<const AllocationCallbacks> allocator = nullptr ) const
16449 {
16450 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16451 }
16452#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16453
16454 Result createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorSetLayout* pSetLayout ) const
16455 {
16456 return static_cast<Result>( vkCreateDescriptorSetLayout( m_device, reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorSetLayout*>( pSetLayout ) ) );
16457 }
16458
16459#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16460 ResultValueType<DescriptorSetLayout>::type createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16461 {
16462 DescriptorSetLayout setLayout;
16463 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 ) ) );
16464 return createResultValue( result, setLayout, "vk::Device::createDescriptorSetLayout" );
16465 }
16466#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16467
16468 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks* pAllocator ) const
16469 {
16470 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16471 }
16472
16473#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16474 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16475 {
16476 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16477 }
16478#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16479
16480 Result createDescriptorPool( const DescriptorPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorPool* pDescriptorPool ) const
16481 {
16482 return static_cast<Result>( vkCreateDescriptorPool( m_device, reinterpret_cast<const VkDescriptorPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorPool*>( pDescriptorPool ) ) );
16483 }
16484
16485#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16486 ResultValueType<DescriptorPool>::type createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16487 {
16488 DescriptorPool descriptorPool;
16489 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 ) ) );
16490 return createResultValue( result, descriptorPool, "vk::Device::createDescriptorPool" );
16491 }
16492#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16493
16494 void destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks* pAllocator ) const
16495 {
16496 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16497 }
16498
16499#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16500 void destroyDescriptorPool( DescriptorPool descriptorPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16501 {
16502 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16503 }
16504#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16505
16506#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16507 Result resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const
16508 {
16509 return static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16510 }
16511#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16512
16513#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16514 ResultValueType<void>::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags = DescriptorPoolResetFlags() ) const
16515 {
16516 Result result = static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16517 return createResultValue( result, "vk::Device::resetDescriptorPool" );
16518 }
16519#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16520
16521 Result allocateDescriptorSets( const DescriptorSetAllocateInfo* pAllocateInfo, DescriptorSet* pDescriptorSets ) const
16522 {
16523 return static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkDescriptorSet*>( pDescriptorSets ) ) );
16524 }
16525
16526#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16527 template <typename Allocator = std::allocator<DescriptorSet>>
16528 typename ResultValueType<std::vector<DescriptorSet,Allocator>>::type allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo ) const
16529 {
16530 std::vector<DescriptorSet,Allocator> descriptorSets( allocateInfo.descriptorSetCount );
16531 Result result = static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkDescriptorSet*>( descriptorSets.data() ) ) );
16532 return createResultValue( result, descriptorSets, "vk::Device::allocateDescriptorSets" );
16533 }
16534#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16535
16536 Result freeDescriptorSets( DescriptorPool descriptorPool, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets ) const
16537 {
16538 return static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ) ) );
16539 }
16540
16541#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16542 ResultValueType<void>::type freeDescriptorSets( DescriptorPool descriptorPool, ArrayProxy<const DescriptorSet> descriptorSets ) const
16543 {
16544 Result result = static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ) ) );
16545 return createResultValue( result, "vk::Device::freeDescriptorSets" );
16546 }
16547#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16548
16549 void updateDescriptorSets( uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const CopyDescriptorSet* pDescriptorCopies ) const
16550 {
16551 vkUpdateDescriptorSets( m_device, descriptorWriteCount, reinterpret_cast<const VkWriteDescriptorSet*>( pDescriptorWrites ), descriptorCopyCount, reinterpret_cast<const VkCopyDescriptorSet*>( pDescriptorCopies ) );
16552 }
16553
16554#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16555 void updateDescriptorSets( ArrayProxy<const WriteDescriptorSet> descriptorWrites, ArrayProxy<const CopyDescriptorSet> descriptorCopies ) const
16556 {
16557 vkUpdateDescriptorSets( m_device, descriptorWrites.size() , reinterpret_cast<const VkWriteDescriptorSet*>( descriptorWrites.data() ), descriptorCopies.size() , reinterpret_cast<const VkCopyDescriptorSet*>( descriptorCopies.data() ) );
16558 }
16559#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16560
16561 Result createFramebuffer( const FramebufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Framebuffer* pFramebuffer ) const
16562 {
16563 return static_cast<Result>( vkCreateFramebuffer( m_device, reinterpret_cast<const VkFramebufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFramebuffer*>( pFramebuffer ) ) );
16564 }
16565
16566#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16567 ResultValueType<Framebuffer>::type createFramebuffer( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16568 {
16569 Framebuffer framebuffer;
16570 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 ) ) );
16571 return createResultValue( result, framebuffer, "vk::Device::createFramebuffer" );
16572 }
16573#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16574
16575 void destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks* pAllocator ) const
16576 {
16577 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16578 }
16579
16580#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16581 void destroyFramebuffer( Framebuffer framebuffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16582 {
16583 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16584 }
16585#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16586
16587 Result createRenderPass( const RenderPassCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, RenderPass* pRenderPass ) const
16588 {
16589 return static_cast<Result>( vkCreateRenderPass( m_device, reinterpret_cast<const VkRenderPassCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkRenderPass*>( pRenderPass ) ) );
16590 }
16591
16592#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16593 ResultValueType<RenderPass>::type createRenderPass( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16594 {
16595 RenderPass renderPass;
16596 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 ) ) );
16597 return createResultValue( result, renderPass, "vk::Device::createRenderPass" );
16598 }
16599#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16600
16601 void destroyRenderPass( RenderPass renderPass, const AllocationCallbacks* pAllocator ) const
16602 {
16603 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16604 }
16605
16606#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16607 void destroyRenderPass( RenderPass renderPass, Optional<const AllocationCallbacks> allocator = nullptr ) const
16608 {
16609 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16610 }
16611#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16612
16613 void getRenderAreaGranularity( RenderPass renderPass, Extent2D* pGranularity ) const
16614 {
16615 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( pGranularity ) );
16616 }
16617
16618#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16619 Extent2D getRenderAreaGranularity( RenderPass renderPass ) const
16620 {
16621 Extent2D granularity;
16622 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( &granularity ) );
16623 return granularity;
16624 }
16625#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16626
16627 Result createCommandPool( const CommandPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, CommandPool* pCommandPool ) const
16628 {
16629 return static_cast<Result>( vkCreateCommandPool( m_device, reinterpret_cast<const VkCommandPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkCommandPool*>( pCommandPool ) ) );
16630 }
16631
16632#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16633 ResultValueType<CommandPool>::type createCommandPool( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16634 {
16635 CommandPool commandPool;
16636 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 ) ) );
16637 return createResultValue( result, commandPool, "vk::Device::createCommandPool" );
16638 }
16639#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16640
16641 void destroyCommandPool( CommandPool commandPool, const AllocationCallbacks* pAllocator ) const
16642 {
16643 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16644 }
16645
16646#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16647 void destroyCommandPool( CommandPool commandPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16648 {
16649 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16650 }
16651#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16652
16653#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16654 Result resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16655 {
16656 return static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16657 }
16658#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16659
16660#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16661 ResultValueType<void>::type resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16662 {
16663 Result result = static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16664 return createResultValue( result, "vk::Device::resetCommandPool" );
16665 }
16666#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16667
16668 Result allocateCommandBuffers( const CommandBufferAllocateInfo* pAllocateInfo, CommandBuffer* pCommandBuffers ) const
16669 {
16670 return static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkCommandBuffer*>( pCommandBuffers ) ) );
16671 }
16672
16673#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16674 template <typename Allocator = std::allocator<CommandBuffer>>
16675 typename ResultValueType<std::vector<CommandBuffer,Allocator>>::type allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo ) const
16676 {
16677 std::vector<CommandBuffer,Allocator> commandBuffers( allocateInfo.commandBufferCount );
16678 Result result = static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkCommandBuffer*>( commandBuffers.data() ) ) );
16679 return createResultValue( result, commandBuffers, "vk::Device::allocateCommandBuffers" );
16680 }
16681#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16682
16683 void freeCommandBuffers( CommandPool commandPool, uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
16684 {
16685 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
16686 }
16687
16688#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16689 void freeCommandBuffers( CommandPool commandPool, ArrayProxy<const CommandBuffer> commandBuffers ) const
16690 {
16691 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
16692 }
16693#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16694
16695 Result createSharedSwapchainsKHR( uint32_t swapchainCount, const SwapchainCreateInfoKHR* pCreateInfos, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchains ) const
16696 {
16697 return static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, swapchainCount, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchains ) ) );
16698 }
16699
16700#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16701 template <typename Allocator = std::allocator<SwapchainKHR>>
16702 typename ResultValueType<std::vector<SwapchainKHR,Allocator>>::type createSharedSwapchainsKHR( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16703 {
16704 std::vector<SwapchainKHR,Allocator> swapchains( createInfos.size() );
16705 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() ) ) );
16706 return createResultValue( result, swapchains, "vk::Device::createSharedSwapchainsKHR" );
16707 }
16708
16709 ResultValueType<SwapchainKHR>::type createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16710 {
16711 SwapchainKHR swapchain;
16712 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 ) ) );
16713 return createResultValue( result, swapchain, "vk::Device::createSharedSwapchainKHR" );
16714 }
16715#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16716
16717 Result createSwapchainKHR( const SwapchainCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchain ) const
16718 {
16719 return static_cast<Result>( vkCreateSwapchainKHR( m_device, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchain ) ) );
16720 }
16721
16722#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16723 ResultValueType<SwapchainKHR>::type createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16724 {
16725 SwapchainKHR swapchain;
16726 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 ) ) );
16727 return createResultValue( result, swapchain, "vk::Device::createSwapchainKHR" );
16728 }
16729#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16730
16731 void destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks* pAllocator ) const
16732 {
16733 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16734 }
16735
16736#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16737 void destroySwapchainKHR( SwapchainKHR swapchain, Optional<const AllocationCallbacks> allocator = nullptr ) const
16738 {
16739 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16740 }
16741#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16742
16743 Result getSwapchainImagesKHR( SwapchainKHR swapchain, uint32_t* pSwapchainImageCount, Image* pSwapchainImages ) const
16744 {
16745 return static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), pSwapchainImageCount, reinterpret_cast<VkImage*>( pSwapchainImages ) ) );
16746 }
16747
16748#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16749 template <typename Allocator = std::allocator<Image>>
16750 typename ResultValueType<std::vector<Image,Allocator>>::type getSwapchainImagesKHR( SwapchainKHR swapchain ) const
16751 {
16752 std::vector<Image,Allocator> swapchainImages;
16753 uint32_t swapchainImageCount;
16754 Result result;
16755 do
16756 {
16757 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, nullptr ) );
16758 if ( ( result == Result::eSuccess ) && swapchainImageCount )
16759 {
16760 swapchainImages.resize( swapchainImageCount );
16761 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, reinterpret_cast<VkImage*>( swapchainImages.data() ) ) );
16762 }
16763 } while ( result == Result::eIncomplete );
16764 assert( swapchainImageCount <= swapchainImages.size() );
16765 swapchainImages.resize( swapchainImageCount );
16766 return createResultValue( result, swapchainImages, "vk::Device::getSwapchainImagesKHR" );
16767 }
16768#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16769
16770 Result acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t* pImageIndex ) const
16771 {
16772 return static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), pImageIndex ) );
16773 }
16774
16775#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16776 ResultValue<uint32_t> acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence ) const
16777 {
16778 uint32_t imageIndex;
16779 Result result = static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), &imageIndex ) );
16780 return createResultValue( result, imageIndex, "vk::Device::acquireNextImageKHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } );
16781 }
16782#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16783
16784 Result debugMarkerSetObjectNameEXT( DebugMarkerObjectNameInfoEXT* pNameInfo ) const
16785 {
16786 return static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( pNameInfo ) ) );
16787 }
16788
16789#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16790 ResultValueType<DebugMarkerObjectNameInfoEXT>::type debugMarkerSetObjectNameEXT() const
16791 {
16792 DebugMarkerObjectNameInfoEXT nameInfo;
16793 Result result = static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( &nameInfo ) ) );
16794 return createResultValue( result, nameInfo, "vk::Device::debugMarkerSetObjectNameEXT" );
16795 }
16796#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16797
16798 Result debugMarkerSetObjectTagEXT( DebugMarkerObjectTagInfoEXT* pTagInfo ) const
16799 {
16800 return static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( pTagInfo ) ) );
16801 }
16802
16803#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16804 ResultValueType<DebugMarkerObjectTagInfoEXT>::type debugMarkerSetObjectTagEXT() const
16805 {
16806 DebugMarkerObjectTagInfoEXT tagInfo;
16807 Result result = static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( &tagInfo ) ) );
16808 return createResultValue( result, tagInfo, "vk::Device::debugMarkerSetObjectTagEXT" );
16809 }
16810#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16811
Lenny Komow6501c122016-08-31 15:03:49 -060016812#ifdef VK_USE_PLATFORM_WIN32_KHR
16813 Result getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle ) const
16814 {
16815 return static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), pHandle ) );
16816 }
16817#endif /*VK_USE_PLATFORM_WIN32_KHR*/
16818
16819#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16820#ifdef VK_USE_PLATFORM_WIN32_KHR
16821 ResultValueType<HANDLE>::type getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType ) const
16822 {
16823 HANDLE handle;
16824 Result result = static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), &handle ) );
16825 return createResultValue( result, handle, "vk::Device::getMemoryWin32HandleNV" );
16826 }
16827#endif /*VK_USE_PLATFORM_WIN32_KHR*/
16828#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16829
Lenny Komowbed9b5c2016-08-11 11:23:15 -060016830#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
16831 explicit
16832#endif
16833 operator VkDevice() const
16834 {
16835 return m_device;
16836 }
16837
16838 explicit operator bool() const
16839 {
16840 return m_device != VK_NULL_HANDLE;
16841 }
16842
16843 bool operator!() const
16844 {
16845 return m_device == VK_NULL_HANDLE;
16846 }
16847
16848 private:
16849 VkDevice m_device;
16850 };
16851 static_assert( sizeof( Device ) == sizeof( VkDevice ), "handle and wrapper have different size!" );
16852
Lenny Komow6501c122016-08-31 15:03:49 -060016853 struct ExternalMemoryImageCreateInfoNV
16854 {
16855 ExternalMemoryImageCreateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
16856 : sType( StructureType::eExternalMemoryImageCreateInfoNV )
16857 , pNext( nullptr )
16858 , handleTypes( handleTypes_ )
16859 {
16860 }
16861
16862 ExternalMemoryImageCreateInfoNV( VkExternalMemoryImageCreateInfoNV const & rhs )
16863 {
16864 memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
16865 }
16866
16867 ExternalMemoryImageCreateInfoNV& operator=( VkExternalMemoryImageCreateInfoNV const & rhs )
16868 {
16869 memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
16870 return *this;
16871 }
16872
16873 ExternalMemoryImageCreateInfoNV& setSType( StructureType sType_ )
16874 {
16875 sType = sType_;
16876 return *this;
16877 }
16878
16879 ExternalMemoryImageCreateInfoNV& setPNext( const void* pNext_ )
16880 {
16881 pNext = pNext_;
16882 return *this;
16883 }
16884
16885 ExternalMemoryImageCreateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
16886 {
16887 handleTypes = handleTypes_;
16888 return *this;
16889 }
16890
16891 operator const VkExternalMemoryImageCreateInfoNV&() const
16892 {
16893 return *reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(this);
16894 }
16895
16896 bool operator==( ExternalMemoryImageCreateInfoNV const& rhs ) const
16897 {
16898 return ( sType == rhs.sType )
16899 && ( pNext == rhs.pNext )
16900 && ( handleTypes == rhs.handleTypes );
16901 }
16902
16903 bool operator!=( ExternalMemoryImageCreateInfoNV const& rhs ) const
16904 {
16905 return !operator==( rhs );
16906 }
16907
16908 private:
16909 StructureType sType;
16910
16911 public:
16912 const void* pNext;
16913 ExternalMemoryHandleTypeFlagsNV handleTypes;
16914 };
16915 static_assert( sizeof( ExternalMemoryImageCreateInfoNV ) == sizeof( VkExternalMemoryImageCreateInfoNV ), "struct and wrapper have different size!" );
16916
16917 struct ExportMemoryAllocateInfoNV
16918 {
16919 ExportMemoryAllocateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
16920 : sType( StructureType::eExportMemoryAllocateInfoNV )
16921 , pNext( nullptr )
16922 , handleTypes( handleTypes_ )
16923 {
16924 }
16925
16926 ExportMemoryAllocateInfoNV( VkExportMemoryAllocateInfoNV const & rhs )
16927 {
16928 memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
16929 }
16930
16931 ExportMemoryAllocateInfoNV& operator=( VkExportMemoryAllocateInfoNV const & rhs )
16932 {
16933 memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
16934 return *this;
16935 }
16936
16937 ExportMemoryAllocateInfoNV& setSType( StructureType sType_ )
16938 {
16939 sType = sType_;
16940 return *this;
16941 }
16942
16943 ExportMemoryAllocateInfoNV& setPNext( const void* pNext_ )
16944 {
16945 pNext = pNext_;
16946 return *this;
16947 }
16948
16949 ExportMemoryAllocateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
16950 {
16951 handleTypes = handleTypes_;
16952 return *this;
16953 }
16954
16955 operator const VkExportMemoryAllocateInfoNV&() const
16956 {
16957 return *reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(this);
16958 }
16959
16960 bool operator==( ExportMemoryAllocateInfoNV const& rhs ) const
16961 {
16962 return ( sType == rhs.sType )
16963 && ( pNext == rhs.pNext )
16964 && ( handleTypes == rhs.handleTypes );
16965 }
16966
16967 bool operator!=( ExportMemoryAllocateInfoNV const& rhs ) const
16968 {
16969 return !operator==( rhs );
16970 }
16971
16972 private:
16973 StructureType sType;
16974
16975 public:
16976 const void* pNext;
16977 ExternalMemoryHandleTypeFlagsNV handleTypes;
16978 };
16979 static_assert( sizeof( ExportMemoryAllocateInfoNV ) == sizeof( VkExportMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
16980
16981#ifdef VK_USE_PLATFORM_WIN32_KHR
16982 struct ImportMemoryWin32HandleInfoNV
16983 {
16984 ImportMemoryWin32HandleInfoNV( ExternalMemoryHandleTypeFlagsNV handleType_ = ExternalMemoryHandleTypeFlagsNV(), HANDLE handle_ = 0 )
16985 : sType( StructureType::eImportMemoryWin32HandleInfoNV )
16986 , pNext( nullptr )
16987 , handleType( handleType_ )
16988 , handle( handle_ )
16989 {
16990 }
16991
16992 ImportMemoryWin32HandleInfoNV( VkImportMemoryWin32HandleInfoNV const & rhs )
16993 {
16994 memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
16995 }
16996
16997 ImportMemoryWin32HandleInfoNV& operator=( VkImportMemoryWin32HandleInfoNV const & rhs )
16998 {
16999 memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
17000 return *this;
17001 }
17002
17003 ImportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
17004 {
17005 sType = sType_;
17006 return *this;
17007 }
17008
17009 ImportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
17010 {
17011 pNext = pNext_;
17012 return *this;
17013 }
17014
17015 ImportMemoryWin32HandleInfoNV& setHandleType( ExternalMemoryHandleTypeFlagsNV handleType_ )
17016 {
17017 handleType = handleType_;
17018 return *this;
17019 }
17020
17021 ImportMemoryWin32HandleInfoNV& setHandle( HANDLE handle_ )
17022 {
17023 handle = handle_;
17024 return *this;
17025 }
17026
17027 operator const VkImportMemoryWin32HandleInfoNV&() const
17028 {
17029 return *reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(this);
17030 }
17031
17032 bool operator==( ImportMemoryWin32HandleInfoNV const& rhs ) const
17033 {
17034 return ( sType == rhs.sType )
17035 && ( pNext == rhs.pNext )
17036 && ( handleType == rhs.handleType )
17037 && ( handle == rhs.handle );
17038 }
17039
17040 bool operator!=( ImportMemoryWin32HandleInfoNV const& rhs ) const
17041 {
17042 return !operator==( rhs );
17043 }
17044
17045 private:
17046 StructureType sType;
17047
17048 public:
17049 const void* pNext;
17050 ExternalMemoryHandleTypeFlagsNV handleType;
17051 HANDLE handle;
17052 };
17053 static_assert( sizeof( ImportMemoryWin32HandleInfoNV ) == sizeof( VkImportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
17054#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17055
17056 enum class ExternalMemoryFeatureFlagBitsNV
17057 {
17058 eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV,
17059 eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV,
17060 eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
17061 };
17062
17063 using ExternalMemoryFeatureFlagsNV = Flags<ExternalMemoryFeatureFlagBitsNV, VkExternalMemoryFeatureFlagsNV>;
17064
17065 inline ExternalMemoryFeatureFlagsNV operator|( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 )
17066 {
17067 return ExternalMemoryFeatureFlagsNV( bit0 ) | bit1;
17068 }
17069
17070 struct ExternalImageFormatPropertiesNV
17071 {
17072 ExternalImageFormatPropertiesNV( ImageFormatProperties imageFormatProperties_ = ImageFormatProperties(), ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ = ExternalMemoryFeatureFlagsNV(), ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ = ExternalMemoryHandleTypeFlagsNV(), ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17073 : imageFormatProperties( imageFormatProperties_ )
17074 , externalMemoryFeatures( externalMemoryFeatures_ )
17075 , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ )
17076 , compatibleHandleTypes( compatibleHandleTypes_ )
17077 {
17078 }
17079
17080 ExternalImageFormatPropertiesNV( VkExternalImageFormatPropertiesNV const & rhs )
17081 {
17082 memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17083 }
17084
17085 ExternalImageFormatPropertiesNV& operator=( VkExternalImageFormatPropertiesNV const & rhs )
17086 {
17087 memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17088 return *this;
17089 }
17090
17091 ExternalImageFormatPropertiesNV& setImageFormatProperties( ImageFormatProperties imageFormatProperties_ )
17092 {
17093 imageFormatProperties = imageFormatProperties_;
17094 return *this;
17095 }
17096
17097 ExternalImageFormatPropertiesNV& setExternalMemoryFeatures( ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ )
17098 {
17099 externalMemoryFeatures = externalMemoryFeatures_;
17100 return *this;
17101 }
17102
17103 ExternalImageFormatPropertiesNV& setExportFromImportedHandleTypes( ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ )
17104 {
17105 exportFromImportedHandleTypes = exportFromImportedHandleTypes_;
17106 return *this;
17107 }
17108
17109 ExternalImageFormatPropertiesNV& setCompatibleHandleTypes( ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ )
17110 {
17111 compatibleHandleTypes = compatibleHandleTypes_;
17112 return *this;
17113 }
17114
17115 operator const VkExternalImageFormatPropertiesNV&() const
17116 {
17117 return *reinterpret_cast<const VkExternalImageFormatPropertiesNV*>(this);
17118 }
17119
17120 bool operator==( ExternalImageFormatPropertiesNV const& rhs ) const
17121 {
17122 return ( imageFormatProperties == rhs.imageFormatProperties )
17123 && ( externalMemoryFeatures == rhs.externalMemoryFeatures )
17124 && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
17125 && ( compatibleHandleTypes == rhs.compatibleHandleTypes );
17126 }
17127
17128 bool operator!=( ExternalImageFormatPropertiesNV const& rhs ) const
17129 {
17130 return !operator==( rhs );
17131 }
17132
17133 ImageFormatProperties imageFormatProperties;
17134 ExternalMemoryFeatureFlagsNV externalMemoryFeatures;
17135 ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
17136 ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
17137 };
17138 static_assert( sizeof( ExternalImageFormatPropertiesNV ) == sizeof( VkExternalImageFormatPropertiesNV ), "struct and wrapper have different size!" );
17139
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017140 class PhysicalDevice
17141 {
17142 public:
17143 PhysicalDevice()
17144 : m_physicalDevice(VK_NULL_HANDLE)
17145 {}
17146
17147#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17148 PhysicalDevice(VkPhysicalDevice physicalDevice)
17149 : m_physicalDevice(physicalDevice)
17150 {}
17151
17152 PhysicalDevice& operator=(VkPhysicalDevice physicalDevice)
17153 {
17154 m_physicalDevice = physicalDevice;
17155 return *this;
17156 }
17157#endif
17158
Lenny Komowebf33162016-08-26 14:10:08 -060017159 bool operator==(PhysicalDevice const &rhs) const
17160 {
17161 return m_physicalDevice == rhs.m_physicalDevice;
17162 }
17163
17164 bool operator!=(PhysicalDevice const &rhs) const
17165 {
17166 return m_physicalDevice != rhs.m_physicalDevice;
17167 }
17168
17169 bool operator<(PhysicalDevice const &rhs) const
17170 {
17171 return m_physicalDevice < rhs.m_physicalDevice;
17172 }
17173
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017174 void getProperties( PhysicalDeviceProperties* pProperties ) const
17175 {
17176 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( pProperties ) );
17177 }
17178
17179#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17180 PhysicalDeviceProperties getProperties() const
17181 {
17182 PhysicalDeviceProperties properties;
17183 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( &properties ) );
17184 return properties;
17185 }
17186#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17187
17188 void getQueueFamilyProperties( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties* pQueueFamilyProperties ) const
17189 {
17190 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( pQueueFamilyProperties ) );
17191 }
17192
17193#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17194 template <typename Allocator = std::allocator<QueueFamilyProperties>>
17195 std::vector<QueueFamilyProperties,Allocator> getQueueFamilyProperties() const
17196 {
17197 std::vector<QueueFamilyProperties,Allocator> queueFamilyProperties;
17198 uint32_t queueFamilyPropertyCount;
17199 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr );
17200 queueFamilyProperties.resize( queueFamilyPropertyCount );
17201 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( queueFamilyProperties.data() ) );
17202 return queueFamilyProperties;
17203 }
17204#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17205
17206 void getMemoryProperties( PhysicalDeviceMemoryProperties* pMemoryProperties ) const
17207 {
17208 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( pMemoryProperties ) );
17209 }
17210
17211#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17212 PhysicalDeviceMemoryProperties getMemoryProperties() const
17213 {
17214 PhysicalDeviceMemoryProperties memoryProperties;
17215 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( &memoryProperties ) );
17216 return memoryProperties;
17217 }
17218#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17219
17220 void getFeatures( PhysicalDeviceFeatures* pFeatures ) const
17221 {
17222 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( pFeatures ) );
17223 }
17224
17225#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17226 PhysicalDeviceFeatures getFeatures() const
17227 {
17228 PhysicalDeviceFeatures features;
17229 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( &features ) );
17230 return features;
17231 }
17232#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17233
17234 void getFormatProperties( Format format, FormatProperties* pFormatProperties ) const
17235 {
17236 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( pFormatProperties ) );
17237 }
17238
17239#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17240 FormatProperties getFormatProperties( Format format ) const
17241 {
17242 FormatProperties formatProperties;
17243 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( &formatProperties ) );
17244 return formatProperties;
17245 }
17246#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17247
17248 Result getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ImageFormatProperties* pImageFormatProperties ) const
17249 {
17250 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 ) ) );
17251 }
17252
17253#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17254 ResultValueType<ImageFormatProperties>::type getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags ) const
17255 {
17256 ImageFormatProperties imageFormatProperties;
17257 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 ) ) );
17258 return createResultValue( result, imageFormatProperties, "vk::PhysicalDevice::getImageFormatProperties" );
17259 }
17260#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17261
17262 Result createDevice( const DeviceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Device* pDevice ) const
17263 {
17264 return static_cast<Result>( vkCreateDevice( m_physicalDevice, reinterpret_cast<const VkDeviceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDevice*>( pDevice ) ) );
17265 }
17266
17267#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17268 ResultValueType<Device>::type createDevice( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17269 {
17270 Device device;
17271 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 ) ) );
17272 return createResultValue( result, device, "vk::PhysicalDevice::createDevice" );
17273 }
17274#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17275
17276 Result enumerateDeviceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties ) const
17277 {
17278 return static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
17279 }
17280
17281#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17282 template <typename Allocator = std::allocator<LayerProperties>>
17283 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateDeviceLayerProperties() const
17284 {
17285 std::vector<LayerProperties,Allocator> properties;
17286 uint32_t propertyCount;
17287 Result result;
17288 do
17289 {
17290 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) );
17291 if ( ( result == Result::eSuccess ) && propertyCount )
17292 {
17293 properties.resize( propertyCount );
17294 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
17295 }
17296 } while ( result == Result::eIncomplete );
17297 assert( propertyCount <= properties.size() );
17298 properties.resize( propertyCount );
17299 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceLayerProperties" );
17300 }
17301#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17302
17303 Result enumerateDeviceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties ) const
17304 {
17305 return static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
17306 }
17307
17308#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17309 template <typename Allocator = std::allocator<ExtensionProperties>>
17310 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateDeviceExtensionProperties( Optional<const std::string> layerName = nullptr ) const
17311 {
17312 std::vector<ExtensionProperties,Allocator> properties;
17313 uint32_t propertyCount;
17314 Result result;
17315 do
17316 {
17317 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
17318 if ( ( result == Result::eSuccess ) && propertyCount )
17319 {
17320 properties.resize( propertyCount );
17321 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
17322 }
17323 } while ( result == Result::eIncomplete );
17324 assert( propertyCount <= properties.size() );
17325 properties.resize( propertyCount );
17326 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceExtensionProperties" );
17327 }
17328#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17329
17330 void getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, uint32_t* pPropertyCount, SparseImageFormatProperties* pProperties ) const
17331 {
17332 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 ) );
17333 }
17334
17335#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17336 template <typename Allocator = std::allocator<SparseImageFormatProperties>>
17337 std::vector<SparseImageFormatProperties,Allocator> getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling ) const
17338 {
17339 std::vector<SparseImageFormatProperties,Allocator> properties;
17340 uint32_t propertyCount;
17341 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 );
17342 properties.resize( propertyCount );
17343 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() ) );
17344 return properties;
17345 }
17346#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17347
17348 Result getDisplayPropertiesKHR( uint32_t* pPropertyCount, DisplayPropertiesKHR* pProperties ) const
17349 {
17350 return static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( pProperties ) ) );
17351 }
17352
17353#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17354 template <typename Allocator = std::allocator<DisplayPropertiesKHR>>
17355 typename ResultValueType<std::vector<DisplayPropertiesKHR,Allocator>>::type getDisplayPropertiesKHR() const
17356 {
17357 std::vector<DisplayPropertiesKHR,Allocator> properties;
17358 uint32_t propertyCount;
17359 Result result;
17360 do
17361 {
17362 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17363 if ( ( result == Result::eSuccess ) && propertyCount )
17364 {
17365 properties.resize( propertyCount );
17366 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( properties.data() ) ) );
17367 }
17368 } while ( result == Result::eIncomplete );
17369 assert( propertyCount <= properties.size() );
17370 properties.resize( propertyCount );
17371 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPropertiesKHR" );
17372 }
17373#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17374
17375 Result getDisplayPlanePropertiesKHR( uint32_t* pPropertyCount, DisplayPlanePropertiesKHR* pProperties ) const
17376 {
17377 return static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( pProperties ) ) );
17378 }
17379
17380#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17381 template <typename Allocator = std::allocator<DisplayPlanePropertiesKHR>>
17382 typename ResultValueType<std::vector<DisplayPlanePropertiesKHR,Allocator>>::type getDisplayPlanePropertiesKHR() const
17383 {
17384 std::vector<DisplayPlanePropertiesKHR,Allocator> properties;
17385 uint32_t propertyCount;
17386 Result result;
17387 do
17388 {
17389 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17390 if ( ( result == Result::eSuccess ) && propertyCount )
17391 {
17392 properties.resize( propertyCount );
17393 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( properties.data() ) ) );
17394 }
17395 } while ( result == Result::eIncomplete );
17396 assert( propertyCount <= properties.size() );
17397 properties.resize( propertyCount );
17398 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPlanePropertiesKHR" );
17399 }
17400#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17401
17402 Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, uint32_t* pDisplayCount, DisplayKHR* pDisplays ) const
17403 {
17404 return static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, pDisplayCount, reinterpret_cast<VkDisplayKHR*>( pDisplays ) ) );
17405 }
17406
17407#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17408 template <typename Allocator = std::allocator<DisplayKHR>>
17409 typename ResultValueType<std::vector<DisplayKHR,Allocator>>::type getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const
17410 {
17411 std::vector<DisplayKHR,Allocator> displays;
17412 uint32_t displayCount;
17413 Result result;
17414 do
17415 {
17416 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) );
17417 if ( ( result == Result::eSuccess ) && displayCount )
17418 {
17419 displays.resize( displayCount );
17420 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR*>( displays.data() ) ) );
17421 }
17422 } while ( result == Result::eIncomplete );
17423 assert( displayCount <= displays.size() );
17424 displays.resize( displayCount );
17425 return createResultValue( result, displays, "vk::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
17426 }
17427#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17428
17429 Result getDisplayModePropertiesKHR( DisplayKHR display, uint32_t* pPropertyCount, DisplayModePropertiesKHR* pProperties ) const
17430 {
17431 return static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), pPropertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( pProperties ) ) );
17432 }
17433
17434#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17435 template <typename Allocator = std::allocator<DisplayModePropertiesKHR>>
17436 typename ResultValueType<std::vector<DisplayModePropertiesKHR,Allocator>>::type getDisplayModePropertiesKHR( DisplayKHR display ) const
17437 {
17438 std::vector<DisplayModePropertiesKHR,Allocator> properties;
17439 uint32_t propertyCount;
17440 Result result;
17441 do
17442 {
17443 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, nullptr ) );
17444 if ( ( result == Result::eSuccess ) && propertyCount )
17445 {
17446 properties.resize( propertyCount );
17447 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( properties.data() ) ) );
17448 }
17449 } while ( result == Result::eIncomplete );
17450 assert( propertyCount <= properties.size() );
17451 properties.resize( propertyCount );
17452 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayModePropertiesKHR" );
17453 }
17454#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17455
17456 Result createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DisplayModeKHR* pMode ) const
17457 {
17458 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 ) ) );
17459 }
17460
17461#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17462 ResultValueType<DisplayModeKHR>::type createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17463 {
17464 DisplayModeKHR mode;
17465 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 ) ) );
17466 return createResultValue( result, mode, "vk::PhysicalDevice::createDisplayModeKHR" );
17467 }
17468#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17469
17470 Result getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, DisplayPlaneCapabilitiesKHR* pCapabilities ) const
17471 {
17472 return static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( pCapabilities ) ) );
17473 }
17474
17475#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17476 ResultValueType<DisplayPlaneCapabilitiesKHR>::type getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex ) const
17477 {
17478 DisplayPlaneCapabilitiesKHR capabilities;
17479 Result result = static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( &capabilities ) ) );
17480 return createResultValue( result, capabilities, "vk::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" );
17481 }
17482#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17483
17484#ifdef VK_USE_PLATFORM_MIR_KHR
17485 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection* connection ) const
17486 {
17487 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection );
17488 }
17489#endif /*VK_USE_PLATFORM_MIR_KHR*/
17490
17491#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17492#ifdef VK_USE_PLATFORM_MIR_KHR
17493 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection & connection ) const
17494 {
17495 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection );
17496 }
17497#endif /*VK_USE_PLATFORM_MIR_KHR*/
17498#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17499
17500 Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32* pSupported ) const
17501 {
17502 return static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), pSupported ) );
17503 }
17504
17505#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17506 ResultValueType<Bool32>::type getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface ) const
17507 {
17508 Bool32 supported;
17509 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), &supported ) );
17510 return createResultValue( result, supported, "vk::PhysicalDevice::getSurfaceSupportKHR" );
17511 }
17512#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17513
17514 Result getSurfaceCapabilitiesKHR( SurfaceKHR surface, SurfaceCapabilitiesKHR* pSurfaceCapabilities ) const
17515 {
17516 return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( pSurfaceCapabilities ) ) );
17517 }
17518
17519#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17520 ResultValueType<SurfaceCapabilitiesKHR>::type getSurfaceCapabilitiesKHR( SurfaceKHR surface ) const
17521 {
17522 SurfaceCapabilitiesKHR surfaceCapabilities;
17523 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( &surfaceCapabilities ) ) );
17524 return createResultValue( result, surfaceCapabilities, "vk::PhysicalDevice::getSurfaceCapabilitiesKHR" );
17525 }
17526#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17527
17528 Result getSurfaceFormatsKHR( SurfaceKHR surface, uint32_t* pSurfaceFormatCount, SurfaceFormatKHR* pSurfaceFormats ) const
17529 {
17530 return static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pSurfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( pSurfaceFormats ) ) );
17531 }
17532
17533#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17534 template <typename Allocator = std::allocator<SurfaceFormatKHR>>
17535 typename ResultValueType<std::vector<SurfaceFormatKHR,Allocator>>::type getSurfaceFormatsKHR( SurfaceKHR surface ) const
17536 {
17537 std::vector<SurfaceFormatKHR,Allocator> surfaceFormats;
17538 uint32_t surfaceFormatCount;
17539 Result result;
17540 do
17541 {
17542 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, nullptr ) );
17543 if ( ( result == Result::eSuccess ) && surfaceFormatCount )
17544 {
17545 surfaceFormats.resize( surfaceFormatCount );
17546 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( surfaceFormats.data() ) ) );
17547 }
17548 } while ( result == Result::eIncomplete );
17549 assert( surfaceFormatCount <= surfaceFormats.size() );
17550 surfaceFormats.resize( surfaceFormatCount );
17551 return createResultValue( result, surfaceFormats, "vk::PhysicalDevice::getSurfaceFormatsKHR" );
17552 }
17553#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17554
17555 Result getSurfacePresentModesKHR( SurfaceKHR surface, uint32_t* pPresentModeCount, PresentModeKHR* pPresentModes ) const
17556 {
17557 return static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pPresentModeCount, reinterpret_cast<VkPresentModeKHR*>( pPresentModes ) ) );
17558 }
17559
17560#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17561 template <typename Allocator = std::allocator<PresentModeKHR>>
17562 typename ResultValueType<std::vector<PresentModeKHR,Allocator>>::type getSurfacePresentModesKHR( SurfaceKHR surface ) const
17563 {
17564 std::vector<PresentModeKHR,Allocator> presentModes;
17565 uint32_t presentModeCount;
17566 Result result;
17567 do
17568 {
17569 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, nullptr ) );
17570 if ( ( result == Result::eSuccess ) && presentModeCount )
17571 {
17572 presentModes.resize( presentModeCount );
17573 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, reinterpret_cast<VkPresentModeKHR*>( presentModes.data() ) ) );
17574 }
17575 } while ( result == Result::eIncomplete );
17576 assert( presentModeCount <= presentModes.size() );
17577 presentModes.resize( presentModeCount );
17578 return createResultValue( result, presentModes, "vk::PhysicalDevice::getSurfacePresentModesKHR" );
17579 }
17580#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17581
17582#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17583 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display* display ) const
17584 {
17585 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, display );
17586 }
17587#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17588
17589#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17590#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17591 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const
17592 {
17593 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display );
17594 }
17595#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17596#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17597
17598#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
17599#ifdef VK_USE_PLATFORM_WIN32_KHR
17600 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
17601 {
17602 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
17603 }
17604#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17605#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17606
17607#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17608#ifdef VK_USE_PLATFORM_WIN32_KHR
17609 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
17610 {
17611 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
17612 }
17613#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17614#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17615
17616#ifdef VK_USE_PLATFORM_XLIB_KHR
17617 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID ) const
17618 {
17619 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, dpy, visualID );
17620 }
17621#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17622
17623#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17624#ifdef VK_USE_PLATFORM_XLIB_KHR
17625 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const
17626 {
17627 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID );
17628 }
17629#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17630#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17631
17632#ifdef VK_USE_PLATFORM_XCB_KHR
17633 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id ) const
17634 {
17635 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection, visual_id );
17636 }
17637#endif /*VK_USE_PLATFORM_XCB_KHR*/
17638
17639#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17640#ifdef VK_USE_PLATFORM_XCB_KHR
17641 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const
17642 {
17643 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id );
17644 }
17645#endif /*VK_USE_PLATFORM_XCB_KHR*/
17646#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17647
Lenny Komow6501c122016-08-31 15:03:49 -060017648 Result getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType, ExternalImageFormatPropertiesNV* pExternalImageFormatProperties ) const
17649 {
17650 return static_cast<Result>( vkGetPhysicalDeviceExternalImageFormatPropertiesNV( m_physicalDevice, static_cast<VkFormat>( format ), static_cast<VkImageType>( type ), static_cast<VkImageTiling>( tiling ), static_cast<VkImageUsageFlags>( usage ), static_cast<VkImageCreateFlags>( flags ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( externalHandleType ), reinterpret_cast<VkExternalImageFormatPropertiesNV*>( pExternalImageFormatProperties ) ) );
17651 }
17652
17653#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17654 ResultValueType<ExternalImageFormatPropertiesNV>::type getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType ) const
17655 {
17656 ExternalImageFormatPropertiesNV externalImageFormatProperties;
17657 Result result = static_cast<Result>( vkGetPhysicalDeviceExternalImageFormatPropertiesNV( m_physicalDevice, static_cast<VkFormat>( format ), static_cast<VkImageType>( type ), static_cast<VkImageTiling>( tiling ), static_cast<VkImageUsageFlags>( usage ), static_cast<VkImageCreateFlags>( flags ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( externalHandleType ), reinterpret_cast<VkExternalImageFormatPropertiesNV*>( &externalImageFormatProperties ) ) );
17658 return createResultValue( result, externalImageFormatProperties, "vk::PhysicalDevice::getExternalImageFormatPropertiesNV" );
17659 }
17660#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17661
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017662#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17663 explicit
17664#endif
17665 operator VkPhysicalDevice() const
17666 {
17667 return m_physicalDevice;
17668 }
17669
17670 explicit operator bool() const
17671 {
17672 return m_physicalDevice != VK_NULL_HANDLE;
17673 }
17674
17675 bool operator!() const
17676 {
17677 return m_physicalDevice == VK_NULL_HANDLE;
17678 }
17679
17680 private:
17681 VkPhysicalDevice m_physicalDevice;
17682 };
17683 static_assert( sizeof( PhysicalDevice ) == sizeof( VkPhysicalDevice ), "handle and wrapper have different size!" );
17684
17685 class Instance
17686 {
17687 public:
17688 Instance()
17689 : m_instance(VK_NULL_HANDLE)
17690 {}
17691
17692#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17693 Instance(VkInstance instance)
17694 : m_instance(instance)
17695 {}
17696
17697 Instance& operator=(VkInstance instance)
17698 {
17699 m_instance = instance;
17700 return *this;
17701 }
17702#endif
17703
Lenny Komowebf33162016-08-26 14:10:08 -060017704 bool operator==(Instance const &rhs) const
17705 {
17706 return m_instance == rhs.m_instance;
17707 }
17708
17709 bool operator!=(Instance const &rhs) const
17710 {
17711 return m_instance != rhs.m_instance;
17712 }
17713
17714 bool operator<(Instance const &rhs) const
17715 {
17716 return m_instance < rhs.m_instance;
17717 }
17718
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017719 void destroy( const AllocationCallbacks* pAllocator ) const
17720 {
17721 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17722 }
17723
17724#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17725 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
17726 {
17727 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17728 }
17729#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17730
17731 Result enumeratePhysicalDevices( uint32_t* pPhysicalDeviceCount, PhysicalDevice* pPhysicalDevices ) const
17732 {
17733 return static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, pPhysicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( pPhysicalDevices ) ) );
17734 }
17735
17736#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17737 template <typename Allocator = std::allocator<PhysicalDevice>>
17738 typename ResultValueType<std::vector<PhysicalDevice,Allocator>>::type enumeratePhysicalDevices() const
17739 {
17740 std::vector<PhysicalDevice,Allocator> physicalDevices;
17741 uint32_t physicalDeviceCount;
17742 Result result;
17743 do
17744 {
17745 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) );
17746 if ( ( result == Result::eSuccess ) && physicalDeviceCount )
17747 {
17748 physicalDevices.resize( physicalDeviceCount );
17749 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( physicalDevices.data() ) ) );
17750 }
17751 } while ( result == Result::eIncomplete );
17752 assert( physicalDeviceCount <= physicalDevices.size() );
17753 physicalDevices.resize( physicalDeviceCount );
17754 return createResultValue( result, physicalDevices, "vk::Instance::enumeratePhysicalDevices" );
17755 }
17756#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17757
17758 PFN_vkVoidFunction getProcAddr( const char* pName ) const
17759 {
17760 return vkGetInstanceProcAddr( m_instance, pName );
17761 }
17762
17763#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17764 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
17765 {
17766 return vkGetInstanceProcAddr( m_instance, name.c_str() );
17767 }
17768#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17769
17770#ifdef VK_USE_PLATFORM_ANDROID_KHR
17771 Result createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17772 {
17773 return static_cast<Result>( vkCreateAndroidSurfaceKHR( m_instance, reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17774 }
17775#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
17776
17777#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17778#ifdef VK_USE_PLATFORM_ANDROID_KHR
17779 ResultValueType<SurfaceKHR>::type createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17780 {
17781 SurfaceKHR surface;
17782 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 ) ) );
17783 return createResultValue( result, surface, "vk::Instance::createAndroidSurfaceKHR" );
17784 }
17785#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
17786#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17787
17788 Result createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17789 {
17790 return static_cast<Result>( vkCreateDisplayPlaneSurfaceKHR( m_instance, reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17791 }
17792
17793#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17794 ResultValueType<SurfaceKHR>::type createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17795 {
17796 SurfaceKHR surface;
17797 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 ) ) );
17798 return createResultValue( result, surface, "vk::Instance::createDisplayPlaneSurfaceKHR" );
17799 }
17800#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17801
17802#ifdef VK_USE_PLATFORM_MIR_KHR
17803 Result createMirSurfaceKHR( const MirSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17804 {
17805 return static_cast<Result>( vkCreateMirSurfaceKHR( m_instance, reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17806 }
17807#endif /*VK_USE_PLATFORM_MIR_KHR*/
17808
17809#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17810#ifdef VK_USE_PLATFORM_MIR_KHR
17811 ResultValueType<SurfaceKHR>::type createMirSurfaceKHR( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17812 {
17813 SurfaceKHR surface;
17814 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 ) ) );
17815 return createResultValue( result, surface, "vk::Instance::createMirSurfaceKHR" );
17816 }
17817#endif /*VK_USE_PLATFORM_MIR_KHR*/
17818#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17819
17820 void destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks* pAllocator ) const
17821 {
17822 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17823 }
17824
17825#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17826 void destroySurfaceKHR( SurfaceKHR surface, Optional<const AllocationCallbacks> allocator = nullptr ) const
17827 {
17828 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17829 }
17830#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17831
17832#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17833 Result createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17834 {
17835 return static_cast<Result>( vkCreateWaylandSurfaceKHR( m_instance, reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17836 }
17837#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17838
17839#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17840#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17841 ResultValueType<SurfaceKHR>::type createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17842 {
17843 SurfaceKHR surface;
17844 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 ) ) );
17845 return createResultValue( result, surface, "vk::Instance::createWaylandSurfaceKHR" );
17846 }
17847#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17848#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17849
17850#ifdef VK_USE_PLATFORM_WIN32_KHR
17851 Result createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17852 {
17853 return static_cast<Result>( vkCreateWin32SurfaceKHR( m_instance, reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17854 }
17855#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17856
17857#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17858#ifdef VK_USE_PLATFORM_WIN32_KHR
17859 ResultValueType<SurfaceKHR>::type createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17860 {
17861 SurfaceKHR surface;
17862 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 ) ) );
17863 return createResultValue( result, surface, "vk::Instance::createWin32SurfaceKHR" );
17864 }
17865#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17866#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17867
17868#ifdef VK_USE_PLATFORM_XLIB_KHR
17869 Result createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17870 {
17871 return static_cast<Result>( vkCreateXlibSurfaceKHR( m_instance, reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17872 }
17873#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17874
17875#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17876#ifdef VK_USE_PLATFORM_XLIB_KHR
17877 ResultValueType<SurfaceKHR>::type createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17878 {
17879 SurfaceKHR surface;
17880 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 ) ) );
17881 return createResultValue( result, surface, "vk::Instance::createXlibSurfaceKHR" );
17882 }
17883#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17884#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17885
17886#ifdef VK_USE_PLATFORM_XCB_KHR
17887 Result createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
17888 {
17889 return static_cast<Result>( vkCreateXcbSurfaceKHR( m_instance, reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
17890 }
17891#endif /*VK_USE_PLATFORM_XCB_KHR*/
17892
17893#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17894#ifdef VK_USE_PLATFORM_XCB_KHR
17895 ResultValueType<SurfaceKHR>::type createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17896 {
17897 SurfaceKHR surface;
17898 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 ) ) );
17899 return createResultValue( result, surface, "vk::Instance::createXcbSurfaceKHR" );
17900 }
17901#endif /*VK_USE_PLATFORM_XCB_KHR*/
17902#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17903
17904 Result createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, DebugReportCallbackEXT* pCallback ) const
17905 {
17906 return static_cast<Result>( vkCreateDebugReportCallbackEXT( m_instance, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDebugReportCallbackEXT*>( pCallback ) ) );
17907 }
17908
17909#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17910 ResultValueType<DebugReportCallbackEXT>::type createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17911 {
17912 DebugReportCallbackEXT callback;
17913 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 ) ) );
17914 return createResultValue( result, callback, "vk::Instance::createDebugReportCallbackEXT" );
17915 }
17916#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17917
17918 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, const AllocationCallbacks* pAllocator ) const
17919 {
17920 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17921 }
17922
17923#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17924 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, Optional<const AllocationCallbacks> allocator = nullptr ) const
17925 {
17926 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17927 }
17928#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17929
17930 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage ) const
17931 {
17932 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, pLayerPrefix, pMessage );
17933 }
17934
17935#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17936 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const std::string & layerPrefix, const std::string & message ) const
17937 {
17938 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, layerPrefix.c_str(), message.c_str() );
17939 }
17940#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17941
17942#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17943 explicit
17944#endif
17945 operator VkInstance() const
17946 {
17947 return m_instance;
17948 }
17949
17950 explicit operator bool() const
17951 {
17952 return m_instance != VK_NULL_HANDLE;
17953 }
17954
17955 bool operator!() const
17956 {
17957 return m_instance == VK_NULL_HANDLE;
17958 }
17959
17960 private:
17961 VkInstance m_instance;
17962 };
17963 static_assert( sizeof( Instance ) == sizeof( VkInstance ), "handle and wrapper have different size!" );
17964
Lenny Komow68432d72016-09-29 14:16:59 -060017965 enum class ValidationCheckEXT
17966 {
17967 eAll = VK_VALIDATION_CHECK_ALL_EXT
17968 };
17969
17970 struct ValidationFlagsEXT
17971 {
17972 ValidationFlagsEXT( uint32_t disabledValidationCheckCount_ = 0, ValidationCheckEXT* pDisabledValidationChecks_ = nullptr )
17973 : sType( StructureType::eValidationFlagsEXT )
17974 , pNext( nullptr )
17975 , disabledValidationCheckCount( disabledValidationCheckCount_ )
17976 , pDisabledValidationChecks( pDisabledValidationChecks_ )
17977 {
17978 }
17979
17980 ValidationFlagsEXT( VkValidationFlagsEXT const & rhs )
17981 {
17982 memcpy( this, &rhs, sizeof(ValidationFlagsEXT) );
17983 }
17984
17985 ValidationFlagsEXT& operator=( VkValidationFlagsEXT const & rhs )
17986 {
17987 memcpy( this, &rhs, sizeof(ValidationFlagsEXT) );
17988 return *this;
17989 }
17990
17991 ValidationFlagsEXT& setSType( StructureType sType_ )
17992 {
17993 sType = sType_;
17994 return *this;
17995 }
17996
17997 ValidationFlagsEXT& setPNext( const void* pNext_ )
17998 {
17999 pNext = pNext_;
18000 return *this;
18001 }
18002
18003 ValidationFlagsEXT& setDisabledValidationCheckCount( uint32_t disabledValidationCheckCount_ )
18004 {
18005 disabledValidationCheckCount = disabledValidationCheckCount_;
18006 return *this;
18007 }
18008
18009 ValidationFlagsEXT& setPDisabledValidationChecks( ValidationCheckEXT* pDisabledValidationChecks_ )
18010 {
18011 pDisabledValidationChecks = pDisabledValidationChecks_;
18012 return *this;
18013 }
18014
18015 operator const VkValidationFlagsEXT&() const
18016 {
18017 return *reinterpret_cast<const VkValidationFlagsEXT*>(this);
18018 }
18019
18020 bool operator==( ValidationFlagsEXT const& rhs ) const
18021 {
18022 return ( sType == rhs.sType )
18023 && ( pNext == rhs.pNext )
18024 && ( disabledValidationCheckCount == rhs.disabledValidationCheckCount )
18025 && ( pDisabledValidationChecks == rhs.pDisabledValidationChecks );
18026 }
18027
18028 bool operator!=( ValidationFlagsEXT const& rhs ) const
18029 {
18030 return !operator==( rhs );
18031 }
18032
18033 private:
18034 StructureType sType;
18035
18036 public:
18037 const void* pNext;
18038 uint32_t disabledValidationCheckCount;
18039 ValidationCheckEXT* pDisabledValidationChecks;
18040 };
18041 static_assert( sizeof( ValidationFlagsEXT ) == sizeof( VkValidationFlagsEXT ), "struct and wrapper have different size!" );
18042
Lenny Komowbed9b5c2016-08-11 11:23:15 -060018043 inline Result createInstance( const InstanceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Instance* pInstance )
18044 {
18045 return static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkInstance*>( pInstance ) ) );
18046 }
18047
18048#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18049 inline ResultValueType<Instance>::type createInstance( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr )
18050 {
18051 Instance instance;
18052 Result result = static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkInstance*>( &instance ) ) );
18053 return createResultValue( result, instance, "vk::createInstance" );
18054 }
18055#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18056
18057 inline Result enumerateInstanceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties )
18058 {
18059 return static_cast<Result>( vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
18060 }
18061
18062#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18063 template <typename Allocator = std::allocator<LayerProperties>>
18064 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties()
18065 {
18066 std::vector<LayerProperties,Allocator> properties;
18067 uint32_t propertyCount;
18068 Result result;
18069 do
18070 {
18071 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) );
18072 if ( ( result == Result::eSuccess ) && propertyCount )
18073 {
18074 properties.resize( propertyCount );
18075 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
18076 }
18077 } while ( result == Result::eIncomplete );
18078 assert( propertyCount <= properties.size() );
18079 properties.resize( propertyCount );
18080 return createResultValue( result, properties, "vk::enumerateInstanceLayerProperties" );
18081 }
18082#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18083
18084 inline Result enumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties )
18085 {
18086 return static_cast<Result>( vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
18087 }
18088
18089#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18090 template <typename Allocator = std::allocator<ExtensionProperties>>
18091 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateInstanceExtensionProperties( Optional<const std::string> layerName = nullptr )
18092 {
18093 std::vector<ExtensionProperties,Allocator> properties;
18094 uint32_t propertyCount;
18095 Result result;
18096 do
18097 {
18098 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
18099 if ( ( result == Result::eSuccess ) && propertyCount )
18100 {
18101 properties.resize( propertyCount );
18102 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
18103 }
18104 } while ( result == Result::eIncomplete );
18105 assert( propertyCount <= properties.size() );
18106 properties.resize( propertyCount );
18107 return createResultValue( result, properties, "vk::enumerateInstanceExtensionProperties" );
18108 }
18109#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18110
18111 inline std::string to_string(FramebufferCreateFlagBits)
18112 {
18113 return "(void)";
18114 }
18115
18116 inline std::string to_string(FramebufferCreateFlags)
18117 {
18118 return "{}";
18119 }
18120
18121 inline std::string to_string(QueryPoolCreateFlagBits)
18122 {
18123 return "(void)";
18124 }
18125
18126 inline std::string to_string(QueryPoolCreateFlags)
18127 {
18128 return "{}";
18129 }
18130
18131 inline std::string to_string(RenderPassCreateFlagBits)
18132 {
18133 return "(void)";
18134 }
18135
18136 inline std::string to_string(RenderPassCreateFlags)
18137 {
18138 return "{}";
18139 }
18140
18141 inline std::string to_string(SamplerCreateFlagBits)
18142 {
18143 return "(void)";
18144 }
18145
18146 inline std::string to_string(SamplerCreateFlags)
18147 {
18148 return "{}";
18149 }
18150
18151 inline std::string to_string(PipelineLayoutCreateFlagBits)
18152 {
18153 return "(void)";
18154 }
18155
18156 inline std::string to_string(PipelineLayoutCreateFlags)
18157 {
18158 return "{}";
18159 }
18160
18161 inline std::string to_string(PipelineCacheCreateFlagBits)
18162 {
18163 return "(void)";
18164 }
18165
18166 inline std::string to_string(PipelineCacheCreateFlags)
18167 {
18168 return "{}";
18169 }
18170
18171 inline std::string to_string(PipelineDepthStencilStateCreateFlagBits)
18172 {
18173 return "(void)";
18174 }
18175
18176 inline std::string to_string(PipelineDepthStencilStateCreateFlags)
18177 {
18178 return "{}";
18179 }
18180
18181 inline std::string to_string(PipelineDynamicStateCreateFlagBits)
18182 {
18183 return "(void)";
18184 }
18185
18186 inline std::string to_string(PipelineDynamicStateCreateFlags)
18187 {
18188 return "{}";
18189 }
18190
18191 inline std::string to_string(PipelineColorBlendStateCreateFlagBits)
18192 {
18193 return "(void)";
18194 }
18195
18196 inline std::string to_string(PipelineColorBlendStateCreateFlags)
18197 {
18198 return "{}";
18199 }
18200
18201 inline std::string to_string(PipelineMultisampleStateCreateFlagBits)
18202 {
18203 return "(void)";
18204 }
18205
18206 inline std::string to_string(PipelineMultisampleStateCreateFlags)
18207 {
18208 return "{}";
18209 }
18210
18211 inline std::string to_string(PipelineRasterizationStateCreateFlagBits)
18212 {
18213 return "(void)";
18214 }
18215
18216 inline std::string to_string(PipelineRasterizationStateCreateFlags)
18217 {
18218 return "{}";
18219 }
18220
18221 inline std::string to_string(PipelineViewportStateCreateFlagBits)
18222 {
18223 return "(void)";
18224 }
18225
18226 inline std::string to_string(PipelineViewportStateCreateFlags)
18227 {
18228 return "{}";
18229 }
18230
18231 inline std::string to_string(PipelineTessellationStateCreateFlagBits)
18232 {
18233 return "(void)";
18234 }
18235
18236 inline std::string to_string(PipelineTessellationStateCreateFlags)
18237 {
18238 return "{}";
18239 }
18240
18241 inline std::string to_string(PipelineInputAssemblyStateCreateFlagBits)
18242 {
18243 return "(void)";
18244 }
18245
18246 inline std::string to_string(PipelineInputAssemblyStateCreateFlags)
18247 {
18248 return "{}";
18249 }
18250
18251 inline std::string to_string(PipelineVertexInputStateCreateFlagBits)
18252 {
18253 return "(void)";
18254 }
18255
18256 inline std::string to_string(PipelineVertexInputStateCreateFlags)
18257 {
18258 return "{}";
18259 }
18260
18261 inline std::string to_string(PipelineShaderStageCreateFlagBits)
18262 {
18263 return "(void)";
18264 }
18265
18266 inline std::string to_string(PipelineShaderStageCreateFlags)
18267 {
18268 return "{}";
18269 }
18270
18271 inline std::string to_string(DescriptorSetLayoutCreateFlagBits)
18272 {
18273 return "(void)";
18274 }
18275
18276 inline std::string to_string(DescriptorSetLayoutCreateFlags)
18277 {
18278 return "{}";
18279 }
18280
18281 inline std::string to_string(BufferViewCreateFlagBits)
18282 {
18283 return "(void)";
18284 }
18285
18286 inline std::string to_string(BufferViewCreateFlags)
18287 {
18288 return "{}";
18289 }
18290
18291 inline std::string to_string(InstanceCreateFlagBits)
18292 {
18293 return "(void)";
18294 }
18295
18296 inline std::string to_string(InstanceCreateFlags)
18297 {
18298 return "{}";
18299 }
18300
18301 inline std::string to_string(DeviceCreateFlagBits)
18302 {
18303 return "(void)";
18304 }
18305
18306 inline std::string to_string(DeviceCreateFlags)
18307 {
18308 return "{}";
18309 }
18310
18311 inline std::string to_string(DeviceQueueCreateFlagBits)
18312 {
18313 return "(void)";
18314 }
18315
18316 inline std::string to_string(DeviceQueueCreateFlags)
18317 {
18318 return "{}";
18319 }
18320
18321 inline std::string to_string(ImageViewCreateFlagBits)
18322 {
18323 return "(void)";
18324 }
18325
18326 inline std::string to_string(ImageViewCreateFlags)
18327 {
18328 return "{}";
18329 }
18330
18331 inline std::string to_string(SemaphoreCreateFlagBits)
18332 {
18333 return "(void)";
18334 }
18335
18336 inline std::string to_string(SemaphoreCreateFlags)
18337 {
18338 return "{}";
18339 }
18340
18341 inline std::string to_string(ShaderModuleCreateFlagBits)
18342 {
18343 return "(void)";
18344 }
18345
18346 inline std::string to_string(ShaderModuleCreateFlags)
18347 {
18348 return "{}";
18349 }
18350
18351 inline std::string to_string(EventCreateFlagBits)
18352 {
18353 return "(void)";
18354 }
18355
18356 inline std::string to_string(EventCreateFlags)
18357 {
18358 return "{}";
18359 }
18360
18361 inline std::string to_string(MemoryMapFlagBits)
18362 {
18363 return "(void)";
18364 }
18365
18366 inline std::string to_string(MemoryMapFlags)
18367 {
18368 return "{}";
18369 }
18370
18371 inline std::string to_string(SubpassDescriptionFlagBits)
18372 {
18373 return "(void)";
18374 }
18375
18376 inline std::string to_string(SubpassDescriptionFlags)
18377 {
18378 return "{}";
18379 }
18380
18381 inline std::string to_string(DescriptorPoolResetFlagBits)
18382 {
18383 return "(void)";
18384 }
18385
18386 inline std::string to_string(DescriptorPoolResetFlags)
18387 {
18388 return "{}";
18389 }
18390
18391 inline std::string to_string(SwapchainCreateFlagBitsKHR)
18392 {
18393 return "(void)";
18394 }
18395
18396 inline std::string to_string(SwapchainCreateFlagsKHR)
18397 {
18398 return "{}";
18399 }
18400
18401 inline std::string to_string(DisplayModeCreateFlagBitsKHR)
18402 {
18403 return "(void)";
18404 }
18405
18406 inline std::string to_string(DisplayModeCreateFlagsKHR)
18407 {
18408 return "{}";
18409 }
18410
18411 inline std::string to_string(DisplaySurfaceCreateFlagBitsKHR)
18412 {
18413 return "(void)";
18414 }
18415
18416 inline std::string to_string(DisplaySurfaceCreateFlagsKHR)
18417 {
18418 return "{}";
18419 }
18420
18421#ifdef VK_USE_PLATFORM_ANDROID_KHR
18422 inline std::string to_string(AndroidSurfaceCreateFlagBitsKHR)
18423 {
18424 return "(void)";
18425 }
18426#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18427
18428#ifdef VK_USE_PLATFORM_ANDROID_KHR
18429 inline std::string to_string(AndroidSurfaceCreateFlagsKHR)
18430 {
18431 return "{}";
18432 }
18433#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18434
18435#ifdef VK_USE_PLATFORM_MIR_KHR
18436 inline std::string to_string(MirSurfaceCreateFlagBitsKHR)
18437 {
18438 return "(void)";
18439 }
18440#endif /*VK_USE_PLATFORM_MIR_KHR*/
18441
18442#ifdef VK_USE_PLATFORM_MIR_KHR
18443 inline std::string to_string(MirSurfaceCreateFlagsKHR)
18444 {
18445 return "{}";
18446 }
18447#endif /*VK_USE_PLATFORM_MIR_KHR*/
18448
18449#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18450 inline std::string to_string(WaylandSurfaceCreateFlagBitsKHR)
18451 {
18452 return "(void)";
18453 }
18454#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18455
18456#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18457 inline std::string to_string(WaylandSurfaceCreateFlagsKHR)
18458 {
18459 return "{}";
18460 }
18461#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18462
18463#ifdef VK_USE_PLATFORM_WIN32_KHR
18464 inline std::string to_string(Win32SurfaceCreateFlagBitsKHR)
18465 {
18466 return "(void)";
18467 }
18468#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18469
18470#ifdef VK_USE_PLATFORM_WIN32_KHR
18471 inline std::string to_string(Win32SurfaceCreateFlagsKHR)
18472 {
18473 return "{}";
18474 }
18475#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18476
18477#ifdef VK_USE_PLATFORM_XLIB_KHR
18478 inline std::string to_string(XlibSurfaceCreateFlagBitsKHR)
18479 {
18480 return "(void)";
18481 }
18482#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18483
18484#ifdef VK_USE_PLATFORM_XLIB_KHR
18485 inline std::string to_string(XlibSurfaceCreateFlagsKHR)
18486 {
18487 return "{}";
18488 }
18489#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18490
18491#ifdef VK_USE_PLATFORM_XCB_KHR
18492 inline std::string to_string(XcbSurfaceCreateFlagBitsKHR)
18493 {
18494 return "(void)";
18495 }
18496#endif /*VK_USE_PLATFORM_XCB_KHR*/
18497
18498#ifdef VK_USE_PLATFORM_XCB_KHR
18499 inline std::string to_string(XcbSurfaceCreateFlagsKHR)
18500 {
18501 return "{}";
18502 }
18503#endif /*VK_USE_PLATFORM_XCB_KHR*/
18504
18505 inline std::string to_string(ImageLayout value)
18506 {
18507 switch (value)
18508 {
18509 case ImageLayout::eUndefined: return "Undefined";
18510 case ImageLayout::eGeneral: return "General";
18511 case ImageLayout::eColorAttachmentOptimal: return "ColorAttachmentOptimal";
18512 case ImageLayout::eDepthStencilAttachmentOptimal: return "DepthStencilAttachmentOptimal";
18513 case ImageLayout::eDepthStencilReadOnlyOptimal: return "DepthStencilReadOnlyOptimal";
18514 case ImageLayout::eShaderReadOnlyOptimal: return "ShaderReadOnlyOptimal";
18515 case ImageLayout::eTransferSrcOptimal: return "TransferSrcOptimal";
18516 case ImageLayout::eTransferDstOptimal: return "TransferDstOptimal";
18517 case ImageLayout::ePreinitialized: return "Preinitialized";
18518 case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR";
18519 default: return "invalid";
18520 }
18521 }
18522
18523 inline std::string to_string(AttachmentLoadOp value)
18524 {
18525 switch (value)
18526 {
18527 case AttachmentLoadOp::eLoad: return "Load";
18528 case AttachmentLoadOp::eClear: return "Clear";
18529 case AttachmentLoadOp::eDontCare: return "DontCare";
18530 default: return "invalid";
18531 }
18532 }
18533
18534 inline std::string to_string(AttachmentStoreOp value)
18535 {
18536 switch (value)
18537 {
18538 case AttachmentStoreOp::eStore: return "Store";
18539 case AttachmentStoreOp::eDontCare: return "DontCare";
18540 default: return "invalid";
18541 }
18542 }
18543
18544 inline std::string to_string(ImageType value)
18545 {
18546 switch (value)
18547 {
18548 case ImageType::e1D: return "1D";
18549 case ImageType::e2D: return "2D";
18550 case ImageType::e3D: return "3D";
18551 default: return "invalid";
18552 }
18553 }
18554
18555 inline std::string to_string(ImageTiling value)
18556 {
18557 switch (value)
18558 {
18559 case ImageTiling::eOptimal: return "Optimal";
18560 case ImageTiling::eLinear: return "Linear";
18561 default: return "invalid";
18562 }
18563 }
18564
18565 inline std::string to_string(ImageViewType value)
18566 {
18567 switch (value)
18568 {
18569 case ImageViewType::e1D: return "1D";
18570 case ImageViewType::e2D: return "2D";
18571 case ImageViewType::e3D: return "3D";
18572 case ImageViewType::eCube: return "Cube";
18573 case ImageViewType::e1DArray: return "1DArray";
18574 case ImageViewType::e2DArray: return "2DArray";
18575 case ImageViewType::eCubeArray: return "CubeArray";
18576 default: return "invalid";
18577 }
18578 }
18579
18580 inline std::string to_string(CommandBufferLevel value)
18581 {
18582 switch (value)
18583 {
18584 case CommandBufferLevel::ePrimary: return "Primary";
18585 case CommandBufferLevel::eSecondary: return "Secondary";
18586 default: return "invalid";
18587 }
18588 }
18589
18590 inline std::string to_string(ComponentSwizzle value)
18591 {
18592 switch (value)
18593 {
18594 case ComponentSwizzle::eIdentity: return "Identity";
18595 case ComponentSwizzle::eZero: return "Zero";
18596 case ComponentSwizzle::eOne: return "One";
18597 case ComponentSwizzle::eR: return "R";
18598 case ComponentSwizzle::eG: return "G";
18599 case ComponentSwizzle::eB: return "B";
18600 case ComponentSwizzle::eA: return "A";
18601 default: return "invalid";
18602 }
18603 }
18604
18605 inline std::string to_string(DescriptorType value)
18606 {
18607 switch (value)
18608 {
18609 case DescriptorType::eSampler: return "Sampler";
18610 case DescriptorType::eCombinedImageSampler: return "CombinedImageSampler";
18611 case DescriptorType::eSampledImage: return "SampledImage";
18612 case DescriptorType::eStorageImage: return "StorageImage";
18613 case DescriptorType::eUniformTexelBuffer: return "UniformTexelBuffer";
18614 case DescriptorType::eStorageTexelBuffer: return "StorageTexelBuffer";
18615 case DescriptorType::eUniformBuffer: return "UniformBuffer";
18616 case DescriptorType::eStorageBuffer: return "StorageBuffer";
18617 case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic";
18618 case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic";
18619 case DescriptorType::eInputAttachment: return "InputAttachment";
18620 default: return "invalid";
18621 }
18622 }
18623
18624 inline std::string to_string(QueryType value)
18625 {
18626 switch (value)
18627 {
18628 case QueryType::eOcclusion: return "Occlusion";
18629 case QueryType::ePipelineStatistics: return "PipelineStatistics";
18630 case QueryType::eTimestamp: return "Timestamp";
18631 default: return "invalid";
18632 }
18633 }
18634
18635 inline std::string to_string(BorderColor value)
18636 {
18637 switch (value)
18638 {
18639 case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack";
18640 case BorderColor::eIntTransparentBlack: return "IntTransparentBlack";
18641 case BorderColor::eFloatOpaqueBlack: return "FloatOpaqueBlack";
18642 case BorderColor::eIntOpaqueBlack: return "IntOpaqueBlack";
18643 case BorderColor::eFloatOpaqueWhite: return "FloatOpaqueWhite";
18644 case BorderColor::eIntOpaqueWhite: return "IntOpaqueWhite";
18645 default: return "invalid";
18646 }
18647 }
18648
18649 inline std::string to_string(PipelineBindPoint value)
18650 {
18651 switch (value)
18652 {
18653 case PipelineBindPoint::eGraphics: return "Graphics";
18654 case PipelineBindPoint::eCompute: return "Compute";
18655 default: return "invalid";
18656 }
18657 }
18658
18659 inline std::string to_string(PipelineCacheHeaderVersion value)
18660 {
18661 switch (value)
18662 {
18663 case PipelineCacheHeaderVersion::eOne: return "One";
18664 default: return "invalid";
18665 }
18666 }
18667
18668 inline std::string to_string(PrimitiveTopology value)
18669 {
18670 switch (value)
18671 {
18672 case PrimitiveTopology::ePointList: return "PointList";
18673 case PrimitiveTopology::eLineList: return "LineList";
18674 case PrimitiveTopology::eLineStrip: return "LineStrip";
18675 case PrimitiveTopology::eTriangleList: return "TriangleList";
18676 case PrimitiveTopology::eTriangleStrip: return "TriangleStrip";
18677 case PrimitiveTopology::eTriangleFan: return "TriangleFan";
18678 case PrimitiveTopology::eLineListWithAdjacency: return "LineListWithAdjacency";
18679 case PrimitiveTopology::eLineStripWithAdjacency: return "LineStripWithAdjacency";
18680 case PrimitiveTopology::eTriangleListWithAdjacency: return "TriangleListWithAdjacency";
18681 case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency";
18682 case PrimitiveTopology::ePatchList: return "PatchList";
18683 default: return "invalid";
18684 }
18685 }
18686
18687 inline std::string to_string(SharingMode value)
18688 {
18689 switch (value)
18690 {
18691 case SharingMode::eExclusive: return "Exclusive";
18692 case SharingMode::eConcurrent: return "Concurrent";
18693 default: return "invalid";
18694 }
18695 }
18696
18697 inline std::string to_string(IndexType value)
18698 {
18699 switch (value)
18700 {
18701 case IndexType::eUint16: return "Uint16";
18702 case IndexType::eUint32: return "Uint32";
18703 default: return "invalid";
18704 }
18705 }
18706
18707 inline std::string to_string(Filter value)
18708 {
18709 switch (value)
18710 {
18711 case Filter::eNearest: return "Nearest";
18712 case Filter::eLinear: return "Linear";
18713 case Filter::eCubicIMG: return "CubicIMG";
18714 default: return "invalid";
18715 }
18716 }
18717
18718 inline std::string to_string(SamplerMipmapMode value)
18719 {
18720 switch (value)
18721 {
18722 case SamplerMipmapMode::eNearest: return "Nearest";
18723 case SamplerMipmapMode::eLinear: return "Linear";
18724 default: return "invalid";
18725 }
18726 }
18727
18728 inline std::string to_string(SamplerAddressMode value)
18729 {
18730 switch (value)
18731 {
18732 case SamplerAddressMode::eRepeat: return "Repeat";
18733 case SamplerAddressMode::eMirroredRepeat: return "MirroredRepeat";
18734 case SamplerAddressMode::eClampToEdge: return "ClampToEdge";
18735 case SamplerAddressMode::eClampToBorder: return "ClampToBorder";
18736 case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge";
18737 default: return "invalid";
18738 }
18739 }
18740
18741 inline std::string to_string(CompareOp value)
18742 {
18743 switch (value)
18744 {
18745 case CompareOp::eNever: return "Never";
18746 case CompareOp::eLess: return "Less";
18747 case CompareOp::eEqual: return "Equal";
18748 case CompareOp::eLessOrEqual: return "LessOrEqual";
18749 case CompareOp::eGreater: return "Greater";
18750 case CompareOp::eNotEqual: return "NotEqual";
18751 case CompareOp::eGreaterOrEqual: return "GreaterOrEqual";
18752 case CompareOp::eAlways: return "Always";
18753 default: return "invalid";
18754 }
18755 }
18756
18757 inline std::string to_string(PolygonMode value)
18758 {
18759 switch (value)
18760 {
18761 case PolygonMode::eFill: return "Fill";
18762 case PolygonMode::eLine: return "Line";
18763 case PolygonMode::ePoint: return "Point";
18764 default: return "invalid";
18765 }
18766 }
18767
18768 inline std::string to_string(CullModeFlagBits value)
18769 {
18770 switch (value)
18771 {
18772 case CullModeFlagBits::eNone: return "None";
18773 case CullModeFlagBits::eFront: return "Front";
18774 case CullModeFlagBits::eBack: return "Back";
18775 case CullModeFlagBits::eFrontAndBack: return "FrontAndBack";
18776 default: return "invalid";
18777 }
18778 }
18779
18780 inline std::string to_string(CullModeFlags value)
18781 {
18782 if (!value) return "{}";
18783 std::string result;
18784 if (value & CullModeFlagBits::eNone) result += "None | ";
18785 if (value & CullModeFlagBits::eFront) result += "Front | ";
18786 if (value & CullModeFlagBits::eBack) result += "Back | ";
18787 if (value & CullModeFlagBits::eFrontAndBack) result += "FrontAndBack | ";
18788 return "{" + result.substr(0, result.size() - 3) + "}";
18789 }
18790
18791 inline std::string to_string(FrontFace value)
18792 {
18793 switch (value)
18794 {
18795 case FrontFace::eCounterClockwise: return "CounterClockwise";
18796 case FrontFace::eClockwise: return "Clockwise";
18797 default: return "invalid";
18798 }
18799 }
18800
18801 inline std::string to_string(BlendFactor value)
18802 {
18803 switch (value)
18804 {
18805 case BlendFactor::eZero: return "Zero";
18806 case BlendFactor::eOne: return "One";
18807 case BlendFactor::eSrcColor: return "SrcColor";
18808 case BlendFactor::eOneMinusSrcColor: return "OneMinusSrcColor";
18809 case BlendFactor::eDstColor: return "DstColor";
18810 case BlendFactor::eOneMinusDstColor: return "OneMinusDstColor";
18811 case BlendFactor::eSrcAlpha: return "SrcAlpha";
18812 case BlendFactor::eOneMinusSrcAlpha: return "OneMinusSrcAlpha";
18813 case BlendFactor::eDstAlpha: return "DstAlpha";
18814 case BlendFactor::eOneMinusDstAlpha: return "OneMinusDstAlpha";
18815 case BlendFactor::eConstantColor: return "ConstantColor";
18816 case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor";
18817 case BlendFactor::eConstantAlpha: return "ConstantAlpha";
18818 case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha";
18819 case BlendFactor::eSrcAlphaSaturate: return "SrcAlphaSaturate";
18820 case BlendFactor::eSrc1Color: return "Src1Color";
18821 case BlendFactor::eOneMinusSrc1Color: return "OneMinusSrc1Color";
18822 case BlendFactor::eSrc1Alpha: return "Src1Alpha";
18823 case BlendFactor::eOneMinusSrc1Alpha: return "OneMinusSrc1Alpha";
18824 default: return "invalid";
18825 }
18826 }
18827
18828 inline std::string to_string(BlendOp value)
18829 {
18830 switch (value)
18831 {
18832 case BlendOp::eAdd: return "Add";
18833 case BlendOp::eSubtract: return "Subtract";
18834 case BlendOp::eReverseSubtract: return "ReverseSubtract";
18835 case BlendOp::eMin: return "Min";
18836 case BlendOp::eMax: return "Max";
18837 default: return "invalid";
18838 }
18839 }
18840
18841 inline std::string to_string(StencilOp value)
18842 {
18843 switch (value)
18844 {
18845 case StencilOp::eKeep: return "Keep";
18846 case StencilOp::eZero: return "Zero";
18847 case StencilOp::eReplace: return "Replace";
18848 case StencilOp::eIncrementAndClamp: return "IncrementAndClamp";
18849 case StencilOp::eDecrementAndClamp: return "DecrementAndClamp";
18850 case StencilOp::eInvert: return "Invert";
18851 case StencilOp::eIncrementAndWrap: return "IncrementAndWrap";
18852 case StencilOp::eDecrementAndWrap: return "DecrementAndWrap";
18853 default: return "invalid";
18854 }
18855 }
18856
18857 inline std::string to_string(LogicOp value)
18858 {
18859 switch (value)
18860 {
18861 case LogicOp::eClear: return "Clear";
18862 case LogicOp::eAnd: return "And";
18863 case LogicOp::eAndReverse: return "AndReverse";
18864 case LogicOp::eCopy: return "Copy";
18865 case LogicOp::eAndInverted: return "AndInverted";
18866 case LogicOp::eNoOp: return "NoOp";
18867 case LogicOp::eXor: return "Xor";
18868 case LogicOp::eOr: return "Or";
18869 case LogicOp::eNor: return "Nor";
18870 case LogicOp::eEquivalent: return "Equivalent";
18871 case LogicOp::eInvert: return "Invert";
18872 case LogicOp::eOrReverse: return "OrReverse";
18873 case LogicOp::eCopyInverted: return "CopyInverted";
18874 case LogicOp::eOrInverted: return "OrInverted";
18875 case LogicOp::eNand: return "Nand";
18876 case LogicOp::eSet: return "Set";
18877 default: return "invalid";
18878 }
18879 }
18880
18881 inline std::string to_string(InternalAllocationType value)
18882 {
18883 switch (value)
18884 {
18885 case InternalAllocationType::eExecutable: return "Executable";
18886 default: return "invalid";
18887 }
18888 }
18889
18890 inline std::string to_string(SystemAllocationScope value)
18891 {
18892 switch (value)
18893 {
18894 case SystemAllocationScope::eCommand: return "Command";
18895 case SystemAllocationScope::eObject: return "Object";
18896 case SystemAllocationScope::eCache: return "Cache";
18897 case SystemAllocationScope::eDevice: return "Device";
18898 case SystemAllocationScope::eInstance: return "Instance";
18899 default: return "invalid";
18900 }
18901 }
18902
18903 inline std::string to_string(PhysicalDeviceType value)
18904 {
18905 switch (value)
18906 {
18907 case PhysicalDeviceType::eOther: return "Other";
18908 case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu";
18909 case PhysicalDeviceType::eDiscreteGpu: return "DiscreteGpu";
18910 case PhysicalDeviceType::eVirtualGpu: return "VirtualGpu";
18911 case PhysicalDeviceType::eCpu: return "Cpu";
18912 default: return "invalid";
18913 }
18914 }
18915
18916 inline std::string to_string(VertexInputRate value)
18917 {
18918 switch (value)
18919 {
18920 case VertexInputRate::eVertex: return "Vertex";
18921 case VertexInputRate::eInstance: return "Instance";
18922 default: return "invalid";
18923 }
18924 }
18925
18926 inline std::string to_string(Format value)
18927 {
18928 switch (value)
18929 {
18930 case Format::eUndefined: return "Undefined";
18931 case Format::eR4G4UnormPack8: return "R4G4UnormPack8";
18932 case Format::eR4G4B4A4UnormPack16: return "R4G4B4A4UnormPack16";
18933 case Format::eB4G4R4A4UnormPack16: return "B4G4R4A4UnormPack16";
18934 case Format::eR5G6B5UnormPack16: return "R5G6B5UnormPack16";
18935 case Format::eB5G6R5UnormPack16: return "B5G6R5UnormPack16";
18936 case Format::eR5G5B5A1UnormPack16: return "R5G5B5A1UnormPack16";
18937 case Format::eB5G5R5A1UnormPack16: return "B5G5R5A1UnormPack16";
18938 case Format::eA1R5G5B5UnormPack16: return "A1R5G5B5UnormPack16";
18939 case Format::eR8Unorm: return "R8Unorm";
18940 case Format::eR8Snorm: return "R8Snorm";
18941 case Format::eR8Uscaled: return "R8Uscaled";
18942 case Format::eR8Sscaled: return "R8Sscaled";
18943 case Format::eR8Uint: return "R8Uint";
18944 case Format::eR8Sint: return "R8Sint";
18945 case Format::eR8Srgb: return "R8Srgb";
18946 case Format::eR8G8Unorm: return "R8G8Unorm";
18947 case Format::eR8G8Snorm: return "R8G8Snorm";
18948 case Format::eR8G8Uscaled: return "R8G8Uscaled";
18949 case Format::eR8G8Sscaled: return "R8G8Sscaled";
18950 case Format::eR8G8Uint: return "R8G8Uint";
18951 case Format::eR8G8Sint: return "R8G8Sint";
18952 case Format::eR8G8Srgb: return "R8G8Srgb";
18953 case Format::eR8G8B8Unorm: return "R8G8B8Unorm";
18954 case Format::eR8G8B8Snorm: return "R8G8B8Snorm";
18955 case Format::eR8G8B8Uscaled: return "R8G8B8Uscaled";
18956 case Format::eR8G8B8Sscaled: return "R8G8B8Sscaled";
18957 case Format::eR8G8B8Uint: return "R8G8B8Uint";
18958 case Format::eR8G8B8Sint: return "R8G8B8Sint";
18959 case Format::eR8G8B8Srgb: return "R8G8B8Srgb";
18960 case Format::eB8G8R8Unorm: return "B8G8R8Unorm";
18961 case Format::eB8G8R8Snorm: return "B8G8R8Snorm";
18962 case Format::eB8G8R8Uscaled: return "B8G8R8Uscaled";
18963 case Format::eB8G8R8Sscaled: return "B8G8R8Sscaled";
18964 case Format::eB8G8R8Uint: return "B8G8R8Uint";
18965 case Format::eB8G8R8Sint: return "B8G8R8Sint";
18966 case Format::eB8G8R8Srgb: return "B8G8R8Srgb";
18967 case Format::eR8G8B8A8Unorm: return "R8G8B8A8Unorm";
18968 case Format::eR8G8B8A8Snorm: return "R8G8B8A8Snorm";
18969 case Format::eR8G8B8A8Uscaled: return "R8G8B8A8Uscaled";
18970 case Format::eR8G8B8A8Sscaled: return "R8G8B8A8Sscaled";
18971 case Format::eR8G8B8A8Uint: return "R8G8B8A8Uint";
18972 case Format::eR8G8B8A8Sint: return "R8G8B8A8Sint";
18973 case Format::eR8G8B8A8Srgb: return "R8G8B8A8Srgb";
18974 case Format::eB8G8R8A8Unorm: return "B8G8R8A8Unorm";
18975 case Format::eB8G8R8A8Snorm: return "B8G8R8A8Snorm";
18976 case Format::eB8G8R8A8Uscaled: return "B8G8R8A8Uscaled";
18977 case Format::eB8G8R8A8Sscaled: return "B8G8R8A8Sscaled";
18978 case Format::eB8G8R8A8Uint: return "B8G8R8A8Uint";
18979 case Format::eB8G8R8A8Sint: return "B8G8R8A8Sint";
18980 case Format::eB8G8R8A8Srgb: return "B8G8R8A8Srgb";
18981 case Format::eA8B8G8R8UnormPack32: return "A8B8G8R8UnormPack32";
18982 case Format::eA8B8G8R8SnormPack32: return "A8B8G8R8SnormPack32";
18983 case Format::eA8B8G8R8UscaledPack32: return "A8B8G8R8UscaledPack32";
18984 case Format::eA8B8G8R8SscaledPack32: return "A8B8G8R8SscaledPack32";
18985 case Format::eA8B8G8R8UintPack32: return "A8B8G8R8UintPack32";
18986 case Format::eA8B8G8R8SintPack32: return "A8B8G8R8SintPack32";
18987 case Format::eA8B8G8R8SrgbPack32: return "A8B8G8R8SrgbPack32";
18988 case Format::eA2R10G10B10UnormPack32: return "A2R10G10B10UnormPack32";
18989 case Format::eA2R10G10B10SnormPack32: return "A2R10G10B10SnormPack32";
18990 case Format::eA2R10G10B10UscaledPack32: return "A2R10G10B10UscaledPack32";
18991 case Format::eA2R10G10B10SscaledPack32: return "A2R10G10B10SscaledPack32";
18992 case Format::eA2R10G10B10UintPack32: return "A2R10G10B10UintPack32";
18993 case Format::eA2R10G10B10SintPack32: return "A2R10G10B10SintPack32";
18994 case Format::eA2B10G10R10UnormPack32: return "A2B10G10R10UnormPack32";
18995 case Format::eA2B10G10R10SnormPack32: return "A2B10G10R10SnormPack32";
18996 case Format::eA2B10G10R10UscaledPack32: return "A2B10G10R10UscaledPack32";
18997 case Format::eA2B10G10R10SscaledPack32: return "A2B10G10R10SscaledPack32";
18998 case Format::eA2B10G10R10UintPack32: return "A2B10G10R10UintPack32";
18999 case Format::eA2B10G10R10SintPack32: return "A2B10G10R10SintPack32";
19000 case Format::eR16Unorm: return "R16Unorm";
19001 case Format::eR16Snorm: return "R16Snorm";
19002 case Format::eR16Uscaled: return "R16Uscaled";
19003 case Format::eR16Sscaled: return "R16Sscaled";
19004 case Format::eR16Uint: return "R16Uint";
19005 case Format::eR16Sint: return "R16Sint";
19006 case Format::eR16Sfloat: return "R16Sfloat";
19007 case Format::eR16G16Unorm: return "R16G16Unorm";
19008 case Format::eR16G16Snorm: return "R16G16Snorm";
19009 case Format::eR16G16Uscaled: return "R16G16Uscaled";
19010 case Format::eR16G16Sscaled: return "R16G16Sscaled";
19011 case Format::eR16G16Uint: return "R16G16Uint";
19012 case Format::eR16G16Sint: return "R16G16Sint";
19013 case Format::eR16G16Sfloat: return "R16G16Sfloat";
19014 case Format::eR16G16B16Unorm: return "R16G16B16Unorm";
19015 case Format::eR16G16B16Snorm: return "R16G16B16Snorm";
19016 case Format::eR16G16B16Uscaled: return "R16G16B16Uscaled";
19017 case Format::eR16G16B16Sscaled: return "R16G16B16Sscaled";
19018 case Format::eR16G16B16Uint: return "R16G16B16Uint";
19019 case Format::eR16G16B16Sint: return "R16G16B16Sint";
19020 case Format::eR16G16B16Sfloat: return "R16G16B16Sfloat";
19021 case Format::eR16G16B16A16Unorm: return "R16G16B16A16Unorm";
19022 case Format::eR16G16B16A16Snorm: return "R16G16B16A16Snorm";
19023 case Format::eR16G16B16A16Uscaled: return "R16G16B16A16Uscaled";
19024 case Format::eR16G16B16A16Sscaled: return "R16G16B16A16Sscaled";
19025 case Format::eR16G16B16A16Uint: return "R16G16B16A16Uint";
19026 case Format::eR16G16B16A16Sint: return "R16G16B16A16Sint";
19027 case Format::eR16G16B16A16Sfloat: return "R16G16B16A16Sfloat";
19028 case Format::eR32Uint: return "R32Uint";
19029 case Format::eR32Sint: return "R32Sint";
19030 case Format::eR32Sfloat: return "R32Sfloat";
19031 case Format::eR32G32Uint: return "R32G32Uint";
19032 case Format::eR32G32Sint: return "R32G32Sint";
19033 case Format::eR32G32Sfloat: return "R32G32Sfloat";
19034 case Format::eR32G32B32Uint: return "R32G32B32Uint";
19035 case Format::eR32G32B32Sint: return "R32G32B32Sint";
19036 case Format::eR32G32B32Sfloat: return "R32G32B32Sfloat";
19037 case Format::eR32G32B32A32Uint: return "R32G32B32A32Uint";
19038 case Format::eR32G32B32A32Sint: return "R32G32B32A32Sint";
19039 case Format::eR32G32B32A32Sfloat: return "R32G32B32A32Sfloat";
19040 case Format::eR64Uint: return "R64Uint";
19041 case Format::eR64Sint: return "R64Sint";
19042 case Format::eR64Sfloat: return "R64Sfloat";
19043 case Format::eR64G64Uint: return "R64G64Uint";
19044 case Format::eR64G64Sint: return "R64G64Sint";
19045 case Format::eR64G64Sfloat: return "R64G64Sfloat";
19046 case Format::eR64G64B64Uint: return "R64G64B64Uint";
19047 case Format::eR64G64B64Sint: return "R64G64B64Sint";
19048 case Format::eR64G64B64Sfloat: return "R64G64B64Sfloat";
19049 case Format::eR64G64B64A64Uint: return "R64G64B64A64Uint";
19050 case Format::eR64G64B64A64Sint: return "R64G64B64A64Sint";
19051 case Format::eR64G64B64A64Sfloat: return "R64G64B64A64Sfloat";
19052 case Format::eB10G11R11UfloatPack32: return "B10G11R11UfloatPack32";
19053 case Format::eE5B9G9R9UfloatPack32: return "E5B9G9R9UfloatPack32";
19054 case Format::eD16Unorm: return "D16Unorm";
19055 case Format::eX8D24UnormPack32: return "X8D24UnormPack32";
19056 case Format::eD32Sfloat: return "D32Sfloat";
19057 case Format::eS8Uint: return "S8Uint";
19058 case Format::eD16UnormS8Uint: return "D16UnormS8Uint";
19059 case Format::eD24UnormS8Uint: return "D24UnormS8Uint";
19060 case Format::eD32SfloatS8Uint: return "D32SfloatS8Uint";
19061 case Format::eBc1RgbUnormBlock: return "Bc1RgbUnormBlock";
19062 case Format::eBc1RgbSrgbBlock: return "Bc1RgbSrgbBlock";
19063 case Format::eBc1RgbaUnormBlock: return "Bc1RgbaUnormBlock";
19064 case Format::eBc1RgbaSrgbBlock: return "Bc1RgbaSrgbBlock";
19065 case Format::eBc2UnormBlock: return "Bc2UnormBlock";
19066 case Format::eBc2SrgbBlock: return "Bc2SrgbBlock";
19067 case Format::eBc3UnormBlock: return "Bc3UnormBlock";
19068 case Format::eBc3SrgbBlock: return "Bc3SrgbBlock";
19069 case Format::eBc4UnormBlock: return "Bc4UnormBlock";
19070 case Format::eBc4SnormBlock: return "Bc4SnormBlock";
19071 case Format::eBc5UnormBlock: return "Bc5UnormBlock";
19072 case Format::eBc5SnormBlock: return "Bc5SnormBlock";
19073 case Format::eBc6HUfloatBlock: return "Bc6HUfloatBlock";
19074 case Format::eBc6HSfloatBlock: return "Bc6HSfloatBlock";
19075 case Format::eBc7UnormBlock: return "Bc7UnormBlock";
19076 case Format::eBc7SrgbBlock: return "Bc7SrgbBlock";
19077 case Format::eEtc2R8G8B8UnormBlock: return "Etc2R8G8B8UnormBlock";
19078 case Format::eEtc2R8G8B8SrgbBlock: return "Etc2R8G8B8SrgbBlock";
19079 case Format::eEtc2R8G8B8A1UnormBlock: return "Etc2R8G8B8A1UnormBlock";
19080 case Format::eEtc2R8G8B8A1SrgbBlock: return "Etc2R8G8B8A1SrgbBlock";
19081 case Format::eEtc2R8G8B8A8UnormBlock: return "Etc2R8G8B8A8UnormBlock";
19082 case Format::eEtc2R8G8B8A8SrgbBlock: return "Etc2R8G8B8A8SrgbBlock";
19083 case Format::eEacR11UnormBlock: return "EacR11UnormBlock";
19084 case Format::eEacR11SnormBlock: return "EacR11SnormBlock";
19085 case Format::eEacR11G11UnormBlock: return "EacR11G11UnormBlock";
19086 case Format::eEacR11G11SnormBlock: return "EacR11G11SnormBlock";
19087 case Format::eAstc4x4UnormBlock: return "Astc4x4UnormBlock";
19088 case Format::eAstc4x4SrgbBlock: return "Astc4x4SrgbBlock";
19089 case Format::eAstc5x4UnormBlock: return "Astc5x4UnormBlock";
19090 case Format::eAstc5x4SrgbBlock: return "Astc5x4SrgbBlock";
19091 case Format::eAstc5x5UnormBlock: return "Astc5x5UnormBlock";
19092 case Format::eAstc5x5SrgbBlock: return "Astc5x5SrgbBlock";
19093 case Format::eAstc6x5UnormBlock: return "Astc6x5UnormBlock";
19094 case Format::eAstc6x5SrgbBlock: return "Astc6x5SrgbBlock";
19095 case Format::eAstc6x6UnormBlock: return "Astc6x6UnormBlock";
19096 case Format::eAstc6x6SrgbBlock: return "Astc6x6SrgbBlock";
19097 case Format::eAstc8x5UnormBlock: return "Astc8x5UnormBlock";
19098 case Format::eAstc8x5SrgbBlock: return "Astc8x5SrgbBlock";
19099 case Format::eAstc8x6UnormBlock: return "Astc8x6UnormBlock";
19100 case Format::eAstc8x6SrgbBlock: return "Astc8x6SrgbBlock";
19101 case Format::eAstc8x8UnormBlock: return "Astc8x8UnormBlock";
19102 case Format::eAstc8x8SrgbBlock: return "Astc8x8SrgbBlock";
19103 case Format::eAstc10x5UnormBlock: return "Astc10x5UnormBlock";
19104 case Format::eAstc10x5SrgbBlock: return "Astc10x5SrgbBlock";
19105 case Format::eAstc10x6UnormBlock: return "Astc10x6UnormBlock";
19106 case Format::eAstc10x6SrgbBlock: return "Astc10x6SrgbBlock";
19107 case Format::eAstc10x8UnormBlock: return "Astc10x8UnormBlock";
19108 case Format::eAstc10x8SrgbBlock: return "Astc10x8SrgbBlock";
19109 case Format::eAstc10x10UnormBlock: return "Astc10x10UnormBlock";
19110 case Format::eAstc10x10SrgbBlock: return "Astc10x10SrgbBlock";
19111 case Format::eAstc12x10UnormBlock: return "Astc12x10UnormBlock";
19112 case Format::eAstc12x10SrgbBlock: return "Astc12x10SrgbBlock";
19113 case Format::eAstc12x12UnormBlock: return "Astc12x12UnormBlock";
19114 case Format::eAstc12x12SrgbBlock: return "Astc12x12SrgbBlock";
Lenny Komowebf33162016-08-26 14:10:08 -060019115 case Format::ePvrtc12BppUnormBlockIMG: return "Pvrtc12BppUnormBlockIMG";
19116 case Format::ePvrtc14BppUnormBlockIMG: return "Pvrtc14BppUnormBlockIMG";
19117 case Format::ePvrtc22BppUnormBlockIMG: return "Pvrtc22BppUnormBlockIMG";
19118 case Format::ePvrtc24BppUnormBlockIMG: return "Pvrtc24BppUnormBlockIMG";
19119 case Format::ePvrtc12BppSrgbBlockIMG: return "Pvrtc12BppSrgbBlockIMG";
19120 case Format::ePvrtc14BppSrgbBlockIMG: return "Pvrtc14BppSrgbBlockIMG";
19121 case Format::ePvrtc22BppSrgbBlockIMG: return "Pvrtc22BppSrgbBlockIMG";
19122 case Format::ePvrtc24BppSrgbBlockIMG: return "Pvrtc24BppSrgbBlockIMG";
Lenny Komowbed9b5c2016-08-11 11:23:15 -060019123 default: return "invalid";
19124 }
19125 }
19126
19127 inline std::string to_string(StructureType value)
19128 {
19129 switch (value)
19130 {
19131 case StructureType::eApplicationInfo: return "ApplicationInfo";
19132 case StructureType::eInstanceCreateInfo: return "InstanceCreateInfo";
19133 case StructureType::eDeviceQueueCreateInfo: return "DeviceQueueCreateInfo";
19134 case StructureType::eDeviceCreateInfo: return "DeviceCreateInfo";
19135 case StructureType::eSubmitInfo: return "SubmitInfo";
19136 case StructureType::eMemoryAllocateInfo: return "MemoryAllocateInfo";
19137 case StructureType::eMappedMemoryRange: return "MappedMemoryRange";
19138 case StructureType::eBindSparseInfo: return "BindSparseInfo";
19139 case StructureType::eFenceCreateInfo: return "FenceCreateInfo";
19140 case StructureType::eSemaphoreCreateInfo: return "SemaphoreCreateInfo";
19141 case StructureType::eEventCreateInfo: return "EventCreateInfo";
19142 case StructureType::eQueryPoolCreateInfo: return "QueryPoolCreateInfo";
19143 case StructureType::eBufferCreateInfo: return "BufferCreateInfo";
19144 case StructureType::eBufferViewCreateInfo: return "BufferViewCreateInfo";
19145 case StructureType::eImageCreateInfo: return "ImageCreateInfo";
19146 case StructureType::eImageViewCreateInfo: return "ImageViewCreateInfo";
19147 case StructureType::eShaderModuleCreateInfo: return "ShaderModuleCreateInfo";
19148 case StructureType::ePipelineCacheCreateInfo: return "PipelineCacheCreateInfo";
19149 case StructureType::ePipelineShaderStageCreateInfo: return "PipelineShaderStageCreateInfo";
19150 case StructureType::ePipelineVertexInputStateCreateInfo: return "PipelineVertexInputStateCreateInfo";
19151 case StructureType::ePipelineInputAssemblyStateCreateInfo: return "PipelineInputAssemblyStateCreateInfo";
19152 case StructureType::ePipelineTessellationStateCreateInfo: return "PipelineTessellationStateCreateInfo";
19153 case StructureType::ePipelineViewportStateCreateInfo: return "PipelineViewportStateCreateInfo";
19154 case StructureType::ePipelineRasterizationStateCreateInfo: return "PipelineRasterizationStateCreateInfo";
19155 case StructureType::ePipelineMultisampleStateCreateInfo: return "PipelineMultisampleStateCreateInfo";
19156 case StructureType::ePipelineDepthStencilStateCreateInfo: return "PipelineDepthStencilStateCreateInfo";
19157 case StructureType::ePipelineColorBlendStateCreateInfo: return "PipelineColorBlendStateCreateInfo";
19158 case StructureType::ePipelineDynamicStateCreateInfo: return "PipelineDynamicStateCreateInfo";
19159 case StructureType::eGraphicsPipelineCreateInfo: return "GraphicsPipelineCreateInfo";
19160 case StructureType::eComputePipelineCreateInfo: return "ComputePipelineCreateInfo";
19161 case StructureType::ePipelineLayoutCreateInfo: return "PipelineLayoutCreateInfo";
19162 case StructureType::eSamplerCreateInfo: return "SamplerCreateInfo";
19163 case StructureType::eDescriptorSetLayoutCreateInfo: return "DescriptorSetLayoutCreateInfo";
19164 case StructureType::eDescriptorPoolCreateInfo: return "DescriptorPoolCreateInfo";
19165 case StructureType::eDescriptorSetAllocateInfo: return "DescriptorSetAllocateInfo";
19166 case StructureType::eWriteDescriptorSet: return "WriteDescriptorSet";
19167 case StructureType::eCopyDescriptorSet: return "CopyDescriptorSet";
19168 case StructureType::eFramebufferCreateInfo: return "FramebufferCreateInfo";
19169 case StructureType::eRenderPassCreateInfo: return "RenderPassCreateInfo";
19170 case StructureType::eCommandPoolCreateInfo: return "CommandPoolCreateInfo";
19171 case StructureType::eCommandBufferAllocateInfo: return "CommandBufferAllocateInfo";
19172 case StructureType::eCommandBufferInheritanceInfo: return "CommandBufferInheritanceInfo";
19173 case StructureType::eCommandBufferBeginInfo: return "CommandBufferBeginInfo";
19174 case StructureType::eRenderPassBeginInfo: return "RenderPassBeginInfo";
19175 case StructureType::eBufferMemoryBarrier: return "BufferMemoryBarrier";
19176 case StructureType::eImageMemoryBarrier: return "ImageMemoryBarrier";
19177 case StructureType::eMemoryBarrier: return "MemoryBarrier";
19178 case StructureType::eLoaderInstanceCreateInfo: return "LoaderInstanceCreateInfo";
19179 case StructureType::eLoaderDeviceCreateInfo: return "LoaderDeviceCreateInfo";
19180 case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR";
19181 case StructureType::ePresentInfoKHR: return "PresentInfoKHR";
19182 case StructureType::eDisplayModeCreateInfoKHR: return "DisplayModeCreateInfoKHR";
19183 case StructureType::eDisplaySurfaceCreateInfoKHR: return "DisplaySurfaceCreateInfoKHR";
19184 case StructureType::eDisplayPresentInfoKHR: return "DisplayPresentInfoKHR";
19185 case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR";
19186 case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR";
19187 case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR";
19188 case StructureType::eMirSurfaceCreateInfoKHR: return "MirSurfaceCreateInfoKHR";
19189 case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR";
19190 case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR";
19191 case StructureType::eDebugReportCallbackCreateInfoEXT: return "DebugReportCallbackCreateInfoEXT";
19192 case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD";
19193 case StructureType::eDebugMarkerObjectNameInfoEXT: return "DebugMarkerObjectNameInfoEXT";
19194 case StructureType::eDebugMarkerObjectTagInfoEXT: return "DebugMarkerObjectTagInfoEXT";
19195 case StructureType::eDebugMarkerMarkerInfoEXT: return "DebugMarkerMarkerInfoEXT";
19196 case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV";
19197 case StructureType::eDedicatedAllocationBufferCreateInfoNV: return "DedicatedAllocationBufferCreateInfoNV";
19198 case StructureType::eDedicatedAllocationMemoryAllocateInfoNV: return "DedicatedAllocationMemoryAllocateInfoNV";
Lenny Komow6501c122016-08-31 15:03:49 -060019199 case StructureType::eExternalMemoryImageCreateInfoNV: return "ExternalMemoryImageCreateInfoNV";
19200 case StructureType::eExportMemoryAllocateInfoNV: return "ExportMemoryAllocateInfoNV";
19201 case StructureType::eImportMemoryWin32HandleInfoNV: return "ImportMemoryWin32HandleInfoNV";
19202 case StructureType::eExportMemoryWin32HandleInfoNV: return "ExportMemoryWin32HandleInfoNV";
19203 case StructureType::eWin32KeyedMutexAcquireReleaseInfoNV: return "Win32KeyedMutexAcquireReleaseInfoNV";
Lenny Komow68432d72016-09-29 14:16:59 -060019204 case StructureType::eValidationFlagsEXT: return "ValidationFlagsEXT";
Lenny Komowbed9b5c2016-08-11 11:23:15 -060019205 default: return "invalid";
19206 }
19207 }
19208
19209 inline std::string to_string(SubpassContents value)
19210 {
19211 switch (value)
19212 {
19213 case SubpassContents::eInline: return "Inline";
19214 case SubpassContents::eSecondaryCommandBuffers: return "SecondaryCommandBuffers";
19215 default: return "invalid";
19216 }
19217 }
19218
19219 inline std::string to_string(DynamicState value)
19220 {
19221 switch (value)
19222 {
19223 case DynamicState::eViewport: return "Viewport";
19224 case DynamicState::eScissor: return "Scissor";
19225 case DynamicState::eLineWidth: return "LineWidth";
19226 case DynamicState::eDepthBias: return "DepthBias";
19227 case DynamicState::eBlendConstants: return "BlendConstants";
19228 case DynamicState::eDepthBounds: return "DepthBounds";
19229 case DynamicState::eStencilCompareMask: return "StencilCompareMask";
19230 case DynamicState::eStencilWriteMask: return "StencilWriteMask";
19231 case DynamicState::eStencilReference: return "StencilReference";
19232 default: return "invalid";
19233 }
19234 }
19235
19236 inline std::string to_string(QueueFlagBits value)
19237 {
19238 switch (value)
19239 {
19240 case QueueFlagBits::eGraphics: return "Graphics";
19241 case QueueFlagBits::eCompute: return "Compute";
19242 case QueueFlagBits::eTransfer: return "Transfer";
19243 case QueueFlagBits::eSparseBinding: return "SparseBinding";
19244 default: return "invalid";
19245 }
19246 }
19247
19248 inline std::string to_string(QueueFlags value)
19249 {
19250 if (!value) return "{}";
19251 std::string result;
19252 if (value & QueueFlagBits::eGraphics) result += "Graphics | ";
19253 if (value & QueueFlagBits::eCompute) result += "Compute | ";
19254 if (value & QueueFlagBits::eTransfer) result += "Transfer | ";
19255 if (value & QueueFlagBits::eSparseBinding) result += "SparseBinding | ";
19256 return "{" + result.substr(0, result.size() - 3) + "}";
19257 }
19258
19259 inline std::string to_string(MemoryPropertyFlagBits value)
19260 {
19261 switch (value)
19262 {
19263 case MemoryPropertyFlagBits::eDeviceLocal: return "DeviceLocal";
19264 case MemoryPropertyFlagBits::eHostVisible: return "HostVisible";
19265 case MemoryPropertyFlagBits::eHostCoherent: return "HostCoherent";
19266 case MemoryPropertyFlagBits::eHostCached: return "HostCached";
19267 case MemoryPropertyFlagBits::eLazilyAllocated: return "LazilyAllocated";
19268 default: return "invalid";
19269 }
19270 }
19271
19272 inline std::string to_string(MemoryPropertyFlags value)
19273 {
19274 if (!value) return "{}";
19275 std::string result;
19276 if (value & MemoryPropertyFlagBits::eDeviceLocal) result += "DeviceLocal | ";
19277 if (value & MemoryPropertyFlagBits::eHostVisible) result += "HostVisible | ";
19278 if (value & MemoryPropertyFlagBits::eHostCoherent) result += "HostCoherent | ";
19279 if (value & MemoryPropertyFlagBits::eHostCached) result += "HostCached | ";
19280 if (value & MemoryPropertyFlagBits::eLazilyAllocated) result += "LazilyAllocated | ";
19281 return "{" + result.substr(0, result.size() - 3) + "}";
19282 }
19283
19284 inline std::string to_string(MemoryHeapFlagBits value)
19285 {
19286 switch (value)
19287 {
19288 case MemoryHeapFlagBits::eDeviceLocal: return "DeviceLocal";
19289 default: return "invalid";
19290 }
19291 }
19292
19293 inline std::string to_string(MemoryHeapFlags value)
19294 {
19295 if (!value) return "{}";
19296 std::string result;
19297 if (value & MemoryHeapFlagBits::eDeviceLocal) result += "DeviceLocal | ";
19298 return "{" + result.substr(0, result.size() - 3) + "}";
19299 }
19300
19301 inline std::string to_string(AccessFlagBits value)
19302 {
19303 switch (value)
19304 {
19305 case AccessFlagBits::eIndirectCommandRead: return "IndirectCommandRead";
19306 case AccessFlagBits::eIndexRead: return "IndexRead";
19307 case AccessFlagBits::eVertexAttributeRead: return "VertexAttributeRead";
19308 case AccessFlagBits::eUniformRead: return "UniformRead";
19309 case AccessFlagBits::eInputAttachmentRead: return "InputAttachmentRead";
19310 case AccessFlagBits::eShaderRead: return "ShaderRead";
19311 case AccessFlagBits::eShaderWrite: return "ShaderWrite";
19312 case AccessFlagBits::eColorAttachmentRead: return "ColorAttachmentRead";
19313 case AccessFlagBits::eColorAttachmentWrite: return "ColorAttachmentWrite";
19314 case AccessFlagBits::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
19315 case AccessFlagBits::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
19316 case AccessFlagBits::eTransferRead: return "TransferRead";
19317 case AccessFlagBits::eTransferWrite: return "TransferWrite";
19318 case AccessFlagBits::eHostRead: return "HostRead";
19319 case AccessFlagBits::eHostWrite: return "HostWrite";
19320 case AccessFlagBits::eMemoryRead: return "MemoryRead";
19321 case AccessFlagBits::eMemoryWrite: return "MemoryWrite";
19322 default: return "invalid";
19323 }
19324 }
19325
19326 inline std::string to_string(AccessFlags value)
19327 {
19328 if (!value) return "{}";
19329 std::string result;
19330 if (value & AccessFlagBits::eIndirectCommandRead) result += "IndirectCommandRead | ";
19331 if (value & AccessFlagBits::eIndexRead) result += "IndexRead | ";
19332 if (value & AccessFlagBits::eVertexAttributeRead) result += "VertexAttributeRead | ";
19333 if (value & AccessFlagBits::eUniformRead) result += "UniformRead | ";
19334 if (value & AccessFlagBits::eInputAttachmentRead) result += "InputAttachmentRead | ";
19335 if (value & AccessFlagBits::eShaderRead) result += "ShaderRead | ";
19336 if (value & AccessFlagBits::eShaderWrite) result += "ShaderWrite | ";
19337 if (value & AccessFlagBits::eColorAttachmentRead) result += "ColorAttachmentRead | ";
19338 if (value & AccessFlagBits::eColorAttachmentWrite) result += "ColorAttachmentWrite | ";
19339 if (value & AccessFlagBits::eDepthStencilAttachmentRead) result += "DepthStencilAttachmentRead | ";
19340 if (value & AccessFlagBits::eDepthStencilAttachmentWrite) result += "DepthStencilAttachmentWrite | ";
19341 if (value & AccessFlagBits::eTransferRead) result += "TransferRead | ";
19342 if (value & AccessFlagBits::eTransferWrite) result += "TransferWrite | ";
19343 if (value & AccessFlagBits::eHostRead) result += "HostRead | ";
19344 if (value & AccessFlagBits::eHostWrite) result += "HostWrite | ";
19345 if (value & AccessFlagBits::eMemoryRead) result += "MemoryRead | ";
19346 if (value & AccessFlagBits::eMemoryWrite) result += "MemoryWrite | ";
19347 return "{" + result.substr(0, result.size() - 3) + "}";
19348 }
19349
19350 inline std::string to_string(BufferUsageFlagBits value)
19351 {
19352 switch (value)
19353 {
19354 case BufferUsageFlagBits::eTransferSrc: return "TransferSrc";
19355 case BufferUsageFlagBits::eTransferDst: return "TransferDst";
19356 case BufferUsageFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19357 case BufferUsageFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19358 case BufferUsageFlagBits::eUniformBuffer: return "UniformBuffer";
19359 case BufferUsageFlagBits::eStorageBuffer: return "StorageBuffer";
19360 case BufferUsageFlagBits::eIndexBuffer: return "IndexBuffer";
19361 case BufferUsageFlagBits::eVertexBuffer: return "VertexBuffer";
19362 case BufferUsageFlagBits::eIndirectBuffer: return "IndirectBuffer";
19363 default: return "invalid";
19364 }
19365 }
19366
19367 inline std::string to_string(BufferUsageFlags value)
19368 {
19369 if (!value) return "{}";
19370 std::string result;
19371 if (value & BufferUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19372 if (value & BufferUsageFlagBits::eTransferDst) result += "TransferDst | ";
19373 if (value & BufferUsageFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19374 if (value & BufferUsageFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19375 if (value & BufferUsageFlagBits::eUniformBuffer) result += "UniformBuffer | ";
19376 if (value & BufferUsageFlagBits::eStorageBuffer) result += "StorageBuffer | ";
19377 if (value & BufferUsageFlagBits::eIndexBuffer) result += "IndexBuffer | ";
19378 if (value & BufferUsageFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19379 if (value & BufferUsageFlagBits::eIndirectBuffer) result += "IndirectBuffer | ";
19380 return "{" + result.substr(0, result.size() - 3) + "}";
19381 }
19382
19383 inline std::string to_string(BufferCreateFlagBits value)
19384 {
19385 switch (value)
19386 {
19387 case BufferCreateFlagBits::eSparseBinding: return "SparseBinding";
19388 case BufferCreateFlagBits::eSparseResidency: return "SparseResidency";
19389 case BufferCreateFlagBits::eSparseAliased: return "SparseAliased";
19390 default: return "invalid";
19391 }
19392 }
19393
19394 inline std::string to_string(BufferCreateFlags value)
19395 {
19396 if (!value) return "{}";
19397 std::string result;
19398 if (value & BufferCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19399 if (value & BufferCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19400 if (value & BufferCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19401 return "{" + result.substr(0, result.size() - 3) + "}";
19402 }
19403
19404 inline std::string to_string(ShaderStageFlagBits value)
19405 {
19406 switch (value)
19407 {
19408 case ShaderStageFlagBits::eVertex: return "Vertex";
19409 case ShaderStageFlagBits::eTessellationControl: return "TessellationControl";
19410 case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation";
19411 case ShaderStageFlagBits::eGeometry: return "Geometry";
19412 case ShaderStageFlagBits::eFragment: return "Fragment";
19413 case ShaderStageFlagBits::eCompute: return "Compute";
19414 case ShaderStageFlagBits::eAllGraphics: return "AllGraphics";
19415 case ShaderStageFlagBits::eAll: return "All";
19416 default: return "invalid";
19417 }
19418 }
19419
19420 inline std::string to_string(ShaderStageFlags value)
19421 {
19422 if (!value) return "{}";
19423 std::string result;
19424 if (value & ShaderStageFlagBits::eVertex) result += "Vertex | ";
19425 if (value & ShaderStageFlagBits::eTessellationControl) result += "TessellationControl | ";
19426 if (value & ShaderStageFlagBits::eTessellationEvaluation) result += "TessellationEvaluation | ";
19427 if (value & ShaderStageFlagBits::eGeometry) result += "Geometry | ";
19428 if (value & ShaderStageFlagBits::eFragment) result += "Fragment | ";
19429 if (value & ShaderStageFlagBits::eCompute) result += "Compute | ";
19430 if (value & ShaderStageFlagBits::eAllGraphics) result += "AllGraphics | ";
19431 if (value & ShaderStageFlagBits::eAll) result += "All | ";
19432 return "{" + result.substr(0, result.size() - 3) + "}";
19433 }
19434
19435 inline std::string to_string(ImageUsageFlagBits value)
19436 {
19437 switch (value)
19438 {
19439 case ImageUsageFlagBits::eTransferSrc: return "TransferSrc";
19440 case ImageUsageFlagBits::eTransferDst: return "TransferDst";
19441 case ImageUsageFlagBits::eSampled: return "Sampled";
19442 case ImageUsageFlagBits::eStorage: return "Storage";
19443 case ImageUsageFlagBits::eColorAttachment: return "ColorAttachment";
19444 case ImageUsageFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
19445 case ImageUsageFlagBits::eTransientAttachment: return "TransientAttachment";
19446 case ImageUsageFlagBits::eInputAttachment: return "InputAttachment";
19447 default: return "invalid";
19448 }
19449 }
19450
19451 inline std::string to_string(ImageUsageFlags value)
19452 {
19453 if (!value) return "{}";
19454 std::string result;
19455 if (value & ImageUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19456 if (value & ImageUsageFlagBits::eTransferDst) result += "TransferDst | ";
19457 if (value & ImageUsageFlagBits::eSampled) result += "Sampled | ";
19458 if (value & ImageUsageFlagBits::eStorage) result += "Storage | ";
19459 if (value & ImageUsageFlagBits::eColorAttachment) result += "ColorAttachment | ";
19460 if (value & ImageUsageFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
19461 if (value & ImageUsageFlagBits::eTransientAttachment) result += "TransientAttachment | ";
19462 if (value & ImageUsageFlagBits::eInputAttachment) result += "InputAttachment | ";
19463 return "{" + result.substr(0, result.size() - 3) + "}";
19464 }
19465
19466 inline std::string to_string(ImageCreateFlagBits value)
19467 {
19468 switch (value)
19469 {
19470 case ImageCreateFlagBits::eSparseBinding: return "SparseBinding";
19471 case ImageCreateFlagBits::eSparseResidency: return "SparseResidency";
19472 case ImageCreateFlagBits::eSparseAliased: return "SparseAliased";
19473 case ImageCreateFlagBits::eMutableFormat: return "MutableFormat";
19474 case ImageCreateFlagBits::eCubeCompatible: return "CubeCompatible";
19475 default: return "invalid";
19476 }
19477 }
19478
19479 inline std::string to_string(ImageCreateFlags value)
19480 {
19481 if (!value) return "{}";
19482 std::string result;
19483 if (value & ImageCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19484 if (value & ImageCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19485 if (value & ImageCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19486 if (value & ImageCreateFlagBits::eMutableFormat) result += "MutableFormat | ";
19487 if (value & ImageCreateFlagBits::eCubeCompatible) result += "CubeCompatible | ";
19488 return "{" + result.substr(0, result.size() - 3) + "}";
19489 }
19490
19491 inline std::string to_string(PipelineCreateFlagBits value)
19492 {
19493 switch (value)
19494 {
19495 case PipelineCreateFlagBits::eDisableOptimization: return "DisableOptimization";
19496 case PipelineCreateFlagBits::eAllowDerivatives: return "AllowDerivatives";
19497 case PipelineCreateFlagBits::eDerivative: return "Derivative";
19498 default: return "invalid";
19499 }
19500 }
19501
19502 inline std::string to_string(PipelineCreateFlags value)
19503 {
19504 if (!value) return "{}";
19505 std::string result;
19506 if (value & PipelineCreateFlagBits::eDisableOptimization) result += "DisableOptimization | ";
19507 if (value & PipelineCreateFlagBits::eAllowDerivatives) result += "AllowDerivatives | ";
19508 if (value & PipelineCreateFlagBits::eDerivative) result += "Derivative | ";
19509 return "{" + result.substr(0, result.size() - 3) + "}";
19510 }
19511
19512 inline std::string to_string(ColorComponentFlagBits value)
19513 {
19514 switch (value)
19515 {
19516 case ColorComponentFlagBits::eR: return "R";
19517 case ColorComponentFlagBits::eG: return "G";
19518 case ColorComponentFlagBits::eB: return "B";
19519 case ColorComponentFlagBits::eA: return "A";
19520 default: return "invalid";
19521 }
19522 }
19523
19524 inline std::string to_string(ColorComponentFlags value)
19525 {
19526 if (!value) return "{}";
19527 std::string result;
19528 if (value & ColorComponentFlagBits::eR) result += "R | ";
19529 if (value & ColorComponentFlagBits::eG) result += "G | ";
19530 if (value & ColorComponentFlagBits::eB) result += "B | ";
19531 if (value & ColorComponentFlagBits::eA) result += "A | ";
19532 return "{" + result.substr(0, result.size() - 3) + "}";
19533 }
19534
19535 inline std::string to_string(FenceCreateFlagBits value)
19536 {
19537 switch (value)
19538 {
19539 case FenceCreateFlagBits::eSignaled: return "Signaled";
19540 default: return "invalid";
19541 }
19542 }
19543
19544 inline std::string to_string(FenceCreateFlags value)
19545 {
19546 if (!value) return "{}";
19547 std::string result;
19548 if (value & FenceCreateFlagBits::eSignaled) result += "Signaled | ";
19549 return "{" + result.substr(0, result.size() - 3) + "}";
19550 }
19551
19552 inline std::string to_string(FormatFeatureFlagBits value)
19553 {
19554 switch (value)
19555 {
19556 case FormatFeatureFlagBits::eSampledImage: return "SampledImage";
19557 case FormatFeatureFlagBits::eStorageImage: return "StorageImage";
19558 case FormatFeatureFlagBits::eStorageImageAtomic: return "StorageImageAtomic";
19559 case FormatFeatureFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19560 case FormatFeatureFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19561 case FormatFeatureFlagBits::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic";
19562 case FormatFeatureFlagBits::eVertexBuffer: return "VertexBuffer";
19563 case FormatFeatureFlagBits::eColorAttachment: return "ColorAttachment";
19564 case FormatFeatureFlagBits::eColorAttachmentBlend: return "ColorAttachmentBlend";
19565 case FormatFeatureFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
19566 case FormatFeatureFlagBits::eBlitSrc: return "BlitSrc";
19567 case FormatFeatureFlagBits::eBlitDst: return "BlitDst";
19568 case FormatFeatureFlagBits::eSampledImageFilterLinear: return "SampledImageFilterLinear";
19569 case FormatFeatureFlagBits::eSampledImageFilterCubicIMG: return "SampledImageFilterCubicIMG";
19570 default: return "invalid";
19571 }
19572 }
19573
19574 inline std::string to_string(FormatFeatureFlags value)
19575 {
19576 if (!value) return "{}";
19577 std::string result;
19578 if (value & FormatFeatureFlagBits::eSampledImage) result += "SampledImage | ";
19579 if (value & FormatFeatureFlagBits::eStorageImage) result += "StorageImage | ";
19580 if (value & FormatFeatureFlagBits::eStorageImageAtomic) result += "StorageImageAtomic | ";
19581 if (value & FormatFeatureFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19582 if (value & FormatFeatureFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19583 if (value & FormatFeatureFlagBits::eStorageTexelBufferAtomic) result += "StorageTexelBufferAtomic | ";
19584 if (value & FormatFeatureFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19585 if (value & FormatFeatureFlagBits::eColorAttachment) result += "ColorAttachment | ";
19586 if (value & FormatFeatureFlagBits::eColorAttachmentBlend) result += "ColorAttachmentBlend | ";
19587 if (value & FormatFeatureFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
19588 if (value & FormatFeatureFlagBits::eBlitSrc) result += "BlitSrc | ";
19589 if (value & FormatFeatureFlagBits::eBlitDst) result += "BlitDst | ";
19590 if (value & FormatFeatureFlagBits::eSampledImageFilterLinear) result += "SampledImageFilterLinear | ";
19591 if (value & FormatFeatureFlagBits::eSampledImageFilterCubicIMG) result += "SampledImageFilterCubicIMG | ";
19592 return "{" + result.substr(0, result.size() - 3) + "}";
19593 }
19594
19595 inline std::string to_string(QueryControlFlagBits value)
19596 {
19597 switch (value)
19598 {
19599 case QueryControlFlagBits::ePrecise: return "Precise";
19600 default: return "invalid";
19601 }
19602 }
19603
19604 inline std::string to_string(QueryControlFlags value)
19605 {
19606 if (!value) return "{}";
19607 std::string result;
19608 if (value & QueryControlFlagBits::ePrecise) result += "Precise | ";
19609 return "{" + result.substr(0, result.size() - 3) + "}";
19610 }
19611
19612 inline std::string to_string(QueryResultFlagBits value)
19613 {
19614 switch (value)
19615 {
19616 case QueryResultFlagBits::e64: return "64";
19617 case QueryResultFlagBits::eWait: return "Wait";
19618 case QueryResultFlagBits::eWithAvailability: return "WithAvailability";
19619 case QueryResultFlagBits::ePartial: return "Partial";
19620 default: return "invalid";
19621 }
19622 }
19623
19624 inline std::string to_string(QueryResultFlags value)
19625 {
19626 if (!value) return "{}";
19627 std::string result;
19628 if (value & QueryResultFlagBits::e64) result += "64 | ";
19629 if (value & QueryResultFlagBits::eWait) result += "Wait | ";
19630 if (value & QueryResultFlagBits::eWithAvailability) result += "WithAvailability | ";
19631 if (value & QueryResultFlagBits::ePartial) result += "Partial | ";
19632 return "{" + result.substr(0, result.size() - 3) + "}";
19633 }
19634
19635 inline std::string to_string(CommandBufferUsageFlagBits value)
19636 {
19637 switch (value)
19638 {
19639 case CommandBufferUsageFlagBits::eOneTimeSubmit: return "OneTimeSubmit";
19640 case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue";
19641 case CommandBufferUsageFlagBits::eSimultaneousUse: return "SimultaneousUse";
19642 default: return "invalid";
19643 }
19644 }
19645
19646 inline std::string to_string(CommandBufferUsageFlags value)
19647 {
19648 if (!value) return "{}";
19649 std::string result;
19650 if (value & CommandBufferUsageFlagBits::eOneTimeSubmit) result += "OneTimeSubmit | ";
19651 if (value & CommandBufferUsageFlagBits::eRenderPassContinue) result += "RenderPassContinue | ";
19652 if (value & CommandBufferUsageFlagBits::eSimultaneousUse) result += "SimultaneousUse | ";
19653 return "{" + result.substr(0, result.size() - 3) + "}";
19654 }
19655
19656 inline std::string to_string(QueryPipelineStatisticFlagBits value)
19657 {
19658 switch (value)
19659 {
19660 case QueryPipelineStatisticFlagBits::eInputAssemblyVertices: return "InputAssemblyVertices";
19661 case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives: return "InputAssemblyPrimitives";
19662 case QueryPipelineStatisticFlagBits::eVertexShaderInvocations: return "VertexShaderInvocations";
19663 case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations: return "GeometryShaderInvocations";
19664 case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives: return "GeometryShaderPrimitives";
19665 case QueryPipelineStatisticFlagBits::eClippingInvocations: return "ClippingInvocations";
19666 case QueryPipelineStatisticFlagBits::eClippingPrimitives: return "ClippingPrimitives";
19667 case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations: return "FragmentShaderInvocations";
19668 case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches: return "TessellationControlShaderPatches";
19669 case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations";
19670 case QueryPipelineStatisticFlagBits::eComputeShaderInvocations: return "ComputeShaderInvocations";
19671 default: return "invalid";
19672 }
19673 }
19674
19675 inline std::string to_string(QueryPipelineStatisticFlags value)
19676 {
19677 if (!value) return "{}";
19678 std::string result;
19679 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices) result += "InputAssemblyVertices | ";
19680 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives) result += "InputAssemblyPrimitives | ";
19681 if (value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations) result += "VertexShaderInvocations | ";
19682 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations) result += "GeometryShaderInvocations | ";
19683 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives) result += "GeometryShaderPrimitives | ";
19684 if (value & QueryPipelineStatisticFlagBits::eClippingInvocations) result += "ClippingInvocations | ";
19685 if (value & QueryPipelineStatisticFlagBits::eClippingPrimitives) result += "ClippingPrimitives | ";
19686 if (value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations) result += "FragmentShaderInvocations | ";
19687 if (value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches) result += "TessellationControlShaderPatches | ";
19688 if (value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations) result += "TessellationEvaluationShaderInvocations | ";
19689 if (value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations) result += "ComputeShaderInvocations | ";
19690 return "{" + result.substr(0, result.size() - 3) + "}";
19691 }
19692
19693 inline std::string to_string(ImageAspectFlagBits value)
19694 {
19695 switch (value)
19696 {
19697 case ImageAspectFlagBits::eColor: return "Color";
19698 case ImageAspectFlagBits::eDepth: return "Depth";
19699 case ImageAspectFlagBits::eStencil: return "Stencil";
19700 case ImageAspectFlagBits::eMetadata: return "Metadata";
19701 default: return "invalid";
19702 }
19703 }
19704
19705 inline std::string to_string(ImageAspectFlags value)
19706 {
19707 if (!value) return "{}";
19708 std::string result;
19709 if (value & ImageAspectFlagBits::eColor) result += "Color | ";
19710 if (value & ImageAspectFlagBits::eDepth) result += "Depth | ";
19711 if (value & ImageAspectFlagBits::eStencil) result += "Stencil | ";
19712 if (value & ImageAspectFlagBits::eMetadata) result += "Metadata | ";
19713 return "{" + result.substr(0, result.size() - 3) + "}";
19714 }
19715
19716 inline std::string to_string(SparseImageFormatFlagBits value)
19717 {
19718 switch (value)
19719 {
19720 case SparseImageFormatFlagBits::eSingleMiptail: return "SingleMiptail";
19721 case SparseImageFormatFlagBits::eAlignedMipSize: return "AlignedMipSize";
19722 case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize";
19723 default: return "invalid";
19724 }
19725 }
19726
19727 inline std::string to_string(SparseImageFormatFlags value)
19728 {
19729 if (!value) return "{}";
19730 std::string result;
19731 if (value & SparseImageFormatFlagBits::eSingleMiptail) result += "SingleMiptail | ";
19732 if (value & SparseImageFormatFlagBits::eAlignedMipSize) result += "AlignedMipSize | ";
19733 if (value & SparseImageFormatFlagBits::eNonstandardBlockSize) result += "NonstandardBlockSize | ";
19734 return "{" + result.substr(0, result.size() - 3) + "}";
19735 }
19736
19737 inline std::string to_string(SparseMemoryBindFlagBits value)
19738 {
19739 switch (value)
19740 {
19741 case SparseMemoryBindFlagBits::eMetadata: return "Metadata";
19742 default: return "invalid";
19743 }
19744 }
19745
19746 inline std::string to_string(SparseMemoryBindFlags value)
19747 {
19748 if (!value) return "{}";
19749 std::string result;
19750 if (value & SparseMemoryBindFlagBits::eMetadata) result += "Metadata | ";
19751 return "{" + result.substr(0, result.size() - 3) + "}";
19752 }
19753
19754 inline std::string to_string(PipelineStageFlagBits value)
19755 {
19756 switch (value)
19757 {
19758 case PipelineStageFlagBits::eTopOfPipe: return "TopOfPipe";
19759 case PipelineStageFlagBits::eDrawIndirect: return "DrawIndirect";
19760 case PipelineStageFlagBits::eVertexInput: return "VertexInput";
19761 case PipelineStageFlagBits::eVertexShader: return "VertexShader";
19762 case PipelineStageFlagBits::eTessellationControlShader: return "TessellationControlShader";
19763 case PipelineStageFlagBits::eTessellationEvaluationShader: return "TessellationEvaluationShader";
19764 case PipelineStageFlagBits::eGeometryShader: return "GeometryShader";
19765 case PipelineStageFlagBits::eFragmentShader: return "FragmentShader";
19766 case PipelineStageFlagBits::eEarlyFragmentTests: return "EarlyFragmentTests";
19767 case PipelineStageFlagBits::eLateFragmentTests: return "LateFragmentTests";
19768 case PipelineStageFlagBits::eColorAttachmentOutput: return "ColorAttachmentOutput";
19769 case PipelineStageFlagBits::eComputeShader: return "ComputeShader";
19770 case PipelineStageFlagBits::eTransfer: return "Transfer";
19771 case PipelineStageFlagBits::eBottomOfPipe: return "BottomOfPipe";
19772 case PipelineStageFlagBits::eHost: return "Host";
19773 case PipelineStageFlagBits::eAllGraphics: return "AllGraphics";
19774 case PipelineStageFlagBits::eAllCommands: return "AllCommands";
19775 default: return "invalid";
19776 }
19777 }
19778
19779 inline std::string to_string(PipelineStageFlags value)
19780 {
19781 if (!value) return "{}";
19782 std::string result;
19783 if (value & PipelineStageFlagBits::eTopOfPipe) result += "TopOfPipe | ";
19784 if (value & PipelineStageFlagBits::eDrawIndirect) result += "DrawIndirect | ";
19785 if (value & PipelineStageFlagBits::eVertexInput) result += "VertexInput | ";
19786 if (value & PipelineStageFlagBits::eVertexShader) result += "VertexShader | ";
19787 if (value & PipelineStageFlagBits::eTessellationControlShader) result += "TessellationControlShader | ";
19788 if (value & PipelineStageFlagBits::eTessellationEvaluationShader) result += "TessellationEvaluationShader | ";
19789 if (value & PipelineStageFlagBits::eGeometryShader) result += "GeometryShader | ";
19790 if (value & PipelineStageFlagBits::eFragmentShader) result += "FragmentShader | ";
19791 if (value & PipelineStageFlagBits::eEarlyFragmentTests) result += "EarlyFragmentTests | ";
19792 if (value & PipelineStageFlagBits::eLateFragmentTests) result += "LateFragmentTests | ";
19793 if (value & PipelineStageFlagBits::eColorAttachmentOutput) result += "ColorAttachmentOutput | ";
19794 if (value & PipelineStageFlagBits::eComputeShader) result += "ComputeShader | ";
19795 if (value & PipelineStageFlagBits::eTransfer) result += "Transfer | ";
19796 if (value & PipelineStageFlagBits::eBottomOfPipe) result += "BottomOfPipe | ";
19797 if (value & PipelineStageFlagBits::eHost) result += "Host | ";
19798 if (value & PipelineStageFlagBits::eAllGraphics) result += "AllGraphics | ";
19799 if (value & PipelineStageFlagBits::eAllCommands) result += "AllCommands | ";
19800 return "{" + result.substr(0, result.size() - 3) + "}";
19801 }
19802
19803 inline std::string to_string(CommandPoolCreateFlagBits value)
19804 {
19805 switch (value)
19806 {
19807 case CommandPoolCreateFlagBits::eTransient: return "Transient";
19808 case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer";
19809 default: return "invalid";
19810 }
19811 }
19812
19813 inline std::string to_string(CommandPoolCreateFlags value)
19814 {
19815 if (!value) return "{}";
19816 std::string result;
19817 if (value & CommandPoolCreateFlagBits::eTransient) result += "Transient | ";
19818 if (value & CommandPoolCreateFlagBits::eResetCommandBuffer) result += "ResetCommandBuffer | ";
19819 return "{" + result.substr(0, result.size() - 3) + "}";
19820 }
19821
19822 inline std::string to_string(CommandPoolResetFlagBits value)
19823 {
19824 switch (value)
19825 {
19826 case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources";
19827 default: return "invalid";
19828 }
19829 }
19830
19831 inline std::string to_string(CommandPoolResetFlags value)
19832 {
19833 if (!value) return "{}";
19834 std::string result;
19835 if (value & CommandPoolResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
19836 return "{" + result.substr(0, result.size() - 3) + "}";
19837 }
19838
19839 inline std::string to_string(CommandBufferResetFlagBits value)
19840 {
19841 switch (value)
19842 {
19843 case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources";
19844 default: return "invalid";
19845 }
19846 }
19847
19848 inline std::string to_string(CommandBufferResetFlags value)
19849 {
19850 if (!value) return "{}";
19851 std::string result;
19852 if (value & CommandBufferResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
19853 return "{" + result.substr(0, result.size() - 3) + "}";
19854 }
19855
19856 inline std::string to_string(SampleCountFlagBits value)
19857 {
19858 switch (value)
19859 {
19860 case SampleCountFlagBits::e1: return "1";
19861 case SampleCountFlagBits::e2: return "2";
19862 case SampleCountFlagBits::e4: return "4";
19863 case SampleCountFlagBits::e8: return "8";
19864 case SampleCountFlagBits::e16: return "16";
19865 case SampleCountFlagBits::e32: return "32";
19866 case SampleCountFlagBits::e64: return "64";
19867 default: return "invalid";
19868 }
19869 }
19870
19871 inline std::string to_string(SampleCountFlags value)
19872 {
19873 if (!value) return "{}";
19874 std::string result;
19875 if (value & SampleCountFlagBits::e1) result += "1 | ";
19876 if (value & SampleCountFlagBits::e2) result += "2 | ";
19877 if (value & SampleCountFlagBits::e4) result += "4 | ";
19878 if (value & SampleCountFlagBits::e8) result += "8 | ";
19879 if (value & SampleCountFlagBits::e16) result += "16 | ";
19880 if (value & SampleCountFlagBits::e32) result += "32 | ";
19881 if (value & SampleCountFlagBits::e64) result += "64 | ";
19882 return "{" + result.substr(0, result.size() - 3) + "}";
19883 }
19884
19885 inline std::string to_string(AttachmentDescriptionFlagBits value)
19886 {
19887 switch (value)
19888 {
19889 case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias";
19890 default: return "invalid";
19891 }
19892 }
19893
19894 inline std::string to_string(AttachmentDescriptionFlags value)
19895 {
19896 if (!value) return "{}";
19897 std::string result;
19898 if (value & AttachmentDescriptionFlagBits::eMayAlias) result += "MayAlias | ";
19899 return "{" + result.substr(0, result.size() - 3) + "}";
19900 }
19901
19902 inline std::string to_string(StencilFaceFlagBits value)
19903 {
19904 switch (value)
19905 {
19906 case StencilFaceFlagBits::eFront: return "Front";
19907 case StencilFaceFlagBits::eBack: return "Back";
19908 case StencilFaceFlagBits::eVkStencilFrontAndBack: return "VkStencilFrontAndBack";
19909 default: return "invalid";
19910 }
19911 }
19912
19913 inline std::string to_string(StencilFaceFlags value)
19914 {
19915 if (!value) return "{}";
19916 std::string result;
19917 if (value & StencilFaceFlagBits::eFront) result += "Front | ";
19918 if (value & StencilFaceFlagBits::eBack) result += "Back | ";
19919 if (value & StencilFaceFlagBits::eVkStencilFrontAndBack) result += "VkStencilFrontAndBack | ";
19920 return "{" + result.substr(0, result.size() - 3) + "}";
19921 }
19922
19923 inline std::string to_string(DescriptorPoolCreateFlagBits value)
19924 {
19925 switch (value)
19926 {
19927 case DescriptorPoolCreateFlagBits::eFreeDescriptorSet: return "FreeDescriptorSet";
19928 default: return "invalid";
19929 }
19930 }
19931
19932 inline std::string to_string(DescriptorPoolCreateFlags value)
19933 {
19934 if (!value) return "{}";
19935 std::string result;
19936 if (value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet) result += "FreeDescriptorSet | ";
19937 return "{" + result.substr(0, result.size() - 3) + "}";
19938 }
19939
19940 inline std::string to_string(DependencyFlagBits value)
19941 {
19942 switch (value)
19943 {
19944 case DependencyFlagBits::eByRegion: return "ByRegion";
19945 default: return "invalid";
19946 }
19947 }
19948
19949 inline std::string to_string(DependencyFlags value)
19950 {
19951 if (!value) return "{}";
19952 std::string result;
19953 if (value & DependencyFlagBits::eByRegion) result += "ByRegion | ";
19954 return "{" + result.substr(0, result.size() - 3) + "}";
19955 }
19956
19957 inline std::string to_string(PresentModeKHR value)
19958 {
19959 switch (value)
19960 {
19961 case PresentModeKHR::eImmediate: return "Immediate";
19962 case PresentModeKHR::eMailbox: return "Mailbox";
19963 case PresentModeKHR::eFifo: return "Fifo";
19964 case PresentModeKHR::eFifoRelaxed: return "FifoRelaxed";
19965 default: return "invalid";
19966 }
19967 }
19968
19969 inline std::string to_string(ColorSpaceKHR value)
19970 {
19971 switch (value)
19972 {
19973 case ColorSpaceKHR::eSrgbNonlinear: return "SrgbNonlinear";
19974 default: return "invalid";
19975 }
19976 }
19977
19978 inline std::string to_string(DisplayPlaneAlphaFlagBitsKHR value)
19979 {
19980 switch (value)
19981 {
19982 case DisplayPlaneAlphaFlagBitsKHR::eOpaque: return "Opaque";
19983 case DisplayPlaneAlphaFlagBitsKHR::eGlobal: return "Global";
19984 case DisplayPlaneAlphaFlagBitsKHR::ePerPixel: return "PerPixel";
19985 case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied";
19986 default: return "invalid";
19987 }
19988 }
19989
19990 inline std::string to_string(DisplayPlaneAlphaFlagsKHR value)
19991 {
19992 if (!value) return "{}";
19993 std::string result;
19994 if (value & DisplayPlaneAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
19995 if (value & DisplayPlaneAlphaFlagBitsKHR::eGlobal) result += "Global | ";
19996 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel) result += "PerPixel | ";
19997 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied) result += "PerPixelPremultiplied | ";
19998 return "{" + result.substr(0, result.size() - 3) + "}";
19999 }
20000
20001 inline std::string to_string(CompositeAlphaFlagBitsKHR value)
20002 {
20003 switch (value)
20004 {
20005 case CompositeAlphaFlagBitsKHR::eOpaque: return "Opaque";
20006 case CompositeAlphaFlagBitsKHR::ePreMultiplied: return "PreMultiplied";
20007 case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied";
20008 case CompositeAlphaFlagBitsKHR::eInherit: return "Inherit";
20009 default: return "invalid";
20010 }
20011 }
20012
20013 inline std::string to_string(CompositeAlphaFlagsKHR value)
20014 {
20015 if (!value) return "{}";
20016 std::string result;
20017 if (value & CompositeAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
20018 if (value & CompositeAlphaFlagBitsKHR::ePreMultiplied) result += "PreMultiplied | ";
20019 if (value & CompositeAlphaFlagBitsKHR::ePostMultiplied) result += "PostMultiplied | ";
20020 if (value & CompositeAlphaFlagBitsKHR::eInherit) result += "Inherit | ";
20021 return "{" + result.substr(0, result.size() - 3) + "}";
20022 }
20023
20024 inline std::string to_string(SurfaceTransformFlagBitsKHR value)
20025 {
20026 switch (value)
20027 {
20028 case SurfaceTransformFlagBitsKHR::eIdentity: return "Identity";
20029 case SurfaceTransformFlagBitsKHR::eRotate90: return "Rotate90";
20030 case SurfaceTransformFlagBitsKHR::eRotate180: return "Rotate180";
20031 case SurfaceTransformFlagBitsKHR::eRotate270: return "Rotate270";
20032 case SurfaceTransformFlagBitsKHR::eHorizontalMirror: return "HorizontalMirror";
20033 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90: return "HorizontalMirrorRotate90";
20034 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180";
20035 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270";
20036 case SurfaceTransformFlagBitsKHR::eInherit: return "Inherit";
20037 default: return "invalid";
20038 }
20039 }
20040
20041 inline std::string to_string(SurfaceTransformFlagsKHR value)
20042 {
20043 if (!value) return "{}";
20044 std::string result;
20045 if (value & SurfaceTransformFlagBitsKHR::eIdentity) result += "Identity | ";
20046 if (value & SurfaceTransformFlagBitsKHR::eRotate90) result += "Rotate90 | ";
20047 if (value & SurfaceTransformFlagBitsKHR::eRotate180) result += "Rotate180 | ";
20048 if (value & SurfaceTransformFlagBitsKHR::eRotate270) result += "Rotate270 | ";
20049 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirror) result += "HorizontalMirror | ";
20050 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90) result += "HorizontalMirrorRotate90 | ";
20051 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180) result += "HorizontalMirrorRotate180 | ";
20052 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270) result += "HorizontalMirrorRotate270 | ";
20053 if (value & SurfaceTransformFlagBitsKHR::eInherit) result += "Inherit | ";
20054 return "{" + result.substr(0, result.size() - 3) + "}";
20055 }
20056
20057 inline std::string to_string(DebugReportFlagBitsEXT value)
20058 {
20059 switch (value)
20060 {
20061 case DebugReportFlagBitsEXT::eInformation: return "Information";
20062 case DebugReportFlagBitsEXT::eWarning: return "Warning";
20063 case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning";
20064 case DebugReportFlagBitsEXT::eError: return "Error";
20065 case DebugReportFlagBitsEXT::eDebug: return "Debug";
20066 default: return "invalid";
20067 }
20068 }
20069
20070 inline std::string to_string(DebugReportFlagsEXT value)
20071 {
20072 if (!value) return "{}";
20073 std::string result;
20074 if (value & DebugReportFlagBitsEXT::eInformation) result += "Information | ";
20075 if (value & DebugReportFlagBitsEXT::eWarning) result += "Warning | ";
20076 if (value & DebugReportFlagBitsEXT::ePerformanceWarning) result += "PerformanceWarning | ";
20077 if (value & DebugReportFlagBitsEXT::eError) result += "Error | ";
20078 if (value & DebugReportFlagBitsEXT::eDebug) result += "Debug | ";
20079 return "{" + result.substr(0, result.size() - 3) + "}";
20080 }
20081
20082 inline std::string to_string(DebugReportObjectTypeEXT value)
20083 {
20084 switch (value)
20085 {
20086 case DebugReportObjectTypeEXT::eUnknown: return "Unknown";
20087 case DebugReportObjectTypeEXT::eInstance: return "Instance";
20088 case DebugReportObjectTypeEXT::ePhysicalDevice: return "PhysicalDevice";
20089 case DebugReportObjectTypeEXT::eDevice: return "Device";
20090 case DebugReportObjectTypeEXT::eQueue: return "Queue";
20091 case DebugReportObjectTypeEXT::eSemaphore: return "Semaphore";
20092 case DebugReportObjectTypeEXT::eCommandBuffer: return "CommandBuffer";
20093 case DebugReportObjectTypeEXT::eFence: return "Fence";
20094 case DebugReportObjectTypeEXT::eDeviceMemory: return "DeviceMemory";
20095 case DebugReportObjectTypeEXT::eBuffer: return "Buffer";
20096 case DebugReportObjectTypeEXT::eImage: return "Image";
20097 case DebugReportObjectTypeEXT::eEvent: return "Event";
20098 case DebugReportObjectTypeEXT::eQueryPool: return "QueryPool";
20099 case DebugReportObjectTypeEXT::eBufferView: return "BufferView";
20100 case DebugReportObjectTypeEXT::eImageView: return "ImageView";
20101 case DebugReportObjectTypeEXT::eShaderModule: return "ShaderModule";
20102 case DebugReportObjectTypeEXT::ePipelineCache: return "PipelineCache";
20103 case DebugReportObjectTypeEXT::ePipelineLayout: return "PipelineLayout";
20104 case DebugReportObjectTypeEXT::eRenderPass: return "RenderPass";
20105 case DebugReportObjectTypeEXT::ePipeline: return "Pipeline";
20106 case DebugReportObjectTypeEXT::eDescriptorSetLayout: return "DescriptorSetLayout";
20107 case DebugReportObjectTypeEXT::eSampler: return "Sampler";
20108 case DebugReportObjectTypeEXT::eDescriptorPool: return "DescriptorPool";
20109 case DebugReportObjectTypeEXT::eDescriptorSet: return "DescriptorSet";
20110 case DebugReportObjectTypeEXT::eFramebuffer: return "Framebuffer";
20111 case DebugReportObjectTypeEXT::eCommandPool: return "CommandPool";
20112 case DebugReportObjectTypeEXT::eSurfaceKhr: return "SurfaceKhr";
20113 case DebugReportObjectTypeEXT::eSwapchainKhr: return "SwapchainKhr";
20114 case DebugReportObjectTypeEXT::eDebugReport: return "DebugReport";
20115 default: return "invalid";
20116 }
20117 }
20118
20119 inline std::string to_string(DebugReportErrorEXT value)
20120 {
20121 switch (value)
20122 {
20123 case DebugReportErrorEXT::eNone: return "None";
20124 case DebugReportErrorEXT::eCallbackRef: return "CallbackRef";
20125 default: return "invalid";
20126 }
20127 }
20128
20129 inline std::string to_string(RasterizationOrderAMD value)
20130 {
20131 switch (value)
20132 {
20133 case RasterizationOrderAMD::eStrict: return "Strict";
20134 case RasterizationOrderAMD::eRelaxed: return "Relaxed";
20135 default: return "invalid";
20136 }
20137 }
20138
Lenny Komow6501c122016-08-31 15:03:49 -060020139 inline std::string to_string(ExternalMemoryHandleTypeFlagBitsNV value)
20140 {
20141 switch (value)
20142 {
20143 case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32: return "OpaqueWin32";
20144 case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt: return "OpaqueWin32Kmt";
20145 case ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image: return "D3D11Image";
20146 case ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt: return "D3D11ImageKmt";
20147 default: return "invalid";
20148 }
20149 }
20150
20151 inline std::string to_string(ExternalMemoryHandleTypeFlagsNV value)
20152 {
20153 if (!value) return "{}";
20154 std::string result;
20155 if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32) result += "OpaqueWin32 | ";
20156 if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt) result += "OpaqueWin32Kmt | ";
20157 if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image) result += "D3D11Image | ";
20158 if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt) result += "D3D11ImageKmt | ";
20159 return "{" + result.substr(0, result.size() - 3) + "}";
20160 }
20161
20162 inline std::string to_string(ExternalMemoryFeatureFlagBitsNV value)
20163 {
20164 switch (value)
20165 {
20166 case ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly: return "DedicatedOnly";
20167 case ExternalMemoryFeatureFlagBitsNV::eExportable: return "Exportable";
20168 case ExternalMemoryFeatureFlagBitsNV::eImportable: return "Importable";
20169 default: return "invalid";
20170 }
20171 }
20172
20173 inline std::string to_string(ExternalMemoryFeatureFlagsNV value)
20174 {
20175 if (!value) return "{}";
20176 std::string result;
20177 if (value & ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly) result += "DedicatedOnly | ";
20178 if (value & ExternalMemoryFeatureFlagBitsNV::eExportable) result += "Exportable | ";
20179 if (value & ExternalMemoryFeatureFlagBitsNV::eImportable) result += "Importable | ";
20180 return "{" + result.substr(0, result.size() - 3) + "}";
20181 }
20182
Lenny Komow68432d72016-09-29 14:16:59 -060020183 inline std::string to_string(ValidationCheckEXT value)
20184 {
20185 switch (value)
20186 {
20187 case ValidationCheckEXT::eAll: return "All";
20188 default: return "invalid";
20189 }
20190 }
20191
Lenny Komowbed9b5c2016-08-11 11:23:15 -060020192} // namespace vk
20193
20194#endif