blob: ddcd876984542b5583023bf7ec95bacac75f3e1d [file] [log] [blame]
Lenny Komowbed9b5c2016-08-11 11:23:15 -06001// Copyright (c) 2015-2016 The Khronos Group Inc.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a
4// copy of this software and/or associated documentation files (the
5// "Materials"), to deal in the Materials without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Materials, and to
8// permit persons to whom the Materials are furnished to do so, subject to
9// the following conditions:
10//
11// The above copyright notice and this permission notice shall be included
12// in all copies or substantial portions of the Materials.
13//
14// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
21
22// This header is generated from the Khronos Vulkan XML API Registry.
23
24
25#ifndef VULKAN_HPP
26#define VULKAN_HPP
27
28#include <algorithm>
29#include <array>
30#include <cassert>
31#include <cstdint>
32#include <cstring>
33#include <initializer_list>
34#include <string>
35#include <system_error>
36#include <type_traits>
37#include <vulkan/vulkan.h>
38#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
39# include <memory>
40# include <vector>
41#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
42
Lenny Komow1a3b62b2016-09-07 09:18:38 -060043static_assert( VK_HEADER_VERSION == 26 , "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 {
4117 DisplayPlanePropertiesKHR( DisplayKHR currentDisplay_ = DisplayKHR(), uint32_t currentStackIndex_ = 0 )
4118 : currentDisplay( currentDisplay_ )
4119 , currentStackIndex( currentStackIndex_ )
4120 {
4121 }
4122
4123 DisplayPlanePropertiesKHR( VkDisplayPlanePropertiesKHR const & rhs )
4124 {
4125 memcpy( this, &rhs, sizeof(DisplayPlanePropertiesKHR) );
4126 }
4127
4128 DisplayPlanePropertiesKHR& operator=( VkDisplayPlanePropertiesKHR const & rhs )
4129 {
4130 memcpy( this, &rhs, sizeof(DisplayPlanePropertiesKHR) );
4131 return *this;
4132 }
4133
4134 DisplayPlanePropertiesKHR& setCurrentDisplay( DisplayKHR currentDisplay_ )
4135 {
4136 currentDisplay = currentDisplay_;
4137 return *this;
4138 }
4139
4140 DisplayPlanePropertiesKHR& setCurrentStackIndex( uint32_t currentStackIndex_ )
4141 {
4142 currentStackIndex = currentStackIndex_;
4143 return *this;
4144 }
4145
4146 operator const VkDisplayPlanePropertiesKHR&() const
4147 {
4148 return *reinterpret_cast<const VkDisplayPlanePropertiesKHR*>(this);
4149 }
4150
4151 bool operator==( DisplayPlanePropertiesKHR const& rhs ) const
4152 {
4153 return ( currentDisplay == rhs.currentDisplay )
4154 && ( currentStackIndex == rhs.currentStackIndex );
4155 }
4156
4157 bool operator!=( DisplayPlanePropertiesKHR const& rhs ) const
4158 {
4159 return !operator==( rhs );
4160 }
4161
4162 DisplayKHR currentDisplay;
4163 uint32_t currentStackIndex;
4164 };
4165 static_assert( sizeof( DisplayPlanePropertiesKHR ) == sizeof( VkDisplayPlanePropertiesKHR ), "struct and wrapper have different size!" );
4166
4167 struct DisplayModeParametersKHR
4168 {
4169 DisplayModeParametersKHR( Extent2D visibleRegion_ = Extent2D(), uint32_t refreshRate_ = 0 )
4170 : visibleRegion( visibleRegion_ )
4171 , refreshRate( refreshRate_ )
4172 {
4173 }
4174
4175 DisplayModeParametersKHR( VkDisplayModeParametersKHR const & rhs )
4176 {
4177 memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
4178 }
4179
4180 DisplayModeParametersKHR& operator=( VkDisplayModeParametersKHR const & rhs )
4181 {
4182 memcpy( this, &rhs, sizeof(DisplayModeParametersKHR) );
4183 return *this;
4184 }
4185
4186 DisplayModeParametersKHR& setVisibleRegion( Extent2D visibleRegion_ )
4187 {
4188 visibleRegion = visibleRegion_;
4189 return *this;
4190 }
4191
4192 DisplayModeParametersKHR& setRefreshRate( uint32_t refreshRate_ )
4193 {
4194 refreshRate = refreshRate_;
4195 return *this;
4196 }
4197
4198 operator const VkDisplayModeParametersKHR&() const
4199 {
4200 return *reinterpret_cast<const VkDisplayModeParametersKHR*>(this);
4201 }
4202
4203 bool operator==( DisplayModeParametersKHR const& rhs ) const
4204 {
4205 return ( visibleRegion == rhs.visibleRegion )
4206 && ( refreshRate == rhs.refreshRate );
4207 }
4208
4209 bool operator!=( DisplayModeParametersKHR const& rhs ) const
4210 {
4211 return !operator==( rhs );
4212 }
4213
4214 Extent2D visibleRegion;
4215 uint32_t refreshRate;
4216 };
4217 static_assert( sizeof( DisplayModeParametersKHR ) == sizeof( VkDisplayModeParametersKHR ), "struct and wrapper have different size!" );
4218
4219 struct DisplayModePropertiesKHR
4220 {
4221 DisplayModePropertiesKHR( DisplayModeKHR displayMode_ = DisplayModeKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
4222 : displayMode( displayMode_ )
4223 , parameters( parameters_ )
4224 {
4225 }
4226
4227 DisplayModePropertiesKHR( VkDisplayModePropertiesKHR const & rhs )
4228 {
4229 memcpy( this, &rhs, sizeof(DisplayModePropertiesKHR) );
4230 }
4231
4232 DisplayModePropertiesKHR& operator=( VkDisplayModePropertiesKHR const & rhs )
4233 {
4234 memcpy( this, &rhs, sizeof(DisplayModePropertiesKHR) );
4235 return *this;
4236 }
4237
4238 DisplayModePropertiesKHR& setDisplayMode( DisplayModeKHR displayMode_ )
4239 {
4240 displayMode = displayMode_;
4241 return *this;
4242 }
4243
4244 DisplayModePropertiesKHR& setParameters( DisplayModeParametersKHR parameters_ )
4245 {
4246 parameters = parameters_;
4247 return *this;
4248 }
4249
4250 operator const VkDisplayModePropertiesKHR&() const
4251 {
4252 return *reinterpret_cast<const VkDisplayModePropertiesKHR*>(this);
4253 }
4254
4255 bool operator==( DisplayModePropertiesKHR const& rhs ) const
4256 {
4257 return ( displayMode == rhs.displayMode )
4258 && ( parameters == rhs.parameters );
4259 }
4260
4261 bool operator!=( DisplayModePropertiesKHR const& rhs ) const
4262 {
4263 return !operator==( rhs );
4264 }
4265
4266 DisplayModeKHR displayMode;
4267 DisplayModeParametersKHR parameters;
4268 };
4269 static_assert( sizeof( DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ), "struct and wrapper have different size!" );
4270
4271 enum class ImageLayout
4272 {
4273 eUndefined = VK_IMAGE_LAYOUT_UNDEFINED,
4274 eGeneral = VK_IMAGE_LAYOUT_GENERAL,
4275 eColorAttachmentOptimal = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
4276 eDepthStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
4277 eDepthStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
4278 eShaderReadOnlyOptimal = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
4279 eTransferSrcOptimal = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
4280 eTransferDstOptimal = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
4281 ePreinitialized = VK_IMAGE_LAYOUT_PREINITIALIZED,
4282 ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
4283 };
4284
4285 struct DescriptorImageInfo
4286 {
4287 DescriptorImageInfo( Sampler sampler_ = Sampler(), ImageView imageView_ = ImageView(), ImageLayout imageLayout_ = ImageLayout::eUndefined )
4288 : sampler( sampler_ )
4289 , imageView( imageView_ )
4290 , imageLayout( imageLayout_ )
4291 {
4292 }
4293
4294 DescriptorImageInfo( VkDescriptorImageInfo const & rhs )
4295 {
4296 memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
4297 }
4298
4299 DescriptorImageInfo& operator=( VkDescriptorImageInfo const & rhs )
4300 {
4301 memcpy( this, &rhs, sizeof(DescriptorImageInfo) );
4302 return *this;
4303 }
4304
4305 DescriptorImageInfo& setSampler( Sampler sampler_ )
4306 {
4307 sampler = sampler_;
4308 return *this;
4309 }
4310
4311 DescriptorImageInfo& setImageView( ImageView imageView_ )
4312 {
4313 imageView = imageView_;
4314 return *this;
4315 }
4316
4317 DescriptorImageInfo& setImageLayout( ImageLayout imageLayout_ )
4318 {
4319 imageLayout = imageLayout_;
4320 return *this;
4321 }
4322
4323 operator const VkDescriptorImageInfo&() const
4324 {
4325 return *reinterpret_cast<const VkDescriptorImageInfo*>(this);
4326 }
4327
4328 bool operator==( DescriptorImageInfo const& rhs ) const
4329 {
4330 return ( sampler == rhs.sampler )
4331 && ( imageView == rhs.imageView )
4332 && ( imageLayout == rhs.imageLayout );
4333 }
4334
4335 bool operator!=( DescriptorImageInfo const& rhs ) const
4336 {
4337 return !operator==( rhs );
4338 }
4339
4340 Sampler sampler;
4341 ImageView imageView;
4342 ImageLayout imageLayout;
4343 };
4344 static_assert( sizeof( DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ), "struct and wrapper have different size!" );
4345
4346 struct AttachmentReference
4347 {
4348 AttachmentReference( uint32_t attachment_ = 0, ImageLayout layout_ = ImageLayout::eUndefined )
4349 : attachment( attachment_ )
4350 , layout( layout_ )
4351 {
4352 }
4353
4354 AttachmentReference( VkAttachmentReference const & rhs )
4355 {
4356 memcpy( this, &rhs, sizeof(AttachmentReference) );
4357 }
4358
4359 AttachmentReference& operator=( VkAttachmentReference const & rhs )
4360 {
4361 memcpy( this, &rhs, sizeof(AttachmentReference) );
4362 return *this;
4363 }
4364
4365 AttachmentReference& setAttachment( uint32_t attachment_ )
4366 {
4367 attachment = attachment_;
4368 return *this;
4369 }
4370
4371 AttachmentReference& setLayout( ImageLayout layout_ )
4372 {
4373 layout = layout_;
4374 return *this;
4375 }
4376
4377 operator const VkAttachmentReference&() const
4378 {
4379 return *reinterpret_cast<const VkAttachmentReference*>(this);
4380 }
4381
4382 bool operator==( AttachmentReference const& rhs ) const
4383 {
4384 return ( attachment == rhs.attachment )
4385 && ( layout == rhs.layout );
4386 }
4387
4388 bool operator!=( AttachmentReference const& rhs ) const
4389 {
4390 return !operator==( rhs );
4391 }
4392
4393 uint32_t attachment;
4394 ImageLayout layout;
4395 };
4396 static_assert( sizeof( AttachmentReference ) == sizeof( VkAttachmentReference ), "struct and wrapper have different size!" );
4397
4398 enum class AttachmentLoadOp
4399 {
4400 eLoad = VK_ATTACHMENT_LOAD_OP_LOAD,
4401 eClear = VK_ATTACHMENT_LOAD_OP_CLEAR,
4402 eDontCare = VK_ATTACHMENT_LOAD_OP_DONT_CARE
4403 };
4404
4405 enum class AttachmentStoreOp
4406 {
4407 eStore = VK_ATTACHMENT_STORE_OP_STORE,
4408 eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE
4409 };
4410
4411 enum class ImageType
4412 {
4413 e1D = VK_IMAGE_TYPE_1D,
4414 e2D = VK_IMAGE_TYPE_2D,
4415 e3D = VK_IMAGE_TYPE_3D
4416 };
4417
4418 enum class ImageTiling
4419 {
4420 eOptimal = VK_IMAGE_TILING_OPTIMAL,
4421 eLinear = VK_IMAGE_TILING_LINEAR
4422 };
4423
4424 enum class ImageViewType
4425 {
4426 e1D = VK_IMAGE_VIEW_TYPE_1D,
4427 e2D = VK_IMAGE_VIEW_TYPE_2D,
4428 e3D = VK_IMAGE_VIEW_TYPE_3D,
4429 eCube = VK_IMAGE_VIEW_TYPE_CUBE,
4430 e1DArray = VK_IMAGE_VIEW_TYPE_1D_ARRAY,
4431 e2DArray = VK_IMAGE_VIEW_TYPE_2D_ARRAY,
4432 eCubeArray = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
4433 };
4434
4435 enum class CommandBufferLevel
4436 {
4437 ePrimary = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
4438 eSecondary = VK_COMMAND_BUFFER_LEVEL_SECONDARY
4439 };
4440
4441 enum class ComponentSwizzle
4442 {
4443 eIdentity = VK_COMPONENT_SWIZZLE_IDENTITY,
4444 eZero = VK_COMPONENT_SWIZZLE_ZERO,
4445 eOne = VK_COMPONENT_SWIZZLE_ONE,
4446 eR = VK_COMPONENT_SWIZZLE_R,
4447 eG = VK_COMPONENT_SWIZZLE_G,
4448 eB = VK_COMPONENT_SWIZZLE_B,
4449 eA = VK_COMPONENT_SWIZZLE_A
4450 };
4451
4452 struct ComponentMapping
4453 {
4454 ComponentMapping( ComponentSwizzle r_ = ComponentSwizzle::eIdentity, ComponentSwizzle g_ = ComponentSwizzle::eIdentity, ComponentSwizzle b_ = ComponentSwizzle::eIdentity, ComponentSwizzle a_ = ComponentSwizzle::eIdentity )
4455 : r( r_ )
4456 , g( g_ )
4457 , b( b_ )
4458 , a( a_ )
4459 {
4460 }
4461
4462 ComponentMapping( VkComponentMapping const & rhs )
4463 {
4464 memcpy( this, &rhs, sizeof(ComponentMapping) );
4465 }
4466
4467 ComponentMapping& operator=( VkComponentMapping const & rhs )
4468 {
4469 memcpy( this, &rhs, sizeof(ComponentMapping) );
4470 return *this;
4471 }
4472
4473 ComponentMapping& setR( ComponentSwizzle r_ )
4474 {
4475 r = r_;
4476 return *this;
4477 }
4478
4479 ComponentMapping& setG( ComponentSwizzle g_ )
4480 {
4481 g = g_;
4482 return *this;
4483 }
4484
4485 ComponentMapping& setB( ComponentSwizzle b_ )
4486 {
4487 b = b_;
4488 return *this;
4489 }
4490
4491 ComponentMapping& setA( ComponentSwizzle a_ )
4492 {
4493 a = a_;
4494 return *this;
4495 }
4496
4497 operator const VkComponentMapping&() const
4498 {
4499 return *reinterpret_cast<const VkComponentMapping*>(this);
4500 }
4501
4502 bool operator==( ComponentMapping const& rhs ) const
4503 {
4504 return ( r == rhs.r )
4505 && ( g == rhs.g )
4506 && ( b == rhs.b )
4507 && ( a == rhs.a );
4508 }
4509
4510 bool operator!=( ComponentMapping const& rhs ) const
4511 {
4512 return !operator==( rhs );
4513 }
4514
4515 ComponentSwizzle r;
4516 ComponentSwizzle g;
4517 ComponentSwizzle b;
4518 ComponentSwizzle a;
4519 };
4520 static_assert( sizeof( ComponentMapping ) == sizeof( VkComponentMapping ), "struct and wrapper have different size!" );
4521
4522 enum class DescriptorType
4523 {
4524 eSampler = VK_DESCRIPTOR_TYPE_SAMPLER,
4525 eCombinedImageSampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
4526 eSampledImage = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
4527 eStorageImage = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
4528 eUniformTexelBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
4529 eStorageTexelBuffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
4530 eUniformBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
4531 eStorageBuffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
4532 eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
4533 eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
4534 eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
4535 };
4536
4537 struct DescriptorPoolSize
4538 {
4539 DescriptorPoolSize( DescriptorType type_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0 )
4540 : type( type_ )
4541 , descriptorCount( descriptorCount_ )
4542 {
4543 }
4544
4545 DescriptorPoolSize( VkDescriptorPoolSize const & rhs )
4546 {
4547 memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4548 }
4549
4550 DescriptorPoolSize& operator=( VkDescriptorPoolSize const & rhs )
4551 {
4552 memcpy( this, &rhs, sizeof(DescriptorPoolSize) );
4553 return *this;
4554 }
4555
4556 DescriptorPoolSize& setType( DescriptorType type_ )
4557 {
4558 type = type_;
4559 return *this;
4560 }
4561
4562 DescriptorPoolSize& setDescriptorCount( uint32_t descriptorCount_ )
4563 {
4564 descriptorCount = descriptorCount_;
4565 return *this;
4566 }
4567
4568 operator const VkDescriptorPoolSize&() const
4569 {
4570 return *reinterpret_cast<const VkDescriptorPoolSize*>(this);
4571 }
4572
4573 bool operator==( DescriptorPoolSize const& rhs ) const
4574 {
4575 return ( type == rhs.type )
4576 && ( descriptorCount == rhs.descriptorCount );
4577 }
4578
4579 bool operator!=( DescriptorPoolSize const& rhs ) const
4580 {
4581 return !operator==( rhs );
4582 }
4583
4584 DescriptorType type;
4585 uint32_t descriptorCount;
4586 };
4587 static_assert( sizeof( DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ), "struct and wrapper have different size!" );
4588
4589 enum class QueryType
4590 {
4591 eOcclusion = VK_QUERY_TYPE_OCCLUSION,
4592 ePipelineStatistics = VK_QUERY_TYPE_PIPELINE_STATISTICS,
4593 eTimestamp = VK_QUERY_TYPE_TIMESTAMP
4594 };
4595
4596 enum class BorderColor
4597 {
4598 eFloatTransparentBlack = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
4599 eIntTransparentBlack = VK_BORDER_COLOR_INT_TRANSPARENT_BLACK,
4600 eFloatOpaqueBlack = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
4601 eIntOpaqueBlack = VK_BORDER_COLOR_INT_OPAQUE_BLACK,
4602 eFloatOpaqueWhite = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE,
4603 eIntOpaqueWhite = VK_BORDER_COLOR_INT_OPAQUE_WHITE
4604 };
4605
4606 enum class PipelineBindPoint
4607 {
4608 eGraphics = VK_PIPELINE_BIND_POINT_GRAPHICS,
4609 eCompute = VK_PIPELINE_BIND_POINT_COMPUTE
4610 };
4611
4612 struct SubpassDescription
4613 {
4614 SubpassDescription( SubpassDescriptionFlags flags_ = SubpassDescriptionFlags(), PipelineBindPoint pipelineBindPoint_ = PipelineBindPoint::eGraphics, uint32_t inputAttachmentCount_ = 0, const AttachmentReference* pInputAttachments_ = nullptr, uint32_t colorAttachmentCount_ = 0, const AttachmentReference* pColorAttachments_ = nullptr, const AttachmentReference* pResolveAttachments_ = nullptr, const AttachmentReference* pDepthStencilAttachment_ = nullptr, uint32_t preserveAttachmentCount_ = 0, const uint32_t* pPreserveAttachments_ = nullptr )
4615 : flags( flags_ )
4616 , pipelineBindPoint( pipelineBindPoint_ )
4617 , inputAttachmentCount( inputAttachmentCount_ )
4618 , pInputAttachments( pInputAttachments_ )
4619 , colorAttachmentCount( colorAttachmentCount_ )
4620 , pColorAttachments( pColorAttachments_ )
4621 , pResolveAttachments( pResolveAttachments_ )
4622 , pDepthStencilAttachment( pDepthStencilAttachment_ )
4623 , preserveAttachmentCount( preserveAttachmentCount_ )
4624 , pPreserveAttachments( pPreserveAttachments_ )
4625 {
4626 }
4627
4628 SubpassDescription( VkSubpassDescription const & rhs )
4629 {
4630 memcpy( this, &rhs, sizeof(SubpassDescription) );
4631 }
4632
4633 SubpassDescription& operator=( VkSubpassDescription const & rhs )
4634 {
4635 memcpy( this, &rhs, sizeof(SubpassDescription) );
4636 return *this;
4637 }
4638
4639 SubpassDescription& setFlags( SubpassDescriptionFlags flags_ )
4640 {
4641 flags = flags_;
4642 return *this;
4643 }
4644
4645 SubpassDescription& setPipelineBindPoint( PipelineBindPoint pipelineBindPoint_ )
4646 {
4647 pipelineBindPoint = pipelineBindPoint_;
4648 return *this;
4649 }
4650
4651 SubpassDescription& setInputAttachmentCount( uint32_t inputAttachmentCount_ )
4652 {
4653 inputAttachmentCount = inputAttachmentCount_;
4654 return *this;
4655 }
4656
4657 SubpassDescription& setPInputAttachments( const AttachmentReference* pInputAttachments_ )
4658 {
4659 pInputAttachments = pInputAttachments_;
4660 return *this;
4661 }
4662
4663 SubpassDescription& setColorAttachmentCount( uint32_t colorAttachmentCount_ )
4664 {
4665 colorAttachmentCount = colorAttachmentCount_;
4666 return *this;
4667 }
4668
4669 SubpassDescription& setPColorAttachments( const AttachmentReference* pColorAttachments_ )
4670 {
4671 pColorAttachments = pColorAttachments_;
4672 return *this;
4673 }
4674
4675 SubpassDescription& setPResolveAttachments( const AttachmentReference* pResolveAttachments_ )
4676 {
4677 pResolveAttachments = pResolveAttachments_;
4678 return *this;
4679 }
4680
4681 SubpassDescription& setPDepthStencilAttachment( const AttachmentReference* pDepthStencilAttachment_ )
4682 {
4683 pDepthStencilAttachment = pDepthStencilAttachment_;
4684 return *this;
4685 }
4686
4687 SubpassDescription& setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ )
4688 {
4689 preserveAttachmentCount = preserveAttachmentCount_;
4690 return *this;
4691 }
4692
4693 SubpassDescription& setPPreserveAttachments( const uint32_t* pPreserveAttachments_ )
4694 {
4695 pPreserveAttachments = pPreserveAttachments_;
4696 return *this;
4697 }
4698
4699 operator const VkSubpassDescription&() const
4700 {
4701 return *reinterpret_cast<const VkSubpassDescription*>(this);
4702 }
4703
4704 bool operator==( SubpassDescription const& rhs ) const
4705 {
4706 return ( flags == rhs.flags )
4707 && ( pipelineBindPoint == rhs.pipelineBindPoint )
4708 && ( inputAttachmentCount == rhs.inputAttachmentCount )
4709 && ( pInputAttachments == rhs.pInputAttachments )
4710 && ( colorAttachmentCount == rhs.colorAttachmentCount )
4711 && ( pColorAttachments == rhs.pColorAttachments )
4712 && ( pResolveAttachments == rhs.pResolveAttachments )
4713 && ( pDepthStencilAttachment == rhs.pDepthStencilAttachment )
4714 && ( preserveAttachmentCount == rhs.preserveAttachmentCount )
4715 && ( pPreserveAttachments == rhs.pPreserveAttachments );
4716 }
4717
4718 bool operator!=( SubpassDescription const& rhs ) const
4719 {
4720 return !operator==( rhs );
4721 }
4722
4723 SubpassDescriptionFlags flags;
4724 PipelineBindPoint pipelineBindPoint;
4725 uint32_t inputAttachmentCount;
4726 const AttachmentReference* pInputAttachments;
4727 uint32_t colorAttachmentCount;
4728 const AttachmentReference* pColorAttachments;
4729 const AttachmentReference* pResolveAttachments;
4730 const AttachmentReference* pDepthStencilAttachment;
4731 uint32_t preserveAttachmentCount;
4732 const uint32_t* pPreserveAttachments;
4733 };
4734 static_assert( sizeof( SubpassDescription ) == sizeof( VkSubpassDescription ), "struct and wrapper have different size!" );
4735
4736 enum class PipelineCacheHeaderVersion
4737 {
4738 eOne = VK_PIPELINE_CACHE_HEADER_VERSION_ONE
4739 };
4740
4741 enum class PrimitiveTopology
4742 {
4743 ePointList = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
4744 eLineList = VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
4745 eLineStrip = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
4746 eTriangleList = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
4747 eTriangleStrip = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
4748 eTriangleFan = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
4749 eLineListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
4750 eLineStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
4751 eTriangleListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
4752 eTriangleStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY,
4753 ePatchList = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
4754 };
4755
4756 enum class SharingMode
4757 {
4758 eExclusive = VK_SHARING_MODE_EXCLUSIVE,
4759 eConcurrent = VK_SHARING_MODE_CONCURRENT
4760 };
4761
4762 enum class IndexType
4763 {
4764 eUint16 = VK_INDEX_TYPE_UINT16,
4765 eUint32 = VK_INDEX_TYPE_UINT32
4766 };
4767
4768 enum class Filter
4769 {
4770 eNearest = VK_FILTER_NEAREST,
4771 eLinear = VK_FILTER_LINEAR,
4772 eCubicIMG = VK_FILTER_CUBIC_IMG
4773 };
4774
4775 enum class SamplerMipmapMode
4776 {
4777 eNearest = VK_SAMPLER_MIPMAP_MODE_NEAREST,
4778 eLinear = VK_SAMPLER_MIPMAP_MODE_LINEAR
4779 };
4780
4781 enum class SamplerAddressMode
4782 {
4783 eRepeat = VK_SAMPLER_ADDRESS_MODE_REPEAT,
4784 eMirroredRepeat = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
4785 eClampToEdge = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
4786 eClampToBorder = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
4787 eMirrorClampToEdge = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
4788 };
4789
4790 enum class CompareOp
4791 {
4792 eNever = VK_COMPARE_OP_NEVER,
4793 eLess = VK_COMPARE_OP_LESS,
4794 eEqual = VK_COMPARE_OP_EQUAL,
4795 eLessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL,
4796 eGreater = VK_COMPARE_OP_GREATER,
4797 eNotEqual = VK_COMPARE_OP_NOT_EQUAL,
4798 eGreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL,
4799 eAlways = VK_COMPARE_OP_ALWAYS
4800 };
4801
4802 enum class PolygonMode
4803 {
4804 eFill = VK_POLYGON_MODE_FILL,
4805 eLine = VK_POLYGON_MODE_LINE,
4806 ePoint = VK_POLYGON_MODE_POINT
4807 };
4808
4809 enum class CullModeFlagBits
4810 {
4811 eNone = VK_CULL_MODE_NONE,
4812 eFront = VK_CULL_MODE_FRONT_BIT,
4813 eBack = VK_CULL_MODE_BACK_BIT,
4814 eFrontAndBack = VK_CULL_MODE_FRONT_AND_BACK
4815 };
4816
4817 using CullModeFlags = Flags<CullModeFlagBits, VkCullModeFlags>;
4818
4819 inline CullModeFlags operator|( CullModeFlagBits bit0, CullModeFlagBits bit1 )
4820 {
4821 return CullModeFlags( bit0 ) | bit1;
4822 }
4823
4824 enum class FrontFace
4825 {
4826 eCounterClockwise = VK_FRONT_FACE_COUNTER_CLOCKWISE,
4827 eClockwise = VK_FRONT_FACE_CLOCKWISE
4828 };
4829
4830 enum class BlendFactor
4831 {
4832 eZero = VK_BLEND_FACTOR_ZERO,
4833 eOne = VK_BLEND_FACTOR_ONE,
4834 eSrcColor = VK_BLEND_FACTOR_SRC_COLOR,
4835 eOneMinusSrcColor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
4836 eDstColor = VK_BLEND_FACTOR_DST_COLOR,
4837 eOneMinusDstColor = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR,
4838 eSrcAlpha = VK_BLEND_FACTOR_SRC_ALPHA,
4839 eOneMinusSrcAlpha = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
4840 eDstAlpha = VK_BLEND_FACTOR_DST_ALPHA,
4841 eOneMinusDstAlpha = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA,
4842 eConstantColor = VK_BLEND_FACTOR_CONSTANT_COLOR,
4843 eOneMinusConstantColor = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
4844 eConstantAlpha = VK_BLEND_FACTOR_CONSTANT_ALPHA,
4845 eOneMinusConstantAlpha = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
4846 eSrcAlphaSaturate = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE,
4847 eSrc1Color = VK_BLEND_FACTOR_SRC1_COLOR,
4848 eOneMinusSrc1Color = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
4849 eSrc1Alpha = VK_BLEND_FACTOR_SRC1_ALPHA,
4850 eOneMinusSrc1Alpha = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
4851 };
4852
4853 enum class BlendOp
4854 {
4855 eAdd = VK_BLEND_OP_ADD,
4856 eSubtract = VK_BLEND_OP_SUBTRACT,
4857 eReverseSubtract = VK_BLEND_OP_REVERSE_SUBTRACT,
4858 eMin = VK_BLEND_OP_MIN,
4859 eMax = VK_BLEND_OP_MAX
4860 };
4861
4862 enum class StencilOp
4863 {
4864 eKeep = VK_STENCIL_OP_KEEP,
4865 eZero = VK_STENCIL_OP_ZERO,
4866 eReplace = VK_STENCIL_OP_REPLACE,
4867 eIncrementAndClamp = VK_STENCIL_OP_INCREMENT_AND_CLAMP,
4868 eDecrementAndClamp = VK_STENCIL_OP_DECREMENT_AND_CLAMP,
4869 eInvert = VK_STENCIL_OP_INVERT,
4870 eIncrementAndWrap = VK_STENCIL_OP_INCREMENT_AND_WRAP,
4871 eDecrementAndWrap = VK_STENCIL_OP_DECREMENT_AND_WRAP
4872 };
4873
4874 struct StencilOpState
4875 {
4876 StencilOpState( StencilOp failOp_ = StencilOp::eKeep, StencilOp passOp_ = StencilOp::eKeep, StencilOp depthFailOp_ = StencilOp::eKeep, CompareOp compareOp_ = CompareOp::eNever, uint32_t compareMask_ = 0, uint32_t writeMask_ = 0, uint32_t reference_ = 0 )
4877 : failOp( failOp_ )
4878 , passOp( passOp_ )
4879 , depthFailOp( depthFailOp_ )
4880 , compareOp( compareOp_ )
4881 , compareMask( compareMask_ )
4882 , writeMask( writeMask_ )
4883 , reference( reference_ )
4884 {
4885 }
4886
4887 StencilOpState( VkStencilOpState const & rhs )
4888 {
4889 memcpy( this, &rhs, sizeof(StencilOpState) );
4890 }
4891
4892 StencilOpState& operator=( VkStencilOpState const & rhs )
4893 {
4894 memcpy( this, &rhs, sizeof(StencilOpState) );
4895 return *this;
4896 }
4897
4898 StencilOpState& setFailOp( StencilOp failOp_ )
4899 {
4900 failOp = failOp_;
4901 return *this;
4902 }
4903
4904 StencilOpState& setPassOp( StencilOp passOp_ )
4905 {
4906 passOp = passOp_;
4907 return *this;
4908 }
4909
4910 StencilOpState& setDepthFailOp( StencilOp depthFailOp_ )
4911 {
4912 depthFailOp = depthFailOp_;
4913 return *this;
4914 }
4915
4916 StencilOpState& setCompareOp( CompareOp compareOp_ )
4917 {
4918 compareOp = compareOp_;
4919 return *this;
4920 }
4921
4922 StencilOpState& setCompareMask( uint32_t compareMask_ )
4923 {
4924 compareMask = compareMask_;
4925 return *this;
4926 }
4927
4928 StencilOpState& setWriteMask( uint32_t writeMask_ )
4929 {
4930 writeMask = writeMask_;
4931 return *this;
4932 }
4933
4934 StencilOpState& setReference( uint32_t reference_ )
4935 {
4936 reference = reference_;
4937 return *this;
4938 }
4939
4940 operator const VkStencilOpState&() const
4941 {
4942 return *reinterpret_cast<const VkStencilOpState*>(this);
4943 }
4944
4945 bool operator==( StencilOpState const& rhs ) const
4946 {
4947 return ( failOp == rhs.failOp )
4948 && ( passOp == rhs.passOp )
4949 && ( depthFailOp == rhs.depthFailOp )
4950 && ( compareOp == rhs.compareOp )
4951 && ( compareMask == rhs.compareMask )
4952 && ( writeMask == rhs.writeMask )
4953 && ( reference == rhs.reference );
4954 }
4955
4956 bool operator!=( StencilOpState const& rhs ) const
4957 {
4958 return !operator==( rhs );
4959 }
4960
4961 StencilOp failOp;
4962 StencilOp passOp;
4963 StencilOp depthFailOp;
4964 CompareOp compareOp;
4965 uint32_t compareMask;
4966 uint32_t writeMask;
4967 uint32_t reference;
4968 };
4969 static_assert( sizeof( StencilOpState ) == sizeof( VkStencilOpState ), "struct and wrapper have different size!" );
4970
4971 enum class LogicOp
4972 {
4973 eClear = VK_LOGIC_OP_CLEAR,
4974 eAnd = VK_LOGIC_OP_AND,
4975 eAndReverse = VK_LOGIC_OP_AND_REVERSE,
4976 eCopy = VK_LOGIC_OP_COPY,
4977 eAndInverted = VK_LOGIC_OP_AND_INVERTED,
4978 eNoOp = VK_LOGIC_OP_NO_OP,
4979 eXor = VK_LOGIC_OP_XOR,
4980 eOr = VK_LOGIC_OP_OR,
4981 eNor = VK_LOGIC_OP_NOR,
4982 eEquivalent = VK_LOGIC_OP_EQUIVALENT,
4983 eInvert = VK_LOGIC_OP_INVERT,
4984 eOrReverse = VK_LOGIC_OP_OR_REVERSE,
4985 eCopyInverted = VK_LOGIC_OP_COPY_INVERTED,
4986 eOrInverted = VK_LOGIC_OP_OR_INVERTED,
4987 eNand = VK_LOGIC_OP_NAND,
4988 eSet = VK_LOGIC_OP_SET
4989 };
4990
4991 enum class InternalAllocationType
4992 {
4993 eExecutable = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE
4994 };
4995
4996 enum class SystemAllocationScope
4997 {
4998 eCommand = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
4999 eObject = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT,
5000 eCache = VK_SYSTEM_ALLOCATION_SCOPE_CACHE,
5001 eDevice = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE,
5002 eInstance = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE
5003 };
5004
5005 enum class PhysicalDeviceType
5006 {
5007 eOther = VK_PHYSICAL_DEVICE_TYPE_OTHER,
5008 eIntegratedGpu = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
5009 eDiscreteGpu = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
5010 eVirtualGpu = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU,
5011 eCpu = VK_PHYSICAL_DEVICE_TYPE_CPU
5012 };
5013
5014 enum class VertexInputRate
5015 {
5016 eVertex = VK_VERTEX_INPUT_RATE_VERTEX,
5017 eInstance = VK_VERTEX_INPUT_RATE_INSTANCE
5018 };
5019
5020 struct VertexInputBindingDescription
5021 {
5022 VertexInputBindingDescription( uint32_t binding_ = 0, uint32_t stride_ = 0, VertexInputRate inputRate_ = VertexInputRate::eVertex )
5023 : binding( binding_ )
5024 , stride( stride_ )
5025 , inputRate( inputRate_ )
5026 {
5027 }
5028
5029 VertexInputBindingDescription( VkVertexInputBindingDescription const & rhs )
5030 {
5031 memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
5032 }
5033
5034 VertexInputBindingDescription& operator=( VkVertexInputBindingDescription const & rhs )
5035 {
5036 memcpy( this, &rhs, sizeof(VertexInputBindingDescription) );
5037 return *this;
5038 }
5039
5040 VertexInputBindingDescription& setBinding( uint32_t binding_ )
5041 {
5042 binding = binding_;
5043 return *this;
5044 }
5045
5046 VertexInputBindingDescription& setStride( uint32_t stride_ )
5047 {
5048 stride = stride_;
5049 return *this;
5050 }
5051
5052 VertexInputBindingDescription& setInputRate( VertexInputRate inputRate_ )
5053 {
5054 inputRate = inputRate_;
5055 return *this;
5056 }
5057
5058 operator const VkVertexInputBindingDescription&() const
5059 {
5060 return *reinterpret_cast<const VkVertexInputBindingDescription*>(this);
5061 }
5062
5063 bool operator==( VertexInputBindingDescription const& rhs ) const
5064 {
5065 return ( binding == rhs.binding )
5066 && ( stride == rhs.stride )
5067 && ( inputRate == rhs.inputRate );
5068 }
5069
5070 bool operator!=( VertexInputBindingDescription const& rhs ) const
5071 {
5072 return !operator==( rhs );
5073 }
5074
5075 uint32_t binding;
5076 uint32_t stride;
5077 VertexInputRate inputRate;
5078 };
5079 static_assert( sizeof( VertexInputBindingDescription ) == sizeof( VkVertexInputBindingDescription ), "struct and wrapper have different size!" );
5080
5081 enum class Format
5082 {
5083 eUndefined = VK_FORMAT_UNDEFINED,
5084 eR4G4UnormPack8 = VK_FORMAT_R4G4_UNORM_PACK8,
5085 eR4G4B4A4UnormPack16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16,
5086 eB4G4R4A4UnormPack16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16,
5087 eR5G6B5UnormPack16 = VK_FORMAT_R5G6B5_UNORM_PACK16,
5088 eB5G6R5UnormPack16 = VK_FORMAT_B5G6R5_UNORM_PACK16,
5089 eR5G5B5A1UnormPack16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16,
5090 eB5G5R5A1UnormPack16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16,
5091 eA1R5G5B5UnormPack16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16,
5092 eR8Unorm = VK_FORMAT_R8_UNORM,
5093 eR8Snorm = VK_FORMAT_R8_SNORM,
5094 eR8Uscaled = VK_FORMAT_R8_USCALED,
5095 eR8Sscaled = VK_FORMAT_R8_SSCALED,
5096 eR8Uint = VK_FORMAT_R8_UINT,
5097 eR8Sint = VK_FORMAT_R8_SINT,
5098 eR8Srgb = VK_FORMAT_R8_SRGB,
5099 eR8G8Unorm = VK_FORMAT_R8G8_UNORM,
5100 eR8G8Snorm = VK_FORMAT_R8G8_SNORM,
5101 eR8G8Uscaled = VK_FORMAT_R8G8_USCALED,
5102 eR8G8Sscaled = VK_FORMAT_R8G8_SSCALED,
5103 eR8G8Uint = VK_FORMAT_R8G8_UINT,
5104 eR8G8Sint = VK_FORMAT_R8G8_SINT,
5105 eR8G8Srgb = VK_FORMAT_R8G8_SRGB,
5106 eR8G8B8Unorm = VK_FORMAT_R8G8B8_UNORM,
5107 eR8G8B8Snorm = VK_FORMAT_R8G8B8_SNORM,
5108 eR8G8B8Uscaled = VK_FORMAT_R8G8B8_USCALED,
5109 eR8G8B8Sscaled = VK_FORMAT_R8G8B8_SSCALED,
5110 eR8G8B8Uint = VK_FORMAT_R8G8B8_UINT,
5111 eR8G8B8Sint = VK_FORMAT_R8G8B8_SINT,
5112 eR8G8B8Srgb = VK_FORMAT_R8G8B8_SRGB,
5113 eB8G8R8Unorm = VK_FORMAT_B8G8R8_UNORM,
5114 eB8G8R8Snorm = VK_FORMAT_B8G8R8_SNORM,
5115 eB8G8R8Uscaled = VK_FORMAT_B8G8R8_USCALED,
5116 eB8G8R8Sscaled = VK_FORMAT_B8G8R8_SSCALED,
5117 eB8G8R8Uint = VK_FORMAT_B8G8R8_UINT,
5118 eB8G8R8Sint = VK_FORMAT_B8G8R8_SINT,
5119 eB8G8R8Srgb = VK_FORMAT_B8G8R8_SRGB,
5120 eR8G8B8A8Unorm = VK_FORMAT_R8G8B8A8_UNORM,
5121 eR8G8B8A8Snorm = VK_FORMAT_R8G8B8A8_SNORM,
5122 eR8G8B8A8Uscaled = VK_FORMAT_R8G8B8A8_USCALED,
5123 eR8G8B8A8Sscaled = VK_FORMAT_R8G8B8A8_SSCALED,
5124 eR8G8B8A8Uint = VK_FORMAT_R8G8B8A8_UINT,
5125 eR8G8B8A8Sint = VK_FORMAT_R8G8B8A8_SINT,
5126 eR8G8B8A8Srgb = VK_FORMAT_R8G8B8A8_SRGB,
5127 eB8G8R8A8Unorm = VK_FORMAT_B8G8R8A8_UNORM,
5128 eB8G8R8A8Snorm = VK_FORMAT_B8G8R8A8_SNORM,
5129 eB8G8R8A8Uscaled = VK_FORMAT_B8G8R8A8_USCALED,
5130 eB8G8R8A8Sscaled = VK_FORMAT_B8G8R8A8_SSCALED,
5131 eB8G8R8A8Uint = VK_FORMAT_B8G8R8A8_UINT,
5132 eB8G8R8A8Sint = VK_FORMAT_B8G8R8A8_SINT,
5133 eB8G8R8A8Srgb = VK_FORMAT_B8G8R8A8_SRGB,
5134 eA8B8G8R8UnormPack32 = VK_FORMAT_A8B8G8R8_UNORM_PACK32,
5135 eA8B8G8R8SnormPack32 = VK_FORMAT_A8B8G8R8_SNORM_PACK32,
5136 eA8B8G8R8UscaledPack32 = VK_FORMAT_A8B8G8R8_USCALED_PACK32,
5137 eA8B8G8R8SscaledPack32 = VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
5138 eA8B8G8R8UintPack32 = VK_FORMAT_A8B8G8R8_UINT_PACK32,
5139 eA8B8G8R8SintPack32 = VK_FORMAT_A8B8G8R8_SINT_PACK32,
5140 eA8B8G8R8SrgbPack32 = VK_FORMAT_A8B8G8R8_SRGB_PACK32,
5141 eA2R10G10B10UnormPack32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32,
5142 eA2R10G10B10SnormPack32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32,
5143 eA2R10G10B10UscaledPack32 = VK_FORMAT_A2R10G10B10_USCALED_PACK32,
5144 eA2R10G10B10SscaledPack32 = VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
5145 eA2R10G10B10UintPack32 = VK_FORMAT_A2R10G10B10_UINT_PACK32,
5146 eA2R10G10B10SintPack32 = VK_FORMAT_A2R10G10B10_SINT_PACK32,
5147 eA2B10G10R10UnormPack32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32,
5148 eA2B10G10R10SnormPack32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32,
5149 eA2B10G10R10UscaledPack32 = VK_FORMAT_A2B10G10R10_USCALED_PACK32,
5150 eA2B10G10R10SscaledPack32 = VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
5151 eA2B10G10R10UintPack32 = VK_FORMAT_A2B10G10R10_UINT_PACK32,
5152 eA2B10G10R10SintPack32 = VK_FORMAT_A2B10G10R10_SINT_PACK32,
5153 eR16Unorm = VK_FORMAT_R16_UNORM,
5154 eR16Snorm = VK_FORMAT_R16_SNORM,
5155 eR16Uscaled = VK_FORMAT_R16_USCALED,
5156 eR16Sscaled = VK_FORMAT_R16_SSCALED,
5157 eR16Uint = VK_FORMAT_R16_UINT,
5158 eR16Sint = VK_FORMAT_R16_SINT,
5159 eR16Sfloat = VK_FORMAT_R16_SFLOAT,
5160 eR16G16Unorm = VK_FORMAT_R16G16_UNORM,
5161 eR16G16Snorm = VK_FORMAT_R16G16_SNORM,
5162 eR16G16Uscaled = VK_FORMAT_R16G16_USCALED,
5163 eR16G16Sscaled = VK_FORMAT_R16G16_SSCALED,
5164 eR16G16Uint = VK_FORMAT_R16G16_UINT,
5165 eR16G16Sint = VK_FORMAT_R16G16_SINT,
5166 eR16G16Sfloat = VK_FORMAT_R16G16_SFLOAT,
5167 eR16G16B16Unorm = VK_FORMAT_R16G16B16_UNORM,
5168 eR16G16B16Snorm = VK_FORMAT_R16G16B16_SNORM,
5169 eR16G16B16Uscaled = VK_FORMAT_R16G16B16_USCALED,
5170 eR16G16B16Sscaled = VK_FORMAT_R16G16B16_SSCALED,
5171 eR16G16B16Uint = VK_FORMAT_R16G16B16_UINT,
5172 eR16G16B16Sint = VK_FORMAT_R16G16B16_SINT,
5173 eR16G16B16Sfloat = VK_FORMAT_R16G16B16_SFLOAT,
5174 eR16G16B16A16Unorm = VK_FORMAT_R16G16B16A16_UNORM,
5175 eR16G16B16A16Snorm = VK_FORMAT_R16G16B16A16_SNORM,
5176 eR16G16B16A16Uscaled = VK_FORMAT_R16G16B16A16_USCALED,
5177 eR16G16B16A16Sscaled = VK_FORMAT_R16G16B16A16_SSCALED,
5178 eR16G16B16A16Uint = VK_FORMAT_R16G16B16A16_UINT,
5179 eR16G16B16A16Sint = VK_FORMAT_R16G16B16A16_SINT,
5180 eR16G16B16A16Sfloat = VK_FORMAT_R16G16B16A16_SFLOAT,
5181 eR32Uint = VK_FORMAT_R32_UINT,
5182 eR32Sint = VK_FORMAT_R32_SINT,
5183 eR32Sfloat = VK_FORMAT_R32_SFLOAT,
5184 eR32G32Uint = VK_FORMAT_R32G32_UINT,
5185 eR32G32Sint = VK_FORMAT_R32G32_SINT,
5186 eR32G32Sfloat = VK_FORMAT_R32G32_SFLOAT,
5187 eR32G32B32Uint = VK_FORMAT_R32G32B32_UINT,
5188 eR32G32B32Sint = VK_FORMAT_R32G32B32_SINT,
5189 eR32G32B32Sfloat = VK_FORMAT_R32G32B32_SFLOAT,
5190 eR32G32B32A32Uint = VK_FORMAT_R32G32B32A32_UINT,
5191 eR32G32B32A32Sint = VK_FORMAT_R32G32B32A32_SINT,
5192 eR32G32B32A32Sfloat = VK_FORMAT_R32G32B32A32_SFLOAT,
5193 eR64Uint = VK_FORMAT_R64_UINT,
5194 eR64Sint = VK_FORMAT_R64_SINT,
5195 eR64Sfloat = VK_FORMAT_R64_SFLOAT,
5196 eR64G64Uint = VK_FORMAT_R64G64_UINT,
5197 eR64G64Sint = VK_FORMAT_R64G64_SINT,
5198 eR64G64Sfloat = VK_FORMAT_R64G64_SFLOAT,
5199 eR64G64B64Uint = VK_FORMAT_R64G64B64_UINT,
5200 eR64G64B64Sint = VK_FORMAT_R64G64B64_SINT,
5201 eR64G64B64Sfloat = VK_FORMAT_R64G64B64_SFLOAT,
5202 eR64G64B64A64Uint = VK_FORMAT_R64G64B64A64_UINT,
5203 eR64G64B64A64Sint = VK_FORMAT_R64G64B64A64_SINT,
5204 eR64G64B64A64Sfloat = VK_FORMAT_R64G64B64A64_SFLOAT,
5205 eB10G11R11UfloatPack32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32,
5206 eE5B9G9R9UfloatPack32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
5207 eD16Unorm = VK_FORMAT_D16_UNORM,
5208 eX8D24UnormPack32 = VK_FORMAT_X8_D24_UNORM_PACK32,
5209 eD32Sfloat = VK_FORMAT_D32_SFLOAT,
5210 eS8Uint = VK_FORMAT_S8_UINT,
5211 eD16UnormS8Uint = VK_FORMAT_D16_UNORM_S8_UINT,
5212 eD24UnormS8Uint = VK_FORMAT_D24_UNORM_S8_UINT,
5213 eD32SfloatS8Uint = VK_FORMAT_D32_SFLOAT_S8_UINT,
5214 eBc1RgbUnormBlock = VK_FORMAT_BC1_RGB_UNORM_BLOCK,
5215 eBc1RgbSrgbBlock = VK_FORMAT_BC1_RGB_SRGB_BLOCK,
5216 eBc1RgbaUnormBlock = VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
5217 eBc1RgbaSrgbBlock = VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
5218 eBc2UnormBlock = VK_FORMAT_BC2_UNORM_BLOCK,
5219 eBc2SrgbBlock = VK_FORMAT_BC2_SRGB_BLOCK,
5220 eBc3UnormBlock = VK_FORMAT_BC3_UNORM_BLOCK,
5221 eBc3SrgbBlock = VK_FORMAT_BC3_SRGB_BLOCK,
5222 eBc4UnormBlock = VK_FORMAT_BC4_UNORM_BLOCK,
5223 eBc4SnormBlock = VK_FORMAT_BC4_SNORM_BLOCK,
5224 eBc5UnormBlock = VK_FORMAT_BC5_UNORM_BLOCK,
5225 eBc5SnormBlock = VK_FORMAT_BC5_SNORM_BLOCK,
5226 eBc6HUfloatBlock = VK_FORMAT_BC6H_UFLOAT_BLOCK,
5227 eBc6HSfloatBlock = VK_FORMAT_BC6H_SFLOAT_BLOCK,
5228 eBc7UnormBlock = VK_FORMAT_BC7_UNORM_BLOCK,
5229 eBc7SrgbBlock = VK_FORMAT_BC7_SRGB_BLOCK,
5230 eEtc2R8G8B8UnormBlock = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
5231 eEtc2R8G8B8SrgbBlock = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
5232 eEtc2R8G8B8A1UnormBlock = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
5233 eEtc2R8G8B8A1SrgbBlock = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
5234 eEtc2R8G8B8A8UnormBlock = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
5235 eEtc2R8G8B8A8SrgbBlock = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
5236 eEacR11UnormBlock = VK_FORMAT_EAC_R11_UNORM_BLOCK,
5237 eEacR11SnormBlock = VK_FORMAT_EAC_R11_SNORM_BLOCK,
5238 eEacR11G11UnormBlock = VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
5239 eEacR11G11SnormBlock = VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
5240 eAstc4x4UnormBlock = VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
5241 eAstc4x4SrgbBlock = VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
5242 eAstc5x4UnormBlock = VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
5243 eAstc5x4SrgbBlock = VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
5244 eAstc5x5UnormBlock = VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
5245 eAstc5x5SrgbBlock = VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
5246 eAstc6x5UnormBlock = VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
5247 eAstc6x5SrgbBlock = VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
5248 eAstc6x6UnormBlock = VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
5249 eAstc6x6SrgbBlock = VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
5250 eAstc8x5UnormBlock = VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
5251 eAstc8x5SrgbBlock = VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
5252 eAstc8x6UnormBlock = VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
5253 eAstc8x6SrgbBlock = VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
5254 eAstc8x8UnormBlock = VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
5255 eAstc8x8SrgbBlock = VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
5256 eAstc10x5UnormBlock = VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
5257 eAstc10x5SrgbBlock = VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
5258 eAstc10x6UnormBlock = VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
5259 eAstc10x6SrgbBlock = VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
5260 eAstc10x8UnormBlock = VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
5261 eAstc10x8SrgbBlock = VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
5262 eAstc10x10UnormBlock = VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
5263 eAstc10x10SrgbBlock = VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
5264 eAstc12x10UnormBlock = VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
5265 eAstc12x10SrgbBlock = VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
5266 eAstc12x12UnormBlock = VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
Lenny Komowebf33162016-08-26 14:10:08 -06005267 eAstc12x12SrgbBlock = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
5268 ePvrtc12BppUnormBlockIMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
5269 ePvrtc14BppUnormBlockIMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
5270 ePvrtc22BppUnormBlockIMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
5271 ePvrtc24BppUnormBlockIMG = VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
5272 ePvrtc12BppSrgbBlockIMG = VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
5273 ePvrtc14BppSrgbBlockIMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
5274 ePvrtc22BppSrgbBlockIMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
5275 ePvrtc24BppSrgbBlockIMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG
Lenny Komowbed9b5c2016-08-11 11:23:15 -06005276 };
5277
5278 struct VertexInputAttributeDescription
5279 {
5280 VertexInputAttributeDescription( uint32_t location_ = 0, uint32_t binding_ = 0, Format format_ = Format::eUndefined, uint32_t offset_ = 0 )
5281 : location( location_ )
5282 , binding( binding_ )
5283 , format( format_ )
5284 , offset( offset_ )
5285 {
5286 }
5287
5288 VertexInputAttributeDescription( VkVertexInputAttributeDescription const & rhs )
5289 {
5290 memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
5291 }
5292
5293 VertexInputAttributeDescription& operator=( VkVertexInputAttributeDescription const & rhs )
5294 {
5295 memcpy( this, &rhs, sizeof(VertexInputAttributeDescription) );
5296 return *this;
5297 }
5298
5299 VertexInputAttributeDescription& setLocation( uint32_t location_ )
5300 {
5301 location = location_;
5302 return *this;
5303 }
5304
5305 VertexInputAttributeDescription& setBinding( uint32_t binding_ )
5306 {
5307 binding = binding_;
5308 return *this;
5309 }
5310
5311 VertexInputAttributeDescription& setFormat( Format format_ )
5312 {
5313 format = format_;
5314 return *this;
5315 }
5316
5317 VertexInputAttributeDescription& setOffset( uint32_t offset_ )
5318 {
5319 offset = offset_;
5320 return *this;
5321 }
5322
5323 operator const VkVertexInputAttributeDescription&() const
5324 {
5325 return *reinterpret_cast<const VkVertexInputAttributeDescription*>(this);
5326 }
5327
5328 bool operator==( VertexInputAttributeDescription const& rhs ) const
5329 {
5330 return ( location == rhs.location )
5331 && ( binding == rhs.binding )
5332 && ( format == rhs.format )
5333 && ( offset == rhs.offset );
5334 }
5335
5336 bool operator!=( VertexInputAttributeDescription const& rhs ) const
5337 {
5338 return !operator==( rhs );
5339 }
5340
5341 uint32_t location;
5342 uint32_t binding;
5343 Format format;
5344 uint32_t offset;
5345 };
5346 static_assert( sizeof( VertexInputAttributeDescription ) == sizeof( VkVertexInputAttributeDescription ), "struct and wrapper have different size!" );
5347
5348 enum class StructureType
5349 {
5350 eApplicationInfo = VK_STRUCTURE_TYPE_APPLICATION_INFO,
5351 eInstanceCreateInfo = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
5352 eDeviceQueueCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
5353 eDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
5354 eSubmitInfo = VK_STRUCTURE_TYPE_SUBMIT_INFO,
5355 eMemoryAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
5356 eMappedMemoryRange = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
5357 eBindSparseInfo = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
5358 eFenceCreateInfo = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
5359 eSemaphoreCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
5360 eEventCreateInfo = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO,
5361 eQueryPoolCreateInfo = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
5362 eBufferCreateInfo = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
5363 eBufferViewCreateInfo = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO,
5364 eImageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
5365 eImageViewCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
5366 eShaderModuleCreateInfo = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
5367 ePipelineCacheCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,
5368 ePipelineShaderStageCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
5369 ePipelineVertexInputStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
5370 ePipelineInputAssemblyStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
5371 ePipelineTessellationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
5372 ePipelineViewportStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
5373 ePipelineRasterizationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
5374 ePipelineMultisampleStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
5375 ePipelineDepthStencilStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
5376 ePipelineColorBlendStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
5377 ePipelineDynamicStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
5378 eGraphicsPipelineCreateInfo = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
5379 eComputePipelineCreateInfo = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
5380 ePipelineLayoutCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
5381 eSamplerCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
5382 eDescriptorSetLayoutCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
5383 eDescriptorPoolCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
5384 eDescriptorSetAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
5385 eWriteDescriptorSet = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
5386 eCopyDescriptorSet = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
5387 eFramebufferCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
5388 eRenderPassCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
5389 eCommandPoolCreateInfo = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
5390 eCommandBufferAllocateInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
5391 eCommandBufferInheritanceInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
5392 eCommandBufferBeginInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
5393 eRenderPassBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
5394 eBufferMemoryBarrier = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
5395 eImageMemoryBarrier = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
5396 eMemoryBarrier = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
5397 eLoaderInstanceCreateInfo = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
5398 eLoaderDeviceCreateInfo = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
5399 eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
5400 ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
5401 eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
5402 eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
5403 eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
5404 eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
5405 eXcbSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
5406 eWaylandSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
5407 eMirSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR,
5408 eAndroidSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
5409 eWin32SurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
5410 eDebugReportCallbackCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
5411 ePipelineRasterizationStateRasterizationOrderAMD = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD,
5412 eDebugMarkerObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
5413 eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
5414 eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
5415 eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
5416 eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
Lenny Komow6501c122016-08-31 15:03:49 -06005417 eDedicatedAllocationMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,
5418 eExternalMemoryImageCreateInfoNV = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV,
5419 eExportMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV,
5420 eImportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV,
5421 eExportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV,
5422 eWin32KeyedMutexAcquireReleaseInfoNV = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV
Lenny Komowbed9b5c2016-08-11 11:23:15 -06005423 };
5424
5425 struct ApplicationInfo
5426 {
5427 ApplicationInfo( const char* pApplicationName_ = nullptr, uint32_t applicationVersion_ = 0, const char* pEngineName_ = nullptr, uint32_t engineVersion_ = 0, uint32_t apiVersion_ = 0 )
5428 : sType( StructureType::eApplicationInfo )
5429 , pNext( nullptr )
5430 , pApplicationName( pApplicationName_ )
5431 , applicationVersion( applicationVersion_ )
5432 , pEngineName( pEngineName_ )
5433 , engineVersion( engineVersion_ )
5434 , apiVersion( apiVersion_ )
5435 {
5436 }
5437
5438 ApplicationInfo( VkApplicationInfo const & rhs )
5439 {
5440 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5441 }
5442
5443 ApplicationInfo& operator=( VkApplicationInfo const & rhs )
5444 {
5445 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5446 return *this;
5447 }
5448
5449 ApplicationInfo& setSType( StructureType sType_ )
5450 {
5451 sType = sType_;
5452 return *this;
5453 }
5454
5455 ApplicationInfo& setPNext( const void* pNext_ )
5456 {
5457 pNext = pNext_;
5458 return *this;
5459 }
5460
5461 ApplicationInfo& setPApplicationName( const char* pApplicationName_ )
5462 {
5463 pApplicationName = pApplicationName_;
5464 return *this;
5465 }
5466
5467 ApplicationInfo& setApplicationVersion( uint32_t applicationVersion_ )
5468 {
5469 applicationVersion = applicationVersion_;
5470 return *this;
5471 }
5472
5473 ApplicationInfo& setPEngineName( const char* pEngineName_ )
5474 {
5475 pEngineName = pEngineName_;
5476 return *this;
5477 }
5478
5479 ApplicationInfo& setEngineVersion( uint32_t engineVersion_ )
5480 {
5481 engineVersion = engineVersion_;
5482 return *this;
5483 }
5484
5485 ApplicationInfo& setApiVersion( uint32_t apiVersion_ )
5486 {
5487 apiVersion = apiVersion_;
5488 return *this;
5489 }
5490
5491 operator const VkApplicationInfo&() const
5492 {
5493 return *reinterpret_cast<const VkApplicationInfo*>(this);
5494 }
5495
5496 bool operator==( ApplicationInfo const& rhs ) const
5497 {
5498 return ( sType == rhs.sType )
5499 && ( pNext == rhs.pNext )
5500 && ( pApplicationName == rhs.pApplicationName )
5501 && ( applicationVersion == rhs.applicationVersion )
5502 && ( pEngineName == rhs.pEngineName )
5503 && ( engineVersion == rhs.engineVersion )
5504 && ( apiVersion == rhs.apiVersion );
5505 }
5506
5507 bool operator!=( ApplicationInfo const& rhs ) const
5508 {
5509 return !operator==( rhs );
5510 }
5511
5512 private:
5513 StructureType sType;
5514
5515 public:
5516 const void* pNext;
5517 const char* pApplicationName;
5518 uint32_t applicationVersion;
5519 const char* pEngineName;
5520 uint32_t engineVersion;
5521 uint32_t apiVersion;
5522 };
5523 static_assert( sizeof( ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" );
5524
5525 struct DeviceQueueCreateInfo
5526 {
5527 DeviceQueueCreateInfo( DeviceQueueCreateFlags flags_ = DeviceQueueCreateFlags(), uint32_t queueFamilyIndex_ = 0, uint32_t queueCount_ = 0, const float* pQueuePriorities_ = nullptr )
5528 : sType( StructureType::eDeviceQueueCreateInfo )
5529 , pNext( nullptr )
5530 , flags( flags_ )
5531 , queueFamilyIndex( queueFamilyIndex_ )
5532 , queueCount( queueCount_ )
5533 , pQueuePriorities( pQueuePriorities_ )
5534 {
5535 }
5536
5537 DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs )
5538 {
5539 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5540 }
5541
5542 DeviceQueueCreateInfo& operator=( VkDeviceQueueCreateInfo const & rhs )
5543 {
5544 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5545 return *this;
5546 }
5547
5548 DeviceQueueCreateInfo& setSType( StructureType sType_ )
5549 {
5550 sType = sType_;
5551 return *this;
5552 }
5553
5554 DeviceQueueCreateInfo& setPNext( const void* pNext_ )
5555 {
5556 pNext = pNext_;
5557 return *this;
5558 }
5559
5560 DeviceQueueCreateInfo& setFlags( DeviceQueueCreateFlags flags_ )
5561 {
5562 flags = flags_;
5563 return *this;
5564 }
5565
5566 DeviceQueueCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
5567 {
5568 queueFamilyIndex = queueFamilyIndex_;
5569 return *this;
5570 }
5571
5572 DeviceQueueCreateInfo& setQueueCount( uint32_t queueCount_ )
5573 {
5574 queueCount = queueCount_;
5575 return *this;
5576 }
5577
5578 DeviceQueueCreateInfo& setPQueuePriorities( const float* pQueuePriorities_ )
5579 {
5580 pQueuePriorities = pQueuePriorities_;
5581 return *this;
5582 }
5583
5584 operator const VkDeviceQueueCreateInfo&() const
5585 {
5586 return *reinterpret_cast<const VkDeviceQueueCreateInfo*>(this);
5587 }
5588
5589 bool operator==( DeviceQueueCreateInfo const& rhs ) const
5590 {
5591 return ( sType == rhs.sType )
5592 && ( pNext == rhs.pNext )
5593 && ( flags == rhs.flags )
5594 && ( queueFamilyIndex == rhs.queueFamilyIndex )
5595 && ( queueCount == rhs.queueCount )
5596 && ( pQueuePriorities == rhs.pQueuePriorities );
5597 }
5598
5599 bool operator!=( DeviceQueueCreateInfo const& rhs ) const
5600 {
5601 return !operator==( rhs );
5602 }
5603
5604 private:
5605 StructureType sType;
5606
5607 public:
5608 const void* pNext;
5609 DeviceQueueCreateFlags flags;
5610 uint32_t queueFamilyIndex;
5611 uint32_t queueCount;
5612 const float* pQueuePriorities;
5613 };
5614 static_assert( sizeof( DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ), "struct and wrapper have different size!" );
5615
5616 struct DeviceCreateInfo
5617 {
5618 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 )
5619 : sType( StructureType::eDeviceCreateInfo )
5620 , pNext( nullptr )
5621 , flags( flags_ )
5622 , queueCreateInfoCount( queueCreateInfoCount_ )
5623 , pQueueCreateInfos( pQueueCreateInfos_ )
5624 , enabledLayerCount( enabledLayerCount_ )
5625 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5626 , enabledExtensionCount( enabledExtensionCount_ )
5627 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5628 , pEnabledFeatures( pEnabledFeatures_ )
5629 {
5630 }
5631
5632 DeviceCreateInfo( VkDeviceCreateInfo const & rhs )
5633 {
5634 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5635 }
5636
5637 DeviceCreateInfo& operator=( VkDeviceCreateInfo const & rhs )
5638 {
5639 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5640 return *this;
5641 }
5642
5643 DeviceCreateInfo& setSType( StructureType sType_ )
5644 {
5645 sType = sType_;
5646 return *this;
5647 }
5648
5649 DeviceCreateInfo& setPNext( const void* pNext_ )
5650 {
5651 pNext = pNext_;
5652 return *this;
5653 }
5654
5655 DeviceCreateInfo& setFlags( DeviceCreateFlags flags_ )
5656 {
5657 flags = flags_;
5658 return *this;
5659 }
5660
5661 DeviceCreateInfo& setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ )
5662 {
5663 queueCreateInfoCount = queueCreateInfoCount_;
5664 return *this;
5665 }
5666
5667 DeviceCreateInfo& setPQueueCreateInfos( const DeviceQueueCreateInfo* pQueueCreateInfos_ )
5668 {
5669 pQueueCreateInfos = pQueueCreateInfos_;
5670 return *this;
5671 }
5672
5673 DeviceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5674 {
5675 enabledLayerCount = enabledLayerCount_;
5676 return *this;
5677 }
5678
5679 DeviceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5680 {
5681 ppEnabledLayerNames = ppEnabledLayerNames_;
5682 return *this;
5683 }
5684
5685 DeviceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5686 {
5687 enabledExtensionCount = enabledExtensionCount_;
5688 return *this;
5689 }
5690
5691 DeviceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5692 {
5693 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5694 return *this;
5695 }
5696
5697 DeviceCreateInfo& setPEnabledFeatures( const PhysicalDeviceFeatures* pEnabledFeatures_ )
5698 {
5699 pEnabledFeatures = pEnabledFeatures_;
5700 return *this;
5701 }
5702
5703 operator const VkDeviceCreateInfo&() const
5704 {
5705 return *reinterpret_cast<const VkDeviceCreateInfo*>(this);
5706 }
5707
5708 bool operator==( DeviceCreateInfo const& rhs ) const
5709 {
5710 return ( sType == rhs.sType )
5711 && ( pNext == rhs.pNext )
5712 && ( flags == rhs.flags )
5713 && ( queueCreateInfoCount == rhs.queueCreateInfoCount )
5714 && ( pQueueCreateInfos == rhs.pQueueCreateInfos )
5715 && ( enabledLayerCount == rhs.enabledLayerCount )
5716 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5717 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5718 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames )
5719 && ( pEnabledFeatures == rhs.pEnabledFeatures );
5720 }
5721
5722 bool operator!=( DeviceCreateInfo const& rhs ) const
5723 {
5724 return !operator==( rhs );
5725 }
5726
5727 private:
5728 StructureType sType;
5729
5730 public:
5731 const void* pNext;
5732 DeviceCreateFlags flags;
5733 uint32_t queueCreateInfoCount;
5734 const DeviceQueueCreateInfo* pQueueCreateInfos;
5735 uint32_t enabledLayerCount;
5736 const char* const* ppEnabledLayerNames;
5737 uint32_t enabledExtensionCount;
5738 const char* const* ppEnabledExtensionNames;
5739 const PhysicalDeviceFeatures* pEnabledFeatures;
5740 };
5741 static_assert( sizeof( DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ), "struct and wrapper have different size!" );
5742
5743 struct InstanceCreateInfo
5744 {
5745 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 )
5746 : sType( StructureType::eInstanceCreateInfo )
5747 , pNext( nullptr )
5748 , flags( flags_ )
5749 , pApplicationInfo( pApplicationInfo_ )
5750 , enabledLayerCount( enabledLayerCount_ )
5751 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5752 , enabledExtensionCount( enabledExtensionCount_ )
5753 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5754 {
5755 }
5756
5757 InstanceCreateInfo( VkInstanceCreateInfo const & rhs )
5758 {
5759 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5760 }
5761
5762 InstanceCreateInfo& operator=( VkInstanceCreateInfo const & rhs )
5763 {
5764 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5765 return *this;
5766 }
5767
5768 InstanceCreateInfo& setSType( StructureType sType_ )
5769 {
5770 sType = sType_;
5771 return *this;
5772 }
5773
5774 InstanceCreateInfo& setPNext( const void* pNext_ )
5775 {
5776 pNext = pNext_;
5777 return *this;
5778 }
5779
5780 InstanceCreateInfo& setFlags( InstanceCreateFlags flags_ )
5781 {
5782 flags = flags_;
5783 return *this;
5784 }
5785
5786 InstanceCreateInfo& setPApplicationInfo( const ApplicationInfo* pApplicationInfo_ )
5787 {
5788 pApplicationInfo = pApplicationInfo_;
5789 return *this;
5790 }
5791
5792 InstanceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5793 {
5794 enabledLayerCount = enabledLayerCount_;
5795 return *this;
5796 }
5797
5798 InstanceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5799 {
5800 ppEnabledLayerNames = ppEnabledLayerNames_;
5801 return *this;
5802 }
5803
5804 InstanceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5805 {
5806 enabledExtensionCount = enabledExtensionCount_;
5807 return *this;
5808 }
5809
5810 InstanceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5811 {
5812 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5813 return *this;
5814 }
5815
5816 operator const VkInstanceCreateInfo&() const
5817 {
5818 return *reinterpret_cast<const VkInstanceCreateInfo*>(this);
5819 }
5820
5821 bool operator==( InstanceCreateInfo const& rhs ) const
5822 {
5823 return ( sType == rhs.sType )
5824 && ( pNext == rhs.pNext )
5825 && ( flags == rhs.flags )
5826 && ( pApplicationInfo == rhs.pApplicationInfo )
5827 && ( enabledLayerCount == rhs.enabledLayerCount )
5828 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5829 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5830 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames );
5831 }
5832
5833 bool operator!=( InstanceCreateInfo const& rhs ) const
5834 {
5835 return !operator==( rhs );
5836 }
5837
5838 private:
5839 StructureType sType;
5840
5841 public:
5842 const void* pNext;
5843 InstanceCreateFlags flags;
5844 const ApplicationInfo* pApplicationInfo;
5845 uint32_t enabledLayerCount;
5846 const char* const* ppEnabledLayerNames;
5847 uint32_t enabledExtensionCount;
5848 const char* const* ppEnabledExtensionNames;
5849 };
5850 static_assert( sizeof( InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ), "struct and wrapper have different size!" );
5851
5852 struct MemoryAllocateInfo
5853 {
5854 MemoryAllocateInfo( DeviceSize allocationSize_ = 0, uint32_t memoryTypeIndex_ = 0 )
5855 : sType( StructureType::eMemoryAllocateInfo )
5856 , pNext( nullptr )
5857 , allocationSize( allocationSize_ )
5858 , memoryTypeIndex( memoryTypeIndex_ )
5859 {
5860 }
5861
5862 MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs )
5863 {
5864 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5865 }
5866
5867 MemoryAllocateInfo& operator=( VkMemoryAllocateInfo const & rhs )
5868 {
5869 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5870 return *this;
5871 }
5872
5873 MemoryAllocateInfo& setSType( StructureType sType_ )
5874 {
5875 sType = sType_;
5876 return *this;
5877 }
5878
5879 MemoryAllocateInfo& setPNext( const void* pNext_ )
5880 {
5881 pNext = pNext_;
5882 return *this;
5883 }
5884
5885 MemoryAllocateInfo& setAllocationSize( DeviceSize allocationSize_ )
5886 {
5887 allocationSize = allocationSize_;
5888 return *this;
5889 }
5890
5891 MemoryAllocateInfo& setMemoryTypeIndex( uint32_t memoryTypeIndex_ )
5892 {
5893 memoryTypeIndex = memoryTypeIndex_;
5894 return *this;
5895 }
5896
5897 operator const VkMemoryAllocateInfo&() const
5898 {
5899 return *reinterpret_cast<const VkMemoryAllocateInfo*>(this);
5900 }
5901
5902 bool operator==( MemoryAllocateInfo const& rhs ) const
5903 {
5904 return ( sType == rhs.sType )
5905 && ( pNext == rhs.pNext )
5906 && ( allocationSize == rhs.allocationSize )
5907 && ( memoryTypeIndex == rhs.memoryTypeIndex );
5908 }
5909
5910 bool operator!=( MemoryAllocateInfo const& rhs ) const
5911 {
5912 return !operator==( rhs );
5913 }
5914
5915 private:
5916 StructureType sType;
5917
5918 public:
5919 const void* pNext;
5920 DeviceSize allocationSize;
5921 uint32_t memoryTypeIndex;
5922 };
5923 static_assert( sizeof( MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ), "struct and wrapper have different size!" );
5924
5925 struct MappedMemoryRange
5926 {
5927 MappedMemoryRange( DeviceMemory memory_ = DeviceMemory(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
5928 : sType( StructureType::eMappedMemoryRange )
5929 , pNext( nullptr )
5930 , memory( memory_ )
5931 , offset( offset_ )
5932 , size( size_ )
5933 {
5934 }
5935
5936 MappedMemoryRange( VkMappedMemoryRange const & rhs )
5937 {
5938 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5939 }
5940
5941 MappedMemoryRange& operator=( VkMappedMemoryRange const & rhs )
5942 {
5943 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5944 return *this;
5945 }
5946
5947 MappedMemoryRange& setSType( StructureType sType_ )
5948 {
5949 sType = sType_;
5950 return *this;
5951 }
5952
5953 MappedMemoryRange& setPNext( const void* pNext_ )
5954 {
5955 pNext = pNext_;
5956 return *this;
5957 }
5958
5959 MappedMemoryRange& setMemory( DeviceMemory memory_ )
5960 {
5961 memory = memory_;
5962 return *this;
5963 }
5964
5965 MappedMemoryRange& setOffset( DeviceSize offset_ )
5966 {
5967 offset = offset_;
5968 return *this;
5969 }
5970
5971 MappedMemoryRange& setSize( DeviceSize size_ )
5972 {
5973 size = size_;
5974 return *this;
5975 }
5976
5977 operator const VkMappedMemoryRange&() const
5978 {
5979 return *reinterpret_cast<const VkMappedMemoryRange*>(this);
5980 }
5981
5982 bool operator==( MappedMemoryRange const& rhs ) const
5983 {
5984 return ( sType == rhs.sType )
5985 && ( pNext == rhs.pNext )
5986 && ( memory == rhs.memory )
5987 && ( offset == rhs.offset )
5988 && ( size == rhs.size );
5989 }
5990
5991 bool operator!=( MappedMemoryRange const& rhs ) const
5992 {
5993 return !operator==( rhs );
5994 }
5995
5996 private:
5997 StructureType sType;
5998
5999 public:
6000 const void* pNext;
6001 DeviceMemory memory;
6002 DeviceSize offset;
6003 DeviceSize size;
6004 };
6005 static_assert( sizeof( MappedMemoryRange ) == sizeof( VkMappedMemoryRange ), "struct and wrapper have different size!" );
6006
6007 struct WriteDescriptorSet
6008 {
6009 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 )
6010 : sType( StructureType::eWriteDescriptorSet )
6011 , pNext( nullptr )
6012 , dstSet( dstSet_ )
6013 , dstBinding( dstBinding_ )
6014 , dstArrayElement( dstArrayElement_ )
6015 , descriptorCount( descriptorCount_ )
6016 , descriptorType( descriptorType_ )
6017 , pImageInfo( pImageInfo_ )
6018 , pBufferInfo( pBufferInfo_ )
6019 , pTexelBufferView( pTexelBufferView_ )
6020 {
6021 }
6022
6023 WriteDescriptorSet( VkWriteDescriptorSet const & rhs )
6024 {
6025 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
6026 }
6027
6028 WriteDescriptorSet& operator=( VkWriteDescriptorSet const & rhs )
6029 {
6030 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
6031 return *this;
6032 }
6033
6034 WriteDescriptorSet& setSType( StructureType sType_ )
6035 {
6036 sType = sType_;
6037 return *this;
6038 }
6039
6040 WriteDescriptorSet& setPNext( const void* pNext_ )
6041 {
6042 pNext = pNext_;
6043 return *this;
6044 }
6045
6046 WriteDescriptorSet& setDstSet( DescriptorSet dstSet_ )
6047 {
6048 dstSet = dstSet_;
6049 return *this;
6050 }
6051
6052 WriteDescriptorSet& setDstBinding( uint32_t dstBinding_ )
6053 {
6054 dstBinding = dstBinding_;
6055 return *this;
6056 }
6057
6058 WriteDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6059 {
6060 dstArrayElement = dstArrayElement_;
6061 return *this;
6062 }
6063
6064 WriteDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6065 {
6066 descriptorCount = descriptorCount_;
6067 return *this;
6068 }
6069
6070 WriteDescriptorSet& setDescriptorType( DescriptorType descriptorType_ )
6071 {
6072 descriptorType = descriptorType_;
6073 return *this;
6074 }
6075
6076 WriteDescriptorSet& setPImageInfo( const DescriptorImageInfo* pImageInfo_ )
6077 {
6078 pImageInfo = pImageInfo_;
6079 return *this;
6080 }
6081
6082 WriteDescriptorSet& setPBufferInfo( const DescriptorBufferInfo* pBufferInfo_ )
6083 {
6084 pBufferInfo = pBufferInfo_;
6085 return *this;
6086 }
6087
6088 WriteDescriptorSet& setPTexelBufferView( const BufferView* pTexelBufferView_ )
6089 {
6090 pTexelBufferView = pTexelBufferView_;
6091 return *this;
6092 }
6093
6094 operator const VkWriteDescriptorSet&() const
6095 {
6096 return *reinterpret_cast<const VkWriteDescriptorSet*>(this);
6097 }
6098
6099 bool operator==( WriteDescriptorSet const& rhs ) const
6100 {
6101 return ( sType == rhs.sType )
6102 && ( pNext == rhs.pNext )
6103 && ( dstSet == rhs.dstSet )
6104 && ( dstBinding == rhs.dstBinding )
6105 && ( dstArrayElement == rhs.dstArrayElement )
6106 && ( descriptorCount == rhs.descriptorCount )
6107 && ( descriptorType == rhs.descriptorType )
6108 && ( pImageInfo == rhs.pImageInfo )
6109 && ( pBufferInfo == rhs.pBufferInfo )
6110 && ( pTexelBufferView == rhs.pTexelBufferView );
6111 }
6112
6113 bool operator!=( WriteDescriptorSet const& rhs ) const
6114 {
6115 return !operator==( rhs );
6116 }
6117
6118 private:
6119 StructureType sType;
6120
6121 public:
6122 const void* pNext;
6123 DescriptorSet dstSet;
6124 uint32_t dstBinding;
6125 uint32_t dstArrayElement;
6126 uint32_t descriptorCount;
6127 DescriptorType descriptorType;
6128 const DescriptorImageInfo* pImageInfo;
6129 const DescriptorBufferInfo* pBufferInfo;
6130 const BufferView* pTexelBufferView;
6131 };
6132 static_assert( sizeof( WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ), "struct and wrapper have different size!" );
6133
6134 struct CopyDescriptorSet
6135 {
6136 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 )
6137 : sType( StructureType::eCopyDescriptorSet )
6138 , pNext( nullptr )
6139 , srcSet( srcSet_ )
6140 , srcBinding( srcBinding_ )
6141 , srcArrayElement( srcArrayElement_ )
6142 , dstSet( dstSet_ )
6143 , dstBinding( dstBinding_ )
6144 , dstArrayElement( dstArrayElement_ )
6145 , descriptorCount( descriptorCount_ )
6146 {
6147 }
6148
6149 CopyDescriptorSet( VkCopyDescriptorSet const & rhs )
6150 {
6151 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6152 }
6153
6154 CopyDescriptorSet& operator=( VkCopyDescriptorSet const & rhs )
6155 {
6156 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6157 return *this;
6158 }
6159
6160 CopyDescriptorSet& setSType( StructureType sType_ )
6161 {
6162 sType = sType_;
6163 return *this;
6164 }
6165
6166 CopyDescriptorSet& setPNext( const void* pNext_ )
6167 {
6168 pNext = pNext_;
6169 return *this;
6170 }
6171
6172 CopyDescriptorSet& setSrcSet( DescriptorSet srcSet_ )
6173 {
6174 srcSet = srcSet_;
6175 return *this;
6176 }
6177
6178 CopyDescriptorSet& setSrcBinding( uint32_t srcBinding_ )
6179 {
6180 srcBinding = srcBinding_;
6181 return *this;
6182 }
6183
6184 CopyDescriptorSet& setSrcArrayElement( uint32_t srcArrayElement_ )
6185 {
6186 srcArrayElement = srcArrayElement_;
6187 return *this;
6188 }
6189
6190 CopyDescriptorSet& setDstSet( DescriptorSet dstSet_ )
6191 {
6192 dstSet = dstSet_;
6193 return *this;
6194 }
6195
6196 CopyDescriptorSet& setDstBinding( uint32_t dstBinding_ )
6197 {
6198 dstBinding = dstBinding_;
6199 return *this;
6200 }
6201
6202 CopyDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6203 {
6204 dstArrayElement = dstArrayElement_;
6205 return *this;
6206 }
6207
6208 CopyDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6209 {
6210 descriptorCount = descriptorCount_;
6211 return *this;
6212 }
6213
6214 operator const VkCopyDescriptorSet&() const
6215 {
6216 return *reinterpret_cast<const VkCopyDescriptorSet*>(this);
6217 }
6218
6219 bool operator==( CopyDescriptorSet const& rhs ) const
6220 {
6221 return ( sType == rhs.sType )
6222 && ( pNext == rhs.pNext )
6223 && ( srcSet == rhs.srcSet )
6224 && ( srcBinding == rhs.srcBinding )
6225 && ( srcArrayElement == rhs.srcArrayElement )
6226 && ( dstSet == rhs.dstSet )
6227 && ( dstBinding == rhs.dstBinding )
6228 && ( dstArrayElement == rhs.dstArrayElement )
6229 && ( descriptorCount == rhs.descriptorCount );
6230 }
6231
6232 bool operator!=( CopyDescriptorSet const& rhs ) const
6233 {
6234 return !operator==( rhs );
6235 }
6236
6237 private:
6238 StructureType sType;
6239
6240 public:
6241 const void* pNext;
6242 DescriptorSet srcSet;
6243 uint32_t srcBinding;
6244 uint32_t srcArrayElement;
6245 DescriptorSet dstSet;
6246 uint32_t dstBinding;
6247 uint32_t dstArrayElement;
6248 uint32_t descriptorCount;
6249 };
6250 static_assert( sizeof( CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ), "struct and wrapper have different size!" );
6251
6252 struct BufferViewCreateInfo
6253 {
6254 BufferViewCreateInfo( BufferViewCreateFlags flags_ = BufferViewCreateFlags(), Buffer buffer_ = Buffer(), Format format_ = Format::eUndefined, DeviceSize offset_ = 0, DeviceSize range_ = 0 )
6255 : sType( StructureType::eBufferViewCreateInfo )
6256 , pNext( nullptr )
6257 , flags( flags_ )
6258 , buffer( buffer_ )
6259 , format( format_ )
6260 , offset( offset_ )
6261 , range( range_ )
6262 {
6263 }
6264
6265 BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs )
6266 {
6267 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6268 }
6269
6270 BufferViewCreateInfo& operator=( VkBufferViewCreateInfo const & rhs )
6271 {
6272 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6273 return *this;
6274 }
6275
6276 BufferViewCreateInfo& setSType( StructureType sType_ )
6277 {
6278 sType = sType_;
6279 return *this;
6280 }
6281
6282 BufferViewCreateInfo& setPNext( const void* pNext_ )
6283 {
6284 pNext = pNext_;
6285 return *this;
6286 }
6287
6288 BufferViewCreateInfo& setFlags( BufferViewCreateFlags flags_ )
6289 {
6290 flags = flags_;
6291 return *this;
6292 }
6293
6294 BufferViewCreateInfo& setBuffer( Buffer buffer_ )
6295 {
6296 buffer = buffer_;
6297 return *this;
6298 }
6299
6300 BufferViewCreateInfo& setFormat( Format format_ )
6301 {
6302 format = format_;
6303 return *this;
6304 }
6305
6306 BufferViewCreateInfo& setOffset( DeviceSize offset_ )
6307 {
6308 offset = offset_;
6309 return *this;
6310 }
6311
6312 BufferViewCreateInfo& setRange( DeviceSize range_ )
6313 {
6314 range = range_;
6315 return *this;
6316 }
6317
6318 operator const VkBufferViewCreateInfo&() const
6319 {
6320 return *reinterpret_cast<const VkBufferViewCreateInfo*>(this);
6321 }
6322
6323 bool operator==( BufferViewCreateInfo const& rhs ) const
6324 {
6325 return ( sType == rhs.sType )
6326 && ( pNext == rhs.pNext )
6327 && ( flags == rhs.flags )
6328 && ( buffer == rhs.buffer )
6329 && ( format == rhs.format )
6330 && ( offset == rhs.offset )
6331 && ( range == rhs.range );
6332 }
6333
6334 bool operator!=( BufferViewCreateInfo const& rhs ) const
6335 {
6336 return !operator==( rhs );
6337 }
6338
6339 private:
6340 StructureType sType;
6341
6342 public:
6343 const void* pNext;
6344 BufferViewCreateFlags flags;
6345 Buffer buffer;
6346 Format format;
6347 DeviceSize offset;
6348 DeviceSize range;
6349 };
6350 static_assert( sizeof( BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ), "struct and wrapper have different size!" );
6351
6352 struct ShaderModuleCreateInfo
6353 {
6354 ShaderModuleCreateInfo( ShaderModuleCreateFlags flags_ = ShaderModuleCreateFlags(), size_t codeSize_ = 0, const uint32_t* pCode_ = nullptr )
6355 : sType( StructureType::eShaderModuleCreateInfo )
6356 , pNext( nullptr )
6357 , flags( flags_ )
6358 , codeSize( codeSize_ )
6359 , pCode( pCode_ )
6360 {
6361 }
6362
6363 ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs )
6364 {
6365 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6366 }
6367
6368 ShaderModuleCreateInfo& operator=( VkShaderModuleCreateInfo const & rhs )
6369 {
6370 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6371 return *this;
6372 }
6373
6374 ShaderModuleCreateInfo& setSType( StructureType sType_ )
6375 {
6376 sType = sType_;
6377 return *this;
6378 }
6379
6380 ShaderModuleCreateInfo& setPNext( const void* pNext_ )
6381 {
6382 pNext = pNext_;
6383 return *this;
6384 }
6385
6386 ShaderModuleCreateInfo& setFlags( ShaderModuleCreateFlags flags_ )
6387 {
6388 flags = flags_;
6389 return *this;
6390 }
6391
6392 ShaderModuleCreateInfo& setCodeSize( size_t codeSize_ )
6393 {
6394 codeSize = codeSize_;
6395 return *this;
6396 }
6397
6398 ShaderModuleCreateInfo& setPCode( const uint32_t* pCode_ )
6399 {
6400 pCode = pCode_;
6401 return *this;
6402 }
6403
6404 operator const VkShaderModuleCreateInfo&() const
6405 {
6406 return *reinterpret_cast<const VkShaderModuleCreateInfo*>(this);
6407 }
6408
6409 bool operator==( ShaderModuleCreateInfo const& rhs ) const
6410 {
6411 return ( sType == rhs.sType )
6412 && ( pNext == rhs.pNext )
6413 && ( flags == rhs.flags )
6414 && ( codeSize == rhs.codeSize )
6415 && ( pCode == rhs.pCode );
6416 }
6417
6418 bool operator!=( ShaderModuleCreateInfo const& rhs ) const
6419 {
6420 return !operator==( rhs );
6421 }
6422
6423 private:
6424 StructureType sType;
6425
6426 public:
6427 const void* pNext;
6428 ShaderModuleCreateFlags flags;
6429 size_t codeSize;
6430 const uint32_t* pCode;
6431 };
6432 static_assert( sizeof( ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ), "struct and wrapper have different size!" );
6433
6434 struct DescriptorSetAllocateInfo
6435 {
6436 DescriptorSetAllocateInfo( DescriptorPool descriptorPool_ = DescriptorPool(), uint32_t descriptorSetCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr )
6437 : sType( StructureType::eDescriptorSetAllocateInfo )
6438 , pNext( nullptr )
6439 , descriptorPool( descriptorPool_ )
6440 , descriptorSetCount( descriptorSetCount_ )
6441 , pSetLayouts( pSetLayouts_ )
6442 {
6443 }
6444
6445 DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs )
6446 {
6447 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6448 }
6449
6450 DescriptorSetAllocateInfo& operator=( VkDescriptorSetAllocateInfo const & rhs )
6451 {
6452 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6453 return *this;
6454 }
6455
6456 DescriptorSetAllocateInfo& setSType( StructureType sType_ )
6457 {
6458 sType = sType_;
6459 return *this;
6460 }
6461
6462 DescriptorSetAllocateInfo& setPNext( const void* pNext_ )
6463 {
6464 pNext = pNext_;
6465 return *this;
6466 }
6467
6468 DescriptorSetAllocateInfo& setDescriptorPool( DescriptorPool descriptorPool_ )
6469 {
6470 descriptorPool = descriptorPool_;
6471 return *this;
6472 }
6473
6474 DescriptorSetAllocateInfo& setDescriptorSetCount( uint32_t descriptorSetCount_ )
6475 {
6476 descriptorSetCount = descriptorSetCount_;
6477 return *this;
6478 }
6479
6480 DescriptorSetAllocateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
6481 {
6482 pSetLayouts = pSetLayouts_;
6483 return *this;
6484 }
6485
6486 operator const VkDescriptorSetAllocateInfo&() const
6487 {
6488 return *reinterpret_cast<const VkDescriptorSetAllocateInfo*>(this);
6489 }
6490
6491 bool operator==( DescriptorSetAllocateInfo const& rhs ) const
6492 {
6493 return ( sType == rhs.sType )
6494 && ( pNext == rhs.pNext )
6495 && ( descriptorPool == rhs.descriptorPool )
6496 && ( descriptorSetCount == rhs.descriptorSetCount )
6497 && ( pSetLayouts == rhs.pSetLayouts );
6498 }
6499
6500 bool operator!=( DescriptorSetAllocateInfo const& rhs ) const
6501 {
6502 return !operator==( rhs );
6503 }
6504
6505 private:
6506 StructureType sType;
6507
6508 public:
6509 const void* pNext;
6510 DescriptorPool descriptorPool;
6511 uint32_t descriptorSetCount;
6512 const DescriptorSetLayout* pSetLayouts;
6513 };
6514 static_assert( sizeof( DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ), "struct and wrapper have different size!" );
6515
6516 struct PipelineVertexInputStateCreateInfo
6517 {
6518 PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateFlags flags_ = PipelineVertexInputStateCreateFlags(), uint32_t vertexBindingDescriptionCount_ = 0, const VertexInputBindingDescription* pVertexBindingDescriptions_ = nullptr, uint32_t vertexAttributeDescriptionCount_ = 0, const VertexInputAttributeDescription* pVertexAttributeDescriptions_ = nullptr )
6519 : sType( StructureType::ePipelineVertexInputStateCreateInfo )
6520 , pNext( nullptr )
6521 , flags( flags_ )
6522 , vertexBindingDescriptionCount( vertexBindingDescriptionCount_ )
6523 , pVertexBindingDescriptions( pVertexBindingDescriptions_ )
6524 , vertexAttributeDescriptionCount( vertexAttributeDescriptionCount_ )
6525 , pVertexAttributeDescriptions( pVertexAttributeDescriptions_ )
6526 {
6527 }
6528
6529 PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs )
6530 {
6531 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6532 }
6533
6534 PipelineVertexInputStateCreateInfo& operator=( VkPipelineVertexInputStateCreateInfo const & rhs )
6535 {
6536 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6537 return *this;
6538 }
6539
6540 PipelineVertexInputStateCreateInfo& setSType( StructureType sType_ )
6541 {
6542 sType = sType_;
6543 return *this;
6544 }
6545
6546 PipelineVertexInputStateCreateInfo& setPNext( const void* pNext_ )
6547 {
6548 pNext = pNext_;
6549 return *this;
6550 }
6551
6552 PipelineVertexInputStateCreateInfo& setFlags( PipelineVertexInputStateCreateFlags flags_ )
6553 {
6554 flags = flags_;
6555 return *this;
6556 }
6557
6558 PipelineVertexInputStateCreateInfo& setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ )
6559 {
6560 vertexBindingDescriptionCount = vertexBindingDescriptionCount_;
6561 return *this;
6562 }
6563
6564 PipelineVertexInputStateCreateInfo& setPVertexBindingDescriptions( const VertexInputBindingDescription* pVertexBindingDescriptions_ )
6565 {
6566 pVertexBindingDescriptions = pVertexBindingDescriptions_;
6567 return *this;
6568 }
6569
6570 PipelineVertexInputStateCreateInfo& setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ )
6571 {
6572 vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_;
6573 return *this;
6574 }
6575
6576 PipelineVertexInputStateCreateInfo& setPVertexAttributeDescriptions( const VertexInputAttributeDescription* pVertexAttributeDescriptions_ )
6577 {
6578 pVertexAttributeDescriptions = pVertexAttributeDescriptions_;
6579 return *this;
6580 }
6581
6582 operator const VkPipelineVertexInputStateCreateInfo&() const
6583 {
6584 return *reinterpret_cast<const VkPipelineVertexInputStateCreateInfo*>(this);
6585 }
6586
6587 bool operator==( PipelineVertexInputStateCreateInfo const& rhs ) const
6588 {
6589 return ( sType == rhs.sType )
6590 && ( pNext == rhs.pNext )
6591 && ( flags == rhs.flags )
6592 && ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount )
6593 && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions )
6594 && ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount )
6595 && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions );
6596 }
6597
6598 bool operator!=( PipelineVertexInputStateCreateInfo const& rhs ) const
6599 {
6600 return !operator==( rhs );
6601 }
6602
6603 private:
6604 StructureType sType;
6605
6606 public:
6607 const void* pNext;
6608 PipelineVertexInputStateCreateFlags flags;
6609 uint32_t vertexBindingDescriptionCount;
6610 const VertexInputBindingDescription* pVertexBindingDescriptions;
6611 uint32_t vertexAttributeDescriptionCount;
6612 const VertexInputAttributeDescription* pVertexAttributeDescriptions;
6613 };
6614 static_assert( sizeof( PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ), "struct and wrapper have different size!" );
6615
6616 struct PipelineInputAssemblyStateCreateInfo
6617 {
6618 PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateFlags flags_ = PipelineInputAssemblyStateCreateFlags(), PrimitiveTopology topology_ = PrimitiveTopology::ePointList, Bool32 primitiveRestartEnable_ = 0 )
6619 : sType( StructureType::ePipelineInputAssemblyStateCreateInfo )
6620 , pNext( nullptr )
6621 , flags( flags_ )
6622 , topology( topology_ )
6623 , primitiveRestartEnable( primitiveRestartEnable_ )
6624 {
6625 }
6626
6627 PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6628 {
6629 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6630 }
6631
6632 PipelineInputAssemblyStateCreateInfo& operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6633 {
6634 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6635 return *this;
6636 }
6637
6638 PipelineInputAssemblyStateCreateInfo& setSType( StructureType sType_ )
6639 {
6640 sType = sType_;
6641 return *this;
6642 }
6643
6644 PipelineInputAssemblyStateCreateInfo& setPNext( const void* pNext_ )
6645 {
6646 pNext = pNext_;
6647 return *this;
6648 }
6649
6650 PipelineInputAssemblyStateCreateInfo& setFlags( PipelineInputAssemblyStateCreateFlags flags_ )
6651 {
6652 flags = flags_;
6653 return *this;
6654 }
6655
6656 PipelineInputAssemblyStateCreateInfo& setTopology( PrimitiveTopology topology_ )
6657 {
6658 topology = topology_;
6659 return *this;
6660 }
6661
6662 PipelineInputAssemblyStateCreateInfo& setPrimitiveRestartEnable( Bool32 primitiveRestartEnable_ )
6663 {
6664 primitiveRestartEnable = primitiveRestartEnable_;
6665 return *this;
6666 }
6667
6668 operator const VkPipelineInputAssemblyStateCreateInfo&() const
6669 {
6670 return *reinterpret_cast<const VkPipelineInputAssemblyStateCreateInfo*>(this);
6671 }
6672
6673 bool operator==( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6674 {
6675 return ( sType == rhs.sType )
6676 && ( pNext == rhs.pNext )
6677 && ( flags == rhs.flags )
6678 && ( topology == rhs.topology )
6679 && ( primitiveRestartEnable == rhs.primitiveRestartEnable );
6680 }
6681
6682 bool operator!=( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6683 {
6684 return !operator==( rhs );
6685 }
6686
6687 private:
6688 StructureType sType;
6689
6690 public:
6691 const void* pNext;
6692 PipelineInputAssemblyStateCreateFlags flags;
6693 PrimitiveTopology topology;
6694 Bool32 primitiveRestartEnable;
6695 };
6696 static_assert( sizeof( PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ), "struct and wrapper have different size!" );
6697
6698 struct PipelineTessellationStateCreateInfo
6699 {
6700 PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateFlags flags_ = PipelineTessellationStateCreateFlags(), uint32_t patchControlPoints_ = 0 )
6701 : sType( StructureType::ePipelineTessellationStateCreateInfo )
6702 , pNext( nullptr )
6703 , flags( flags_ )
6704 , patchControlPoints( patchControlPoints_ )
6705 {
6706 }
6707
6708 PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs )
6709 {
6710 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6711 }
6712
6713 PipelineTessellationStateCreateInfo& operator=( VkPipelineTessellationStateCreateInfo const & rhs )
6714 {
6715 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6716 return *this;
6717 }
6718
6719 PipelineTessellationStateCreateInfo& setSType( StructureType sType_ )
6720 {
6721 sType = sType_;
6722 return *this;
6723 }
6724
6725 PipelineTessellationStateCreateInfo& setPNext( const void* pNext_ )
6726 {
6727 pNext = pNext_;
6728 return *this;
6729 }
6730
6731 PipelineTessellationStateCreateInfo& setFlags( PipelineTessellationStateCreateFlags flags_ )
6732 {
6733 flags = flags_;
6734 return *this;
6735 }
6736
6737 PipelineTessellationStateCreateInfo& setPatchControlPoints( uint32_t patchControlPoints_ )
6738 {
6739 patchControlPoints = patchControlPoints_;
6740 return *this;
6741 }
6742
6743 operator const VkPipelineTessellationStateCreateInfo&() const
6744 {
6745 return *reinterpret_cast<const VkPipelineTessellationStateCreateInfo*>(this);
6746 }
6747
6748 bool operator==( PipelineTessellationStateCreateInfo const& rhs ) const
6749 {
6750 return ( sType == rhs.sType )
6751 && ( pNext == rhs.pNext )
6752 && ( flags == rhs.flags )
6753 && ( patchControlPoints == rhs.patchControlPoints );
6754 }
6755
6756 bool operator!=( PipelineTessellationStateCreateInfo const& rhs ) const
6757 {
6758 return !operator==( rhs );
6759 }
6760
6761 private:
6762 StructureType sType;
6763
6764 public:
6765 const void* pNext;
6766 PipelineTessellationStateCreateFlags flags;
6767 uint32_t patchControlPoints;
6768 };
6769 static_assert( sizeof( PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ), "struct and wrapper have different size!" );
6770
6771 struct PipelineViewportStateCreateInfo
6772 {
6773 PipelineViewportStateCreateInfo( PipelineViewportStateCreateFlags flags_ = PipelineViewportStateCreateFlags(), uint32_t viewportCount_ = 0, const Viewport* pViewports_ = nullptr, uint32_t scissorCount_ = 0, const Rect2D* pScissors_ = nullptr )
6774 : sType( StructureType::ePipelineViewportStateCreateInfo )
6775 , pNext( nullptr )
6776 , flags( flags_ )
6777 , viewportCount( viewportCount_ )
6778 , pViewports( pViewports_ )
6779 , scissorCount( scissorCount_ )
6780 , pScissors( pScissors_ )
6781 {
6782 }
6783
6784 PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs )
6785 {
6786 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6787 }
6788
6789 PipelineViewportStateCreateInfo& operator=( VkPipelineViewportStateCreateInfo const & rhs )
6790 {
6791 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6792 return *this;
6793 }
6794
6795 PipelineViewportStateCreateInfo& setSType( StructureType sType_ )
6796 {
6797 sType = sType_;
6798 return *this;
6799 }
6800
6801 PipelineViewportStateCreateInfo& setPNext( const void* pNext_ )
6802 {
6803 pNext = pNext_;
6804 return *this;
6805 }
6806
6807 PipelineViewportStateCreateInfo& setFlags( PipelineViewportStateCreateFlags flags_ )
6808 {
6809 flags = flags_;
6810 return *this;
6811 }
6812
6813 PipelineViewportStateCreateInfo& setViewportCount( uint32_t viewportCount_ )
6814 {
6815 viewportCount = viewportCount_;
6816 return *this;
6817 }
6818
6819 PipelineViewportStateCreateInfo& setPViewports( const Viewport* pViewports_ )
6820 {
6821 pViewports = pViewports_;
6822 return *this;
6823 }
6824
6825 PipelineViewportStateCreateInfo& setScissorCount( uint32_t scissorCount_ )
6826 {
6827 scissorCount = scissorCount_;
6828 return *this;
6829 }
6830
6831 PipelineViewportStateCreateInfo& setPScissors( const Rect2D* pScissors_ )
6832 {
6833 pScissors = pScissors_;
6834 return *this;
6835 }
6836
6837 operator const VkPipelineViewportStateCreateInfo&() const
6838 {
6839 return *reinterpret_cast<const VkPipelineViewportStateCreateInfo*>(this);
6840 }
6841
6842 bool operator==( PipelineViewportStateCreateInfo const& rhs ) const
6843 {
6844 return ( sType == rhs.sType )
6845 && ( pNext == rhs.pNext )
6846 && ( flags == rhs.flags )
6847 && ( viewportCount == rhs.viewportCount )
6848 && ( pViewports == rhs.pViewports )
6849 && ( scissorCount == rhs.scissorCount )
6850 && ( pScissors == rhs.pScissors );
6851 }
6852
6853 bool operator!=( PipelineViewportStateCreateInfo const& rhs ) const
6854 {
6855 return !operator==( rhs );
6856 }
6857
6858 private:
6859 StructureType sType;
6860
6861 public:
6862 const void* pNext;
6863 PipelineViewportStateCreateFlags flags;
6864 uint32_t viewportCount;
6865 const Viewport* pViewports;
6866 uint32_t scissorCount;
6867 const Rect2D* pScissors;
6868 };
6869 static_assert( sizeof( PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ), "struct and wrapper have different size!" );
6870
6871 struct PipelineRasterizationStateCreateInfo
6872 {
6873 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 )
6874 : sType( StructureType::ePipelineRasterizationStateCreateInfo )
6875 , pNext( nullptr )
6876 , flags( flags_ )
6877 , depthClampEnable( depthClampEnable_ )
6878 , rasterizerDiscardEnable( rasterizerDiscardEnable_ )
6879 , polygonMode( polygonMode_ )
6880 , cullMode( cullMode_ )
6881 , frontFace( frontFace_ )
6882 , depthBiasEnable( depthBiasEnable_ )
6883 , depthBiasConstantFactor( depthBiasConstantFactor_ )
6884 , depthBiasClamp( depthBiasClamp_ )
6885 , depthBiasSlopeFactor( depthBiasSlopeFactor_ )
6886 , lineWidth( lineWidth_ )
6887 {
6888 }
6889
6890 PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs )
6891 {
6892 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6893 }
6894
6895 PipelineRasterizationStateCreateInfo& operator=( VkPipelineRasterizationStateCreateInfo const & rhs )
6896 {
6897 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6898 return *this;
6899 }
6900
6901 PipelineRasterizationStateCreateInfo& setSType( StructureType sType_ )
6902 {
6903 sType = sType_;
6904 return *this;
6905 }
6906
6907 PipelineRasterizationStateCreateInfo& setPNext( const void* pNext_ )
6908 {
6909 pNext = pNext_;
6910 return *this;
6911 }
6912
6913 PipelineRasterizationStateCreateInfo& setFlags( PipelineRasterizationStateCreateFlags flags_ )
6914 {
6915 flags = flags_;
6916 return *this;
6917 }
6918
6919 PipelineRasterizationStateCreateInfo& setDepthClampEnable( Bool32 depthClampEnable_ )
6920 {
6921 depthClampEnable = depthClampEnable_;
6922 return *this;
6923 }
6924
6925 PipelineRasterizationStateCreateInfo& setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable_ )
6926 {
6927 rasterizerDiscardEnable = rasterizerDiscardEnable_;
6928 return *this;
6929 }
6930
6931 PipelineRasterizationStateCreateInfo& setPolygonMode( PolygonMode polygonMode_ )
6932 {
6933 polygonMode = polygonMode_;
6934 return *this;
6935 }
6936
6937 PipelineRasterizationStateCreateInfo& setCullMode( CullModeFlags cullMode_ )
6938 {
6939 cullMode = cullMode_;
6940 return *this;
6941 }
6942
6943 PipelineRasterizationStateCreateInfo& setFrontFace( FrontFace frontFace_ )
6944 {
6945 frontFace = frontFace_;
6946 return *this;
6947 }
6948
6949 PipelineRasterizationStateCreateInfo& setDepthBiasEnable( Bool32 depthBiasEnable_ )
6950 {
6951 depthBiasEnable = depthBiasEnable_;
6952 return *this;
6953 }
6954
6955 PipelineRasterizationStateCreateInfo& setDepthBiasConstantFactor( float depthBiasConstantFactor_ )
6956 {
6957 depthBiasConstantFactor = depthBiasConstantFactor_;
6958 return *this;
6959 }
6960
6961 PipelineRasterizationStateCreateInfo& setDepthBiasClamp( float depthBiasClamp_ )
6962 {
6963 depthBiasClamp = depthBiasClamp_;
6964 return *this;
6965 }
6966
6967 PipelineRasterizationStateCreateInfo& setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ )
6968 {
6969 depthBiasSlopeFactor = depthBiasSlopeFactor_;
6970 return *this;
6971 }
6972
6973 PipelineRasterizationStateCreateInfo& setLineWidth( float lineWidth_ )
6974 {
6975 lineWidth = lineWidth_;
6976 return *this;
6977 }
6978
6979 operator const VkPipelineRasterizationStateCreateInfo&() const
6980 {
6981 return *reinterpret_cast<const VkPipelineRasterizationStateCreateInfo*>(this);
6982 }
6983
6984 bool operator==( PipelineRasterizationStateCreateInfo const& rhs ) const
6985 {
6986 return ( sType == rhs.sType )
6987 && ( pNext == rhs.pNext )
6988 && ( flags == rhs.flags )
6989 && ( depthClampEnable == rhs.depthClampEnable )
6990 && ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable )
6991 && ( polygonMode == rhs.polygonMode )
6992 && ( cullMode == rhs.cullMode )
6993 && ( frontFace == rhs.frontFace )
6994 && ( depthBiasEnable == rhs.depthBiasEnable )
6995 && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor )
6996 && ( depthBiasClamp == rhs.depthBiasClamp )
6997 && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor )
6998 && ( lineWidth == rhs.lineWidth );
6999 }
7000
7001 bool operator!=( PipelineRasterizationStateCreateInfo const& rhs ) const
7002 {
7003 return !operator==( rhs );
7004 }
7005
7006 private:
7007 StructureType sType;
7008
7009 public:
7010 const void* pNext;
7011 PipelineRasterizationStateCreateFlags flags;
7012 Bool32 depthClampEnable;
7013 Bool32 rasterizerDiscardEnable;
7014 PolygonMode polygonMode;
7015 CullModeFlags cullMode;
7016 FrontFace frontFace;
7017 Bool32 depthBiasEnable;
7018 float depthBiasConstantFactor;
7019 float depthBiasClamp;
7020 float depthBiasSlopeFactor;
7021 float lineWidth;
7022 };
7023 static_assert( sizeof( PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ), "struct and wrapper have different size!" );
7024
7025 struct PipelineDepthStencilStateCreateInfo
7026 {
7027 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 )
7028 : sType( StructureType::ePipelineDepthStencilStateCreateInfo )
7029 , pNext( nullptr )
7030 , flags( flags_ )
7031 , depthTestEnable( depthTestEnable_ )
7032 , depthWriteEnable( depthWriteEnable_ )
7033 , depthCompareOp( depthCompareOp_ )
7034 , depthBoundsTestEnable( depthBoundsTestEnable_ )
7035 , stencilTestEnable( stencilTestEnable_ )
7036 , front( front_ )
7037 , back( back_ )
7038 , minDepthBounds( minDepthBounds_ )
7039 , maxDepthBounds( maxDepthBounds_ )
7040 {
7041 }
7042
7043 PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs )
7044 {
7045 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
7046 }
7047
7048 PipelineDepthStencilStateCreateInfo& operator=( VkPipelineDepthStencilStateCreateInfo const & rhs )
7049 {
7050 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
7051 return *this;
7052 }
7053
7054 PipelineDepthStencilStateCreateInfo& setSType( StructureType sType_ )
7055 {
7056 sType = sType_;
7057 return *this;
7058 }
7059
7060 PipelineDepthStencilStateCreateInfo& setPNext( const void* pNext_ )
7061 {
7062 pNext = pNext_;
7063 return *this;
7064 }
7065
7066 PipelineDepthStencilStateCreateInfo& setFlags( PipelineDepthStencilStateCreateFlags flags_ )
7067 {
7068 flags = flags_;
7069 return *this;
7070 }
7071
7072 PipelineDepthStencilStateCreateInfo& setDepthTestEnable( Bool32 depthTestEnable_ )
7073 {
7074 depthTestEnable = depthTestEnable_;
7075 return *this;
7076 }
7077
7078 PipelineDepthStencilStateCreateInfo& setDepthWriteEnable( Bool32 depthWriteEnable_ )
7079 {
7080 depthWriteEnable = depthWriteEnable_;
7081 return *this;
7082 }
7083
7084 PipelineDepthStencilStateCreateInfo& setDepthCompareOp( CompareOp depthCompareOp_ )
7085 {
7086 depthCompareOp = depthCompareOp_;
7087 return *this;
7088 }
7089
7090 PipelineDepthStencilStateCreateInfo& setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable_ )
7091 {
7092 depthBoundsTestEnable = depthBoundsTestEnable_;
7093 return *this;
7094 }
7095
7096 PipelineDepthStencilStateCreateInfo& setStencilTestEnable( Bool32 stencilTestEnable_ )
7097 {
7098 stencilTestEnable = stencilTestEnable_;
7099 return *this;
7100 }
7101
7102 PipelineDepthStencilStateCreateInfo& setFront( StencilOpState front_ )
7103 {
7104 front = front_;
7105 return *this;
7106 }
7107
7108 PipelineDepthStencilStateCreateInfo& setBack( StencilOpState back_ )
7109 {
7110 back = back_;
7111 return *this;
7112 }
7113
7114 PipelineDepthStencilStateCreateInfo& setMinDepthBounds( float minDepthBounds_ )
7115 {
7116 minDepthBounds = minDepthBounds_;
7117 return *this;
7118 }
7119
7120 PipelineDepthStencilStateCreateInfo& setMaxDepthBounds( float maxDepthBounds_ )
7121 {
7122 maxDepthBounds = maxDepthBounds_;
7123 return *this;
7124 }
7125
7126 operator const VkPipelineDepthStencilStateCreateInfo&() const
7127 {
7128 return *reinterpret_cast<const VkPipelineDepthStencilStateCreateInfo*>(this);
7129 }
7130
7131 bool operator==( PipelineDepthStencilStateCreateInfo const& rhs ) const
7132 {
7133 return ( sType == rhs.sType )
7134 && ( pNext == rhs.pNext )
7135 && ( flags == rhs.flags )
7136 && ( depthTestEnable == rhs.depthTestEnable )
7137 && ( depthWriteEnable == rhs.depthWriteEnable )
7138 && ( depthCompareOp == rhs.depthCompareOp )
7139 && ( depthBoundsTestEnable == rhs.depthBoundsTestEnable )
7140 && ( stencilTestEnable == rhs.stencilTestEnable )
7141 && ( front == rhs.front )
7142 && ( back == rhs.back )
7143 && ( minDepthBounds == rhs.minDepthBounds )
7144 && ( maxDepthBounds == rhs.maxDepthBounds );
7145 }
7146
7147 bool operator!=( PipelineDepthStencilStateCreateInfo const& rhs ) const
7148 {
7149 return !operator==( rhs );
7150 }
7151
7152 private:
7153 StructureType sType;
7154
7155 public:
7156 const void* pNext;
7157 PipelineDepthStencilStateCreateFlags flags;
7158 Bool32 depthTestEnable;
7159 Bool32 depthWriteEnable;
7160 CompareOp depthCompareOp;
7161 Bool32 depthBoundsTestEnable;
7162 Bool32 stencilTestEnable;
7163 StencilOpState front;
7164 StencilOpState back;
7165 float minDepthBounds;
7166 float maxDepthBounds;
7167 };
7168 static_assert( sizeof( PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ), "struct and wrapper have different size!" );
7169
7170 struct PipelineCacheCreateInfo
7171 {
7172 PipelineCacheCreateInfo( PipelineCacheCreateFlags flags_ = PipelineCacheCreateFlags(), size_t initialDataSize_ = 0, const void* pInitialData_ = nullptr )
7173 : sType( StructureType::ePipelineCacheCreateInfo )
7174 , pNext( nullptr )
7175 , flags( flags_ )
7176 , initialDataSize( initialDataSize_ )
7177 , pInitialData( pInitialData_ )
7178 {
7179 }
7180
7181 PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs )
7182 {
7183 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7184 }
7185
7186 PipelineCacheCreateInfo& operator=( VkPipelineCacheCreateInfo const & rhs )
7187 {
7188 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7189 return *this;
7190 }
7191
7192 PipelineCacheCreateInfo& setSType( StructureType sType_ )
7193 {
7194 sType = sType_;
7195 return *this;
7196 }
7197
7198 PipelineCacheCreateInfo& setPNext( const void* pNext_ )
7199 {
7200 pNext = pNext_;
7201 return *this;
7202 }
7203
7204 PipelineCacheCreateInfo& setFlags( PipelineCacheCreateFlags flags_ )
7205 {
7206 flags = flags_;
7207 return *this;
7208 }
7209
7210 PipelineCacheCreateInfo& setInitialDataSize( size_t initialDataSize_ )
7211 {
7212 initialDataSize = initialDataSize_;
7213 return *this;
7214 }
7215
7216 PipelineCacheCreateInfo& setPInitialData( const void* pInitialData_ )
7217 {
7218 pInitialData = pInitialData_;
7219 return *this;
7220 }
7221
7222 operator const VkPipelineCacheCreateInfo&() const
7223 {
7224 return *reinterpret_cast<const VkPipelineCacheCreateInfo*>(this);
7225 }
7226
7227 bool operator==( PipelineCacheCreateInfo const& rhs ) const
7228 {
7229 return ( sType == rhs.sType )
7230 && ( pNext == rhs.pNext )
7231 && ( flags == rhs.flags )
7232 && ( initialDataSize == rhs.initialDataSize )
7233 && ( pInitialData == rhs.pInitialData );
7234 }
7235
7236 bool operator!=( PipelineCacheCreateInfo const& rhs ) const
7237 {
7238 return !operator==( rhs );
7239 }
7240
7241 private:
7242 StructureType sType;
7243
7244 public:
7245 const void* pNext;
7246 PipelineCacheCreateFlags flags;
7247 size_t initialDataSize;
7248 const void* pInitialData;
7249 };
7250 static_assert( sizeof( PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ), "struct and wrapper have different size!" );
7251
7252 struct SamplerCreateInfo
7253 {
7254 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 )
7255 : sType( StructureType::eSamplerCreateInfo )
7256 , pNext( nullptr )
7257 , flags( flags_ )
7258 , magFilter( magFilter_ )
7259 , minFilter( minFilter_ )
7260 , mipmapMode( mipmapMode_ )
7261 , addressModeU( addressModeU_ )
7262 , addressModeV( addressModeV_ )
7263 , addressModeW( addressModeW_ )
7264 , mipLodBias( mipLodBias_ )
7265 , anisotropyEnable( anisotropyEnable_ )
7266 , maxAnisotropy( maxAnisotropy_ )
7267 , compareEnable( compareEnable_ )
7268 , compareOp( compareOp_ )
7269 , minLod( minLod_ )
7270 , maxLod( maxLod_ )
7271 , borderColor( borderColor_ )
7272 , unnormalizedCoordinates( unnormalizedCoordinates_ )
7273 {
7274 }
7275
7276 SamplerCreateInfo( VkSamplerCreateInfo const & rhs )
7277 {
7278 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7279 }
7280
7281 SamplerCreateInfo& operator=( VkSamplerCreateInfo const & rhs )
7282 {
7283 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7284 return *this;
7285 }
7286
7287 SamplerCreateInfo& setSType( StructureType sType_ )
7288 {
7289 sType = sType_;
7290 return *this;
7291 }
7292
7293 SamplerCreateInfo& setPNext( const void* pNext_ )
7294 {
7295 pNext = pNext_;
7296 return *this;
7297 }
7298
7299 SamplerCreateInfo& setFlags( SamplerCreateFlags flags_ )
7300 {
7301 flags = flags_;
7302 return *this;
7303 }
7304
7305 SamplerCreateInfo& setMagFilter( Filter magFilter_ )
7306 {
7307 magFilter = magFilter_;
7308 return *this;
7309 }
7310
7311 SamplerCreateInfo& setMinFilter( Filter minFilter_ )
7312 {
7313 minFilter = minFilter_;
7314 return *this;
7315 }
7316
7317 SamplerCreateInfo& setMipmapMode( SamplerMipmapMode mipmapMode_ )
7318 {
7319 mipmapMode = mipmapMode_;
7320 return *this;
7321 }
7322
7323 SamplerCreateInfo& setAddressModeU( SamplerAddressMode addressModeU_ )
7324 {
7325 addressModeU = addressModeU_;
7326 return *this;
7327 }
7328
7329 SamplerCreateInfo& setAddressModeV( SamplerAddressMode addressModeV_ )
7330 {
7331 addressModeV = addressModeV_;
7332 return *this;
7333 }
7334
7335 SamplerCreateInfo& setAddressModeW( SamplerAddressMode addressModeW_ )
7336 {
7337 addressModeW = addressModeW_;
7338 return *this;
7339 }
7340
7341 SamplerCreateInfo& setMipLodBias( float mipLodBias_ )
7342 {
7343 mipLodBias = mipLodBias_;
7344 return *this;
7345 }
7346
7347 SamplerCreateInfo& setAnisotropyEnable( Bool32 anisotropyEnable_ )
7348 {
7349 anisotropyEnable = anisotropyEnable_;
7350 return *this;
7351 }
7352
7353 SamplerCreateInfo& setMaxAnisotropy( float maxAnisotropy_ )
7354 {
7355 maxAnisotropy = maxAnisotropy_;
7356 return *this;
7357 }
7358
7359 SamplerCreateInfo& setCompareEnable( Bool32 compareEnable_ )
7360 {
7361 compareEnable = compareEnable_;
7362 return *this;
7363 }
7364
7365 SamplerCreateInfo& setCompareOp( CompareOp compareOp_ )
7366 {
7367 compareOp = compareOp_;
7368 return *this;
7369 }
7370
7371 SamplerCreateInfo& setMinLod( float minLod_ )
7372 {
7373 minLod = minLod_;
7374 return *this;
7375 }
7376
7377 SamplerCreateInfo& setMaxLod( float maxLod_ )
7378 {
7379 maxLod = maxLod_;
7380 return *this;
7381 }
7382
7383 SamplerCreateInfo& setBorderColor( BorderColor borderColor_ )
7384 {
7385 borderColor = borderColor_;
7386 return *this;
7387 }
7388
7389 SamplerCreateInfo& setUnnormalizedCoordinates( Bool32 unnormalizedCoordinates_ )
7390 {
7391 unnormalizedCoordinates = unnormalizedCoordinates_;
7392 return *this;
7393 }
7394
7395 operator const VkSamplerCreateInfo&() const
7396 {
7397 return *reinterpret_cast<const VkSamplerCreateInfo*>(this);
7398 }
7399
7400 bool operator==( SamplerCreateInfo const& rhs ) const
7401 {
7402 return ( sType == rhs.sType )
7403 && ( pNext == rhs.pNext )
7404 && ( flags == rhs.flags )
7405 && ( magFilter == rhs.magFilter )
7406 && ( minFilter == rhs.minFilter )
7407 && ( mipmapMode == rhs.mipmapMode )
7408 && ( addressModeU == rhs.addressModeU )
7409 && ( addressModeV == rhs.addressModeV )
7410 && ( addressModeW == rhs.addressModeW )
7411 && ( mipLodBias == rhs.mipLodBias )
7412 && ( anisotropyEnable == rhs.anisotropyEnable )
7413 && ( maxAnisotropy == rhs.maxAnisotropy )
7414 && ( compareEnable == rhs.compareEnable )
7415 && ( compareOp == rhs.compareOp )
7416 && ( minLod == rhs.minLod )
7417 && ( maxLod == rhs.maxLod )
7418 && ( borderColor == rhs.borderColor )
7419 && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates );
7420 }
7421
7422 bool operator!=( SamplerCreateInfo const& rhs ) const
7423 {
7424 return !operator==( rhs );
7425 }
7426
7427 private:
7428 StructureType sType;
7429
7430 public:
7431 const void* pNext;
7432 SamplerCreateFlags flags;
7433 Filter magFilter;
7434 Filter minFilter;
7435 SamplerMipmapMode mipmapMode;
7436 SamplerAddressMode addressModeU;
7437 SamplerAddressMode addressModeV;
7438 SamplerAddressMode addressModeW;
7439 float mipLodBias;
7440 Bool32 anisotropyEnable;
7441 float maxAnisotropy;
7442 Bool32 compareEnable;
7443 CompareOp compareOp;
7444 float minLod;
7445 float maxLod;
7446 BorderColor borderColor;
7447 Bool32 unnormalizedCoordinates;
7448 };
7449 static_assert( sizeof( SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ), "struct and wrapper have different size!" );
7450
7451 struct CommandBufferAllocateInfo
7452 {
7453 CommandBufferAllocateInfo( CommandPool commandPool_ = CommandPool(), CommandBufferLevel level_ = CommandBufferLevel::ePrimary, uint32_t commandBufferCount_ = 0 )
7454 : sType( StructureType::eCommandBufferAllocateInfo )
7455 , pNext( nullptr )
7456 , commandPool( commandPool_ )
7457 , level( level_ )
7458 , commandBufferCount( commandBufferCount_ )
7459 {
7460 }
7461
7462 CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs )
7463 {
7464 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7465 }
7466
7467 CommandBufferAllocateInfo& operator=( VkCommandBufferAllocateInfo const & rhs )
7468 {
7469 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7470 return *this;
7471 }
7472
7473 CommandBufferAllocateInfo& setSType( StructureType sType_ )
7474 {
7475 sType = sType_;
7476 return *this;
7477 }
7478
7479 CommandBufferAllocateInfo& setPNext( const void* pNext_ )
7480 {
7481 pNext = pNext_;
7482 return *this;
7483 }
7484
7485 CommandBufferAllocateInfo& setCommandPool( CommandPool commandPool_ )
7486 {
7487 commandPool = commandPool_;
7488 return *this;
7489 }
7490
7491 CommandBufferAllocateInfo& setLevel( CommandBufferLevel level_ )
7492 {
7493 level = level_;
7494 return *this;
7495 }
7496
7497 CommandBufferAllocateInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
7498 {
7499 commandBufferCount = commandBufferCount_;
7500 return *this;
7501 }
7502
7503 operator const VkCommandBufferAllocateInfo&() const
7504 {
7505 return *reinterpret_cast<const VkCommandBufferAllocateInfo*>(this);
7506 }
7507
7508 bool operator==( CommandBufferAllocateInfo const& rhs ) const
7509 {
7510 return ( sType == rhs.sType )
7511 && ( pNext == rhs.pNext )
7512 && ( commandPool == rhs.commandPool )
7513 && ( level == rhs.level )
7514 && ( commandBufferCount == rhs.commandBufferCount );
7515 }
7516
7517 bool operator!=( CommandBufferAllocateInfo const& rhs ) const
7518 {
7519 return !operator==( rhs );
7520 }
7521
7522 private:
7523 StructureType sType;
7524
7525 public:
7526 const void* pNext;
7527 CommandPool commandPool;
7528 CommandBufferLevel level;
7529 uint32_t commandBufferCount;
7530 };
7531 static_assert( sizeof( CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ), "struct and wrapper have different size!" );
7532
7533 struct RenderPassBeginInfo
7534 {
7535 RenderPassBeginInfo( RenderPass renderPass_ = RenderPass(), Framebuffer framebuffer_ = Framebuffer(), Rect2D renderArea_ = Rect2D(), uint32_t clearValueCount_ = 0, const ClearValue* pClearValues_ = nullptr )
7536 : sType( StructureType::eRenderPassBeginInfo )
7537 , pNext( nullptr )
7538 , renderPass( renderPass_ )
7539 , framebuffer( framebuffer_ )
7540 , renderArea( renderArea_ )
7541 , clearValueCount( clearValueCount_ )
7542 , pClearValues( pClearValues_ )
7543 {
7544 }
7545
7546 RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs )
7547 {
7548 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7549 }
7550
7551 RenderPassBeginInfo& operator=( VkRenderPassBeginInfo const & rhs )
7552 {
7553 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7554 return *this;
7555 }
7556
7557 RenderPassBeginInfo& setSType( StructureType sType_ )
7558 {
7559 sType = sType_;
7560 return *this;
7561 }
7562
7563 RenderPassBeginInfo& setPNext( const void* pNext_ )
7564 {
7565 pNext = pNext_;
7566 return *this;
7567 }
7568
7569 RenderPassBeginInfo& setRenderPass( RenderPass renderPass_ )
7570 {
7571 renderPass = renderPass_;
7572 return *this;
7573 }
7574
7575 RenderPassBeginInfo& setFramebuffer( Framebuffer framebuffer_ )
7576 {
7577 framebuffer = framebuffer_;
7578 return *this;
7579 }
7580
7581 RenderPassBeginInfo& setRenderArea( Rect2D renderArea_ )
7582 {
7583 renderArea = renderArea_;
7584 return *this;
7585 }
7586
7587 RenderPassBeginInfo& setClearValueCount( uint32_t clearValueCount_ )
7588 {
7589 clearValueCount = clearValueCount_;
7590 return *this;
7591 }
7592
7593 RenderPassBeginInfo& setPClearValues( const ClearValue* pClearValues_ )
7594 {
7595 pClearValues = pClearValues_;
7596 return *this;
7597 }
7598
7599 operator const VkRenderPassBeginInfo&() const
7600 {
7601 return *reinterpret_cast<const VkRenderPassBeginInfo*>(this);
7602 }
7603
7604 bool operator==( RenderPassBeginInfo const& rhs ) const
7605 {
7606 return ( sType == rhs.sType )
7607 && ( pNext == rhs.pNext )
7608 && ( renderPass == rhs.renderPass )
7609 && ( framebuffer == rhs.framebuffer )
7610 && ( renderArea == rhs.renderArea )
7611 && ( clearValueCount == rhs.clearValueCount )
7612 && ( pClearValues == rhs.pClearValues );
7613 }
7614
7615 bool operator!=( RenderPassBeginInfo const& rhs ) const
7616 {
7617 return !operator==( rhs );
7618 }
7619
7620 private:
7621 StructureType sType;
7622
7623 public:
7624 const void* pNext;
7625 RenderPass renderPass;
7626 Framebuffer framebuffer;
7627 Rect2D renderArea;
7628 uint32_t clearValueCount;
7629 const ClearValue* pClearValues;
7630 };
7631 static_assert( sizeof( RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ), "struct and wrapper have different size!" );
7632
7633 struct EventCreateInfo
7634 {
7635 EventCreateInfo( EventCreateFlags flags_ = EventCreateFlags() )
7636 : sType( StructureType::eEventCreateInfo )
7637 , pNext( nullptr )
7638 , flags( flags_ )
7639 {
7640 }
7641
7642 EventCreateInfo( VkEventCreateInfo const & rhs )
7643 {
7644 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7645 }
7646
7647 EventCreateInfo& operator=( VkEventCreateInfo const & rhs )
7648 {
7649 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7650 return *this;
7651 }
7652
7653 EventCreateInfo& setSType( StructureType sType_ )
7654 {
7655 sType = sType_;
7656 return *this;
7657 }
7658
7659 EventCreateInfo& setPNext( const void* pNext_ )
7660 {
7661 pNext = pNext_;
7662 return *this;
7663 }
7664
7665 EventCreateInfo& setFlags( EventCreateFlags flags_ )
7666 {
7667 flags = flags_;
7668 return *this;
7669 }
7670
7671 operator const VkEventCreateInfo&() const
7672 {
7673 return *reinterpret_cast<const VkEventCreateInfo*>(this);
7674 }
7675
7676 bool operator==( EventCreateInfo const& rhs ) const
7677 {
7678 return ( sType == rhs.sType )
7679 && ( pNext == rhs.pNext )
7680 && ( flags == rhs.flags );
7681 }
7682
7683 bool operator!=( EventCreateInfo const& rhs ) const
7684 {
7685 return !operator==( rhs );
7686 }
7687
7688 private:
7689 StructureType sType;
7690
7691 public:
7692 const void* pNext;
7693 EventCreateFlags flags;
7694 };
7695 static_assert( sizeof( EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" );
7696
7697 struct SemaphoreCreateInfo
7698 {
7699 SemaphoreCreateInfo( SemaphoreCreateFlags flags_ = SemaphoreCreateFlags() )
7700 : sType( StructureType::eSemaphoreCreateInfo )
7701 , pNext( nullptr )
7702 , flags( flags_ )
7703 {
7704 }
7705
7706 SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs )
7707 {
7708 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7709 }
7710
7711 SemaphoreCreateInfo& operator=( VkSemaphoreCreateInfo const & rhs )
7712 {
7713 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7714 return *this;
7715 }
7716
7717 SemaphoreCreateInfo& setSType( StructureType sType_ )
7718 {
7719 sType = sType_;
7720 return *this;
7721 }
7722
7723 SemaphoreCreateInfo& setPNext( const void* pNext_ )
7724 {
7725 pNext = pNext_;
7726 return *this;
7727 }
7728
7729 SemaphoreCreateInfo& setFlags( SemaphoreCreateFlags flags_ )
7730 {
7731 flags = flags_;
7732 return *this;
7733 }
7734
7735 operator const VkSemaphoreCreateInfo&() const
7736 {
7737 return *reinterpret_cast<const VkSemaphoreCreateInfo*>(this);
7738 }
7739
7740 bool operator==( SemaphoreCreateInfo const& rhs ) const
7741 {
7742 return ( sType == rhs.sType )
7743 && ( pNext == rhs.pNext )
7744 && ( flags == rhs.flags );
7745 }
7746
7747 bool operator!=( SemaphoreCreateInfo const& rhs ) const
7748 {
7749 return !operator==( rhs );
7750 }
7751
7752 private:
7753 StructureType sType;
7754
7755 public:
7756 const void* pNext;
7757 SemaphoreCreateFlags flags;
7758 };
7759 static_assert( sizeof( SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ), "struct and wrapper have different size!" );
7760
7761 struct FramebufferCreateInfo
7762 {
7763 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 )
7764 : sType( StructureType::eFramebufferCreateInfo )
7765 , pNext( nullptr )
7766 , flags( flags_ )
7767 , renderPass( renderPass_ )
7768 , attachmentCount( attachmentCount_ )
7769 , pAttachments( pAttachments_ )
7770 , width( width_ )
7771 , height( height_ )
7772 , layers( layers_ )
7773 {
7774 }
7775
7776 FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs )
7777 {
7778 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7779 }
7780
7781 FramebufferCreateInfo& operator=( VkFramebufferCreateInfo const & rhs )
7782 {
7783 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7784 return *this;
7785 }
7786
7787 FramebufferCreateInfo& setSType( StructureType sType_ )
7788 {
7789 sType = sType_;
7790 return *this;
7791 }
7792
7793 FramebufferCreateInfo& setPNext( const void* pNext_ )
7794 {
7795 pNext = pNext_;
7796 return *this;
7797 }
7798
7799 FramebufferCreateInfo& setFlags( FramebufferCreateFlags flags_ )
7800 {
7801 flags = flags_;
7802 return *this;
7803 }
7804
7805 FramebufferCreateInfo& setRenderPass( RenderPass renderPass_ )
7806 {
7807 renderPass = renderPass_;
7808 return *this;
7809 }
7810
7811 FramebufferCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
7812 {
7813 attachmentCount = attachmentCount_;
7814 return *this;
7815 }
7816
7817 FramebufferCreateInfo& setPAttachments( const ImageView* pAttachments_ )
7818 {
7819 pAttachments = pAttachments_;
7820 return *this;
7821 }
7822
7823 FramebufferCreateInfo& setWidth( uint32_t width_ )
7824 {
7825 width = width_;
7826 return *this;
7827 }
7828
7829 FramebufferCreateInfo& setHeight( uint32_t height_ )
7830 {
7831 height = height_;
7832 return *this;
7833 }
7834
7835 FramebufferCreateInfo& setLayers( uint32_t layers_ )
7836 {
7837 layers = layers_;
7838 return *this;
7839 }
7840
7841 operator const VkFramebufferCreateInfo&() const
7842 {
7843 return *reinterpret_cast<const VkFramebufferCreateInfo*>(this);
7844 }
7845
7846 bool operator==( FramebufferCreateInfo const& rhs ) const
7847 {
7848 return ( sType == rhs.sType )
7849 && ( pNext == rhs.pNext )
7850 && ( flags == rhs.flags )
7851 && ( renderPass == rhs.renderPass )
7852 && ( attachmentCount == rhs.attachmentCount )
7853 && ( pAttachments == rhs.pAttachments )
7854 && ( width == rhs.width )
7855 && ( height == rhs.height )
7856 && ( layers == rhs.layers );
7857 }
7858
7859 bool operator!=( FramebufferCreateInfo const& rhs ) const
7860 {
7861 return !operator==( rhs );
7862 }
7863
7864 private:
7865 StructureType sType;
7866
7867 public:
7868 const void* pNext;
7869 FramebufferCreateFlags flags;
7870 RenderPass renderPass;
7871 uint32_t attachmentCount;
7872 const ImageView* pAttachments;
7873 uint32_t width;
7874 uint32_t height;
7875 uint32_t layers;
7876 };
7877 static_assert( sizeof( FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ), "struct and wrapper have different size!" );
7878
7879 struct DisplayModeCreateInfoKHR
7880 {
7881 DisplayModeCreateInfoKHR( DisplayModeCreateFlagsKHR flags_ = DisplayModeCreateFlagsKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
7882 : sType( StructureType::eDisplayModeCreateInfoKHR )
7883 , pNext( nullptr )
7884 , flags( flags_ )
7885 , parameters( parameters_ )
7886 {
7887 }
7888
7889 DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs )
7890 {
7891 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7892 }
7893
7894 DisplayModeCreateInfoKHR& operator=( VkDisplayModeCreateInfoKHR const & rhs )
7895 {
7896 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7897 return *this;
7898 }
7899
7900 DisplayModeCreateInfoKHR& setSType( StructureType sType_ )
7901 {
7902 sType = sType_;
7903 return *this;
7904 }
7905
7906 DisplayModeCreateInfoKHR& setPNext( const void* pNext_ )
7907 {
7908 pNext = pNext_;
7909 return *this;
7910 }
7911
7912 DisplayModeCreateInfoKHR& setFlags( DisplayModeCreateFlagsKHR flags_ )
7913 {
7914 flags = flags_;
7915 return *this;
7916 }
7917
7918 DisplayModeCreateInfoKHR& setParameters( DisplayModeParametersKHR parameters_ )
7919 {
7920 parameters = parameters_;
7921 return *this;
7922 }
7923
7924 operator const VkDisplayModeCreateInfoKHR&() const
7925 {
7926 return *reinterpret_cast<const VkDisplayModeCreateInfoKHR*>(this);
7927 }
7928
7929 bool operator==( DisplayModeCreateInfoKHR const& rhs ) const
7930 {
7931 return ( sType == rhs.sType )
7932 && ( pNext == rhs.pNext )
7933 && ( flags == rhs.flags )
7934 && ( parameters == rhs.parameters );
7935 }
7936
7937 bool operator!=( DisplayModeCreateInfoKHR const& rhs ) const
7938 {
7939 return !operator==( rhs );
7940 }
7941
7942 private:
7943 StructureType sType;
7944
7945 public:
7946 const void* pNext;
7947 DisplayModeCreateFlagsKHR flags;
7948 DisplayModeParametersKHR parameters;
7949 };
7950 static_assert( sizeof( DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ), "struct and wrapper have different size!" );
7951
7952 struct DisplayPresentInfoKHR
7953 {
7954 DisplayPresentInfoKHR( Rect2D srcRect_ = Rect2D(), Rect2D dstRect_ = Rect2D(), Bool32 persistent_ = 0 )
7955 : sType( StructureType::eDisplayPresentInfoKHR )
7956 , pNext( nullptr )
7957 , srcRect( srcRect_ )
7958 , dstRect( dstRect_ )
7959 , persistent( persistent_ )
7960 {
7961 }
7962
7963 DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs )
7964 {
7965 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7966 }
7967
7968 DisplayPresentInfoKHR& operator=( VkDisplayPresentInfoKHR const & rhs )
7969 {
7970 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7971 return *this;
7972 }
7973
7974 DisplayPresentInfoKHR& setSType( StructureType sType_ )
7975 {
7976 sType = sType_;
7977 return *this;
7978 }
7979
7980 DisplayPresentInfoKHR& setPNext( const void* pNext_ )
7981 {
7982 pNext = pNext_;
7983 return *this;
7984 }
7985
7986 DisplayPresentInfoKHR& setSrcRect( Rect2D srcRect_ )
7987 {
7988 srcRect = srcRect_;
7989 return *this;
7990 }
7991
7992 DisplayPresentInfoKHR& setDstRect( Rect2D dstRect_ )
7993 {
7994 dstRect = dstRect_;
7995 return *this;
7996 }
7997
7998 DisplayPresentInfoKHR& setPersistent( Bool32 persistent_ )
7999 {
8000 persistent = persistent_;
8001 return *this;
8002 }
8003
8004 operator const VkDisplayPresentInfoKHR&() const
8005 {
8006 return *reinterpret_cast<const VkDisplayPresentInfoKHR*>(this);
8007 }
8008
8009 bool operator==( DisplayPresentInfoKHR const& rhs ) const
8010 {
8011 return ( sType == rhs.sType )
8012 && ( pNext == rhs.pNext )
8013 && ( srcRect == rhs.srcRect )
8014 && ( dstRect == rhs.dstRect )
8015 && ( persistent == rhs.persistent );
8016 }
8017
8018 bool operator!=( DisplayPresentInfoKHR const& rhs ) const
8019 {
8020 return !operator==( rhs );
8021 }
8022
8023 private:
8024 StructureType sType;
8025
8026 public:
8027 const void* pNext;
8028 Rect2D srcRect;
8029 Rect2D dstRect;
8030 Bool32 persistent;
8031 };
8032 static_assert( sizeof( DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ), "struct and wrapper have different size!" );
8033
8034#ifdef VK_USE_PLATFORM_ANDROID_KHR
8035 struct AndroidSurfaceCreateInfoKHR
8036 {
8037 AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateFlagsKHR flags_ = AndroidSurfaceCreateFlagsKHR(), ANativeWindow* window_ = nullptr )
8038 : sType( StructureType::eAndroidSurfaceCreateInfoKHR )
8039 , pNext( nullptr )
8040 , flags( flags_ )
8041 , window( window_ )
8042 {
8043 }
8044
8045 AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs )
8046 {
8047 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
8048 }
8049
8050 AndroidSurfaceCreateInfoKHR& operator=( VkAndroidSurfaceCreateInfoKHR const & rhs )
8051 {
8052 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
8053 return *this;
8054 }
8055
8056 AndroidSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8057 {
8058 sType = sType_;
8059 return *this;
8060 }
8061
8062 AndroidSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8063 {
8064 pNext = pNext_;
8065 return *this;
8066 }
8067
8068 AndroidSurfaceCreateInfoKHR& setFlags( AndroidSurfaceCreateFlagsKHR flags_ )
8069 {
8070 flags = flags_;
8071 return *this;
8072 }
8073
8074 AndroidSurfaceCreateInfoKHR& setWindow( ANativeWindow* window_ )
8075 {
8076 window = window_;
8077 return *this;
8078 }
8079
8080 operator const VkAndroidSurfaceCreateInfoKHR&() const
8081 {
8082 return *reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>(this);
8083 }
8084
8085 bool operator==( AndroidSurfaceCreateInfoKHR const& rhs ) const
8086 {
8087 return ( sType == rhs.sType )
8088 && ( pNext == rhs.pNext )
8089 && ( flags == rhs.flags )
8090 && ( window == rhs.window );
8091 }
8092
8093 bool operator!=( AndroidSurfaceCreateInfoKHR const& rhs ) const
8094 {
8095 return !operator==( rhs );
8096 }
8097
8098 private:
8099 StructureType sType;
8100
8101 public:
8102 const void* pNext;
8103 AndroidSurfaceCreateFlagsKHR flags;
8104 ANativeWindow* window;
8105 };
8106 static_assert( sizeof( AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8107#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
8108
8109#ifdef VK_USE_PLATFORM_MIR_KHR
8110 struct MirSurfaceCreateInfoKHR
8111 {
8112 MirSurfaceCreateInfoKHR( MirSurfaceCreateFlagsKHR flags_ = MirSurfaceCreateFlagsKHR(), MirConnection* connection_ = nullptr, MirSurface* mirSurface_ = nullptr )
8113 : sType( StructureType::eMirSurfaceCreateInfoKHR )
8114 , pNext( nullptr )
8115 , flags( flags_ )
8116 , connection( connection_ )
8117 , mirSurface( mirSurface_ )
8118 {
8119 }
8120
8121 MirSurfaceCreateInfoKHR( VkMirSurfaceCreateInfoKHR const & rhs )
8122 {
8123 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8124 }
8125
8126 MirSurfaceCreateInfoKHR& operator=( VkMirSurfaceCreateInfoKHR const & rhs )
8127 {
8128 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8129 return *this;
8130 }
8131
8132 MirSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8133 {
8134 sType = sType_;
8135 return *this;
8136 }
8137
8138 MirSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8139 {
8140 pNext = pNext_;
8141 return *this;
8142 }
8143
8144 MirSurfaceCreateInfoKHR& setFlags( MirSurfaceCreateFlagsKHR flags_ )
8145 {
8146 flags = flags_;
8147 return *this;
8148 }
8149
8150 MirSurfaceCreateInfoKHR& setConnection( MirConnection* connection_ )
8151 {
8152 connection = connection_;
8153 return *this;
8154 }
8155
8156 MirSurfaceCreateInfoKHR& setMirSurface( MirSurface* mirSurface_ )
8157 {
8158 mirSurface = mirSurface_;
8159 return *this;
8160 }
8161
8162 operator const VkMirSurfaceCreateInfoKHR&() const
8163 {
8164 return *reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>(this);
8165 }
8166
8167 bool operator==( MirSurfaceCreateInfoKHR const& rhs ) const
8168 {
8169 return ( sType == rhs.sType )
8170 && ( pNext == rhs.pNext )
8171 && ( flags == rhs.flags )
8172 && ( connection == rhs.connection )
8173 && ( mirSurface == rhs.mirSurface );
8174 }
8175
8176 bool operator!=( MirSurfaceCreateInfoKHR const& rhs ) const
8177 {
8178 return !operator==( rhs );
8179 }
8180
8181 private:
8182 StructureType sType;
8183
8184 public:
8185 const void* pNext;
8186 MirSurfaceCreateFlagsKHR flags;
8187 MirConnection* connection;
8188 MirSurface* mirSurface;
8189 };
8190 static_assert( sizeof( MirSurfaceCreateInfoKHR ) == sizeof( VkMirSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8191#endif /*VK_USE_PLATFORM_MIR_KHR*/
8192
8193#ifdef VK_USE_PLATFORM_WAYLAND_KHR
8194 struct WaylandSurfaceCreateInfoKHR
8195 {
8196 WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateFlagsKHR flags_ = WaylandSurfaceCreateFlagsKHR(), struct wl_display* display_ = nullptr, struct wl_surface* surface_ = nullptr )
8197 : sType( StructureType::eWaylandSurfaceCreateInfoKHR )
8198 , pNext( nullptr )
8199 , flags( flags_ )
8200 , display( display_ )
8201 , surface( surface_ )
8202 {
8203 }
8204
8205 WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs )
8206 {
8207 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8208 }
8209
8210 WaylandSurfaceCreateInfoKHR& operator=( VkWaylandSurfaceCreateInfoKHR const & rhs )
8211 {
8212 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8213 return *this;
8214 }
8215
8216 WaylandSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8217 {
8218 sType = sType_;
8219 return *this;
8220 }
8221
8222 WaylandSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8223 {
8224 pNext = pNext_;
8225 return *this;
8226 }
8227
8228 WaylandSurfaceCreateInfoKHR& setFlags( WaylandSurfaceCreateFlagsKHR flags_ )
8229 {
8230 flags = flags_;
8231 return *this;
8232 }
8233
8234 WaylandSurfaceCreateInfoKHR& setDisplay( struct wl_display* display_ )
8235 {
8236 display = display_;
8237 return *this;
8238 }
8239
8240 WaylandSurfaceCreateInfoKHR& setSurface( struct wl_surface* surface_ )
8241 {
8242 surface = surface_;
8243 return *this;
8244 }
8245
8246 operator const VkWaylandSurfaceCreateInfoKHR&() const
8247 {
8248 return *reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>(this);
8249 }
8250
8251 bool operator==( WaylandSurfaceCreateInfoKHR const& rhs ) const
8252 {
8253 return ( sType == rhs.sType )
8254 && ( pNext == rhs.pNext )
8255 && ( flags == rhs.flags )
8256 && ( display == rhs.display )
8257 && ( surface == rhs.surface );
8258 }
8259
8260 bool operator!=( WaylandSurfaceCreateInfoKHR const& rhs ) const
8261 {
8262 return !operator==( rhs );
8263 }
8264
8265 private:
8266 StructureType sType;
8267
8268 public:
8269 const void* pNext;
8270 WaylandSurfaceCreateFlagsKHR flags;
8271 struct wl_display* display;
8272 struct wl_surface* surface;
8273 };
8274 static_assert( sizeof( WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8275#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
8276
8277#ifdef VK_USE_PLATFORM_WIN32_KHR
8278 struct Win32SurfaceCreateInfoKHR
8279 {
8280 Win32SurfaceCreateInfoKHR( Win32SurfaceCreateFlagsKHR flags_ = Win32SurfaceCreateFlagsKHR(), HINSTANCE hinstance_ = 0, HWND hwnd_ = 0 )
8281 : sType( StructureType::eWin32SurfaceCreateInfoKHR )
8282 , pNext( nullptr )
8283 , flags( flags_ )
8284 , hinstance( hinstance_ )
8285 , hwnd( hwnd_ )
8286 {
8287 }
8288
8289 Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs )
8290 {
8291 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8292 }
8293
8294 Win32SurfaceCreateInfoKHR& operator=( VkWin32SurfaceCreateInfoKHR const & rhs )
8295 {
8296 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8297 return *this;
8298 }
8299
8300 Win32SurfaceCreateInfoKHR& setSType( StructureType sType_ )
8301 {
8302 sType = sType_;
8303 return *this;
8304 }
8305
8306 Win32SurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8307 {
8308 pNext = pNext_;
8309 return *this;
8310 }
8311
8312 Win32SurfaceCreateInfoKHR& setFlags( Win32SurfaceCreateFlagsKHR flags_ )
8313 {
8314 flags = flags_;
8315 return *this;
8316 }
8317
8318 Win32SurfaceCreateInfoKHR& setHinstance( HINSTANCE hinstance_ )
8319 {
8320 hinstance = hinstance_;
8321 return *this;
8322 }
8323
8324 Win32SurfaceCreateInfoKHR& setHwnd( HWND hwnd_ )
8325 {
8326 hwnd = hwnd_;
8327 return *this;
8328 }
8329
8330 operator const VkWin32SurfaceCreateInfoKHR&() const
8331 {
8332 return *reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>(this);
8333 }
8334
8335 bool operator==( Win32SurfaceCreateInfoKHR const& rhs ) const
8336 {
8337 return ( sType == rhs.sType )
8338 && ( pNext == rhs.pNext )
8339 && ( flags == rhs.flags )
8340 && ( hinstance == rhs.hinstance )
8341 && ( hwnd == rhs.hwnd );
8342 }
8343
8344 bool operator!=( Win32SurfaceCreateInfoKHR const& rhs ) const
8345 {
8346 return !operator==( rhs );
8347 }
8348
8349 private:
8350 StructureType sType;
8351
8352 public:
8353 const void* pNext;
8354 Win32SurfaceCreateFlagsKHR flags;
8355 HINSTANCE hinstance;
8356 HWND hwnd;
8357 };
8358 static_assert( sizeof( Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8359#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8360
8361#ifdef VK_USE_PLATFORM_XLIB_KHR
8362 struct XlibSurfaceCreateInfoKHR
8363 {
8364 XlibSurfaceCreateInfoKHR( XlibSurfaceCreateFlagsKHR flags_ = XlibSurfaceCreateFlagsKHR(), Display* dpy_ = nullptr, Window window_ = 0 )
8365 : sType( StructureType::eXlibSurfaceCreateInfoKHR )
8366 , pNext( nullptr )
8367 , flags( flags_ )
8368 , dpy( dpy_ )
8369 , window( window_ )
8370 {
8371 }
8372
8373 XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs )
8374 {
8375 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8376 }
8377
8378 XlibSurfaceCreateInfoKHR& operator=( VkXlibSurfaceCreateInfoKHR const & rhs )
8379 {
8380 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8381 return *this;
8382 }
8383
8384 XlibSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8385 {
8386 sType = sType_;
8387 return *this;
8388 }
8389
8390 XlibSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8391 {
8392 pNext = pNext_;
8393 return *this;
8394 }
8395
8396 XlibSurfaceCreateInfoKHR& setFlags( XlibSurfaceCreateFlagsKHR flags_ )
8397 {
8398 flags = flags_;
8399 return *this;
8400 }
8401
8402 XlibSurfaceCreateInfoKHR& setDpy( Display* dpy_ )
8403 {
8404 dpy = dpy_;
8405 return *this;
8406 }
8407
8408 XlibSurfaceCreateInfoKHR& setWindow( Window window_ )
8409 {
8410 window = window_;
8411 return *this;
8412 }
8413
8414 operator const VkXlibSurfaceCreateInfoKHR&() const
8415 {
8416 return *reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>(this);
8417 }
8418
8419 bool operator==( XlibSurfaceCreateInfoKHR const& rhs ) const
8420 {
8421 return ( sType == rhs.sType )
8422 && ( pNext == rhs.pNext )
8423 && ( flags == rhs.flags )
8424 && ( dpy == rhs.dpy )
8425 && ( window == rhs.window );
8426 }
8427
8428 bool operator!=( XlibSurfaceCreateInfoKHR const& rhs ) const
8429 {
8430 return !operator==( rhs );
8431 }
8432
8433 private:
8434 StructureType sType;
8435
8436 public:
8437 const void* pNext;
8438 XlibSurfaceCreateFlagsKHR flags;
8439 Display* dpy;
8440 Window window;
8441 };
8442 static_assert( sizeof( XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8443#endif /*VK_USE_PLATFORM_XLIB_KHR*/
8444
8445#ifdef VK_USE_PLATFORM_XCB_KHR
8446 struct XcbSurfaceCreateInfoKHR
8447 {
8448 XcbSurfaceCreateInfoKHR( XcbSurfaceCreateFlagsKHR flags_ = XcbSurfaceCreateFlagsKHR(), xcb_connection_t* connection_ = nullptr, xcb_window_t window_ = 0 )
8449 : sType( StructureType::eXcbSurfaceCreateInfoKHR )
8450 , pNext( nullptr )
8451 , flags( flags_ )
8452 , connection( connection_ )
8453 , window( window_ )
8454 {
8455 }
8456
8457 XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs )
8458 {
8459 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8460 }
8461
8462 XcbSurfaceCreateInfoKHR& operator=( VkXcbSurfaceCreateInfoKHR const & rhs )
8463 {
8464 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8465 return *this;
8466 }
8467
8468 XcbSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8469 {
8470 sType = sType_;
8471 return *this;
8472 }
8473
8474 XcbSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8475 {
8476 pNext = pNext_;
8477 return *this;
8478 }
8479
8480 XcbSurfaceCreateInfoKHR& setFlags( XcbSurfaceCreateFlagsKHR flags_ )
8481 {
8482 flags = flags_;
8483 return *this;
8484 }
8485
8486 XcbSurfaceCreateInfoKHR& setConnection( xcb_connection_t* connection_ )
8487 {
8488 connection = connection_;
8489 return *this;
8490 }
8491
8492 XcbSurfaceCreateInfoKHR& setWindow( xcb_window_t window_ )
8493 {
8494 window = window_;
8495 return *this;
8496 }
8497
8498 operator const VkXcbSurfaceCreateInfoKHR&() const
8499 {
8500 return *reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>(this);
8501 }
8502
8503 bool operator==( XcbSurfaceCreateInfoKHR const& rhs ) const
8504 {
8505 return ( sType == rhs.sType )
8506 && ( pNext == rhs.pNext )
8507 && ( flags == rhs.flags )
8508 && ( connection == rhs.connection )
8509 && ( window == rhs.window );
8510 }
8511
8512 bool operator!=( XcbSurfaceCreateInfoKHR const& rhs ) const
8513 {
8514 return !operator==( rhs );
8515 }
8516
8517 private:
8518 StructureType sType;
8519
8520 public:
8521 const void* pNext;
8522 XcbSurfaceCreateFlagsKHR flags;
8523 xcb_connection_t* connection;
8524 xcb_window_t window;
8525 };
8526 static_assert( sizeof( XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8527#endif /*VK_USE_PLATFORM_XCB_KHR*/
8528
8529 struct DebugMarkerMarkerInfoEXT
8530 {
8531 DebugMarkerMarkerInfoEXT( const char* pMarkerName_ = nullptr, std::array<float,4> const& color_ = { { 0, 0, 0, 0 } } )
8532 : sType( StructureType::eDebugMarkerMarkerInfoEXT )
8533 , pNext( nullptr )
8534 , pMarkerName( pMarkerName_ )
8535 {
8536 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8537 }
8538
8539 DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs )
8540 {
8541 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8542 }
8543
8544 DebugMarkerMarkerInfoEXT& operator=( VkDebugMarkerMarkerInfoEXT const & rhs )
8545 {
8546 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8547 return *this;
8548 }
8549
8550 DebugMarkerMarkerInfoEXT& setSType( StructureType sType_ )
8551 {
8552 sType = sType_;
8553 return *this;
8554 }
8555
8556 DebugMarkerMarkerInfoEXT& setPNext( const void* pNext_ )
8557 {
8558 pNext = pNext_;
8559 return *this;
8560 }
8561
8562 DebugMarkerMarkerInfoEXT& setPMarkerName( const char* pMarkerName_ )
8563 {
8564 pMarkerName = pMarkerName_;
8565 return *this;
8566 }
8567
8568 DebugMarkerMarkerInfoEXT& setColor( std::array<float,4> color_ )
8569 {
8570 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8571 return *this;
8572 }
8573
8574 operator const VkDebugMarkerMarkerInfoEXT&() const
8575 {
8576 return *reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>(this);
8577 }
8578
8579 bool operator==( DebugMarkerMarkerInfoEXT const& rhs ) const
8580 {
8581 return ( sType == rhs.sType )
8582 && ( pNext == rhs.pNext )
8583 && ( pMarkerName == rhs.pMarkerName )
8584 && ( memcmp( color, rhs.color, 4 * sizeof( float ) ) == 0 );
8585 }
8586
8587 bool operator!=( DebugMarkerMarkerInfoEXT const& rhs ) const
8588 {
8589 return !operator==( rhs );
8590 }
8591
8592 private:
8593 StructureType sType;
8594
8595 public:
8596 const void* pNext;
8597 const char* pMarkerName;
8598 float color[4];
8599 };
8600 static_assert( sizeof( DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ), "struct and wrapper have different size!" );
8601
8602 struct DedicatedAllocationImageCreateInfoNV
8603 {
8604 DedicatedAllocationImageCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8605 : sType( StructureType::eDedicatedAllocationImageCreateInfoNV )
8606 , pNext( nullptr )
8607 , dedicatedAllocation( dedicatedAllocation_ )
8608 {
8609 }
8610
8611 DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8612 {
8613 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8614 }
8615
8616 DedicatedAllocationImageCreateInfoNV& operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8617 {
8618 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8619 return *this;
8620 }
8621
8622 DedicatedAllocationImageCreateInfoNV& setSType( StructureType sType_ )
8623 {
8624 sType = sType_;
8625 return *this;
8626 }
8627
8628 DedicatedAllocationImageCreateInfoNV& setPNext( const void* pNext_ )
8629 {
8630 pNext = pNext_;
8631 return *this;
8632 }
8633
8634 DedicatedAllocationImageCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8635 {
8636 dedicatedAllocation = dedicatedAllocation_;
8637 return *this;
8638 }
8639
8640 operator const VkDedicatedAllocationImageCreateInfoNV&() const
8641 {
8642 return *reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(this);
8643 }
8644
8645 bool operator==( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8646 {
8647 return ( sType == rhs.sType )
8648 && ( pNext == rhs.pNext )
8649 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8650 }
8651
8652 bool operator!=( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8653 {
8654 return !operator==( rhs );
8655 }
8656
8657 private:
8658 StructureType sType;
8659
8660 public:
8661 const void* pNext;
8662 Bool32 dedicatedAllocation;
8663 };
8664 static_assert( sizeof( DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ), "struct and wrapper have different size!" );
8665
8666 struct DedicatedAllocationBufferCreateInfoNV
8667 {
8668 DedicatedAllocationBufferCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8669 : sType( StructureType::eDedicatedAllocationBufferCreateInfoNV )
8670 , pNext( nullptr )
8671 , dedicatedAllocation( dedicatedAllocation_ )
8672 {
8673 }
8674
8675 DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8676 {
8677 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8678 }
8679
8680 DedicatedAllocationBufferCreateInfoNV& operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8681 {
8682 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8683 return *this;
8684 }
8685
8686 DedicatedAllocationBufferCreateInfoNV& setSType( StructureType sType_ )
8687 {
8688 sType = sType_;
8689 return *this;
8690 }
8691
8692 DedicatedAllocationBufferCreateInfoNV& setPNext( const void* pNext_ )
8693 {
8694 pNext = pNext_;
8695 return *this;
8696 }
8697
8698 DedicatedAllocationBufferCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8699 {
8700 dedicatedAllocation = dedicatedAllocation_;
8701 return *this;
8702 }
8703
8704 operator const VkDedicatedAllocationBufferCreateInfoNV&() const
8705 {
8706 return *reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(this);
8707 }
8708
8709 bool operator==( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8710 {
8711 return ( sType == rhs.sType )
8712 && ( pNext == rhs.pNext )
8713 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8714 }
8715
8716 bool operator!=( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8717 {
8718 return !operator==( rhs );
8719 }
8720
8721 private:
8722 StructureType sType;
8723
8724 public:
8725 const void* pNext;
8726 Bool32 dedicatedAllocation;
8727 };
8728 static_assert( sizeof( DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ), "struct and wrapper have different size!" );
8729
8730 struct DedicatedAllocationMemoryAllocateInfoNV
8731 {
8732 DedicatedAllocationMemoryAllocateInfoNV( Image image_ = Image(), Buffer buffer_ = Buffer() )
8733 : sType( StructureType::eDedicatedAllocationMemoryAllocateInfoNV )
8734 , pNext( nullptr )
8735 , image( image_ )
8736 , buffer( buffer_ )
8737 {
8738 }
8739
8740 DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8741 {
8742 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8743 }
8744
8745 DedicatedAllocationMemoryAllocateInfoNV& operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8746 {
8747 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8748 return *this;
8749 }
8750
8751 DedicatedAllocationMemoryAllocateInfoNV& setSType( StructureType sType_ )
8752 {
8753 sType = sType_;
8754 return *this;
8755 }
8756
8757 DedicatedAllocationMemoryAllocateInfoNV& setPNext( const void* pNext_ )
8758 {
8759 pNext = pNext_;
8760 return *this;
8761 }
8762
8763 DedicatedAllocationMemoryAllocateInfoNV& setImage( Image image_ )
8764 {
8765 image = image_;
8766 return *this;
8767 }
8768
8769 DedicatedAllocationMemoryAllocateInfoNV& setBuffer( Buffer buffer_ )
8770 {
8771 buffer = buffer_;
8772 return *this;
8773 }
8774
8775 operator const VkDedicatedAllocationMemoryAllocateInfoNV&() const
8776 {
8777 return *reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(this);
8778 }
8779
8780 bool operator==( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8781 {
8782 return ( sType == rhs.sType )
8783 && ( pNext == rhs.pNext )
8784 && ( image == rhs.image )
8785 && ( buffer == rhs.buffer );
8786 }
8787
8788 bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8789 {
8790 return !operator==( rhs );
8791 }
8792
8793 private:
8794 StructureType sType;
8795
8796 public:
8797 const void* pNext;
8798 Image image;
8799 Buffer buffer;
8800 };
8801 static_assert( sizeof( DedicatedAllocationMemoryAllocateInfoNV ) == sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
8802
Lenny Komow6501c122016-08-31 15:03:49 -06008803#ifdef VK_USE_PLATFORM_WIN32_KHR
8804 struct ExportMemoryWin32HandleInfoNV
8805 {
8806 ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0 )
8807 : sType( StructureType::eExportMemoryWin32HandleInfoNV )
8808 , pNext( nullptr )
8809 , pAttributes( pAttributes_ )
8810 , dwAccess( dwAccess_ )
8811 {
8812 }
8813
8814 ExportMemoryWin32HandleInfoNV( VkExportMemoryWin32HandleInfoNV const & rhs )
8815 {
8816 memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
8817 }
8818
8819 ExportMemoryWin32HandleInfoNV& operator=( VkExportMemoryWin32HandleInfoNV const & rhs )
8820 {
8821 memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
8822 return *this;
8823 }
8824
8825 ExportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
8826 {
8827 sType = sType_;
8828 return *this;
8829 }
8830
8831 ExportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
8832 {
8833 pNext = pNext_;
8834 return *this;
8835 }
8836
8837 ExportMemoryWin32HandleInfoNV& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
8838 {
8839 pAttributes = pAttributes_;
8840 return *this;
8841 }
8842
8843 ExportMemoryWin32HandleInfoNV& setDwAccess( DWORD dwAccess_ )
8844 {
8845 dwAccess = dwAccess_;
8846 return *this;
8847 }
8848
8849 operator const VkExportMemoryWin32HandleInfoNV&() const
8850 {
8851 return *reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(this);
8852 }
8853
8854 bool operator==( ExportMemoryWin32HandleInfoNV const& rhs ) const
8855 {
8856 return ( sType == rhs.sType )
8857 && ( pNext == rhs.pNext )
8858 && ( pAttributes == rhs.pAttributes )
8859 && ( dwAccess == rhs.dwAccess );
8860 }
8861
8862 bool operator!=( ExportMemoryWin32HandleInfoNV const& rhs ) const
8863 {
8864 return !operator==( rhs );
8865 }
8866
8867 private:
8868 StructureType sType;
8869
8870 public:
8871 const void* pNext;
8872 const SECURITY_ATTRIBUTES* pAttributes;
8873 DWORD dwAccess;
8874 };
8875 static_assert( sizeof( ExportMemoryWin32HandleInfoNV ) == sizeof( VkExportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
8876#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8877
8878#ifdef VK_USE_PLATFORM_WIN32_KHR
8879 struct Win32KeyedMutexAcquireReleaseInfoNV
8880 {
8881 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 )
8882 : sType( StructureType::eWin32KeyedMutexAcquireReleaseInfoNV )
8883 , pNext( nullptr )
8884 , acquireCount( acquireCount_ )
8885 , pAcquireSyncs( pAcquireSyncs_ )
8886 , pAcquireKeys( pAcquireKeys_ )
8887 , pAcquireTimeoutMilliseconds( pAcquireTimeoutMilliseconds_ )
8888 , releaseCount( releaseCount_ )
8889 , pReleaseSyncs( pReleaseSyncs_ )
8890 , pReleaseKeys( pReleaseKeys_ )
8891 {
8892 }
8893
8894 Win32KeyedMutexAcquireReleaseInfoNV( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
8895 {
8896 memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
8897 }
8898
8899 Win32KeyedMutexAcquireReleaseInfoNV& operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
8900 {
8901 memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
8902 return *this;
8903 }
8904
8905 Win32KeyedMutexAcquireReleaseInfoNV& setSType( StructureType sType_ )
8906 {
8907 sType = sType_;
8908 return *this;
8909 }
8910
8911 Win32KeyedMutexAcquireReleaseInfoNV& setPNext( const void* pNext_ )
8912 {
8913 pNext = pNext_;
8914 return *this;
8915 }
8916
8917 Win32KeyedMutexAcquireReleaseInfoNV& setAcquireCount( uint32_t acquireCount_ )
8918 {
8919 acquireCount = acquireCount_;
8920 return *this;
8921 }
8922
8923 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireSyncs( const DeviceMemory* pAcquireSyncs_ )
8924 {
8925 pAcquireSyncs = pAcquireSyncs_;
8926 return *this;
8927 }
8928
8929 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireKeys( const uint64_t* pAcquireKeys_ )
8930 {
8931 pAcquireKeys = pAcquireKeys_;
8932 return *this;
8933 }
8934
8935 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireTimeoutMilliseconds( const uint32_t* pAcquireTimeoutMilliseconds_ )
8936 {
8937 pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_;
8938 return *this;
8939 }
8940
8941 Win32KeyedMutexAcquireReleaseInfoNV& setReleaseCount( uint32_t releaseCount_ )
8942 {
8943 releaseCount = releaseCount_;
8944 return *this;
8945 }
8946
8947 Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseSyncs( const DeviceMemory* pReleaseSyncs_ )
8948 {
8949 pReleaseSyncs = pReleaseSyncs_;
8950 return *this;
8951 }
8952
8953 Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseKeys( const uint64_t* pReleaseKeys_ )
8954 {
8955 pReleaseKeys = pReleaseKeys_;
8956 return *this;
8957 }
8958
8959 operator const VkWin32KeyedMutexAcquireReleaseInfoNV&() const
8960 {
8961 return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(this);
8962 }
8963
8964 bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
8965 {
8966 return ( sType == rhs.sType )
8967 && ( pNext == rhs.pNext )
8968 && ( acquireCount == rhs.acquireCount )
8969 && ( pAcquireSyncs == rhs.pAcquireSyncs )
8970 && ( pAcquireKeys == rhs.pAcquireKeys )
8971 && ( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds )
8972 && ( releaseCount == rhs.releaseCount )
8973 && ( pReleaseSyncs == rhs.pReleaseSyncs )
8974 && ( pReleaseKeys == rhs.pReleaseKeys );
8975 }
8976
8977 bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
8978 {
8979 return !operator==( rhs );
8980 }
8981
8982 private:
8983 StructureType sType;
8984
8985 public:
8986 const void* pNext;
8987 uint32_t acquireCount;
8988 const DeviceMemory* pAcquireSyncs;
8989 const uint64_t* pAcquireKeys;
8990 const uint32_t* pAcquireTimeoutMilliseconds;
8991 uint32_t releaseCount;
8992 const DeviceMemory* pReleaseSyncs;
8993 const uint64_t* pReleaseKeys;
8994 };
8995 static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ), "struct and wrapper have different size!" );
8996#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8997
Lenny Komowbed9b5c2016-08-11 11:23:15 -06008998 enum class SubpassContents
8999 {
9000 eInline = VK_SUBPASS_CONTENTS_INLINE,
9001 eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
9002 };
9003
9004 struct PresentInfoKHR
9005 {
9006 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 )
9007 : sType( StructureType::ePresentInfoKHR )
9008 , pNext( nullptr )
9009 , waitSemaphoreCount( waitSemaphoreCount_ )
9010 , pWaitSemaphores( pWaitSemaphores_ )
9011 , swapchainCount( swapchainCount_ )
9012 , pSwapchains( pSwapchains_ )
9013 , pImageIndices( pImageIndices_ )
9014 , pResults( pResults_ )
9015 {
9016 }
9017
9018 PresentInfoKHR( VkPresentInfoKHR const & rhs )
9019 {
9020 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
9021 }
9022
9023 PresentInfoKHR& operator=( VkPresentInfoKHR const & rhs )
9024 {
9025 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
9026 return *this;
9027 }
9028
9029 PresentInfoKHR& setSType( StructureType sType_ )
9030 {
9031 sType = sType_;
9032 return *this;
9033 }
9034
9035 PresentInfoKHR& setPNext( const void* pNext_ )
9036 {
9037 pNext = pNext_;
9038 return *this;
9039 }
9040
9041 PresentInfoKHR& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
9042 {
9043 waitSemaphoreCount = waitSemaphoreCount_;
9044 return *this;
9045 }
9046
9047 PresentInfoKHR& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
9048 {
9049 pWaitSemaphores = pWaitSemaphores_;
9050 return *this;
9051 }
9052
9053 PresentInfoKHR& setSwapchainCount( uint32_t swapchainCount_ )
9054 {
9055 swapchainCount = swapchainCount_;
9056 return *this;
9057 }
9058
9059 PresentInfoKHR& setPSwapchains( const SwapchainKHR* pSwapchains_ )
9060 {
9061 pSwapchains = pSwapchains_;
9062 return *this;
9063 }
9064
9065 PresentInfoKHR& setPImageIndices( const uint32_t* pImageIndices_ )
9066 {
9067 pImageIndices = pImageIndices_;
9068 return *this;
9069 }
9070
9071 PresentInfoKHR& setPResults( Result* pResults_ )
9072 {
9073 pResults = pResults_;
9074 return *this;
9075 }
9076
9077 operator const VkPresentInfoKHR&() const
9078 {
9079 return *reinterpret_cast<const VkPresentInfoKHR*>(this);
9080 }
9081
9082 bool operator==( PresentInfoKHR const& rhs ) const
9083 {
9084 return ( sType == rhs.sType )
9085 && ( pNext == rhs.pNext )
9086 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
9087 && ( pWaitSemaphores == rhs.pWaitSemaphores )
9088 && ( swapchainCount == rhs.swapchainCount )
9089 && ( pSwapchains == rhs.pSwapchains )
9090 && ( pImageIndices == rhs.pImageIndices )
9091 && ( pResults == rhs.pResults );
9092 }
9093
9094 bool operator!=( PresentInfoKHR const& rhs ) const
9095 {
9096 return !operator==( rhs );
9097 }
9098
9099 private:
9100 StructureType sType;
9101
9102 public:
9103 const void* pNext;
9104 uint32_t waitSemaphoreCount;
9105 const Semaphore* pWaitSemaphores;
9106 uint32_t swapchainCount;
9107 const SwapchainKHR* pSwapchains;
9108 const uint32_t* pImageIndices;
9109 Result* pResults;
9110 };
9111 static_assert( sizeof( PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" );
9112
9113 enum class DynamicState
9114 {
9115 eViewport = VK_DYNAMIC_STATE_VIEWPORT,
9116 eScissor = VK_DYNAMIC_STATE_SCISSOR,
9117 eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH,
9118 eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS,
9119 eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS,
9120 eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS,
9121 eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
9122 eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
9123 eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE
9124 };
9125
9126 struct PipelineDynamicStateCreateInfo
9127 {
9128 PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateFlags flags_ = PipelineDynamicStateCreateFlags(), uint32_t dynamicStateCount_ = 0, const DynamicState* pDynamicStates_ = nullptr )
9129 : sType( StructureType::ePipelineDynamicStateCreateInfo )
9130 , pNext( nullptr )
9131 , flags( flags_ )
9132 , dynamicStateCount( dynamicStateCount_ )
9133 , pDynamicStates( pDynamicStates_ )
9134 {
9135 }
9136
9137 PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs )
9138 {
9139 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
9140 }
9141
9142 PipelineDynamicStateCreateInfo& operator=( VkPipelineDynamicStateCreateInfo const & rhs )
9143 {
9144 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
9145 return *this;
9146 }
9147
9148 PipelineDynamicStateCreateInfo& setSType( StructureType sType_ )
9149 {
9150 sType = sType_;
9151 return *this;
9152 }
9153
9154 PipelineDynamicStateCreateInfo& setPNext( const void* pNext_ )
9155 {
9156 pNext = pNext_;
9157 return *this;
9158 }
9159
9160 PipelineDynamicStateCreateInfo& setFlags( PipelineDynamicStateCreateFlags flags_ )
9161 {
9162 flags = flags_;
9163 return *this;
9164 }
9165
9166 PipelineDynamicStateCreateInfo& setDynamicStateCount( uint32_t dynamicStateCount_ )
9167 {
9168 dynamicStateCount = dynamicStateCount_;
9169 return *this;
9170 }
9171
9172 PipelineDynamicStateCreateInfo& setPDynamicStates( const DynamicState* pDynamicStates_ )
9173 {
9174 pDynamicStates = pDynamicStates_;
9175 return *this;
9176 }
9177
9178 operator const VkPipelineDynamicStateCreateInfo&() const
9179 {
9180 return *reinterpret_cast<const VkPipelineDynamicStateCreateInfo*>(this);
9181 }
9182
9183 bool operator==( PipelineDynamicStateCreateInfo const& rhs ) const
9184 {
9185 return ( sType == rhs.sType )
9186 && ( pNext == rhs.pNext )
9187 && ( flags == rhs.flags )
9188 && ( dynamicStateCount == rhs.dynamicStateCount )
9189 && ( pDynamicStates == rhs.pDynamicStates );
9190 }
9191
9192 bool operator!=( PipelineDynamicStateCreateInfo const& rhs ) const
9193 {
9194 return !operator==( rhs );
9195 }
9196
9197 private:
9198 StructureType sType;
9199
9200 public:
9201 const void* pNext;
9202 PipelineDynamicStateCreateFlags flags;
9203 uint32_t dynamicStateCount;
9204 const DynamicState* pDynamicStates;
9205 };
9206 static_assert( sizeof( PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ), "struct and wrapper have different size!" );
9207
9208 enum class QueueFlagBits
9209 {
9210 eGraphics = VK_QUEUE_GRAPHICS_BIT,
9211 eCompute = VK_QUEUE_COMPUTE_BIT,
9212 eTransfer = VK_QUEUE_TRANSFER_BIT,
9213 eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT
9214 };
9215
9216 using QueueFlags = Flags<QueueFlagBits, VkQueueFlags>;
9217
9218 inline QueueFlags operator|( QueueFlagBits bit0, QueueFlagBits bit1 )
9219 {
9220 return QueueFlags( bit0 ) | bit1;
9221 }
9222
9223 struct QueueFamilyProperties
9224 {
9225 operator const VkQueueFamilyProperties&() const
9226 {
9227 return *reinterpret_cast<const VkQueueFamilyProperties*>(this);
9228 }
9229
9230 bool operator==( QueueFamilyProperties const& rhs ) const
9231 {
9232 return ( queueFlags == rhs.queueFlags )
9233 && ( queueCount == rhs.queueCount )
9234 && ( timestampValidBits == rhs.timestampValidBits )
9235 && ( minImageTransferGranularity == rhs.minImageTransferGranularity );
9236 }
9237
9238 bool operator!=( QueueFamilyProperties const& rhs ) const
9239 {
9240 return !operator==( rhs );
9241 }
9242
9243 QueueFlags queueFlags;
9244 uint32_t queueCount;
9245 uint32_t timestampValidBits;
9246 Extent3D minImageTransferGranularity;
9247 };
9248 static_assert( sizeof( QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ), "struct and wrapper have different size!" );
9249
9250 enum class MemoryPropertyFlagBits
9251 {
9252 eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
9253 eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
9254 eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
9255 eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
9256 eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
9257 };
9258
9259 using MemoryPropertyFlags = Flags<MemoryPropertyFlagBits, VkMemoryPropertyFlags>;
9260
9261 inline MemoryPropertyFlags operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 )
9262 {
9263 return MemoryPropertyFlags( bit0 ) | bit1;
9264 }
9265
9266 struct MemoryType
9267 {
9268 operator const VkMemoryType&() const
9269 {
9270 return *reinterpret_cast<const VkMemoryType*>(this);
9271 }
9272
9273 bool operator==( MemoryType const& rhs ) const
9274 {
9275 return ( propertyFlags == rhs.propertyFlags )
9276 && ( heapIndex == rhs.heapIndex );
9277 }
9278
9279 bool operator!=( MemoryType const& rhs ) const
9280 {
9281 return !operator==( rhs );
9282 }
9283
9284 MemoryPropertyFlags propertyFlags;
9285 uint32_t heapIndex;
9286 };
9287 static_assert( sizeof( MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" );
9288
9289 enum class MemoryHeapFlagBits
9290 {
9291 eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
9292 };
9293
9294 using MemoryHeapFlags = Flags<MemoryHeapFlagBits, VkMemoryHeapFlags>;
9295
9296 inline MemoryHeapFlags operator|( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 )
9297 {
9298 return MemoryHeapFlags( bit0 ) | bit1;
9299 }
9300
9301 struct MemoryHeap
9302 {
9303 operator const VkMemoryHeap&() const
9304 {
9305 return *reinterpret_cast<const VkMemoryHeap*>(this);
9306 }
9307
9308 bool operator==( MemoryHeap const& rhs ) const
9309 {
9310 return ( size == rhs.size )
9311 && ( flags == rhs.flags );
9312 }
9313
9314 bool operator!=( MemoryHeap const& rhs ) const
9315 {
9316 return !operator==( rhs );
9317 }
9318
9319 DeviceSize size;
9320 MemoryHeapFlags flags;
9321 };
9322 static_assert( sizeof( MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" );
9323
9324 struct PhysicalDeviceMemoryProperties
9325 {
9326 operator const VkPhysicalDeviceMemoryProperties&() const
9327 {
9328 return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties*>(this);
9329 }
9330
9331 bool operator==( PhysicalDeviceMemoryProperties const& rhs ) const
9332 {
9333 return ( memoryTypeCount == rhs.memoryTypeCount )
9334 && ( memcmp( memoryTypes, rhs.memoryTypes, VK_MAX_MEMORY_TYPES * sizeof( MemoryType ) ) == 0 )
9335 && ( memoryHeapCount == rhs.memoryHeapCount )
9336 && ( memcmp( memoryHeaps, rhs.memoryHeaps, VK_MAX_MEMORY_HEAPS * sizeof( MemoryHeap ) ) == 0 );
9337 }
9338
9339 bool operator!=( PhysicalDeviceMemoryProperties const& rhs ) const
9340 {
9341 return !operator==( rhs );
9342 }
9343
9344 uint32_t memoryTypeCount;
9345 MemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
9346 uint32_t memoryHeapCount;
9347 MemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
9348 };
9349 static_assert( sizeof( PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ), "struct and wrapper have different size!" );
9350
9351 enum class AccessFlagBits
9352 {
9353 eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
9354 eIndexRead = VK_ACCESS_INDEX_READ_BIT,
9355 eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
9356 eUniformRead = VK_ACCESS_UNIFORM_READ_BIT,
9357 eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
9358 eShaderRead = VK_ACCESS_SHADER_READ_BIT,
9359 eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT,
9360 eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
9361 eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
9362 eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
9363 eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
9364 eTransferRead = VK_ACCESS_TRANSFER_READ_BIT,
9365 eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT,
9366 eHostRead = VK_ACCESS_HOST_READ_BIT,
9367 eHostWrite = VK_ACCESS_HOST_WRITE_BIT,
9368 eMemoryRead = VK_ACCESS_MEMORY_READ_BIT,
9369 eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT
9370 };
9371
9372 using AccessFlags = Flags<AccessFlagBits, VkAccessFlags>;
9373
9374 inline AccessFlags operator|( AccessFlagBits bit0, AccessFlagBits bit1 )
9375 {
9376 return AccessFlags( bit0 ) | bit1;
9377 }
9378
9379 struct MemoryBarrier
9380 {
9381 MemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags() )
9382 : sType( StructureType::eMemoryBarrier )
9383 , pNext( nullptr )
9384 , srcAccessMask( srcAccessMask_ )
9385 , dstAccessMask( dstAccessMask_ )
9386 {
9387 }
9388
9389 MemoryBarrier( VkMemoryBarrier const & rhs )
9390 {
9391 memcpy( this, &rhs, sizeof(MemoryBarrier) );
9392 }
9393
9394 MemoryBarrier& operator=( VkMemoryBarrier const & rhs )
9395 {
9396 memcpy( this, &rhs, sizeof(MemoryBarrier) );
9397 return *this;
9398 }
9399
9400 MemoryBarrier& setSType( StructureType sType_ )
9401 {
9402 sType = sType_;
9403 return *this;
9404 }
9405
9406 MemoryBarrier& setPNext( const void* pNext_ )
9407 {
9408 pNext = pNext_;
9409 return *this;
9410 }
9411
9412 MemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9413 {
9414 srcAccessMask = srcAccessMask_;
9415 return *this;
9416 }
9417
9418 MemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9419 {
9420 dstAccessMask = dstAccessMask_;
9421 return *this;
9422 }
9423
9424 operator const VkMemoryBarrier&() const
9425 {
9426 return *reinterpret_cast<const VkMemoryBarrier*>(this);
9427 }
9428
9429 bool operator==( MemoryBarrier const& rhs ) const
9430 {
9431 return ( sType == rhs.sType )
9432 && ( pNext == rhs.pNext )
9433 && ( srcAccessMask == rhs.srcAccessMask )
9434 && ( dstAccessMask == rhs.dstAccessMask );
9435 }
9436
9437 bool operator!=( MemoryBarrier const& rhs ) const
9438 {
9439 return !operator==( rhs );
9440 }
9441
9442 private:
9443 StructureType sType;
9444
9445 public:
9446 const void* pNext;
9447 AccessFlags srcAccessMask;
9448 AccessFlags dstAccessMask;
9449 };
9450 static_assert( sizeof( MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" );
9451
9452 struct BufferMemoryBarrier
9453 {
9454 BufferMemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), uint32_t srcQueueFamilyIndex_ = 0, uint32_t dstQueueFamilyIndex_ = 0, Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
9455 : sType( StructureType::eBufferMemoryBarrier )
9456 , pNext( nullptr )
9457 , srcAccessMask( srcAccessMask_ )
9458 , dstAccessMask( dstAccessMask_ )
9459 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
9460 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
9461 , buffer( buffer_ )
9462 , offset( offset_ )
9463 , size( size_ )
9464 {
9465 }
9466
9467 BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs )
9468 {
9469 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9470 }
9471
9472 BufferMemoryBarrier& operator=( VkBufferMemoryBarrier const & rhs )
9473 {
9474 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9475 return *this;
9476 }
9477
9478 BufferMemoryBarrier& setSType( StructureType sType_ )
9479 {
9480 sType = sType_;
9481 return *this;
9482 }
9483
9484 BufferMemoryBarrier& setPNext( const void* pNext_ )
9485 {
9486 pNext = pNext_;
9487 return *this;
9488 }
9489
9490 BufferMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9491 {
9492 srcAccessMask = srcAccessMask_;
9493 return *this;
9494 }
9495
9496 BufferMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9497 {
9498 dstAccessMask = dstAccessMask_;
9499 return *this;
9500 }
9501
9502 BufferMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
9503 {
9504 srcQueueFamilyIndex = srcQueueFamilyIndex_;
9505 return *this;
9506 }
9507
9508 BufferMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
9509 {
9510 dstQueueFamilyIndex = dstQueueFamilyIndex_;
9511 return *this;
9512 }
9513
9514 BufferMemoryBarrier& setBuffer( Buffer buffer_ )
9515 {
9516 buffer = buffer_;
9517 return *this;
9518 }
9519
9520 BufferMemoryBarrier& setOffset( DeviceSize offset_ )
9521 {
9522 offset = offset_;
9523 return *this;
9524 }
9525
9526 BufferMemoryBarrier& setSize( DeviceSize size_ )
9527 {
9528 size = size_;
9529 return *this;
9530 }
9531
9532 operator const VkBufferMemoryBarrier&() const
9533 {
9534 return *reinterpret_cast<const VkBufferMemoryBarrier*>(this);
9535 }
9536
9537 bool operator==( BufferMemoryBarrier const& rhs ) const
9538 {
9539 return ( sType == rhs.sType )
9540 && ( pNext == rhs.pNext )
9541 && ( srcAccessMask == rhs.srcAccessMask )
9542 && ( dstAccessMask == rhs.dstAccessMask )
9543 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
9544 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
9545 && ( buffer == rhs.buffer )
9546 && ( offset == rhs.offset )
9547 && ( size == rhs.size );
9548 }
9549
9550 bool operator!=( BufferMemoryBarrier const& rhs ) const
9551 {
9552 return !operator==( rhs );
9553 }
9554
9555 private:
9556 StructureType sType;
9557
9558 public:
9559 const void* pNext;
9560 AccessFlags srcAccessMask;
9561 AccessFlags dstAccessMask;
9562 uint32_t srcQueueFamilyIndex;
9563 uint32_t dstQueueFamilyIndex;
9564 Buffer buffer;
9565 DeviceSize offset;
9566 DeviceSize size;
9567 };
9568 static_assert( sizeof( BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ), "struct and wrapper have different size!" );
9569
9570 enum class BufferUsageFlagBits
9571 {
9572 eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
9573 eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
9574 eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,
9575 eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,
9576 eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
9577 eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
9578 eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
9579 eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
9580 eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
9581 };
9582
9583 using BufferUsageFlags = Flags<BufferUsageFlagBits, VkBufferUsageFlags>;
9584
9585 inline BufferUsageFlags operator|( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 )
9586 {
9587 return BufferUsageFlags( bit0 ) | bit1;
9588 }
9589
9590 enum class BufferCreateFlagBits
9591 {
9592 eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
9593 eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
9594 eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
9595 };
9596
9597 using BufferCreateFlags = Flags<BufferCreateFlagBits, VkBufferCreateFlags>;
9598
9599 inline BufferCreateFlags operator|( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 )
9600 {
9601 return BufferCreateFlags( bit0 ) | bit1;
9602 }
9603
9604 struct BufferCreateInfo
9605 {
9606 BufferCreateInfo( BufferCreateFlags flags_ = BufferCreateFlags(), DeviceSize size_ = 0, BufferUsageFlags usage_ = BufferUsageFlags(), SharingMode sharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr )
9607 : sType( StructureType::eBufferCreateInfo )
9608 , pNext( nullptr )
9609 , flags( flags_ )
9610 , size( size_ )
9611 , usage( usage_ )
9612 , sharingMode( sharingMode_ )
9613 , queueFamilyIndexCount( queueFamilyIndexCount_ )
9614 , pQueueFamilyIndices( pQueueFamilyIndices_ )
9615 {
9616 }
9617
9618 BufferCreateInfo( VkBufferCreateInfo const & rhs )
9619 {
9620 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9621 }
9622
9623 BufferCreateInfo& operator=( VkBufferCreateInfo const & rhs )
9624 {
9625 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9626 return *this;
9627 }
9628
9629 BufferCreateInfo& setSType( StructureType sType_ )
9630 {
9631 sType = sType_;
9632 return *this;
9633 }
9634
9635 BufferCreateInfo& setPNext( const void* pNext_ )
9636 {
9637 pNext = pNext_;
9638 return *this;
9639 }
9640
9641 BufferCreateInfo& setFlags( BufferCreateFlags flags_ )
9642 {
9643 flags = flags_;
9644 return *this;
9645 }
9646
9647 BufferCreateInfo& setSize( DeviceSize size_ )
9648 {
9649 size = size_;
9650 return *this;
9651 }
9652
9653 BufferCreateInfo& setUsage( BufferUsageFlags usage_ )
9654 {
9655 usage = usage_;
9656 return *this;
9657 }
9658
9659 BufferCreateInfo& setSharingMode( SharingMode sharingMode_ )
9660 {
9661 sharingMode = sharingMode_;
9662 return *this;
9663 }
9664
9665 BufferCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
9666 {
9667 queueFamilyIndexCount = queueFamilyIndexCount_;
9668 return *this;
9669 }
9670
9671 BufferCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
9672 {
9673 pQueueFamilyIndices = pQueueFamilyIndices_;
9674 return *this;
9675 }
9676
9677 operator const VkBufferCreateInfo&() const
9678 {
9679 return *reinterpret_cast<const VkBufferCreateInfo*>(this);
9680 }
9681
9682 bool operator==( BufferCreateInfo const& rhs ) const
9683 {
9684 return ( sType == rhs.sType )
9685 && ( pNext == rhs.pNext )
9686 && ( flags == rhs.flags )
9687 && ( size == rhs.size )
9688 && ( usage == rhs.usage )
9689 && ( sharingMode == rhs.sharingMode )
9690 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
9691 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
9692 }
9693
9694 bool operator!=( BufferCreateInfo const& rhs ) const
9695 {
9696 return !operator==( rhs );
9697 }
9698
9699 private:
9700 StructureType sType;
9701
9702 public:
9703 const void* pNext;
9704 BufferCreateFlags flags;
9705 DeviceSize size;
9706 BufferUsageFlags usage;
9707 SharingMode sharingMode;
9708 uint32_t queueFamilyIndexCount;
9709 const uint32_t* pQueueFamilyIndices;
9710 };
9711 static_assert( sizeof( BufferCreateInfo ) == sizeof( VkBufferCreateInfo ), "struct and wrapper have different size!" );
9712
9713 enum class ShaderStageFlagBits
9714 {
9715 eVertex = VK_SHADER_STAGE_VERTEX_BIT,
9716 eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
9717 eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
9718 eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT,
9719 eFragment = VK_SHADER_STAGE_FRAGMENT_BIT,
9720 eCompute = VK_SHADER_STAGE_COMPUTE_BIT,
9721 eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS,
9722 eAll = VK_SHADER_STAGE_ALL
9723 };
9724
9725 using ShaderStageFlags = Flags<ShaderStageFlagBits, VkShaderStageFlags>;
9726
9727 inline ShaderStageFlags operator|( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 )
9728 {
9729 return ShaderStageFlags( bit0 ) | bit1;
9730 }
9731
9732 struct DescriptorSetLayoutBinding
9733 {
9734 DescriptorSetLayoutBinding( uint32_t binding_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0, ShaderStageFlags stageFlags_ = ShaderStageFlags(), const Sampler* pImmutableSamplers_ = nullptr )
9735 : binding( binding_ )
9736 , descriptorType( descriptorType_ )
9737 , descriptorCount( descriptorCount_ )
9738 , stageFlags( stageFlags_ )
9739 , pImmutableSamplers( pImmutableSamplers_ )
9740 {
9741 }
9742
9743 DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs )
9744 {
9745 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9746 }
9747
9748 DescriptorSetLayoutBinding& operator=( VkDescriptorSetLayoutBinding const & rhs )
9749 {
9750 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9751 return *this;
9752 }
9753
9754 DescriptorSetLayoutBinding& setBinding( uint32_t binding_ )
9755 {
9756 binding = binding_;
9757 return *this;
9758 }
9759
9760 DescriptorSetLayoutBinding& setDescriptorType( DescriptorType descriptorType_ )
9761 {
9762 descriptorType = descriptorType_;
9763 return *this;
9764 }
9765
9766 DescriptorSetLayoutBinding& setDescriptorCount( uint32_t descriptorCount_ )
9767 {
9768 descriptorCount = descriptorCount_;
9769 return *this;
9770 }
9771
9772 DescriptorSetLayoutBinding& setStageFlags( ShaderStageFlags stageFlags_ )
9773 {
9774 stageFlags = stageFlags_;
9775 return *this;
9776 }
9777
9778 DescriptorSetLayoutBinding& setPImmutableSamplers( const Sampler* pImmutableSamplers_ )
9779 {
9780 pImmutableSamplers = pImmutableSamplers_;
9781 return *this;
9782 }
9783
9784 operator const VkDescriptorSetLayoutBinding&() const
9785 {
9786 return *reinterpret_cast<const VkDescriptorSetLayoutBinding*>(this);
9787 }
9788
9789 bool operator==( DescriptorSetLayoutBinding const& rhs ) const
9790 {
9791 return ( binding == rhs.binding )
9792 && ( descriptorType == rhs.descriptorType )
9793 && ( descriptorCount == rhs.descriptorCount )
9794 && ( stageFlags == rhs.stageFlags )
9795 && ( pImmutableSamplers == rhs.pImmutableSamplers );
9796 }
9797
9798 bool operator!=( DescriptorSetLayoutBinding const& rhs ) const
9799 {
9800 return !operator==( rhs );
9801 }
9802
9803 uint32_t binding;
9804 DescriptorType descriptorType;
9805 uint32_t descriptorCount;
9806 ShaderStageFlags stageFlags;
9807 const Sampler* pImmutableSamplers;
9808 };
9809 static_assert( sizeof( DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ), "struct and wrapper have different size!" );
9810
9811 struct DescriptorSetLayoutCreateInfo
9812 {
9813 DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateFlags flags_ = DescriptorSetLayoutCreateFlags(), uint32_t bindingCount_ = 0, const DescriptorSetLayoutBinding* pBindings_ = nullptr )
9814 : sType( StructureType::eDescriptorSetLayoutCreateInfo )
9815 , pNext( nullptr )
9816 , flags( flags_ )
9817 , bindingCount( bindingCount_ )
9818 , pBindings( pBindings_ )
9819 {
9820 }
9821
9822 DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs )
9823 {
9824 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9825 }
9826
9827 DescriptorSetLayoutCreateInfo& operator=( VkDescriptorSetLayoutCreateInfo const & rhs )
9828 {
9829 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9830 return *this;
9831 }
9832
9833 DescriptorSetLayoutCreateInfo& setSType( StructureType sType_ )
9834 {
9835 sType = sType_;
9836 return *this;
9837 }
9838
9839 DescriptorSetLayoutCreateInfo& setPNext( const void* pNext_ )
9840 {
9841 pNext = pNext_;
9842 return *this;
9843 }
9844
9845 DescriptorSetLayoutCreateInfo& setFlags( DescriptorSetLayoutCreateFlags flags_ )
9846 {
9847 flags = flags_;
9848 return *this;
9849 }
9850
9851 DescriptorSetLayoutCreateInfo& setBindingCount( uint32_t bindingCount_ )
9852 {
9853 bindingCount = bindingCount_;
9854 return *this;
9855 }
9856
9857 DescriptorSetLayoutCreateInfo& setPBindings( const DescriptorSetLayoutBinding* pBindings_ )
9858 {
9859 pBindings = pBindings_;
9860 return *this;
9861 }
9862
9863 operator const VkDescriptorSetLayoutCreateInfo&() const
9864 {
9865 return *reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>(this);
9866 }
9867
9868 bool operator==( DescriptorSetLayoutCreateInfo const& rhs ) const
9869 {
9870 return ( sType == rhs.sType )
9871 && ( pNext == rhs.pNext )
9872 && ( flags == rhs.flags )
9873 && ( bindingCount == rhs.bindingCount )
9874 && ( pBindings == rhs.pBindings );
9875 }
9876
9877 bool operator!=( DescriptorSetLayoutCreateInfo const& rhs ) const
9878 {
9879 return !operator==( rhs );
9880 }
9881
9882 private:
9883 StructureType sType;
9884
9885 public:
9886 const void* pNext;
9887 DescriptorSetLayoutCreateFlags flags;
9888 uint32_t bindingCount;
9889 const DescriptorSetLayoutBinding* pBindings;
9890 };
9891 static_assert( sizeof( DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ), "struct and wrapper have different size!" );
9892
9893 struct PipelineShaderStageCreateInfo
9894 {
9895 PipelineShaderStageCreateInfo( PipelineShaderStageCreateFlags flags_ = PipelineShaderStageCreateFlags(), ShaderStageFlagBits stage_ = ShaderStageFlagBits::eVertex, ShaderModule module_ = ShaderModule(), const char* pName_ = nullptr, const SpecializationInfo* pSpecializationInfo_ = nullptr )
9896 : sType( StructureType::ePipelineShaderStageCreateInfo )
9897 , pNext( nullptr )
9898 , flags( flags_ )
9899 , stage( stage_ )
9900 , module( module_ )
9901 , pName( pName_ )
9902 , pSpecializationInfo( pSpecializationInfo_ )
9903 {
9904 }
9905
9906 PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs )
9907 {
9908 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9909 }
9910
9911 PipelineShaderStageCreateInfo& operator=( VkPipelineShaderStageCreateInfo const & rhs )
9912 {
9913 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9914 return *this;
9915 }
9916
9917 PipelineShaderStageCreateInfo& setSType( StructureType sType_ )
9918 {
9919 sType = sType_;
9920 return *this;
9921 }
9922
9923 PipelineShaderStageCreateInfo& setPNext( const void* pNext_ )
9924 {
9925 pNext = pNext_;
9926 return *this;
9927 }
9928
9929 PipelineShaderStageCreateInfo& setFlags( PipelineShaderStageCreateFlags flags_ )
9930 {
9931 flags = flags_;
9932 return *this;
9933 }
9934
9935 PipelineShaderStageCreateInfo& setStage( ShaderStageFlagBits stage_ )
9936 {
9937 stage = stage_;
9938 return *this;
9939 }
9940
9941 PipelineShaderStageCreateInfo& setModule( ShaderModule module_ )
9942 {
9943 module = module_;
9944 return *this;
9945 }
9946
9947 PipelineShaderStageCreateInfo& setPName( const char* pName_ )
9948 {
9949 pName = pName_;
9950 return *this;
9951 }
9952
9953 PipelineShaderStageCreateInfo& setPSpecializationInfo( const SpecializationInfo* pSpecializationInfo_ )
9954 {
9955 pSpecializationInfo = pSpecializationInfo_;
9956 return *this;
9957 }
9958
9959 operator const VkPipelineShaderStageCreateInfo&() const
9960 {
9961 return *reinterpret_cast<const VkPipelineShaderStageCreateInfo*>(this);
9962 }
9963
9964 bool operator==( PipelineShaderStageCreateInfo const& rhs ) const
9965 {
9966 return ( sType == rhs.sType )
9967 && ( pNext == rhs.pNext )
9968 && ( flags == rhs.flags )
9969 && ( stage == rhs.stage )
9970 && ( module == rhs.module )
9971 && ( pName == rhs.pName )
9972 && ( pSpecializationInfo == rhs.pSpecializationInfo );
9973 }
9974
9975 bool operator!=( PipelineShaderStageCreateInfo const& rhs ) const
9976 {
9977 return !operator==( rhs );
9978 }
9979
9980 private:
9981 StructureType sType;
9982
9983 public:
9984 const void* pNext;
9985 PipelineShaderStageCreateFlags flags;
9986 ShaderStageFlagBits stage;
9987 ShaderModule module;
9988 const char* pName;
9989 const SpecializationInfo* pSpecializationInfo;
9990 };
9991 static_assert( sizeof( PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ), "struct and wrapper have different size!" );
9992
9993 struct PushConstantRange
9994 {
9995 PushConstantRange( ShaderStageFlags stageFlags_ = ShaderStageFlags(), uint32_t offset_ = 0, uint32_t size_ = 0 )
9996 : stageFlags( stageFlags_ )
9997 , offset( offset_ )
9998 , size( size_ )
9999 {
10000 }
10001
10002 PushConstantRange( VkPushConstantRange const & rhs )
10003 {
10004 memcpy( this, &rhs, sizeof(PushConstantRange) );
10005 }
10006
10007 PushConstantRange& operator=( VkPushConstantRange const & rhs )
10008 {
10009 memcpy( this, &rhs, sizeof(PushConstantRange) );
10010 return *this;
10011 }
10012
10013 PushConstantRange& setStageFlags( ShaderStageFlags stageFlags_ )
10014 {
10015 stageFlags = stageFlags_;
10016 return *this;
10017 }
10018
10019 PushConstantRange& setOffset( uint32_t offset_ )
10020 {
10021 offset = offset_;
10022 return *this;
10023 }
10024
10025 PushConstantRange& setSize( uint32_t size_ )
10026 {
10027 size = size_;
10028 return *this;
10029 }
10030
10031 operator const VkPushConstantRange&() const
10032 {
10033 return *reinterpret_cast<const VkPushConstantRange*>(this);
10034 }
10035
10036 bool operator==( PushConstantRange const& rhs ) const
10037 {
10038 return ( stageFlags == rhs.stageFlags )
10039 && ( offset == rhs.offset )
10040 && ( size == rhs.size );
10041 }
10042
10043 bool operator!=( PushConstantRange const& rhs ) const
10044 {
10045 return !operator==( rhs );
10046 }
10047
10048 ShaderStageFlags stageFlags;
10049 uint32_t offset;
10050 uint32_t size;
10051 };
10052 static_assert( sizeof( PushConstantRange ) == sizeof( VkPushConstantRange ), "struct and wrapper have different size!" );
10053
10054 struct PipelineLayoutCreateInfo
10055 {
10056 PipelineLayoutCreateInfo( PipelineLayoutCreateFlags flags_ = PipelineLayoutCreateFlags(), uint32_t setLayoutCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr, uint32_t pushConstantRangeCount_ = 0, const PushConstantRange* pPushConstantRanges_ = nullptr )
10057 : sType( StructureType::ePipelineLayoutCreateInfo )
10058 , pNext( nullptr )
10059 , flags( flags_ )
10060 , setLayoutCount( setLayoutCount_ )
10061 , pSetLayouts( pSetLayouts_ )
10062 , pushConstantRangeCount( pushConstantRangeCount_ )
10063 , pPushConstantRanges( pPushConstantRanges_ )
10064 {
10065 }
10066
10067 PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs )
10068 {
10069 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
10070 }
10071
10072 PipelineLayoutCreateInfo& operator=( VkPipelineLayoutCreateInfo const & rhs )
10073 {
10074 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
10075 return *this;
10076 }
10077
10078 PipelineLayoutCreateInfo& setSType( StructureType sType_ )
10079 {
10080 sType = sType_;
10081 return *this;
10082 }
10083
10084 PipelineLayoutCreateInfo& setPNext( const void* pNext_ )
10085 {
10086 pNext = pNext_;
10087 return *this;
10088 }
10089
10090 PipelineLayoutCreateInfo& setFlags( PipelineLayoutCreateFlags flags_ )
10091 {
10092 flags = flags_;
10093 return *this;
10094 }
10095
10096 PipelineLayoutCreateInfo& setSetLayoutCount( uint32_t setLayoutCount_ )
10097 {
10098 setLayoutCount = setLayoutCount_;
10099 return *this;
10100 }
10101
10102 PipelineLayoutCreateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
10103 {
10104 pSetLayouts = pSetLayouts_;
10105 return *this;
10106 }
10107
10108 PipelineLayoutCreateInfo& setPushConstantRangeCount( uint32_t pushConstantRangeCount_ )
10109 {
10110 pushConstantRangeCount = pushConstantRangeCount_;
10111 return *this;
10112 }
10113
10114 PipelineLayoutCreateInfo& setPPushConstantRanges( const PushConstantRange* pPushConstantRanges_ )
10115 {
10116 pPushConstantRanges = pPushConstantRanges_;
10117 return *this;
10118 }
10119
10120 operator const VkPipelineLayoutCreateInfo&() const
10121 {
10122 return *reinterpret_cast<const VkPipelineLayoutCreateInfo*>(this);
10123 }
10124
10125 bool operator==( PipelineLayoutCreateInfo const& rhs ) const
10126 {
10127 return ( sType == rhs.sType )
10128 && ( pNext == rhs.pNext )
10129 && ( flags == rhs.flags )
10130 && ( setLayoutCount == rhs.setLayoutCount )
10131 && ( pSetLayouts == rhs.pSetLayouts )
10132 && ( pushConstantRangeCount == rhs.pushConstantRangeCount )
10133 && ( pPushConstantRanges == rhs.pPushConstantRanges );
10134 }
10135
10136 bool operator!=( PipelineLayoutCreateInfo const& rhs ) const
10137 {
10138 return !operator==( rhs );
10139 }
10140
10141 private:
10142 StructureType sType;
10143
10144 public:
10145 const void* pNext;
10146 PipelineLayoutCreateFlags flags;
10147 uint32_t setLayoutCount;
10148 const DescriptorSetLayout* pSetLayouts;
10149 uint32_t pushConstantRangeCount;
10150 const PushConstantRange* pPushConstantRanges;
10151 };
10152 static_assert( sizeof( PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ), "struct and wrapper have different size!" );
10153
10154 enum class ImageUsageFlagBits
10155 {
10156 eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
10157 eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT,
10158 eSampled = VK_IMAGE_USAGE_SAMPLED_BIT,
10159 eStorage = VK_IMAGE_USAGE_STORAGE_BIT,
10160 eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
10161 eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
10162 eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
10163 eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
10164 };
10165
10166 using ImageUsageFlags = Flags<ImageUsageFlagBits, VkImageUsageFlags>;
10167
10168 inline ImageUsageFlags operator|( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 )
10169 {
10170 return ImageUsageFlags( bit0 ) | bit1;
10171 }
10172
10173 enum class ImageCreateFlagBits
10174 {
10175 eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
10176 eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
10177 eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,
10178 eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
10179 eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
10180 };
10181
10182 using ImageCreateFlags = Flags<ImageCreateFlagBits, VkImageCreateFlags>;
10183
10184 inline ImageCreateFlags operator|( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 )
10185 {
10186 return ImageCreateFlags( bit0 ) | bit1;
10187 }
10188
10189 enum class PipelineCreateFlagBits
10190 {
10191 eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
10192 eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
10193 eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT
10194 };
10195
10196 using PipelineCreateFlags = Flags<PipelineCreateFlagBits, VkPipelineCreateFlags>;
10197
10198 inline PipelineCreateFlags operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 )
10199 {
10200 return PipelineCreateFlags( bit0 ) | bit1;
10201 }
10202
10203 struct ComputePipelineCreateInfo
10204 {
10205 ComputePipelineCreateInfo( PipelineCreateFlags flags_ = PipelineCreateFlags(), PipelineShaderStageCreateInfo stage_ = PipelineShaderStageCreateInfo(), PipelineLayout layout_ = PipelineLayout(), Pipeline basePipelineHandle_ = Pipeline(), int32_t basePipelineIndex_ = 0 )
10206 : sType( StructureType::eComputePipelineCreateInfo )
10207 , pNext( nullptr )
10208 , flags( flags_ )
10209 , stage( stage_ )
10210 , layout( layout_ )
10211 , basePipelineHandle( basePipelineHandle_ )
10212 , basePipelineIndex( basePipelineIndex_ )
10213 {
10214 }
10215
10216 ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs )
10217 {
10218 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10219 }
10220
10221 ComputePipelineCreateInfo& operator=( VkComputePipelineCreateInfo const & rhs )
10222 {
10223 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10224 return *this;
10225 }
10226
10227 ComputePipelineCreateInfo& setSType( StructureType sType_ )
10228 {
10229 sType = sType_;
10230 return *this;
10231 }
10232
10233 ComputePipelineCreateInfo& setPNext( const void* pNext_ )
10234 {
10235 pNext = pNext_;
10236 return *this;
10237 }
10238
10239 ComputePipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
10240 {
10241 flags = flags_;
10242 return *this;
10243 }
10244
10245 ComputePipelineCreateInfo& setStage( PipelineShaderStageCreateInfo stage_ )
10246 {
10247 stage = stage_;
10248 return *this;
10249 }
10250
10251 ComputePipelineCreateInfo& setLayout( PipelineLayout layout_ )
10252 {
10253 layout = layout_;
10254 return *this;
10255 }
10256
10257 ComputePipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
10258 {
10259 basePipelineHandle = basePipelineHandle_;
10260 return *this;
10261 }
10262
10263 ComputePipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
10264 {
10265 basePipelineIndex = basePipelineIndex_;
10266 return *this;
10267 }
10268
10269 operator const VkComputePipelineCreateInfo&() const
10270 {
10271 return *reinterpret_cast<const VkComputePipelineCreateInfo*>(this);
10272 }
10273
10274 bool operator==( ComputePipelineCreateInfo const& rhs ) const
10275 {
10276 return ( sType == rhs.sType )
10277 && ( pNext == rhs.pNext )
10278 && ( flags == rhs.flags )
10279 && ( stage == rhs.stage )
10280 && ( layout == rhs.layout )
10281 && ( basePipelineHandle == rhs.basePipelineHandle )
10282 && ( basePipelineIndex == rhs.basePipelineIndex );
10283 }
10284
10285 bool operator!=( ComputePipelineCreateInfo const& rhs ) const
10286 {
10287 return !operator==( rhs );
10288 }
10289
10290 private:
10291 StructureType sType;
10292
10293 public:
10294 const void* pNext;
10295 PipelineCreateFlags flags;
10296 PipelineShaderStageCreateInfo stage;
10297 PipelineLayout layout;
10298 Pipeline basePipelineHandle;
10299 int32_t basePipelineIndex;
10300 };
10301 static_assert( sizeof( ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ), "struct and wrapper have different size!" );
10302
10303 enum class ColorComponentFlagBits
10304 {
10305 eR = VK_COLOR_COMPONENT_R_BIT,
10306 eG = VK_COLOR_COMPONENT_G_BIT,
10307 eB = VK_COLOR_COMPONENT_B_BIT,
10308 eA = VK_COLOR_COMPONENT_A_BIT
10309 };
10310
10311 using ColorComponentFlags = Flags<ColorComponentFlagBits, VkColorComponentFlags>;
10312
10313 inline ColorComponentFlags operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 )
10314 {
10315 return ColorComponentFlags( bit0 ) | bit1;
10316 }
10317
10318 struct PipelineColorBlendAttachmentState
10319 {
10320 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() )
10321 : blendEnable( blendEnable_ )
10322 , srcColorBlendFactor( srcColorBlendFactor_ )
10323 , dstColorBlendFactor( dstColorBlendFactor_ )
10324 , colorBlendOp( colorBlendOp_ )
10325 , srcAlphaBlendFactor( srcAlphaBlendFactor_ )
10326 , dstAlphaBlendFactor( dstAlphaBlendFactor_ )
10327 , alphaBlendOp( alphaBlendOp_ )
10328 , colorWriteMask( colorWriteMask_ )
10329 {
10330 }
10331
10332 PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs )
10333 {
10334 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10335 }
10336
10337 PipelineColorBlendAttachmentState& operator=( VkPipelineColorBlendAttachmentState const & rhs )
10338 {
10339 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10340 return *this;
10341 }
10342
10343 PipelineColorBlendAttachmentState& setBlendEnable( Bool32 blendEnable_ )
10344 {
10345 blendEnable = blendEnable_;
10346 return *this;
10347 }
10348
10349 PipelineColorBlendAttachmentState& setSrcColorBlendFactor( BlendFactor srcColorBlendFactor_ )
10350 {
10351 srcColorBlendFactor = srcColorBlendFactor_;
10352 return *this;
10353 }
10354
10355 PipelineColorBlendAttachmentState& setDstColorBlendFactor( BlendFactor dstColorBlendFactor_ )
10356 {
10357 dstColorBlendFactor = dstColorBlendFactor_;
10358 return *this;
10359 }
10360
10361 PipelineColorBlendAttachmentState& setColorBlendOp( BlendOp colorBlendOp_ )
10362 {
10363 colorBlendOp = colorBlendOp_;
10364 return *this;
10365 }
10366
10367 PipelineColorBlendAttachmentState& setSrcAlphaBlendFactor( BlendFactor srcAlphaBlendFactor_ )
10368 {
10369 srcAlphaBlendFactor = srcAlphaBlendFactor_;
10370 return *this;
10371 }
10372
10373 PipelineColorBlendAttachmentState& setDstAlphaBlendFactor( BlendFactor dstAlphaBlendFactor_ )
10374 {
10375 dstAlphaBlendFactor = dstAlphaBlendFactor_;
10376 return *this;
10377 }
10378
10379 PipelineColorBlendAttachmentState& setAlphaBlendOp( BlendOp alphaBlendOp_ )
10380 {
10381 alphaBlendOp = alphaBlendOp_;
10382 return *this;
10383 }
10384
10385 PipelineColorBlendAttachmentState& setColorWriteMask( ColorComponentFlags colorWriteMask_ )
10386 {
10387 colorWriteMask = colorWriteMask_;
10388 return *this;
10389 }
10390
10391 operator const VkPipelineColorBlendAttachmentState&() const
10392 {
10393 return *reinterpret_cast<const VkPipelineColorBlendAttachmentState*>(this);
10394 }
10395
10396 bool operator==( PipelineColorBlendAttachmentState const& rhs ) const
10397 {
10398 return ( blendEnable == rhs.blendEnable )
10399 && ( srcColorBlendFactor == rhs.srcColorBlendFactor )
10400 && ( dstColorBlendFactor == rhs.dstColorBlendFactor )
10401 && ( colorBlendOp == rhs.colorBlendOp )
10402 && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor )
10403 && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor )
10404 && ( alphaBlendOp == rhs.alphaBlendOp )
10405 && ( colorWriteMask == rhs.colorWriteMask );
10406 }
10407
10408 bool operator!=( PipelineColorBlendAttachmentState const& rhs ) const
10409 {
10410 return !operator==( rhs );
10411 }
10412
10413 Bool32 blendEnable;
10414 BlendFactor srcColorBlendFactor;
10415 BlendFactor dstColorBlendFactor;
10416 BlendOp colorBlendOp;
10417 BlendFactor srcAlphaBlendFactor;
10418 BlendFactor dstAlphaBlendFactor;
10419 BlendOp alphaBlendOp;
10420 ColorComponentFlags colorWriteMask;
10421 };
10422 static_assert( sizeof( PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ), "struct and wrapper have different size!" );
10423
10424 struct PipelineColorBlendStateCreateInfo
10425 {
10426 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 } } )
10427 : sType( StructureType::ePipelineColorBlendStateCreateInfo )
10428 , pNext( nullptr )
10429 , flags( flags_ )
10430 , logicOpEnable( logicOpEnable_ )
10431 , logicOp( logicOp_ )
10432 , attachmentCount( attachmentCount_ )
10433 , pAttachments( pAttachments_ )
10434 {
10435 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10436 }
10437
10438 PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs )
10439 {
10440 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10441 }
10442
10443 PipelineColorBlendStateCreateInfo& operator=( VkPipelineColorBlendStateCreateInfo const & rhs )
10444 {
10445 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10446 return *this;
10447 }
10448
10449 PipelineColorBlendStateCreateInfo& setSType( StructureType sType_ )
10450 {
10451 sType = sType_;
10452 return *this;
10453 }
10454
10455 PipelineColorBlendStateCreateInfo& setPNext( const void* pNext_ )
10456 {
10457 pNext = pNext_;
10458 return *this;
10459 }
10460
10461 PipelineColorBlendStateCreateInfo& setFlags( PipelineColorBlendStateCreateFlags flags_ )
10462 {
10463 flags = flags_;
10464 return *this;
10465 }
10466
10467 PipelineColorBlendStateCreateInfo& setLogicOpEnable( Bool32 logicOpEnable_ )
10468 {
10469 logicOpEnable = logicOpEnable_;
10470 return *this;
10471 }
10472
10473 PipelineColorBlendStateCreateInfo& setLogicOp( LogicOp logicOp_ )
10474 {
10475 logicOp = logicOp_;
10476 return *this;
10477 }
10478
10479 PipelineColorBlendStateCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
10480 {
10481 attachmentCount = attachmentCount_;
10482 return *this;
10483 }
10484
10485 PipelineColorBlendStateCreateInfo& setPAttachments( const PipelineColorBlendAttachmentState* pAttachments_ )
10486 {
10487 pAttachments = pAttachments_;
10488 return *this;
10489 }
10490
10491 PipelineColorBlendStateCreateInfo& setBlendConstants( std::array<float,4> blendConstants_ )
10492 {
10493 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10494 return *this;
10495 }
10496
10497 operator const VkPipelineColorBlendStateCreateInfo&() const
10498 {
10499 return *reinterpret_cast<const VkPipelineColorBlendStateCreateInfo*>(this);
10500 }
10501
10502 bool operator==( PipelineColorBlendStateCreateInfo const& rhs ) const
10503 {
10504 return ( sType == rhs.sType )
10505 && ( pNext == rhs.pNext )
10506 && ( flags == rhs.flags )
10507 && ( logicOpEnable == rhs.logicOpEnable )
10508 && ( logicOp == rhs.logicOp )
10509 && ( attachmentCount == rhs.attachmentCount )
10510 && ( pAttachments == rhs.pAttachments )
10511 && ( memcmp( blendConstants, rhs.blendConstants, 4 * sizeof( float ) ) == 0 );
10512 }
10513
10514 bool operator!=( PipelineColorBlendStateCreateInfo const& rhs ) const
10515 {
10516 return !operator==( rhs );
10517 }
10518
10519 private:
10520 StructureType sType;
10521
10522 public:
10523 const void* pNext;
10524 PipelineColorBlendStateCreateFlags flags;
10525 Bool32 logicOpEnable;
10526 LogicOp logicOp;
10527 uint32_t attachmentCount;
10528 const PipelineColorBlendAttachmentState* pAttachments;
10529 float blendConstants[4];
10530 };
10531 static_assert( sizeof( PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ), "struct and wrapper have different size!" );
10532
10533 enum class FenceCreateFlagBits
10534 {
10535 eSignaled = VK_FENCE_CREATE_SIGNALED_BIT
10536 };
10537
10538 using FenceCreateFlags = Flags<FenceCreateFlagBits, VkFenceCreateFlags>;
10539
10540 inline FenceCreateFlags operator|( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 )
10541 {
10542 return FenceCreateFlags( bit0 ) | bit1;
10543 }
10544
10545 struct FenceCreateInfo
10546 {
10547 FenceCreateInfo( FenceCreateFlags flags_ = FenceCreateFlags() )
10548 : sType( StructureType::eFenceCreateInfo )
10549 , pNext( nullptr )
10550 , flags( flags_ )
10551 {
10552 }
10553
10554 FenceCreateInfo( VkFenceCreateInfo const & rhs )
10555 {
10556 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10557 }
10558
10559 FenceCreateInfo& operator=( VkFenceCreateInfo const & rhs )
10560 {
10561 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10562 return *this;
10563 }
10564
10565 FenceCreateInfo& setSType( StructureType sType_ )
10566 {
10567 sType = sType_;
10568 return *this;
10569 }
10570
10571 FenceCreateInfo& setPNext( const void* pNext_ )
10572 {
10573 pNext = pNext_;
10574 return *this;
10575 }
10576
10577 FenceCreateInfo& setFlags( FenceCreateFlags flags_ )
10578 {
10579 flags = flags_;
10580 return *this;
10581 }
10582
10583 operator const VkFenceCreateInfo&() const
10584 {
10585 return *reinterpret_cast<const VkFenceCreateInfo*>(this);
10586 }
10587
10588 bool operator==( FenceCreateInfo const& rhs ) const
10589 {
10590 return ( sType == rhs.sType )
10591 && ( pNext == rhs.pNext )
10592 && ( flags == rhs.flags );
10593 }
10594
10595 bool operator!=( FenceCreateInfo const& rhs ) const
10596 {
10597 return !operator==( rhs );
10598 }
10599
10600 private:
10601 StructureType sType;
10602
10603 public:
10604 const void* pNext;
10605 FenceCreateFlags flags;
10606 };
10607 static_assert( sizeof( FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" );
10608
10609 enum class FormatFeatureFlagBits
10610 {
10611 eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
10612 eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
10613 eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,
10614 eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,
10615 eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,
10616 eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,
10617 eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,
10618 eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
10619 eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,
10620 eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,
10621 eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT,
10622 eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT,
10623 eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
10624 eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
10625 };
10626
10627 using FormatFeatureFlags = Flags<FormatFeatureFlagBits, VkFormatFeatureFlags>;
10628
10629 inline FormatFeatureFlags operator|( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 )
10630 {
10631 return FormatFeatureFlags( bit0 ) | bit1;
10632 }
10633
10634 struct FormatProperties
10635 {
10636 operator const VkFormatProperties&() const
10637 {
10638 return *reinterpret_cast<const VkFormatProperties*>(this);
10639 }
10640
10641 bool operator==( FormatProperties const& rhs ) const
10642 {
10643 return ( linearTilingFeatures == rhs.linearTilingFeatures )
10644 && ( optimalTilingFeatures == rhs.optimalTilingFeatures )
10645 && ( bufferFeatures == rhs.bufferFeatures );
10646 }
10647
10648 bool operator!=( FormatProperties const& rhs ) const
10649 {
10650 return !operator==( rhs );
10651 }
10652
10653 FormatFeatureFlags linearTilingFeatures;
10654 FormatFeatureFlags optimalTilingFeatures;
10655 FormatFeatureFlags bufferFeatures;
10656 };
10657 static_assert( sizeof( FormatProperties ) == sizeof( VkFormatProperties ), "struct and wrapper have different size!" );
10658
10659 enum class QueryControlFlagBits
10660 {
10661 ePrecise = VK_QUERY_CONTROL_PRECISE_BIT
10662 };
10663
10664 using QueryControlFlags = Flags<QueryControlFlagBits, VkQueryControlFlags>;
10665
10666 inline QueryControlFlags operator|( QueryControlFlagBits bit0, QueryControlFlagBits bit1 )
10667 {
10668 return QueryControlFlags( bit0 ) | bit1;
10669 }
10670
10671 enum class QueryResultFlagBits
10672 {
10673 e64 = VK_QUERY_RESULT_64_BIT,
10674 eWait = VK_QUERY_RESULT_WAIT_BIT,
10675 eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
10676 ePartial = VK_QUERY_RESULT_PARTIAL_BIT
10677 };
10678
10679 using QueryResultFlags = Flags<QueryResultFlagBits, VkQueryResultFlags>;
10680
10681 inline QueryResultFlags operator|( QueryResultFlagBits bit0, QueryResultFlagBits bit1 )
10682 {
10683 return QueryResultFlags( bit0 ) | bit1;
10684 }
10685
10686 enum class CommandBufferUsageFlagBits
10687 {
10688 eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
10689 eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
10690 eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
10691 };
10692
10693 using CommandBufferUsageFlags = Flags<CommandBufferUsageFlagBits, VkCommandBufferUsageFlags>;
10694
10695 inline CommandBufferUsageFlags operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 )
10696 {
10697 return CommandBufferUsageFlags( bit0 ) | bit1;
10698 }
10699
10700 enum class QueryPipelineStatisticFlagBits
10701 {
10702 eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,
10703 eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,
10704 eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,
10705 eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,
10706 eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,
10707 eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,
10708 eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,
10709 eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,
10710 eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,
10711 eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,
10712 eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
10713 };
10714
10715 using QueryPipelineStatisticFlags = Flags<QueryPipelineStatisticFlagBits, VkQueryPipelineStatisticFlags>;
10716
10717 inline QueryPipelineStatisticFlags operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 )
10718 {
10719 return QueryPipelineStatisticFlags( bit0 ) | bit1;
10720 }
10721
10722 struct CommandBufferInheritanceInfo
10723 {
10724 CommandBufferInheritanceInfo( RenderPass renderPass_ = RenderPass(), uint32_t subpass_ = 0, Framebuffer framebuffer_ = Framebuffer(), Bool32 occlusionQueryEnable_ = 0, QueryControlFlags queryFlags_ = QueryControlFlags(), QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10725 : sType( StructureType::eCommandBufferInheritanceInfo )
10726 , pNext( nullptr )
10727 , renderPass( renderPass_ )
10728 , subpass( subpass_ )
10729 , framebuffer( framebuffer_ )
10730 , occlusionQueryEnable( occlusionQueryEnable_ )
10731 , queryFlags( queryFlags_ )
10732 , pipelineStatistics( pipelineStatistics_ )
10733 {
10734 }
10735
10736 CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs )
10737 {
10738 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10739 }
10740
10741 CommandBufferInheritanceInfo& operator=( VkCommandBufferInheritanceInfo const & rhs )
10742 {
10743 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10744 return *this;
10745 }
10746
10747 CommandBufferInheritanceInfo& setSType( StructureType sType_ )
10748 {
10749 sType = sType_;
10750 return *this;
10751 }
10752
10753 CommandBufferInheritanceInfo& setPNext( const void* pNext_ )
10754 {
10755 pNext = pNext_;
10756 return *this;
10757 }
10758
10759 CommandBufferInheritanceInfo& setRenderPass( RenderPass renderPass_ )
10760 {
10761 renderPass = renderPass_;
10762 return *this;
10763 }
10764
10765 CommandBufferInheritanceInfo& setSubpass( uint32_t subpass_ )
10766 {
10767 subpass = subpass_;
10768 return *this;
10769 }
10770
10771 CommandBufferInheritanceInfo& setFramebuffer( Framebuffer framebuffer_ )
10772 {
10773 framebuffer = framebuffer_;
10774 return *this;
10775 }
10776
10777 CommandBufferInheritanceInfo& setOcclusionQueryEnable( Bool32 occlusionQueryEnable_ )
10778 {
10779 occlusionQueryEnable = occlusionQueryEnable_;
10780 return *this;
10781 }
10782
10783 CommandBufferInheritanceInfo& setQueryFlags( QueryControlFlags queryFlags_ )
10784 {
10785 queryFlags = queryFlags_;
10786 return *this;
10787 }
10788
10789 CommandBufferInheritanceInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10790 {
10791 pipelineStatistics = pipelineStatistics_;
10792 return *this;
10793 }
10794
10795 operator const VkCommandBufferInheritanceInfo&() const
10796 {
10797 return *reinterpret_cast<const VkCommandBufferInheritanceInfo*>(this);
10798 }
10799
10800 bool operator==( CommandBufferInheritanceInfo const& rhs ) const
10801 {
10802 return ( sType == rhs.sType )
10803 && ( pNext == rhs.pNext )
10804 && ( renderPass == rhs.renderPass )
10805 && ( subpass == rhs.subpass )
10806 && ( framebuffer == rhs.framebuffer )
10807 && ( occlusionQueryEnable == rhs.occlusionQueryEnable )
10808 && ( queryFlags == rhs.queryFlags )
10809 && ( pipelineStatistics == rhs.pipelineStatistics );
10810 }
10811
10812 bool operator!=( CommandBufferInheritanceInfo const& rhs ) const
10813 {
10814 return !operator==( rhs );
10815 }
10816
10817 private:
10818 StructureType sType;
10819
10820 public:
10821 const void* pNext;
10822 RenderPass renderPass;
10823 uint32_t subpass;
10824 Framebuffer framebuffer;
10825 Bool32 occlusionQueryEnable;
10826 QueryControlFlags queryFlags;
10827 QueryPipelineStatisticFlags pipelineStatistics;
10828 };
10829 static_assert( sizeof( CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ), "struct and wrapper have different size!" );
10830
10831 struct CommandBufferBeginInfo
10832 {
10833 CommandBufferBeginInfo( CommandBufferUsageFlags flags_ = CommandBufferUsageFlags(), const CommandBufferInheritanceInfo* pInheritanceInfo_ = nullptr )
10834 : sType( StructureType::eCommandBufferBeginInfo )
10835 , pNext( nullptr )
10836 , flags( flags_ )
10837 , pInheritanceInfo( pInheritanceInfo_ )
10838 {
10839 }
10840
10841 CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs )
10842 {
10843 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10844 }
10845
10846 CommandBufferBeginInfo& operator=( VkCommandBufferBeginInfo const & rhs )
10847 {
10848 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10849 return *this;
10850 }
10851
10852 CommandBufferBeginInfo& setSType( StructureType sType_ )
10853 {
10854 sType = sType_;
10855 return *this;
10856 }
10857
10858 CommandBufferBeginInfo& setPNext( const void* pNext_ )
10859 {
10860 pNext = pNext_;
10861 return *this;
10862 }
10863
10864 CommandBufferBeginInfo& setFlags( CommandBufferUsageFlags flags_ )
10865 {
10866 flags = flags_;
10867 return *this;
10868 }
10869
10870 CommandBufferBeginInfo& setPInheritanceInfo( const CommandBufferInheritanceInfo* pInheritanceInfo_ )
10871 {
10872 pInheritanceInfo = pInheritanceInfo_;
10873 return *this;
10874 }
10875
10876 operator const VkCommandBufferBeginInfo&() const
10877 {
10878 return *reinterpret_cast<const VkCommandBufferBeginInfo*>(this);
10879 }
10880
10881 bool operator==( CommandBufferBeginInfo const& rhs ) const
10882 {
10883 return ( sType == rhs.sType )
10884 && ( pNext == rhs.pNext )
10885 && ( flags == rhs.flags )
10886 && ( pInheritanceInfo == rhs.pInheritanceInfo );
10887 }
10888
10889 bool operator!=( CommandBufferBeginInfo const& rhs ) const
10890 {
10891 return !operator==( rhs );
10892 }
10893
10894 private:
10895 StructureType sType;
10896
10897 public:
10898 const void* pNext;
10899 CommandBufferUsageFlags flags;
10900 const CommandBufferInheritanceInfo* pInheritanceInfo;
10901 };
10902 static_assert( sizeof( CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ), "struct and wrapper have different size!" );
10903
10904 struct QueryPoolCreateInfo
10905 {
10906 QueryPoolCreateInfo( QueryPoolCreateFlags flags_ = QueryPoolCreateFlags(), QueryType queryType_ = QueryType::eOcclusion, uint32_t queryCount_ = 0, QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10907 : sType( StructureType::eQueryPoolCreateInfo )
10908 , pNext( nullptr )
10909 , flags( flags_ )
10910 , queryType( queryType_ )
10911 , queryCount( queryCount_ )
10912 , pipelineStatistics( pipelineStatistics_ )
10913 {
10914 }
10915
10916 QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs )
10917 {
10918 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10919 }
10920
10921 QueryPoolCreateInfo& operator=( VkQueryPoolCreateInfo const & rhs )
10922 {
10923 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10924 return *this;
10925 }
10926
10927 QueryPoolCreateInfo& setSType( StructureType sType_ )
10928 {
10929 sType = sType_;
10930 return *this;
10931 }
10932
10933 QueryPoolCreateInfo& setPNext( const void* pNext_ )
10934 {
10935 pNext = pNext_;
10936 return *this;
10937 }
10938
10939 QueryPoolCreateInfo& setFlags( QueryPoolCreateFlags flags_ )
10940 {
10941 flags = flags_;
10942 return *this;
10943 }
10944
10945 QueryPoolCreateInfo& setQueryType( QueryType queryType_ )
10946 {
10947 queryType = queryType_;
10948 return *this;
10949 }
10950
10951 QueryPoolCreateInfo& setQueryCount( uint32_t queryCount_ )
10952 {
10953 queryCount = queryCount_;
10954 return *this;
10955 }
10956
10957 QueryPoolCreateInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10958 {
10959 pipelineStatistics = pipelineStatistics_;
10960 return *this;
10961 }
10962
10963 operator const VkQueryPoolCreateInfo&() const
10964 {
10965 return *reinterpret_cast<const VkQueryPoolCreateInfo*>(this);
10966 }
10967
10968 bool operator==( QueryPoolCreateInfo const& rhs ) const
10969 {
10970 return ( sType == rhs.sType )
10971 && ( pNext == rhs.pNext )
10972 && ( flags == rhs.flags )
10973 && ( queryType == rhs.queryType )
10974 && ( queryCount == rhs.queryCount )
10975 && ( pipelineStatistics == rhs.pipelineStatistics );
10976 }
10977
10978 bool operator!=( QueryPoolCreateInfo const& rhs ) const
10979 {
10980 return !operator==( rhs );
10981 }
10982
10983 private:
10984 StructureType sType;
10985
10986 public:
10987 const void* pNext;
10988 QueryPoolCreateFlags flags;
10989 QueryType queryType;
10990 uint32_t queryCount;
10991 QueryPipelineStatisticFlags pipelineStatistics;
10992 };
10993 static_assert( sizeof( QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ), "struct and wrapper have different size!" );
10994
10995 enum class ImageAspectFlagBits
10996 {
10997 eColor = VK_IMAGE_ASPECT_COLOR_BIT,
10998 eDepth = VK_IMAGE_ASPECT_DEPTH_BIT,
10999 eStencil = VK_IMAGE_ASPECT_STENCIL_BIT,
11000 eMetadata = VK_IMAGE_ASPECT_METADATA_BIT
11001 };
11002
11003 using ImageAspectFlags = Flags<ImageAspectFlagBits, VkImageAspectFlags>;
11004
11005 inline ImageAspectFlags operator|( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 )
11006 {
11007 return ImageAspectFlags( bit0 ) | bit1;
11008 }
11009
11010 struct ImageSubresource
11011 {
11012 ImageSubresource( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t arrayLayer_ = 0 )
11013 : aspectMask( aspectMask_ )
11014 , mipLevel( mipLevel_ )
11015 , arrayLayer( arrayLayer_ )
11016 {
11017 }
11018
11019 ImageSubresource( VkImageSubresource const & rhs )
11020 {
11021 memcpy( this, &rhs, sizeof(ImageSubresource) );
11022 }
11023
11024 ImageSubresource& operator=( VkImageSubresource const & rhs )
11025 {
11026 memcpy( this, &rhs, sizeof(ImageSubresource) );
11027 return *this;
11028 }
11029
11030 ImageSubresource& setAspectMask( ImageAspectFlags aspectMask_ )
11031 {
11032 aspectMask = aspectMask_;
11033 return *this;
11034 }
11035
11036 ImageSubresource& setMipLevel( uint32_t mipLevel_ )
11037 {
11038 mipLevel = mipLevel_;
11039 return *this;
11040 }
11041
11042 ImageSubresource& setArrayLayer( uint32_t arrayLayer_ )
11043 {
11044 arrayLayer = arrayLayer_;
11045 return *this;
11046 }
11047
11048 operator const VkImageSubresource&() const
11049 {
11050 return *reinterpret_cast<const VkImageSubresource*>(this);
11051 }
11052
11053 bool operator==( ImageSubresource const& rhs ) const
11054 {
11055 return ( aspectMask == rhs.aspectMask )
11056 && ( mipLevel == rhs.mipLevel )
11057 && ( arrayLayer == rhs.arrayLayer );
11058 }
11059
11060 bool operator!=( ImageSubresource const& rhs ) const
11061 {
11062 return !operator==( rhs );
11063 }
11064
11065 ImageAspectFlags aspectMask;
11066 uint32_t mipLevel;
11067 uint32_t arrayLayer;
11068 };
11069 static_assert( sizeof( ImageSubresource ) == sizeof( VkImageSubresource ), "struct and wrapper have different size!" );
11070
11071 struct ImageSubresourceLayers
11072 {
11073 ImageSubresourceLayers( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
11074 : aspectMask( aspectMask_ )
11075 , mipLevel( mipLevel_ )
11076 , baseArrayLayer( baseArrayLayer_ )
11077 , layerCount( layerCount_ )
11078 {
11079 }
11080
11081 ImageSubresourceLayers( VkImageSubresourceLayers const & rhs )
11082 {
11083 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
11084 }
11085
11086 ImageSubresourceLayers& operator=( VkImageSubresourceLayers const & rhs )
11087 {
11088 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
11089 return *this;
11090 }
11091
11092 ImageSubresourceLayers& setAspectMask( ImageAspectFlags aspectMask_ )
11093 {
11094 aspectMask = aspectMask_;
11095 return *this;
11096 }
11097
11098 ImageSubresourceLayers& setMipLevel( uint32_t mipLevel_ )
11099 {
11100 mipLevel = mipLevel_;
11101 return *this;
11102 }
11103
11104 ImageSubresourceLayers& setBaseArrayLayer( uint32_t baseArrayLayer_ )
11105 {
11106 baseArrayLayer = baseArrayLayer_;
11107 return *this;
11108 }
11109
11110 ImageSubresourceLayers& setLayerCount( uint32_t layerCount_ )
11111 {
11112 layerCount = layerCount_;
11113 return *this;
11114 }
11115
11116 operator const VkImageSubresourceLayers&() const
11117 {
11118 return *reinterpret_cast<const VkImageSubresourceLayers*>(this);
11119 }
11120
11121 bool operator==( ImageSubresourceLayers const& rhs ) const
11122 {
11123 return ( aspectMask == rhs.aspectMask )
11124 && ( mipLevel == rhs.mipLevel )
11125 && ( baseArrayLayer == rhs.baseArrayLayer )
11126 && ( layerCount == rhs.layerCount );
11127 }
11128
11129 bool operator!=( ImageSubresourceLayers const& rhs ) const
11130 {
11131 return !operator==( rhs );
11132 }
11133
11134 ImageAspectFlags aspectMask;
11135 uint32_t mipLevel;
11136 uint32_t baseArrayLayer;
11137 uint32_t layerCount;
11138 };
11139 static_assert( sizeof( ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ), "struct and wrapper have different size!" );
11140
11141 struct ImageSubresourceRange
11142 {
11143 ImageSubresourceRange( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t baseMipLevel_ = 0, uint32_t levelCount_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
11144 : aspectMask( aspectMask_ )
11145 , baseMipLevel( baseMipLevel_ )
11146 , levelCount( levelCount_ )
11147 , baseArrayLayer( baseArrayLayer_ )
11148 , layerCount( layerCount_ )
11149 {
11150 }
11151
11152 ImageSubresourceRange( VkImageSubresourceRange const & rhs )
11153 {
11154 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
11155 }
11156
11157 ImageSubresourceRange& operator=( VkImageSubresourceRange const & rhs )
11158 {
11159 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
11160 return *this;
11161 }
11162
11163 ImageSubresourceRange& setAspectMask( ImageAspectFlags aspectMask_ )
11164 {
11165 aspectMask = aspectMask_;
11166 return *this;
11167 }
11168
11169 ImageSubresourceRange& setBaseMipLevel( uint32_t baseMipLevel_ )
11170 {
11171 baseMipLevel = baseMipLevel_;
11172 return *this;
11173 }
11174
11175 ImageSubresourceRange& setLevelCount( uint32_t levelCount_ )
11176 {
11177 levelCount = levelCount_;
11178 return *this;
11179 }
11180
11181 ImageSubresourceRange& setBaseArrayLayer( uint32_t baseArrayLayer_ )
11182 {
11183 baseArrayLayer = baseArrayLayer_;
11184 return *this;
11185 }
11186
11187 ImageSubresourceRange& setLayerCount( uint32_t layerCount_ )
11188 {
11189 layerCount = layerCount_;
11190 return *this;
11191 }
11192
11193 operator const VkImageSubresourceRange&() const
11194 {
11195 return *reinterpret_cast<const VkImageSubresourceRange*>(this);
11196 }
11197
11198 bool operator==( ImageSubresourceRange const& rhs ) const
11199 {
11200 return ( aspectMask == rhs.aspectMask )
11201 && ( baseMipLevel == rhs.baseMipLevel )
11202 && ( levelCount == rhs.levelCount )
11203 && ( baseArrayLayer == rhs.baseArrayLayer )
11204 && ( layerCount == rhs.layerCount );
11205 }
11206
11207 bool operator!=( ImageSubresourceRange const& rhs ) const
11208 {
11209 return !operator==( rhs );
11210 }
11211
11212 ImageAspectFlags aspectMask;
11213 uint32_t baseMipLevel;
11214 uint32_t levelCount;
11215 uint32_t baseArrayLayer;
11216 uint32_t layerCount;
11217 };
11218 static_assert( sizeof( ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ), "struct and wrapper have different size!" );
11219
11220 struct ImageMemoryBarrier
11221 {
11222 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() )
11223 : sType( StructureType::eImageMemoryBarrier )
11224 , pNext( nullptr )
11225 , srcAccessMask( srcAccessMask_ )
11226 , dstAccessMask( dstAccessMask_ )
11227 , oldLayout( oldLayout_ )
11228 , newLayout( newLayout_ )
11229 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
11230 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
11231 , image( image_ )
11232 , subresourceRange( subresourceRange_ )
11233 {
11234 }
11235
11236 ImageMemoryBarrier( VkImageMemoryBarrier const & rhs )
11237 {
11238 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11239 }
11240
11241 ImageMemoryBarrier& operator=( VkImageMemoryBarrier const & rhs )
11242 {
11243 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11244 return *this;
11245 }
11246
11247 ImageMemoryBarrier& setSType( StructureType sType_ )
11248 {
11249 sType = sType_;
11250 return *this;
11251 }
11252
11253 ImageMemoryBarrier& setPNext( const void* pNext_ )
11254 {
11255 pNext = pNext_;
11256 return *this;
11257 }
11258
11259 ImageMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
11260 {
11261 srcAccessMask = srcAccessMask_;
11262 return *this;
11263 }
11264
11265 ImageMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
11266 {
11267 dstAccessMask = dstAccessMask_;
11268 return *this;
11269 }
11270
11271 ImageMemoryBarrier& setOldLayout( ImageLayout oldLayout_ )
11272 {
11273 oldLayout = oldLayout_;
11274 return *this;
11275 }
11276
11277 ImageMemoryBarrier& setNewLayout( ImageLayout newLayout_ )
11278 {
11279 newLayout = newLayout_;
11280 return *this;
11281 }
11282
11283 ImageMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
11284 {
11285 srcQueueFamilyIndex = srcQueueFamilyIndex_;
11286 return *this;
11287 }
11288
11289 ImageMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
11290 {
11291 dstQueueFamilyIndex = dstQueueFamilyIndex_;
11292 return *this;
11293 }
11294
11295 ImageMemoryBarrier& setImage( Image image_ )
11296 {
11297 image = image_;
11298 return *this;
11299 }
11300
11301 ImageMemoryBarrier& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11302 {
11303 subresourceRange = subresourceRange_;
11304 return *this;
11305 }
11306
11307 operator const VkImageMemoryBarrier&() const
11308 {
11309 return *reinterpret_cast<const VkImageMemoryBarrier*>(this);
11310 }
11311
11312 bool operator==( ImageMemoryBarrier const& rhs ) const
11313 {
11314 return ( sType == rhs.sType )
11315 && ( pNext == rhs.pNext )
11316 && ( srcAccessMask == rhs.srcAccessMask )
11317 && ( dstAccessMask == rhs.dstAccessMask )
11318 && ( oldLayout == rhs.oldLayout )
11319 && ( newLayout == rhs.newLayout )
11320 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
11321 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
11322 && ( image == rhs.image )
11323 && ( subresourceRange == rhs.subresourceRange );
11324 }
11325
11326 bool operator!=( ImageMemoryBarrier const& rhs ) const
11327 {
11328 return !operator==( rhs );
11329 }
11330
11331 private:
11332 StructureType sType;
11333
11334 public:
11335 const void* pNext;
11336 AccessFlags srcAccessMask;
11337 AccessFlags dstAccessMask;
11338 ImageLayout oldLayout;
11339 ImageLayout newLayout;
11340 uint32_t srcQueueFamilyIndex;
11341 uint32_t dstQueueFamilyIndex;
11342 Image image;
11343 ImageSubresourceRange subresourceRange;
11344 };
11345 static_assert( sizeof( ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ), "struct and wrapper have different size!" );
11346
11347 struct ImageViewCreateInfo
11348 {
11349 ImageViewCreateInfo( ImageViewCreateFlags flags_ = ImageViewCreateFlags(), Image image_ = Image(), ImageViewType viewType_ = ImageViewType::e1D, Format format_ = Format::eUndefined, ComponentMapping components_ = ComponentMapping(), ImageSubresourceRange subresourceRange_ = ImageSubresourceRange() )
11350 : sType( StructureType::eImageViewCreateInfo )
11351 , pNext( nullptr )
11352 , flags( flags_ )
11353 , image( image_ )
11354 , viewType( viewType_ )
11355 , format( format_ )
11356 , components( components_ )
11357 , subresourceRange( subresourceRange_ )
11358 {
11359 }
11360
11361 ImageViewCreateInfo( VkImageViewCreateInfo const & rhs )
11362 {
11363 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11364 }
11365
11366 ImageViewCreateInfo& operator=( VkImageViewCreateInfo const & rhs )
11367 {
11368 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11369 return *this;
11370 }
11371
11372 ImageViewCreateInfo& setSType( StructureType sType_ )
11373 {
11374 sType = sType_;
11375 return *this;
11376 }
11377
11378 ImageViewCreateInfo& setPNext( const void* pNext_ )
11379 {
11380 pNext = pNext_;
11381 return *this;
11382 }
11383
11384 ImageViewCreateInfo& setFlags( ImageViewCreateFlags flags_ )
11385 {
11386 flags = flags_;
11387 return *this;
11388 }
11389
11390 ImageViewCreateInfo& setImage( Image image_ )
11391 {
11392 image = image_;
11393 return *this;
11394 }
11395
11396 ImageViewCreateInfo& setViewType( ImageViewType viewType_ )
11397 {
11398 viewType = viewType_;
11399 return *this;
11400 }
11401
11402 ImageViewCreateInfo& setFormat( Format format_ )
11403 {
11404 format = format_;
11405 return *this;
11406 }
11407
11408 ImageViewCreateInfo& setComponents( ComponentMapping components_ )
11409 {
11410 components = components_;
11411 return *this;
11412 }
11413
11414 ImageViewCreateInfo& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11415 {
11416 subresourceRange = subresourceRange_;
11417 return *this;
11418 }
11419
11420 operator const VkImageViewCreateInfo&() const
11421 {
11422 return *reinterpret_cast<const VkImageViewCreateInfo*>(this);
11423 }
11424
11425 bool operator==( ImageViewCreateInfo const& rhs ) const
11426 {
11427 return ( sType == rhs.sType )
11428 && ( pNext == rhs.pNext )
11429 && ( flags == rhs.flags )
11430 && ( image == rhs.image )
11431 && ( viewType == rhs.viewType )
11432 && ( format == rhs.format )
11433 && ( components == rhs.components )
11434 && ( subresourceRange == rhs.subresourceRange );
11435 }
11436
11437 bool operator!=( ImageViewCreateInfo const& rhs ) const
11438 {
11439 return !operator==( rhs );
11440 }
11441
11442 private:
11443 StructureType sType;
11444
11445 public:
11446 const void* pNext;
11447 ImageViewCreateFlags flags;
11448 Image image;
11449 ImageViewType viewType;
11450 Format format;
11451 ComponentMapping components;
11452 ImageSubresourceRange subresourceRange;
11453 };
11454 static_assert( sizeof( ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ), "struct and wrapper have different size!" );
11455
11456 struct ImageCopy
11457 {
11458 ImageCopy( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11459 : srcSubresource( srcSubresource_ )
11460 , srcOffset( srcOffset_ )
11461 , dstSubresource( dstSubresource_ )
11462 , dstOffset( dstOffset_ )
11463 , extent( extent_ )
11464 {
11465 }
11466
11467 ImageCopy( VkImageCopy const & rhs )
11468 {
11469 memcpy( this, &rhs, sizeof(ImageCopy) );
11470 }
11471
11472 ImageCopy& operator=( VkImageCopy const & rhs )
11473 {
11474 memcpy( this, &rhs, sizeof(ImageCopy) );
11475 return *this;
11476 }
11477
11478 ImageCopy& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11479 {
11480 srcSubresource = srcSubresource_;
11481 return *this;
11482 }
11483
11484 ImageCopy& setSrcOffset( Offset3D srcOffset_ )
11485 {
11486 srcOffset = srcOffset_;
11487 return *this;
11488 }
11489
11490 ImageCopy& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11491 {
11492 dstSubresource = dstSubresource_;
11493 return *this;
11494 }
11495
11496 ImageCopy& setDstOffset( Offset3D dstOffset_ )
11497 {
11498 dstOffset = dstOffset_;
11499 return *this;
11500 }
11501
11502 ImageCopy& setExtent( Extent3D extent_ )
11503 {
11504 extent = extent_;
11505 return *this;
11506 }
11507
11508 operator const VkImageCopy&() const
11509 {
11510 return *reinterpret_cast<const VkImageCopy*>(this);
11511 }
11512
11513 bool operator==( ImageCopy const& rhs ) const
11514 {
11515 return ( srcSubresource == rhs.srcSubresource )
11516 && ( srcOffset == rhs.srcOffset )
11517 && ( dstSubresource == rhs.dstSubresource )
11518 && ( dstOffset == rhs.dstOffset )
11519 && ( extent == rhs.extent );
11520 }
11521
11522 bool operator!=( ImageCopy const& rhs ) const
11523 {
11524 return !operator==( rhs );
11525 }
11526
11527 ImageSubresourceLayers srcSubresource;
11528 Offset3D srcOffset;
11529 ImageSubresourceLayers dstSubresource;
11530 Offset3D dstOffset;
11531 Extent3D extent;
11532 };
11533 static_assert( sizeof( ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" );
11534
11535 struct ImageBlit
11536 {
11537 ImageBlit( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& srcOffsets_ = { { Offset3D(), Offset3D() } }, ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& dstOffsets_ = { { Offset3D(), Offset3D() } } )
11538 : srcSubresource( srcSubresource_ )
11539 , dstSubresource( dstSubresource_ )
11540 {
11541 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11542 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11543 }
11544
11545 ImageBlit( VkImageBlit const & rhs )
11546 {
11547 memcpy( this, &rhs, sizeof(ImageBlit) );
11548 }
11549
11550 ImageBlit& operator=( VkImageBlit const & rhs )
11551 {
11552 memcpy( this, &rhs, sizeof(ImageBlit) );
11553 return *this;
11554 }
11555
11556 ImageBlit& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11557 {
11558 srcSubresource = srcSubresource_;
11559 return *this;
11560 }
11561
11562 ImageBlit& setSrcOffsets( std::array<Offset3D,2> srcOffsets_ )
11563 {
11564 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11565 return *this;
11566 }
11567
11568 ImageBlit& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11569 {
11570 dstSubresource = dstSubresource_;
11571 return *this;
11572 }
11573
11574 ImageBlit& setDstOffsets( std::array<Offset3D,2> dstOffsets_ )
11575 {
11576 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11577 return *this;
11578 }
11579
11580 operator const VkImageBlit&() const
11581 {
11582 return *reinterpret_cast<const VkImageBlit*>(this);
11583 }
11584
11585 bool operator==( ImageBlit const& rhs ) const
11586 {
11587 return ( srcSubresource == rhs.srcSubresource )
11588 && ( memcmp( srcOffsets, rhs.srcOffsets, 2 * sizeof( Offset3D ) ) == 0 )
11589 && ( dstSubresource == rhs.dstSubresource )
11590 && ( memcmp( dstOffsets, rhs.dstOffsets, 2 * sizeof( Offset3D ) ) == 0 );
11591 }
11592
11593 bool operator!=( ImageBlit const& rhs ) const
11594 {
11595 return !operator==( rhs );
11596 }
11597
11598 ImageSubresourceLayers srcSubresource;
11599 Offset3D srcOffsets[2];
11600 ImageSubresourceLayers dstSubresource;
11601 Offset3D dstOffsets[2];
11602 };
11603 static_assert( sizeof( ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" );
11604
11605 struct BufferImageCopy
11606 {
11607 BufferImageCopy( DeviceSize bufferOffset_ = 0, uint32_t bufferRowLength_ = 0, uint32_t bufferImageHeight_ = 0, ImageSubresourceLayers imageSubresource_ = ImageSubresourceLayers(), Offset3D imageOffset_ = Offset3D(), Extent3D imageExtent_ = Extent3D() )
11608 : bufferOffset( bufferOffset_ )
11609 , bufferRowLength( bufferRowLength_ )
11610 , bufferImageHeight( bufferImageHeight_ )
11611 , imageSubresource( imageSubresource_ )
11612 , imageOffset( imageOffset_ )
11613 , imageExtent( imageExtent_ )
11614 {
11615 }
11616
11617 BufferImageCopy( VkBufferImageCopy const & rhs )
11618 {
11619 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11620 }
11621
11622 BufferImageCopy& operator=( VkBufferImageCopy const & rhs )
11623 {
11624 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11625 return *this;
11626 }
11627
11628 BufferImageCopy& setBufferOffset( DeviceSize bufferOffset_ )
11629 {
11630 bufferOffset = bufferOffset_;
11631 return *this;
11632 }
11633
11634 BufferImageCopy& setBufferRowLength( uint32_t bufferRowLength_ )
11635 {
11636 bufferRowLength = bufferRowLength_;
11637 return *this;
11638 }
11639
11640 BufferImageCopy& setBufferImageHeight( uint32_t bufferImageHeight_ )
11641 {
11642 bufferImageHeight = bufferImageHeight_;
11643 return *this;
11644 }
11645
11646 BufferImageCopy& setImageSubresource( ImageSubresourceLayers imageSubresource_ )
11647 {
11648 imageSubresource = imageSubresource_;
11649 return *this;
11650 }
11651
11652 BufferImageCopy& setImageOffset( Offset3D imageOffset_ )
11653 {
11654 imageOffset = imageOffset_;
11655 return *this;
11656 }
11657
11658 BufferImageCopy& setImageExtent( Extent3D imageExtent_ )
11659 {
11660 imageExtent = imageExtent_;
11661 return *this;
11662 }
11663
11664 operator const VkBufferImageCopy&() const
11665 {
11666 return *reinterpret_cast<const VkBufferImageCopy*>(this);
11667 }
11668
11669 bool operator==( BufferImageCopy const& rhs ) const
11670 {
11671 return ( bufferOffset == rhs.bufferOffset )
11672 && ( bufferRowLength == rhs.bufferRowLength )
11673 && ( bufferImageHeight == rhs.bufferImageHeight )
11674 && ( imageSubresource == rhs.imageSubresource )
11675 && ( imageOffset == rhs.imageOffset )
11676 && ( imageExtent == rhs.imageExtent );
11677 }
11678
11679 bool operator!=( BufferImageCopy const& rhs ) const
11680 {
11681 return !operator==( rhs );
11682 }
11683
11684 DeviceSize bufferOffset;
11685 uint32_t bufferRowLength;
11686 uint32_t bufferImageHeight;
11687 ImageSubresourceLayers imageSubresource;
11688 Offset3D imageOffset;
11689 Extent3D imageExtent;
11690 };
11691 static_assert( sizeof( BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" );
11692
11693 struct ImageResolve
11694 {
11695 ImageResolve( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11696 : srcSubresource( srcSubresource_ )
11697 , srcOffset( srcOffset_ )
11698 , dstSubresource( dstSubresource_ )
11699 , dstOffset( dstOffset_ )
11700 , extent( extent_ )
11701 {
11702 }
11703
11704 ImageResolve( VkImageResolve const & rhs )
11705 {
11706 memcpy( this, &rhs, sizeof(ImageResolve) );
11707 }
11708
11709 ImageResolve& operator=( VkImageResolve const & rhs )
11710 {
11711 memcpy( this, &rhs, sizeof(ImageResolve) );
11712 return *this;
11713 }
11714
11715 ImageResolve& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11716 {
11717 srcSubresource = srcSubresource_;
11718 return *this;
11719 }
11720
11721 ImageResolve& setSrcOffset( Offset3D srcOffset_ )
11722 {
11723 srcOffset = srcOffset_;
11724 return *this;
11725 }
11726
11727 ImageResolve& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11728 {
11729 dstSubresource = dstSubresource_;
11730 return *this;
11731 }
11732
11733 ImageResolve& setDstOffset( Offset3D dstOffset_ )
11734 {
11735 dstOffset = dstOffset_;
11736 return *this;
11737 }
11738
11739 ImageResolve& setExtent( Extent3D extent_ )
11740 {
11741 extent = extent_;
11742 return *this;
11743 }
11744
11745 operator const VkImageResolve&() const
11746 {
11747 return *reinterpret_cast<const VkImageResolve*>(this);
11748 }
11749
11750 bool operator==( ImageResolve const& rhs ) const
11751 {
11752 return ( srcSubresource == rhs.srcSubresource )
11753 && ( srcOffset == rhs.srcOffset )
11754 && ( dstSubresource == rhs.dstSubresource )
11755 && ( dstOffset == rhs.dstOffset )
11756 && ( extent == rhs.extent );
11757 }
11758
11759 bool operator!=( ImageResolve const& rhs ) const
11760 {
11761 return !operator==( rhs );
11762 }
11763
11764 ImageSubresourceLayers srcSubresource;
11765 Offset3D srcOffset;
11766 ImageSubresourceLayers dstSubresource;
11767 Offset3D dstOffset;
11768 Extent3D extent;
11769 };
11770 static_assert( sizeof( ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" );
11771
11772 struct ClearAttachment
11773 {
11774 ClearAttachment( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t colorAttachment_ = 0, ClearValue clearValue_ = ClearValue() )
11775 : aspectMask( aspectMask_ )
11776 , colorAttachment( colorAttachment_ )
11777 , clearValue( clearValue_ )
11778 {
11779 }
11780
11781 ClearAttachment( VkClearAttachment const & rhs )
11782 {
11783 memcpy( this, &rhs, sizeof(ClearAttachment) );
11784 }
11785
11786 ClearAttachment& operator=( VkClearAttachment const & rhs )
11787 {
11788 memcpy( this, &rhs, sizeof(ClearAttachment) );
11789 return *this;
11790 }
11791
11792 ClearAttachment& setAspectMask( ImageAspectFlags aspectMask_ )
11793 {
11794 aspectMask = aspectMask_;
11795 return *this;
11796 }
11797
11798 ClearAttachment& setColorAttachment( uint32_t colorAttachment_ )
11799 {
11800 colorAttachment = colorAttachment_;
11801 return *this;
11802 }
11803
11804 ClearAttachment& setClearValue( ClearValue clearValue_ )
11805 {
11806 clearValue = clearValue_;
11807 return *this;
11808 }
11809
11810 operator const VkClearAttachment&() const
11811 {
11812 return *reinterpret_cast<const VkClearAttachment*>(this);
11813 }
11814
11815 ImageAspectFlags aspectMask;
11816 uint32_t colorAttachment;
11817 ClearValue clearValue;
11818 };
11819 static_assert( sizeof( ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" );
11820
11821 enum class SparseImageFormatFlagBits
11822 {
11823 eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,
11824 eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,
11825 eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
11826 };
11827
11828 using SparseImageFormatFlags = Flags<SparseImageFormatFlagBits, VkSparseImageFormatFlags>;
11829
11830 inline SparseImageFormatFlags operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 )
11831 {
11832 return SparseImageFormatFlags( bit0 ) | bit1;
11833 }
11834
11835 struct SparseImageFormatProperties
11836 {
11837 operator const VkSparseImageFormatProperties&() const
11838 {
11839 return *reinterpret_cast<const VkSparseImageFormatProperties*>(this);
11840 }
11841
11842 bool operator==( SparseImageFormatProperties const& rhs ) const
11843 {
11844 return ( aspectMask == rhs.aspectMask )
11845 && ( imageGranularity == rhs.imageGranularity )
11846 && ( flags == rhs.flags );
11847 }
11848
11849 bool operator!=( SparseImageFormatProperties const& rhs ) const
11850 {
11851 return !operator==( rhs );
11852 }
11853
11854 ImageAspectFlags aspectMask;
11855 Extent3D imageGranularity;
11856 SparseImageFormatFlags flags;
11857 };
11858 static_assert( sizeof( SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ), "struct and wrapper have different size!" );
11859
11860 struct SparseImageMemoryRequirements
11861 {
11862 operator const VkSparseImageMemoryRequirements&() const
11863 {
11864 return *reinterpret_cast<const VkSparseImageMemoryRequirements*>(this);
11865 }
11866
11867 bool operator==( SparseImageMemoryRequirements const& rhs ) const
11868 {
11869 return ( formatProperties == rhs.formatProperties )
11870 && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod )
11871 && ( imageMipTailSize == rhs.imageMipTailSize )
11872 && ( imageMipTailOffset == rhs.imageMipTailOffset )
11873 && ( imageMipTailStride == rhs.imageMipTailStride );
11874 }
11875
11876 bool operator!=( SparseImageMemoryRequirements const& rhs ) const
11877 {
11878 return !operator==( rhs );
11879 }
11880
11881 SparseImageFormatProperties formatProperties;
11882 uint32_t imageMipTailFirstLod;
11883 DeviceSize imageMipTailSize;
11884 DeviceSize imageMipTailOffset;
11885 DeviceSize imageMipTailStride;
11886 };
11887 static_assert( sizeof( SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ), "struct and wrapper have different size!" );
11888
11889 enum class SparseMemoryBindFlagBits
11890 {
11891 eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT
11892 };
11893
11894 using SparseMemoryBindFlags = Flags<SparseMemoryBindFlagBits, VkSparseMemoryBindFlags>;
11895
11896 inline SparseMemoryBindFlags operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 )
11897 {
11898 return SparseMemoryBindFlags( bit0 ) | bit1;
11899 }
11900
11901 struct SparseMemoryBind
11902 {
11903 SparseMemoryBind( DeviceSize resourceOffset_ = 0, DeviceSize size_ = 0, DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11904 : resourceOffset( resourceOffset_ )
11905 , size( size_ )
11906 , memory( memory_ )
11907 , memoryOffset( memoryOffset_ )
11908 , flags( flags_ )
11909 {
11910 }
11911
11912 SparseMemoryBind( VkSparseMemoryBind const & rhs )
11913 {
11914 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11915 }
11916
11917 SparseMemoryBind& operator=( VkSparseMemoryBind const & rhs )
11918 {
11919 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11920 return *this;
11921 }
11922
11923 SparseMemoryBind& setResourceOffset( DeviceSize resourceOffset_ )
11924 {
11925 resourceOffset = resourceOffset_;
11926 return *this;
11927 }
11928
11929 SparseMemoryBind& setSize( DeviceSize size_ )
11930 {
11931 size = size_;
11932 return *this;
11933 }
11934
11935 SparseMemoryBind& setMemory( DeviceMemory memory_ )
11936 {
11937 memory = memory_;
11938 return *this;
11939 }
11940
11941 SparseMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
11942 {
11943 memoryOffset = memoryOffset_;
11944 return *this;
11945 }
11946
11947 SparseMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
11948 {
11949 flags = flags_;
11950 return *this;
11951 }
11952
11953 operator const VkSparseMemoryBind&() const
11954 {
11955 return *reinterpret_cast<const VkSparseMemoryBind*>(this);
11956 }
11957
11958 bool operator==( SparseMemoryBind const& rhs ) const
11959 {
11960 return ( resourceOffset == rhs.resourceOffset )
11961 && ( size == rhs.size )
11962 && ( memory == rhs.memory )
11963 && ( memoryOffset == rhs.memoryOffset )
11964 && ( flags == rhs.flags );
11965 }
11966
11967 bool operator!=( SparseMemoryBind const& rhs ) const
11968 {
11969 return !operator==( rhs );
11970 }
11971
11972 DeviceSize resourceOffset;
11973 DeviceSize size;
11974 DeviceMemory memory;
11975 DeviceSize memoryOffset;
11976 SparseMemoryBindFlags flags;
11977 };
11978 static_assert( sizeof( SparseMemoryBind ) == sizeof( VkSparseMemoryBind ), "struct and wrapper have different size!" );
11979
11980 struct SparseImageMemoryBind
11981 {
11982 SparseImageMemoryBind( ImageSubresource subresource_ = ImageSubresource(), Offset3D offset_ = Offset3D(), Extent3D extent_ = Extent3D(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11983 : subresource( subresource_ )
11984 , offset( offset_ )
11985 , extent( extent_ )
11986 , memory( memory_ )
11987 , memoryOffset( memoryOffset_ )
11988 , flags( flags_ )
11989 {
11990 }
11991
11992 SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs )
11993 {
11994 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
11995 }
11996
11997 SparseImageMemoryBind& operator=( VkSparseImageMemoryBind const & rhs )
11998 {
11999 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
12000 return *this;
12001 }
12002
12003 SparseImageMemoryBind& setSubresource( ImageSubresource subresource_ )
12004 {
12005 subresource = subresource_;
12006 return *this;
12007 }
12008
12009 SparseImageMemoryBind& setOffset( Offset3D offset_ )
12010 {
12011 offset = offset_;
12012 return *this;
12013 }
12014
12015 SparseImageMemoryBind& setExtent( Extent3D extent_ )
12016 {
12017 extent = extent_;
12018 return *this;
12019 }
12020
12021 SparseImageMemoryBind& setMemory( DeviceMemory memory_ )
12022 {
12023 memory = memory_;
12024 return *this;
12025 }
12026
12027 SparseImageMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
12028 {
12029 memoryOffset = memoryOffset_;
12030 return *this;
12031 }
12032
12033 SparseImageMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
12034 {
12035 flags = flags_;
12036 return *this;
12037 }
12038
12039 operator const VkSparseImageMemoryBind&() const
12040 {
12041 return *reinterpret_cast<const VkSparseImageMemoryBind*>(this);
12042 }
12043
12044 bool operator==( SparseImageMemoryBind const& rhs ) const
12045 {
12046 return ( subresource == rhs.subresource )
12047 && ( offset == rhs.offset )
12048 && ( extent == rhs.extent )
12049 && ( memory == rhs.memory )
12050 && ( memoryOffset == rhs.memoryOffset )
12051 && ( flags == rhs.flags );
12052 }
12053
12054 bool operator!=( SparseImageMemoryBind const& rhs ) const
12055 {
12056 return !operator==( rhs );
12057 }
12058
12059 ImageSubresource subresource;
12060 Offset3D offset;
12061 Extent3D extent;
12062 DeviceMemory memory;
12063 DeviceSize memoryOffset;
12064 SparseMemoryBindFlags flags;
12065 };
12066 static_assert( sizeof( SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ), "struct and wrapper have different size!" );
12067
12068 struct SparseBufferMemoryBindInfo
12069 {
12070 SparseBufferMemoryBindInfo( Buffer buffer_ = Buffer(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
12071 : buffer( buffer_ )
12072 , bindCount( bindCount_ )
12073 , pBinds( pBinds_ )
12074 {
12075 }
12076
12077 SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs )
12078 {
12079 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
12080 }
12081
12082 SparseBufferMemoryBindInfo& operator=( VkSparseBufferMemoryBindInfo const & rhs )
12083 {
12084 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
12085 return *this;
12086 }
12087
12088 SparseBufferMemoryBindInfo& setBuffer( Buffer buffer_ )
12089 {
12090 buffer = buffer_;
12091 return *this;
12092 }
12093
12094 SparseBufferMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12095 {
12096 bindCount = bindCount_;
12097 return *this;
12098 }
12099
12100 SparseBufferMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
12101 {
12102 pBinds = pBinds_;
12103 return *this;
12104 }
12105
12106 operator const VkSparseBufferMemoryBindInfo&() const
12107 {
12108 return *reinterpret_cast<const VkSparseBufferMemoryBindInfo*>(this);
12109 }
12110
12111 bool operator==( SparseBufferMemoryBindInfo const& rhs ) const
12112 {
12113 return ( buffer == rhs.buffer )
12114 && ( bindCount == rhs.bindCount )
12115 && ( pBinds == rhs.pBinds );
12116 }
12117
12118 bool operator!=( SparseBufferMemoryBindInfo const& rhs ) const
12119 {
12120 return !operator==( rhs );
12121 }
12122
12123 Buffer buffer;
12124 uint32_t bindCount;
12125 const SparseMemoryBind* pBinds;
12126 };
12127 static_assert( sizeof( SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ), "struct and wrapper have different size!" );
12128
12129 struct SparseImageOpaqueMemoryBindInfo
12130 {
12131 SparseImageOpaqueMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
12132 : image( image_ )
12133 , bindCount( bindCount_ )
12134 , pBinds( pBinds_ )
12135 {
12136 }
12137
12138 SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs )
12139 {
12140 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
12141 }
12142
12143 SparseImageOpaqueMemoryBindInfo& operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs )
12144 {
12145 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
12146 return *this;
12147 }
12148
12149 SparseImageOpaqueMemoryBindInfo& setImage( Image image_ )
12150 {
12151 image = image_;
12152 return *this;
12153 }
12154
12155 SparseImageOpaqueMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12156 {
12157 bindCount = bindCount_;
12158 return *this;
12159 }
12160
12161 SparseImageOpaqueMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
12162 {
12163 pBinds = pBinds_;
12164 return *this;
12165 }
12166
12167 operator const VkSparseImageOpaqueMemoryBindInfo&() const
12168 {
12169 return *reinterpret_cast<const VkSparseImageOpaqueMemoryBindInfo*>(this);
12170 }
12171
12172 bool operator==( SparseImageOpaqueMemoryBindInfo const& rhs ) const
12173 {
12174 return ( image == rhs.image )
12175 && ( bindCount == rhs.bindCount )
12176 && ( pBinds == rhs.pBinds );
12177 }
12178
12179 bool operator!=( SparseImageOpaqueMemoryBindInfo const& rhs ) const
12180 {
12181 return !operator==( rhs );
12182 }
12183
12184 Image image;
12185 uint32_t bindCount;
12186 const SparseMemoryBind* pBinds;
12187 };
12188 static_assert( sizeof( SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ), "struct and wrapper have different size!" );
12189
12190 struct SparseImageMemoryBindInfo
12191 {
12192 SparseImageMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseImageMemoryBind* pBinds_ = nullptr )
12193 : image( image_ )
12194 , bindCount( bindCount_ )
12195 , pBinds( pBinds_ )
12196 {
12197 }
12198
12199 SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs )
12200 {
12201 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12202 }
12203
12204 SparseImageMemoryBindInfo& operator=( VkSparseImageMemoryBindInfo const & rhs )
12205 {
12206 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12207 return *this;
12208 }
12209
12210 SparseImageMemoryBindInfo& setImage( Image image_ )
12211 {
12212 image = image_;
12213 return *this;
12214 }
12215
12216 SparseImageMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12217 {
12218 bindCount = bindCount_;
12219 return *this;
12220 }
12221
12222 SparseImageMemoryBindInfo& setPBinds( const SparseImageMemoryBind* pBinds_ )
12223 {
12224 pBinds = pBinds_;
12225 return *this;
12226 }
12227
12228 operator const VkSparseImageMemoryBindInfo&() const
12229 {
12230 return *reinterpret_cast<const VkSparseImageMemoryBindInfo*>(this);
12231 }
12232
12233 bool operator==( SparseImageMemoryBindInfo const& rhs ) const
12234 {
12235 return ( image == rhs.image )
12236 && ( bindCount == rhs.bindCount )
12237 && ( pBinds == rhs.pBinds );
12238 }
12239
12240 bool operator!=( SparseImageMemoryBindInfo const& rhs ) const
12241 {
12242 return !operator==( rhs );
12243 }
12244
12245 Image image;
12246 uint32_t bindCount;
12247 const SparseImageMemoryBind* pBinds;
12248 };
12249 static_assert( sizeof( SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ), "struct and wrapper have different size!" );
12250
12251 struct BindSparseInfo
12252 {
12253 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 )
12254 : sType( StructureType::eBindSparseInfo )
12255 , pNext( nullptr )
12256 , waitSemaphoreCount( waitSemaphoreCount_ )
12257 , pWaitSemaphores( pWaitSemaphores_ )
12258 , bufferBindCount( bufferBindCount_ )
12259 , pBufferBinds( pBufferBinds_ )
12260 , imageOpaqueBindCount( imageOpaqueBindCount_ )
12261 , pImageOpaqueBinds( pImageOpaqueBinds_ )
12262 , imageBindCount( imageBindCount_ )
12263 , pImageBinds( pImageBinds_ )
12264 , signalSemaphoreCount( signalSemaphoreCount_ )
12265 , pSignalSemaphores( pSignalSemaphores_ )
12266 {
12267 }
12268
12269 BindSparseInfo( VkBindSparseInfo const & rhs )
12270 {
12271 memcpy( this, &rhs, sizeof(BindSparseInfo) );
12272 }
12273
12274 BindSparseInfo& operator=( VkBindSparseInfo const & rhs )
12275 {
12276 memcpy( this, &rhs, sizeof(BindSparseInfo) );
12277 return *this;
12278 }
12279
12280 BindSparseInfo& setSType( StructureType sType_ )
12281 {
12282 sType = sType_;
12283 return *this;
12284 }
12285
12286 BindSparseInfo& setPNext( const void* pNext_ )
12287 {
12288 pNext = pNext_;
12289 return *this;
12290 }
12291
12292 BindSparseInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
12293 {
12294 waitSemaphoreCount = waitSemaphoreCount_;
12295 return *this;
12296 }
12297
12298 BindSparseInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
12299 {
12300 pWaitSemaphores = pWaitSemaphores_;
12301 return *this;
12302 }
12303
12304 BindSparseInfo& setBufferBindCount( uint32_t bufferBindCount_ )
12305 {
12306 bufferBindCount = bufferBindCount_;
12307 return *this;
12308 }
12309
12310 BindSparseInfo& setPBufferBinds( const SparseBufferMemoryBindInfo* pBufferBinds_ )
12311 {
12312 pBufferBinds = pBufferBinds_;
12313 return *this;
12314 }
12315
12316 BindSparseInfo& setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ )
12317 {
12318 imageOpaqueBindCount = imageOpaqueBindCount_;
12319 return *this;
12320 }
12321
12322 BindSparseInfo& setPImageOpaqueBinds( const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds_ )
12323 {
12324 pImageOpaqueBinds = pImageOpaqueBinds_;
12325 return *this;
12326 }
12327
12328 BindSparseInfo& setImageBindCount( uint32_t imageBindCount_ )
12329 {
12330 imageBindCount = imageBindCount_;
12331 return *this;
12332 }
12333
12334 BindSparseInfo& setPImageBinds( const SparseImageMemoryBindInfo* pImageBinds_ )
12335 {
12336 pImageBinds = pImageBinds_;
12337 return *this;
12338 }
12339
12340 BindSparseInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
12341 {
12342 signalSemaphoreCount = signalSemaphoreCount_;
12343 return *this;
12344 }
12345
12346 BindSparseInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
12347 {
12348 pSignalSemaphores = pSignalSemaphores_;
12349 return *this;
12350 }
12351
12352 operator const VkBindSparseInfo&() const
12353 {
12354 return *reinterpret_cast<const VkBindSparseInfo*>(this);
12355 }
12356
12357 bool operator==( BindSparseInfo const& rhs ) const
12358 {
12359 return ( sType == rhs.sType )
12360 && ( pNext == rhs.pNext )
12361 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
12362 && ( pWaitSemaphores == rhs.pWaitSemaphores )
12363 && ( bufferBindCount == rhs.bufferBindCount )
12364 && ( pBufferBinds == rhs.pBufferBinds )
12365 && ( imageOpaqueBindCount == rhs.imageOpaqueBindCount )
12366 && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds )
12367 && ( imageBindCount == rhs.imageBindCount )
12368 && ( pImageBinds == rhs.pImageBinds )
12369 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
12370 && ( pSignalSemaphores == rhs.pSignalSemaphores );
12371 }
12372
12373 bool operator!=( BindSparseInfo const& rhs ) const
12374 {
12375 return !operator==( rhs );
12376 }
12377
12378 private:
12379 StructureType sType;
12380
12381 public:
12382 const void* pNext;
12383 uint32_t waitSemaphoreCount;
12384 const Semaphore* pWaitSemaphores;
12385 uint32_t bufferBindCount;
12386 const SparseBufferMemoryBindInfo* pBufferBinds;
12387 uint32_t imageOpaqueBindCount;
12388 const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
12389 uint32_t imageBindCount;
12390 const SparseImageMemoryBindInfo* pImageBinds;
12391 uint32_t signalSemaphoreCount;
12392 const Semaphore* pSignalSemaphores;
12393 };
12394 static_assert( sizeof( BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" );
12395
12396 enum class PipelineStageFlagBits
12397 {
12398 eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
12399 eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
12400 eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
12401 eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
12402 eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
12403 eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
12404 eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
12405 eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
12406 eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
12407 eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
12408 eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
12409 eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
12410 eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT,
12411 eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
12412 eHost = VK_PIPELINE_STAGE_HOST_BIT,
12413 eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
12414 eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
12415 };
12416
12417 using PipelineStageFlags = Flags<PipelineStageFlagBits, VkPipelineStageFlags>;
12418
12419 inline PipelineStageFlags operator|( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 )
12420 {
12421 return PipelineStageFlags( bit0 ) | bit1;
12422 }
12423
12424 enum class CommandPoolCreateFlagBits
12425 {
12426 eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,
12427 eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
12428 };
12429
12430 using CommandPoolCreateFlags = Flags<CommandPoolCreateFlagBits, VkCommandPoolCreateFlags>;
12431
12432 inline CommandPoolCreateFlags operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 )
12433 {
12434 return CommandPoolCreateFlags( bit0 ) | bit1;
12435 }
12436
12437 struct CommandPoolCreateInfo
12438 {
12439 CommandPoolCreateInfo( CommandPoolCreateFlags flags_ = CommandPoolCreateFlags(), uint32_t queueFamilyIndex_ = 0 )
12440 : sType( StructureType::eCommandPoolCreateInfo )
12441 , pNext( nullptr )
12442 , flags( flags_ )
12443 , queueFamilyIndex( queueFamilyIndex_ )
12444 {
12445 }
12446
12447 CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs )
12448 {
12449 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12450 }
12451
12452 CommandPoolCreateInfo& operator=( VkCommandPoolCreateInfo const & rhs )
12453 {
12454 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12455 return *this;
12456 }
12457
12458 CommandPoolCreateInfo& setSType( StructureType sType_ )
12459 {
12460 sType = sType_;
12461 return *this;
12462 }
12463
12464 CommandPoolCreateInfo& setPNext( const void* pNext_ )
12465 {
12466 pNext = pNext_;
12467 return *this;
12468 }
12469
12470 CommandPoolCreateInfo& setFlags( CommandPoolCreateFlags flags_ )
12471 {
12472 flags = flags_;
12473 return *this;
12474 }
12475
12476 CommandPoolCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
12477 {
12478 queueFamilyIndex = queueFamilyIndex_;
12479 return *this;
12480 }
12481
12482 operator const VkCommandPoolCreateInfo&() const
12483 {
12484 return *reinterpret_cast<const VkCommandPoolCreateInfo*>(this);
12485 }
12486
12487 bool operator==( CommandPoolCreateInfo const& rhs ) const
12488 {
12489 return ( sType == rhs.sType )
12490 && ( pNext == rhs.pNext )
12491 && ( flags == rhs.flags )
12492 && ( queueFamilyIndex == rhs.queueFamilyIndex );
12493 }
12494
12495 bool operator!=( CommandPoolCreateInfo const& rhs ) const
12496 {
12497 return !operator==( rhs );
12498 }
12499
12500 private:
12501 StructureType sType;
12502
12503 public:
12504 const void* pNext;
12505 CommandPoolCreateFlags flags;
12506 uint32_t queueFamilyIndex;
12507 };
12508 static_assert( sizeof( CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ), "struct and wrapper have different size!" );
12509
12510 enum class CommandPoolResetFlagBits
12511 {
12512 eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
12513 };
12514
12515 using CommandPoolResetFlags = Flags<CommandPoolResetFlagBits, VkCommandPoolResetFlags>;
12516
12517 inline CommandPoolResetFlags operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 )
12518 {
12519 return CommandPoolResetFlags( bit0 ) | bit1;
12520 }
12521
12522 enum class CommandBufferResetFlagBits
12523 {
12524 eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
12525 };
12526
12527 using CommandBufferResetFlags = Flags<CommandBufferResetFlagBits, VkCommandBufferResetFlags>;
12528
12529 inline CommandBufferResetFlags operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 )
12530 {
12531 return CommandBufferResetFlags( bit0 ) | bit1;
12532 }
12533
12534 enum class SampleCountFlagBits
12535 {
12536 e1 = VK_SAMPLE_COUNT_1_BIT,
12537 e2 = VK_SAMPLE_COUNT_2_BIT,
12538 e4 = VK_SAMPLE_COUNT_4_BIT,
12539 e8 = VK_SAMPLE_COUNT_8_BIT,
12540 e16 = VK_SAMPLE_COUNT_16_BIT,
12541 e32 = VK_SAMPLE_COUNT_32_BIT,
12542 e64 = VK_SAMPLE_COUNT_64_BIT
12543 };
12544
12545 using SampleCountFlags = Flags<SampleCountFlagBits, VkSampleCountFlags>;
12546
12547 inline SampleCountFlags operator|( SampleCountFlagBits bit0, SampleCountFlagBits bit1 )
12548 {
12549 return SampleCountFlags( bit0 ) | bit1;
12550 }
12551
12552 struct ImageFormatProperties
12553 {
12554 operator const VkImageFormatProperties&() const
12555 {
12556 return *reinterpret_cast<const VkImageFormatProperties*>(this);
12557 }
12558
12559 bool operator==( ImageFormatProperties const& rhs ) const
12560 {
12561 return ( maxExtent == rhs.maxExtent )
12562 && ( maxMipLevels == rhs.maxMipLevels )
12563 && ( maxArrayLayers == rhs.maxArrayLayers )
12564 && ( sampleCounts == rhs.sampleCounts )
12565 && ( maxResourceSize == rhs.maxResourceSize );
12566 }
12567
12568 bool operator!=( ImageFormatProperties const& rhs ) const
12569 {
12570 return !operator==( rhs );
12571 }
12572
12573 Extent3D maxExtent;
12574 uint32_t maxMipLevels;
12575 uint32_t maxArrayLayers;
12576 SampleCountFlags sampleCounts;
12577 DeviceSize maxResourceSize;
12578 };
12579 static_assert( sizeof( ImageFormatProperties ) == sizeof( VkImageFormatProperties ), "struct and wrapper have different size!" );
12580
12581 struct ImageCreateInfo
12582 {
12583 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 )
12584 : sType( StructureType::eImageCreateInfo )
12585 , pNext( nullptr )
12586 , flags( flags_ )
12587 , imageType( imageType_ )
12588 , format( format_ )
12589 , extent( extent_ )
12590 , mipLevels( mipLevels_ )
12591 , arrayLayers( arrayLayers_ )
12592 , samples( samples_ )
12593 , tiling( tiling_ )
12594 , usage( usage_ )
12595 , sharingMode( sharingMode_ )
12596 , queueFamilyIndexCount( queueFamilyIndexCount_ )
12597 , pQueueFamilyIndices( pQueueFamilyIndices_ )
12598 , initialLayout( initialLayout_ )
12599 {
12600 }
12601
12602 ImageCreateInfo( VkImageCreateInfo const & rhs )
12603 {
12604 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12605 }
12606
12607 ImageCreateInfo& operator=( VkImageCreateInfo const & rhs )
12608 {
12609 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12610 return *this;
12611 }
12612
12613 ImageCreateInfo& setSType( StructureType sType_ )
12614 {
12615 sType = sType_;
12616 return *this;
12617 }
12618
12619 ImageCreateInfo& setPNext( const void* pNext_ )
12620 {
12621 pNext = pNext_;
12622 return *this;
12623 }
12624
12625 ImageCreateInfo& setFlags( ImageCreateFlags flags_ )
12626 {
12627 flags = flags_;
12628 return *this;
12629 }
12630
12631 ImageCreateInfo& setImageType( ImageType imageType_ )
12632 {
12633 imageType = imageType_;
12634 return *this;
12635 }
12636
12637 ImageCreateInfo& setFormat( Format format_ )
12638 {
12639 format = format_;
12640 return *this;
12641 }
12642
12643 ImageCreateInfo& setExtent( Extent3D extent_ )
12644 {
12645 extent = extent_;
12646 return *this;
12647 }
12648
12649 ImageCreateInfo& setMipLevels( uint32_t mipLevels_ )
12650 {
12651 mipLevels = mipLevels_;
12652 return *this;
12653 }
12654
12655 ImageCreateInfo& setArrayLayers( uint32_t arrayLayers_ )
12656 {
12657 arrayLayers = arrayLayers_;
12658 return *this;
12659 }
12660
12661 ImageCreateInfo& setSamples( SampleCountFlagBits samples_ )
12662 {
12663 samples = samples_;
12664 return *this;
12665 }
12666
12667 ImageCreateInfo& setTiling( ImageTiling tiling_ )
12668 {
12669 tiling = tiling_;
12670 return *this;
12671 }
12672
12673 ImageCreateInfo& setUsage( ImageUsageFlags usage_ )
12674 {
12675 usage = usage_;
12676 return *this;
12677 }
12678
12679 ImageCreateInfo& setSharingMode( SharingMode sharingMode_ )
12680 {
12681 sharingMode = sharingMode_;
12682 return *this;
12683 }
12684
12685 ImageCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
12686 {
12687 queueFamilyIndexCount = queueFamilyIndexCount_;
12688 return *this;
12689 }
12690
12691 ImageCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
12692 {
12693 pQueueFamilyIndices = pQueueFamilyIndices_;
12694 return *this;
12695 }
12696
12697 ImageCreateInfo& setInitialLayout( ImageLayout initialLayout_ )
12698 {
12699 initialLayout = initialLayout_;
12700 return *this;
12701 }
12702
12703 operator const VkImageCreateInfo&() const
12704 {
12705 return *reinterpret_cast<const VkImageCreateInfo*>(this);
12706 }
12707
12708 bool operator==( ImageCreateInfo const& rhs ) const
12709 {
12710 return ( sType == rhs.sType )
12711 && ( pNext == rhs.pNext )
12712 && ( flags == rhs.flags )
12713 && ( imageType == rhs.imageType )
12714 && ( format == rhs.format )
12715 && ( extent == rhs.extent )
12716 && ( mipLevels == rhs.mipLevels )
12717 && ( arrayLayers == rhs.arrayLayers )
12718 && ( samples == rhs.samples )
12719 && ( tiling == rhs.tiling )
12720 && ( usage == rhs.usage )
12721 && ( sharingMode == rhs.sharingMode )
12722 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
12723 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
12724 && ( initialLayout == rhs.initialLayout );
12725 }
12726
12727 bool operator!=( ImageCreateInfo const& rhs ) const
12728 {
12729 return !operator==( rhs );
12730 }
12731
12732 private:
12733 StructureType sType;
12734
12735 public:
12736 const void* pNext;
12737 ImageCreateFlags flags;
12738 ImageType imageType;
12739 Format format;
12740 Extent3D extent;
12741 uint32_t mipLevels;
12742 uint32_t arrayLayers;
12743 SampleCountFlagBits samples;
12744 ImageTiling tiling;
12745 ImageUsageFlags usage;
12746 SharingMode sharingMode;
12747 uint32_t queueFamilyIndexCount;
12748 const uint32_t* pQueueFamilyIndices;
12749 ImageLayout initialLayout;
12750 };
12751 static_assert( sizeof( ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" );
12752
12753 struct PipelineMultisampleStateCreateInfo
12754 {
12755 PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateFlags flags_ = PipelineMultisampleStateCreateFlags(), SampleCountFlagBits rasterizationSamples_ = SampleCountFlagBits::e1, Bool32 sampleShadingEnable_ = 0, float minSampleShading_ = 0, const SampleMask* pSampleMask_ = nullptr, Bool32 alphaToCoverageEnable_ = 0, Bool32 alphaToOneEnable_ = 0 )
12756 : sType( StructureType::ePipelineMultisampleStateCreateInfo )
12757 , pNext( nullptr )
12758 , flags( flags_ )
12759 , rasterizationSamples( rasterizationSamples_ )
12760 , sampleShadingEnable( sampleShadingEnable_ )
12761 , minSampleShading( minSampleShading_ )
12762 , pSampleMask( pSampleMask_ )
12763 , alphaToCoverageEnable( alphaToCoverageEnable_ )
12764 , alphaToOneEnable( alphaToOneEnable_ )
12765 {
12766 }
12767
12768 PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs )
12769 {
12770 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12771 }
12772
12773 PipelineMultisampleStateCreateInfo& operator=( VkPipelineMultisampleStateCreateInfo const & rhs )
12774 {
12775 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12776 return *this;
12777 }
12778
12779 PipelineMultisampleStateCreateInfo& setSType( StructureType sType_ )
12780 {
12781 sType = sType_;
12782 return *this;
12783 }
12784
12785 PipelineMultisampleStateCreateInfo& setPNext( const void* pNext_ )
12786 {
12787 pNext = pNext_;
12788 return *this;
12789 }
12790
12791 PipelineMultisampleStateCreateInfo& setFlags( PipelineMultisampleStateCreateFlags flags_ )
12792 {
12793 flags = flags_;
12794 return *this;
12795 }
12796
12797 PipelineMultisampleStateCreateInfo& setRasterizationSamples( SampleCountFlagBits rasterizationSamples_ )
12798 {
12799 rasterizationSamples = rasterizationSamples_;
12800 return *this;
12801 }
12802
12803 PipelineMultisampleStateCreateInfo& setSampleShadingEnable( Bool32 sampleShadingEnable_ )
12804 {
12805 sampleShadingEnable = sampleShadingEnable_;
12806 return *this;
12807 }
12808
12809 PipelineMultisampleStateCreateInfo& setMinSampleShading( float minSampleShading_ )
12810 {
12811 minSampleShading = minSampleShading_;
12812 return *this;
12813 }
12814
12815 PipelineMultisampleStateCreateInfo& setPSampleMask( const SampleMask* pSampleMask_ )
12816 {
12817 pSampleMask = pSampleMask_;
12818 return *this;
12819 }
12820
12821 PipelineMultisampleStateCreateInfo& setAlphaToCoverageEnable( Bool32 alphaToCoverageEnable_ )
12822 {
12823 alphaToCoverageEnable = alphaToCoverageEnable_;
12824 return *this;
12825 }
12826
12827 PipelineMultisampleStateCreateInfo& setAlphaToOneEnable( Bool32 alphaToOneEnable_ )
12828 {
12829 alphaToOneEnable = alphaToOneEnable_;
12830 return *this;
12831 }
12832
12833 operator const VkPipelineMultisampleStateCreateInfo&() const
12834 {
12835 return *reinterpret_cast<const VkPipelineMultisampleStateCreateInfo*>(this);
12836 }
12837
12838 bool operator==( PipelineMultisampleStateCreateInfo const& rhs ) const
12839 {
12840 return ( sType == rhs.sType )
12841 && ( pNext == rhs.pNext )
12842 && ( flags == rhs.flags )
12843 && ( rasterizationSamples == rhs.rasterizationSamples )
12844 && ( sampleShadingEnable == rhs.sampleShadingEnable )
12845 && ( minSampleShading == rhs.minSampleShading )
12846 && ( pSampleMask == rhs.pSampleMask )
12847 && ( alphaToCoverageEnable == rhs.alphaToCoverageEnable )
12848 && ( alphaToOneEnable == rhs.alphaToOneEnable );
12849 }
12850
12851 bool operator!=( PipelineMultisampleStateCreateInfo const& rhs ) const
12852 {
12853 return !operator==( rhs );
12854 }
12855
12856 private:
12857 StructureType sType;
12858
12859 public:
12860 const void* pNext;
12861 PipelineMultisampleStateCreateFlags flags;
12862 SampleCountFlagBits rasterizationSamples;
12863 Bool32 sampleShadingEnable;
12864 float minSampleShading;
12865 const SampleMask* pSampleMask;
12866 Bool32 alphaToCoverageEnable;
12867 Bool32 alphaToOneEnable;
12868 };
12869 static_assert( sizeof( PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ), "struct and wrapper have different size!" );
12870
12871 struct GraphicsPipelineCreateInfo
12872 {
12873 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 )
12874 : sType( StructureType::eGraphicsPipelineCreateInfo )
12875 , pNext( nullptr )
12876 , flags( flags_ )
12877 , stageCount( stageCount_ )
12878 , pStages( pStages_ )
12879 , pVertexInputState( pVertexInputState_ )
12880 , pInputAssemblyState( pInputAssemblyState_ )
12881 , pTessellationState( pTessellationState_ )
12882 , pViewportState( pViewportState_ )
12883 , pRasterizationState( pRasterizationState_ )
12884 , pMultisampleState( pMultisampleState_ )
12885 , pDepthStencilState( pDepthStencilState_ )
12886 , pColorBlendState( pColorBlendState_ )
12887 , pDynamicState( pDynamicState_ )
12888 , layout( layout_ )
12889 , renderPass( renderPass_ )
12890 , subpass( subpass_ )
12891 , basePipelineHandle( basePipelineHandle_ )
12892 , basePipelineIndex( basePipelineIndex_ )
12893 {
12894 }
12895
12896 GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs )
12897 {
12898 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12899 }
12900
12901 GraphicsPipelineCreateInfo& operator=( VkGraphicsPipelineCreateInfo const & rhs )
12902 {
12903 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12904 return *this;
12905 }
12906
12907 GraphicsPipelineCreateInfo& setSType( StructureType sType_ )
12908 {
12909 sType = sType_;
12910 return *this;
12911 }
12912
12913 GraphicsPipelineCreateInfo& setPNext( const void* pNext_ )
12914 {
12915 pNext = pNext_;
12916 return *this;
12917 }
12918
12919 GraphicsPipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
12920 {
12921 flags = flags_;
12922 return *this;
12923 }
12924
12925 GraphicsPipelineCreateInfo& setStageCount( uint32_t stageCount_ )
12926 {
12927 stageCount = stageCount_;
12928 return *this;
12929 }
12930
12931 GraphicsPipelineCreateInfo& setPStages( const PipelineShaderStageCreateInfo* pStages_ )
12932 {
12933 pStages = pStages_;
12934 return *this;
12935 }
12936
12937 GraphicsPipelineCreateInfo& setPVertexInputState( const PipelineVertexInputStateCreateInfo* pVertexInputState_ )
12938 {
12939 pVertexInputState = pVertexInputState_;
12940 return *this;
12941 }
12942
12943 GraphicsPipelineCreateInfo& setPInputAssemblyState( const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState_ )
12944 {
12945 pInputAssemblyState = pInputAssemblyState_;
12946 return *this;
12947 }
12948
12949 GraphicsPipelineCreateInfo& setPTessellationState( const PipelineTessellationStateCreateInfo* pTessellationState_ )
12950 {
12951 pTessellationState = pTessellationState_;
12952 return *this;
12953 }
12954
12955 GraphicsPipelineCreateInfo& setPViewportState( const PipelineViewportStateCreateInfo* pViewportState_ )
12956 {
12957 pViewportState = pViewportState_;
12958 return *this;
12959 }
12960
12961 GraphicsPipelineCreateInfo& setPRasterizationState( const PipelineRasterizationStateCreateInfo* pRasterizationState_ )
12962 {
12963 pRasterizationState = pRasterizationState_;
12964 return *this;
12965 }
12966
12967 GraphicsPipelineCreateInfo& setPMultisampleState( const PipelineMultisampleStateCreateInfo* pMultisampleState_ )
12968 {
12969 pMultisampleState = pMultisampleState_;
12970 return *this;
12971 }
12972
12973 GraphicsPipelineCreateInfo& setPDepthStencilState( const PipelineDepthStencilStateCreateInfo* pDepthStencilState_ )
12974 {
12975 pDepthStencilState = pDepthStencilState_;
12976 return *this;
12977 }
12978
12979 GraphicsPipelineCreateInfo& setPColorBlendState( const PipelineColorBlendStateCreateInfo* pColorBlendState_ )
12980 {
12981 pColorBlendState = pColorBlendState_;
12982 return *this;
12983 }
12984
12985 GraphicsPipelineCreateInfo& setPDynamicState( const PipelineDynamicStateCreateInfo* pDynamicState_ )
12986 {
12987 pDynamicState = pDynamicState_;
12988 return *this;
12989 }
12990
12991 GraphicsPipelineCreateInfo& setLayout( PipelineLayout layout_ )
12992 {
12993 layout = layout_;
12994 return *this;
12995 }
12996
12997 GraphicsPipelineCreateInfo& setRenderPass( RenderPass renderPass_ )
12998 {
12999 renderPass = renderPass_;
13000 return *this;
13001 }
13002
13003 GraphicsPipelineCreateInfo& setSubpass( uint32_t subpass_ )
13004 {
13005 subpass = subpass_;
13006 return *this;
13007 }
13008
13009 GraphicsPipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
13010 {
13011 basePipelineHandle = basePipelineHandle_;
13012 return *this;
13013 }
13014
13015 GraphicsPipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
13016 {
13017 basePipelineIndex = basePipelineIndex_;
13018 return *this;
13019 }
13020
13021 operator const VkGraphicsPipelineCreateInfo&() const
13022 {
13023 return *reinterpret_cast<const VkGraphicsPipelineCreateInfo*>(this);
13024 }
13025
13026 bool operator==( GraphicsPipelineCreateInfo const& rhs ) const
13027 {
13028 return ( sType == rhs.sType )
13029 && ( pNext == rhs.pNext )
13030 && ( flags == rhs.flags )
13031 && ( stageCount == rhs.stageCount )
13032 && ( pStages == rhs.pStages )
13033 && ( pVertexInputState == rhs.pVertexInputState )
13034 && ( pInputAssemblyState == rhs.pInputAssemblyState )
13035 && ( pTessellationState == rhs.pTessellationState )
13036 && ( pViewportState == rhs.pViewportState )
13037 && ( pRasterizationState == rhs.pRasterizationState )
13038 && ( pMultisampleState == rhs.pMultisampleState )
13039 && ( pDepthStencilState == rhs.pDepthStencilState )
13040 && ( pColorBlendState == rhs.pColorBlendState )
13041 && ( pDynamicState == rhs.pDynamicState )
13042 && ( layout == rhs.layout )
13043 && ( renderPass == rhs.renderPass )
13044 && ( subpass == rhs.subpass )
13045 && ( basePipelineHandle == rhs.basePipelineHandle )
13046 && ( basePipelineIndex == rhs.basePipelineIndex );
13047 }
13048
13049 bool operator!=( GraphicsPipelineCreateInfo const& rhs ) const
13050 {
13051 return !operator==( rhs );
13052 }
13053
13054 private:
13055 StructureType sType;
13056
13057 public:
13058 const void* pNext;
13059 PipelineCreateFlags flags;
13060 uint32_t stageCount;
13061 const PipelineShaderStageCreateInfo* pStages;
13062 const PipelineVertexInputStateCreateInfo* pVertexInputState;
13063 const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
13064 const PipelineTessellationStateCreateInfo* pTessellationState;
13065 const PipelineViewportStateCreateInfo* pViewportState;
13066 const PipelineRasterizationStateCreateInfo* pRasterizationState;
13067 const PipelineMultisampleStateCreateInfo* pMultisampleState;
13068 const PipelineDepthStencilStateCreateInfo* pDepthStencilState;
13069 const PipelineColorBlendStateCreateInfo* pColorBlendState;
13070 const PipelineDynamicStateCreateInfo* pDynamicState;
13071 PipelineLayout layout;
13072 RenderPass renderPass;
13073 uint32_t subpass;
13074 Pipeline basePipelineHandle;
13075 int32_t basePipelineIndex;
13076 };
13077 static_assert( sizeof( GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ), "struct and wrapper have different size!" );
13078
13079 struct PhysicalDeviceLimits
13080 {
13081 operator const VkPhysicalDeviceLimits&() const
13082 {
13083 return *reinterpret_cast<const VkPhysicalDeviceLimits*>(this);
13084 }
13085
13086 bool operator==( PhysicalDeviceLimits const& rhs ) const
13087 {
13088 return ( maxImageDimension1D == rhs.maxImageDimension1D )
13089 && ( maxImageDimension2D == rhs.maxImageDimension2D )
13090 && ( maxImageDimension3D == rhs.maxImageDimension3D )
13091 && ( maxImageDimensionCube == rhs.maxImageDimensionCube )
13092 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
13093 && ( maxTexelBufferElements == rhs.maxTexelBufferElements )
13094 && ( maxUniformBufferRange == rhs.maxUniformBufferRange )
13095 && ( maxStorageBufferRange == rhs.maxStorageBufferRange )
13096 && ( maxPushConstantsSize == rhs.maxPushConstantsSize )
13097 && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount )
13098 && ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount )
13099 && ( bufferImageGranularity == rhs.bufferImageGranularity )
13100 && ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize )
13101 && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets )
13102 && ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers )
13103 && ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers )
13104 && ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers )
13105 && ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages )
13106 && ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages )
13107 && ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments )
13108 && ( maxPerStageResources == rhs.maxPerStageResources )
13109 && ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers )
13110 && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers )
13111 && ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic )
13112 && ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers )
13113 && ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic )
13114 && ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages )
13115 && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages )
13116 && ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments )
13117 && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes )
13118 && ( maxVertexInputBindings == rhs.maxVertexInputBindings )
13119 && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset )
13120 && ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride )
13121 && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents )
13122 && ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel )
13123 && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize )
13124 && ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents )
13125 && ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents )
13126 && ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents )
13127 && ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents )
13128 && ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents )
13129 && ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents )
13130 && ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations )
13131 && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents )
13132 && ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents )
13133 && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices )
13134 && ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents )
13135 && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents )
13136 && ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments )
13137 && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments )
13138 && ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources )
13139 && ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize )
13140 && ( memcmp( maxComputeWorkGroupCount, rhs.maxComputeWorkGroupCount, 3 * sizeof( uint32_t ) ) == 0 )
13141 && ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations )
13142 && ( memcmp( maxComputeWorkGroupSize, rhs.maxComputeWorkGroupSize, 3 * sizeof( uint32_t ) ) == 0 )
13143 && ( subPixelPrecisionBits == rhs.subPixelPrecisionBits )
13144 && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits )
13145 && ( mipmapPrecisionBits == rhs.mipmapPrecisionBits )
13146 && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue )
13147 && ( maxDrawIndirectCount == rhs.maxDrawIndirectCount )
13148 && ( maxSamplerLodBias == rhs.maxSamplerLodBias )
13149 && ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy )
13150 && ( maxViewports == rhs.maxViewports )
13151 && ( memcmp( maxViewportDimensions, rhs.maxViewportDimensions, 2 * sizeof( uint32_t ) ) == 0 )
13152 && ( memcmp( viewportBoundsRange, rhs.viewportBoundsRange, 2 * sizeof( float ) ) == 0 )
13153 && ( viewportSubPixelBits == rhs.viewportSubPixelBits )
13154 && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment )
13155 && ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment )
13156 && ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment )
13157 && ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment )
13158 && ( minTexelOffset == rhs.minTexelOffset )
13159 && ( maxTexelOffset == rhs.maxTexelOffset )
13160 && ( minTexelGatherOffset == rhs.minTexelGatherOffset )
13161 && ( maxTexelGatherOffset == rhs.maxTexelGatherOffset )
13162 && ( minInterpolationOffset == rhs.minInterpolationOffset )
13163 && ( maxInterpolationOffset == rhs.maxInterpolationOffset )
13164 && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits )
13165 && ( maxFramebufferWidth == rhs.maxFramebufferWidth )
13166 && ( maxFramebufferHeight == rhs.maxFramebufferHeight )
13167 && ( maxFramebufferLayers == rhs.maxFramebufferLayers )
13168 && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts )
13169 && ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts )
13170 && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts )
13171 && ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts )
13172 && ( maxColorAttachments == rhs.maxColorAttachments )
13173 && ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts )
13174 && ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts )
13175 && ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts )
13176 && ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts )
13177 && ( storageImageSampleCounts == rhs.storageImageSampleCounts )
13178 && ( maxSampleMaskWords == rhs.maxSampleMaskWords )
13179 && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics )
13180 && ( timestampPeriod == rhs.timestampPeriod )
13181 && ( maxClipDistances == rhs.maxClipDistances )
13182 && ( maxCullDistances == rhs.maxCullDistances )
13183 && ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances )
13184 && ( discreteQueuePriorities == rhs.discreteQueuePriorities )
13185 && ( memcmp( pointSizeRange, rhs.pointSizeRange, 2 * sizeof( float ) ) == 0 )
13186 && ( memcmp( lineWidthRange, rhs.lineWidthRange, 2 * sizeof( float ) ) == 0 )
13187 && ( pointSizeGranularity == rhs.pointSizeGranularity )
13188 && ( lineWidthGranularity == rhs.lineWidthGranularity )
13189 && ( strictLines == rhs.strictLines )
13190 && ( standardSampleLocations == rhs.standardSampleLocations )
13191 && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment )
13192 && ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment )
13193 && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize );
13194 }
13195
13196 bool operator!=( PhysicalDeviceLimits const& rhs ) const
13197 {
13198 return !operator==( rhs );
13199 }
13200
13201 uint32_t maxImageDimension1D;
13202 uint32_t maxImageDimension2D;
13203 uint32_t maxImageDimension3D;
13204 uint32_t maxImageDimensionCube;
13205 uint32_t maxImageArrayLayers;
13206 uint32_t maxTexelBufferElements;
13207 uint32_t maxUniformBufferRange;
13208 uint32_t maxStorageBufferRange;
13209 uint32_t maxPushConstantsSize;
13210 uint32_t maxMemoryAllocationCount;
13211 uint32_t maxSamplerAllocationCount;
13212 DeviceSize bufferImageGranularity;
13213 DeviceSize sparseAddressSpaceSize;
13214 uint32_t maxBoundDescriptorSets;
13215 uint32_t maxPerStageDescriptorSamplers;
13216 uint32_t maxPerStageDescriptorUniformBuffers;
13217 uint32_t maxPerStageDescriptorStorageBuffers;
13218 uint32_t maxPerStageDescriptorSampledImages;
13219 uint32_t maxPerStageDescriptorStorageImages;
13220 uint32_t maxPerStageDescriptorInputAttachments;
13221 uint32_t maxPerStageResources;
13222 uint32_t maxDescriptorSetSamplers;
13223 uint32_t maxDescriptorSetUniformBuffers;
13224 uint32_t maxDescriptorSetUniformBuffersDynamic;
13225 uint32_t maxDescriptorSetStorageBuffers;
13226 uint32_t maxDescriptorSetStorageBuffersDynamic;
13227 uint32_t maxDescriptorSetSampledImages;
13228 uint32_t maxDescriptorSetStorageImages;
13229 uint32_t maxDescriptorSetInputAttachments;
13230 uint32_t maxVertexInputAttributes;
13231 uint32_t maxVertexInputBindings;
13232 uint32_t maxVertexInputAttributeOffset;
13233 uint32_t maxVertexInputBindingStride;
13234 uint32_t maxVertexOutputComponents;
13235 uint32_t maxTessellationGenerationLevel;
13236 uint32_t maxTessellationPatchSize;
13237 uint32_t maxTessellationControlPerVertexInputComponents;
13238 uint32_t maxTessellationControlPerVertexOutputComponents;
13239 uint32_t maxTessellationControlPerPatchOutputComponents;
13240 uint32_t maxTessellationControlTotalOutputComponents;
13241 uint32_t maxTessellationEvaluationInputComponents;
13242 uint32_t maxTessellationEvaluationOutputComponents;
13243 uint32_t maxGeometryShaderInvocations;
13244 uint32_t maxGeometryInputComponents;
13245 uint32_t maxGeometryOutputComponents;
13246 uint32_t maxGeometryOutputVertices;
13247 uint32_t maxGeometryTotalOutputComponents;
13248 uint32_t maxFragmentInputComponents;
13249 uint32_t maxFragmentOutputAttachments;
13250 uint32_t maxFragmentDualSrcAttachments;
13251 uint32_t maxFragmentCombinedOutputResources;
13252 uint32_t maxComputeSharedMemorySize;
13253 uint32_t maxComputeWorkGroupCount[3];
13254 uint32_t maxComputeWorkGroupInvocations;
13255 uint32_t maxComputeWorkGroupSize[3];
13256 uint32_t subPixelPrecisionBits;
13257 uint32_t subTexelPrecisionBits;
13258 uint32_t mipmapPrecisionBits;
13259 uint32_t maxDrawIndexedIndexValue;
13260 uint32_t maxDrawIndirectCount;
13261 float maxSamplerLodBias;
13262 float maxSamplerAnisotropy;
13263 uint32_t maxViewports;
13264 uint32_t maxViewportDimensions[2];
13265 float viewportBoundsRange[2];
13266 uint32_t viewportSubPixelBits;
13267 size_t minMemoryMapAlignment;
13268 DeviceSize minTexelBufferOffsetAlignment;
13269 DeviceSize minUniformBufferOffsetAlignment;
13270 DeviceSize minStorageBufferOffsetAlignment;
13271 int32_t minTexelOffset;
13272 uint32_t maxTexelOffset;
13273 int32_t minTexelGatherOffset;
13274 uint32_t maxTexelGatherOffset;
13275 float minInterpolationOffset;
13276 float maxInterpolationOffset;
13277 uint32_t subPixelInterpolationOffsetBits;
13278 uint32_t maxFramebufferWidth;
13279 uint32_t maxFramebufferHeight;
13280 uint32_t maxFramebufferLayers;
13281 SampleCountFlags framebufferColorSampleCounts;
13282 SampleCountFlags framebufferDepthSampleCounts;
13283 SampleCountFlags framebufferStencilSampleCounts;
13284 SampleCountFlags framebufferNoAttachmentsSampleCounts;
13285 uint32_t maxColorAttachments;
13286 SampleCountFlags sampledImageColorSampleCounts;
13287 SampleCountFlags sampledImageIntegerSampleCounts;
13288 SampleCountFlags sampledImageDepthSampleCounts;
13289 SampleCountFlags sampledImageStencilSampleCounts;
13290 SampleCountFlags storageImageSampleCounts;
13291 uint32_t maxSampleMaskWords;
13292 Bool32 timestampComputeAndGraphics;
13293 float timestampPeriod;
13294 uint32_t maxClipDistances;
13295 uint32_t maxCullDistances;
13296 uint32_t maxCombinedClipAndCullDistances;
13297 uint32_t discreteQueuePriorities;
13298 float pointSizeRange[2];
13299 float lineWidthRange[2];
13300 float pointSizeGranularity;
13301 float lineWidthGranularity;
13302 Bool32 strictLines;
13303 Bool32 standardSampleLocations;
13304 DeviceSize optimalBufferCopyOffsetAlignment;
13305 DeviceSize optimalBufferCopyRowPitchAlignment;
13306 DeviceSize nonCoherentAtomSize;
13307 };
13308 static_assert( sizeof( PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ), "struct and wrapper have different size!" );
13309
13310 struct PhysicalDeviceProperties
13311 {
13312 operator const VkPhysicalDeviceProperties&() const
13313 {
13314 return *reinterpret_cast<const VkPhysicalDeviceProperties*>(this);
13315 }
13316
13317 bool operator==( PhysicalDeviceProperties const& rhs ) const
13318 {
13319 return ( apiVersion == rhs.apiVersion )
13320 && ( driverVersion == rhs.driverVersion )
13321 && ( vendorID == rhs.vendorID )
13322 && ( deviceID == rhs.deviceID )
13323 && ( deviceType == rhs.deviceType )
13324 && ( memcmp( deviceName, rhs.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof( char ) ) == 0 )
13325 && ( memcmp( pipelineCacheUUID, rhs.pipelineCacheUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
13326 && ( limits == rhs.limits )
13327 && ( sparseProperties == rhs.sparseProperties );
13328 }
13329
13330 bool operator!=( PhysicalDeviceProperties const& rhs ) const
13331 {
13332 return !operator==( rhs );
13333 }
13334
13335 uint32_t apiVersion;
13336 uint32_t driverVersion;
13337 uint32_t vendorID;
13338 uint32_t deviceID;
13339 PhysicalDeviceType deviceType;
13340 char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
13341 uint8_t pipelineCacheUUID[VK_UUID_SIZE];
13342 PhysicalDeviceLimits limits;
13343 PhysicalDeviceSparseProperties sparseProperties;
13344 };
13345 static_assert( sizeof( PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ), "struct and wrapper have different size!" );
13346
13347 enum class AttachmentDescriptionFlagBits
13348 {
13349 eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
13350 };
13351
13352 using AttachmentDescriptionFlags = Flags<AttachmentDescriptionFlagBits, VkAttachmentDescriptionFlags>;
13353
13354 inline AttachmentDescriptionFlags operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 )
13355 {
13356 return AttachmentDescriptionFlags( bit0 ) | bit1;
13357 }
13358
13359 struct AttachmentDescription
13360 {
13361 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 )
13362 : flags( flags_ )
13363 , format( format_ )
13364 , samples( samples_ )
13365 , loadOp( loadOp_ )
13366 , storeOp( storeOp_ )
13367 , stencilLoadOp( stencilLoadOp_ )
13368 , stencilStoreOp( stencilStoreOp_ )
13369 , initialLayout( initialLayout_ )
13370 , finalLayout( finalLayout_ )
13371 {
13372 }
13373
13374 AttachmentDescription( VkAttachmentDescription const & rhs )
13375 {
13376 memcpy( this, &rhs, sizeof(AttachmentDescription) );
13377 }
13378
13379 AttachmentDescription& operator=( VkAttachmentDescription const & rhs )
13380 {
13381 memcpy( this, &rhs, sizeof(AttachmentDescription) );
13382 return *this;
13383 }
13384
13385 AttachmentDescription& setFlags( AttachmentDescriptionFlags flags_ )
13386 {
13387 flags = flags_;
13388 return *this;
13389 }
13390
13391 AttachmentDescription& setFormat( Format format_ )
13392 {
13393 format = format_;
13394 return *this;
13395 }
13396
13397 AttachmentDescription& setSamples( SampleCountFlagBits samples_ )
13398 {
13399 samples = samples_;
13400 return *this;
13401 }
13402
13403 AttachmentDescription& setLoadOp( AttachmentLoadOp loadOp_ )
13404 {
13405 loadOp = loadOp_;
13406 return *this;
13407 }
13408
13409 AttachmentDescription& setStoreOp( AttachmentStoreOp storeOp_ )
13410 {
13411 storeOp = storeOp_;
13412 return *this;
13413 }
13414
13415 AttachmentDescription& setStencilLoadOp( AttachmentLoadOp stencilLoadOp_ )
13416 {
13417 stencilLoadOp = stencilLoadOp_;
13418 return *this;
13419 }
13420
13421 AttachmentDescription& setStencilStoreOp( AttachmentStoreOp stencilStoreOp_ )
13422 {
13423 stencilStoreOp = stencilStoreOp_;
13424 return *this;
13425 }
13426
13427 AttachmentDescription& setInitialLayout( ImageLayout initialLayout_ )
13428 {
13429 initialLayout = initialLayout_;
13430 return *this;
13431 }
13432
13433 AttachmentDescription& setFinalLayout( ImageLayout finalLayout_ )
13434 {
13435 finalLayout = finalLayout_;
13436 return *this;
13437 }
13438
13439 operator const VkAttachmentDescription&() const
13440 {
13441 return *reinterpret_cast<const VkAttachmentDescription*>(this);
13442 }
13443
13444 bool operator==( AttachmentDescription const& rhs ) const
13445 {
13446 return ( flags == rhs.flags )
13447 && ( format == rhs.format )
13448 && ( samples == rhs.samples )
13449 && ( loadOp == rhs.loadOp )
13450 && ( storeOp == rhs.storeOp )
13451 && ( stencilLoadOp == rhs.stencilLoadOp )
13452 && ( stencilStoreOp == rhs.stencilStoreOp )
13453 && ( initialLayout == rhs.initialLayout )
13454 && ( finalLayout == rhs.finalLayout );
13455 }
13456
13457 bool operator!=( AttachmentDescription const& rhs ) const
13458 {
13459 return !operator==( rhs );
13460 }
13461
13462 AttachmentDescriptionFlags flags;
13463 Format format;
13464 SampleCountFlagBits samples;
13465 AttachmentLoadOp loadOp;
13466 AttachmentStoreOp storeOp;
13467 AttachmentLoadOp stencilLoadOp;
13468 AttachmentStoreOp stencilStoreOp;
13469 ImageLayout initialLayout;
13470 ImageLayout finalLayout;
13471 };
13472 static_assert( sizeof( AttachmentDescription ) == sizeof( VkAttachmentDescription ), "struct and wrapper have different size!" );
13473
13474 enum class StencilFaceFlagBits
13475 {
13476 eFront = VK_STENCIL_FACE_FRONT_BIT,
13477 eBack = VK_STENCIL_FACE_BACK_BIT,
13478 eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK
13479 };
13480
13481 using StencilFaceFlags = Flags<StencilFaceFlagBits, VkStencilFaceFlags>;
13482
13483 inline StencilFaceFlags operator|( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 )
13484 {
13485 return StencilFaceFlags( bit0 ) | bit1;
13486 }
13487
13488 enum class DescriptorPoolCreateFlagBits
13489 {
13490 eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
13491 };
13492
13493 using DescriptorPoolCreateFlags = Flags<DescriptorPoolCreateFlagBits, VkDescriptorPoolCreateFlags>;
13494
13495 inline DescriptorPoolCreateFlags operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 )
13496 {
13497 return DescriptorPoolCreateFlags( bit0 ) | bit1;
13498 }
13499
13500 struct DescriptorPoolCreateInfo
13501 {
13502 DescriptorPoolCreateInfo( DescriptorPoolCreateFlags flags_ = DescriptorPoolCreateFlags(), uint32_t maxSets_ = 0, uint32_t poolSizeCount_ = 0, const DescriptorPoolSize* pPoolSizes_ = nullptr )
13503 : sType( StructureType::eDescriptorPoolCreateInfo )
13504 , pNext( nullptr )
13505 , flags( flags_ )
13506 , maxSets( maxSets_ )
13507 , poolSizeCount( poolSizeCount_ )
13508 , pPoolSizes( pPoolSizes_ )
13509 {
13510 }
13511
13512 DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs )
13513 {
13514 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13515 }
13516
13517 DescriptorPoolCreateInfo& operator=( VkDescriptorPoolCreateInfo const & rhs )
13518 {
13519 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13520 return *this;
13521 }
13522
13523 DescriptorPoolCreateInfo& setSType( StructureType sType_ )
13524 {
13525 sType = sType_;
13526 return *this;
13527 }
13528
13529 DescriptorPoolCreateInfo& setPNext( const void* pNext_ )
13530 {
13531 pNext = pNext_;
13532 return *this;
13533 }
13534
13535 DescriptorPoolCreateInfo& setFlags( DescriptorPoolCreateFlags flags_ )
13536 {
13537 flags = flags_;
13538 return *this;
13539 }
13540
13541 DescriptorPoolCreateInfo& setMaxSets( uint32_t maxSets_ )
13542 {
13543 maxSets = maxSets_;
13544 return *this;
13545 }
13546
13547 DescriptorPoolCreateInfo& setPoolSizeCount( uint32_t poolSizeCount_ )
13548 {
13549 poolSizeCount = poolSizeCount_;
13550 return *this;
13551 }
13552
13553 DescriptorPoolCreateInfo& setPPoolSizes( const DescriptorPoolSize* pPoolSizes_ )
13554 {
13555 pPoolSizes = pPoolSizes_;
13556 return *this;
13557 }
13558
13559 operator const VkDescriptorPoolCreateInfo&() const
13560 {
13561 return *reinterpret_cast<const VkDescriptorPoolCreateInfo*>(this);
13562 }
13563
13564 bool operator==( DescriptorPoolCreateInfo const& rhs ) const
13565 {
13566 return ( sType == rhs.sType )
13567 && ( pNext == rhs.pNext )
13568 && ( flags == rhs.flags )
13569 && ( maxSets == rhs.maxSets )
13570 && ( poolSizeCount == rhs.poolSizeCount )
13571 && ( pPoolSizes == rhs.pPoolSizes );
13572 }
13573
13574 bool operator!=( DescriptorPoolCreateInfo const& rhs ) const
13575 {
13576 return !operator==( rhs );
13577 }
13578
13579 private:
13580 StructureType sType;
13581
13582 public:
13583 const void* pNext;
13584 DescriptorPoolCreateFlags flags;
13585 uint32_t maxSets;
13586 uint32_t poolSizeCount;
13587 const DescriptorPoolSize* pPoolSizes;
13588 };
13589 static_assert( sizeof( DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ), "struct and wrapper have different size!" );
13590
13591 enum class DependencyFlagBits
13592 {
13593 eByRegion = VK_DEPENDENCY_BY_REGION_BIT
13594 };
13595
13596 using DependencyFlags = Flags<DependencyFlagBits, VkDependencyFlags>;
13597
13598 inline DependencyFlags operator|( DependencyFlagBits bit0, DependencyFlagBits bit1 )
13599 {
13600 return DependencyFlags( bit0 ) | bit1;
13601 }
13602
13603 class CommandBuffer
13604 {
13605 public:
13606 CommandBuffer()
13607 : m_commandBuffer(VK_NULL_HANDLE)
13608 {}
13609
13610#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
13611 CommandBuffer(VkCommandBuffer commandBuffer)
13612 : m_commandBuffer(commandBuffer)
13613 {}
13614
13615 CommandBuffer& operator=(VkCommandBuffer commandBuffer)
13616 {
13617 m_commandBuffer = commandBuffer;
13618 return *this;
13619 }
13620#endif
13621
Lenny Komowebf33162016-08-26 14:10:08 -060013622 bool operator==(CommandBuffer const &rhs) const
13623 {
13624 return m_commandBuffer == rhs.m_commandBuffer;
13625 }
13626
13627 bool operator!=(CommandBuffer const &rhs) const
13628 {
13629 return m_commandBuffer != rhs.m_commandBuffer;
13630 }
13631
13632 bool operator<(CommandBuffer const &rhs) const
13633 {
13634 return m_commandBuffer < rhs.m_commandBuffer;
13635 }
13636
Lenny Komowbed9b5c2016-08-11 11:23:15 -060013637 Result begin( const CommandBufferBeginInfo* pBeginInfo ) const
13638 {
13639 return static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( pBeginInfo ) ) );
13640 }
13641
13642#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13643 ResultValueType<void>::type begin( const CommandBufferBeginInfo & beginInfo ) const
13644 {
13645 Result result = static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( &beginInfo ) ) );
13646 return createResultValue( result, "vk::CommandBuffer::begin" );
13647 }
13648#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13649
13650#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13651 Result end( ) const
13652 {
13653 return static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13654 }
13655#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13656
13657#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13658 ResultValueType<void>::type end() const
13659 {
13660 Result result = static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13661 return createResultValue( result, "vk::CommandBuffer::end" );
13662 }
13663#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13664
13665#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13666 Result reset( CommandBufferResetFlags flags ) const
13667 {
13668 return static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13669 }
13670#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13671
13672#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13673 ResultValueType<void>::type reset( CommandBufferResetFlags flags ) const
13674 {
13675 Result result = static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13676 return createResultValue( result, "vk::CommandBuffer::reset" );
13677 }
13678#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13679
13680#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13681 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13682 {
13683 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13684 }
13685#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13686
13687#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13688 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13689 {
13690 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13691 }
13692#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13693
13694 void setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport* pViewports ) const
13695 {
13696 vkCmdSetViewport( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast<const VkViewport*>( pViewports ) );
13697 }
13698
13699#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13700 void setViewport( uint32_t firstViewport, ArrayProxy<const Viewport> viewports ) const
13701 {
13702 vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size() , reinterpret_cast<const VkViewport*>( viewports.data() ) );
13703 }
13704#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13705
13706 void setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D* pScissors ) const
13707 {
13708 vkCmdSetScissor( m_commandBuffer, firstScissor, scissorCount, reinterpret_cast<const VkRect2D*>( pScissors ) );
13709 }
13710
13711#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13712 void setScissor( uint32_t firstScissor, ArrayProxy<const Rect2D> scissors ) const
13713 {
13714 vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size() , reinterpret_cast<const VkRect2D*>( scissors.data() ) );
13715 }
13716#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13717
13718#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13719 void setLineWidth( float lineWidth ) const
13720 {
13721 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13722 }
13723#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13724
13725#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13726 void setLineWidth( float lineWidth ) const
13727 {
13728 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13729 }
13730#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13731
13732#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13733 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13734 {
13735 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13736 }
13737#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13738
13739#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13740 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13741 {
13742 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13743 }
13744#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13745
13746#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13747 void setBlendConstants( const float blendConstants[4] ) const
13748 {
13749 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13750 }
13751#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13752
13753#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13754 void setBlendConstants( const float blendConstants[4] ) const
13755 {
13756 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13757 }
13758#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13759
13760#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13761 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13762 {
13763 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13764 }
13765#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13766
13767#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13768 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13769 {
13770 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13771 }
13772#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13773
13774#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13775 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13776 {
13777 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13778 }
13779#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13780
13781#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13782 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13783 {
13784 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13785 }
13786#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13787
13788#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13789 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13790 {
13791 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13792 }
13793#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13794
13795#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13796 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13797 {
13798 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13799 }
13800#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13801
13802#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13803 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13804 {
13805 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13806 }
13807#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13808
13809#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13810 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13811 {
13812 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13813 }
13814#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13815
13816 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets ) const
13817 {
13818 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ), dynamicOffsetCount, pDynamicOffsets );
13819 }
13820
13821#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13822 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, ArrayProxy<const DescriptorSet> descriptorSets, ArrayProxy<const uint32_t> dynamicOffsets ) const
13823 {
13824 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ), dynamicOffsets.size() , dynamicOffsets.data() );
13825 }
13826#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13827
13828#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13829 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13830 {
13831 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13832 }
13833#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13834
13835#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13836 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13837 {
13838 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13839 }
13840#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13841
13842 void bindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const Buffer* pBuffers, const DeviceSize* pOffsets ) const
13843 {
13844 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, bindingCount, reinterpret_cast<const VkBuffer*>( pBuffers ), pOffsets );
13845 }
13846
13847#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13848 void bindVertexBuffers( uint32_t firstBinding, ArrayProxy<const Buffer> buffers, ArrayProxy<const DeviceSize> offsets ) const
13849 {
13850#ifdef VULKAN_HPP_NO_EXCEPTIONS
13851 assert( buffers.size() == offsets.size() );
13852#else
13853 if ( buffers.size() != offsets.size() )
13854 {
13855 throw std::logic_error( "vk::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" );
13856 }
13857#endif // VULKAN_HPP_NO_EXCEPTIONS
13858 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, buffers.size() , reinterpret_cast<const VkBuffer*>( buffers.data() ), offsets.data() );
13859 }
13860#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13861
13862#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13863 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13864 {
13865 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13866 }
13867#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13868
13869#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13870 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13871 {
13872 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13873 }
13874#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13875
13876#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13877 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13878 {
13879 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13880 }
13881#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13882
13883#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13884 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13885 {
13886 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13887 }
13888#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13889
13890#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13891 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13892 {
13893 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13894 }
13895#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13896
13897#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13898 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13899 {
13900 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13901 }
13902#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13903
13904#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13905 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13906 {
13907 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13908 }
13909#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13910
13911#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13912 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13913 {
13914 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13915 }
13916#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13917
13918#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13919 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13920 {
13921 vkCmdDispatch( m_commandBuffer, x, y, z );
13922 }
13923#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13924
13925#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13926 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13927 {
13928 vkCmdDispatch( m_commandBuffer, x, y, z );
13929 }
13930#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13931
13932#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13933 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13934 {
13935 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13936 }
13937#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13938
13939#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13940 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13941 {
13942 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13943 }
13944#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13945
13946 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy* pRegions ) const
13947 {
13948 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferCopy*>( pRegions ) );
13949 }
13950
13951#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13952 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy<const BufferCopy> regions ) const
13953 {
13954 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferCopy*>( regions.data() ) );
13955 }
13956#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13957
13958 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageCopy* pRegions ) const
13959 {
13960 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 ) );
13961 }
13962
13963#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13964 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageCopy> regions ) const
13965 {
13966 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() ) );
13967 }
13968#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13969
13970 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageBlit* pRegions, Filter filter ) const
13971 {
13972 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 ) );
13973 }
13974
13975#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13976 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageBlit> regions, Filter filter ) const
13977 {
13978 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 ) );
13979 }
13980#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13981
13982 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13983 {
13984 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13985 }
13986
13987#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13988 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const BufferImageCopy> regions ) const
13989 {
13990 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
13991 }
13992#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13993
13994 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13995 {
13996 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13997 }
13998
13999#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14000 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, ArrayProxy<const BufferImageCopy> regions ) const
14001 {
14002 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
14003 }
14004#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14005
14006 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void* pData ) const
14007 {
14008 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, dataSize, pData );
14009 }
14010
14011#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14012 template <typename T>
14013 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy<const T> data ) const
14014 {
14015 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, data.size() * sizeof( T ) , reinterpret_cast<const void*>( data.data() ) );
14016 }
14017#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14018
14019#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14020 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
14021 {
14022 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
14023 }
14024#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14025
14026#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14027 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
14028 {
14029 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
14030 }
14031#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14032
14033 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue* pColor, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
14034 {
14035 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( pColor ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
14036 }
14037
14038#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14039 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ArrayProxy<const ImageSubresourceRange> ranges ) const
14040 {
14041 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( &color ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
14042 }
14043#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14044
14045 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
14046 {
14047 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( pDepthStencil ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
14048 }
14049
14050#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14051 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ArrayProxy<const ImageSubresourceRange> ranges ) const
14052 {
14053 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( &depthStencil ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
14054 }
14055#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14056
14057 void clearAttachments( uint32_t attachmentCount, const ClearAttachment* pAttachments, uint32_t rectCount, const ClearRect* pRects ) const
14058 {
14059 vkCmdClearAttachments( m_commandBuffer, attachmentCount, reinterpret_cast<const VkClearAttachment*>( pAttachments ), rectCount, reinterpret_cast<const VkClearRect*>( pRects ) );
14060 }
14061
14062#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14063 void clearAttachments( ArrayProxy<const ClearAttachment> attachments, ArrayProxy<const ClearRect> rects ) const
14064 {
14065 vkCmdClearAttachments( m_commandBuffer, attachments.size() , reinterpret_cast<const VkClearAttachment*>( attachments.data() ), rects.size() , reinterpret_cast<const VkClearRect*>( rects.data() ) );
14066 }
14067#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14068
14069 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageResolve* pRegions ) const
14070 {
14071 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 ) );
14072 }
14073
14074#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14075 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageResolve> regions ) const
14076 {
14077 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() ) );
14078 }
14079#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14080
14081#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14082 void setEvent( Event event, PipelineStageFlags stageMask ) const
14083 {
14084 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14085 }
14086#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14087
14088#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14089 void setEvent( Event event, PipelineStageFlags stageMask ) const
14090 {
14091 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14092 }
14093#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14094
14095#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14096 void resetEvent( Event event, PipelineStageFlags stageMask ) const
14097 {
14098 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14099 }
14100#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14101
14102#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14103 void resetEvent( Event event, PipelineStageFlags stageMask ) const
14104 {
14105 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14106 }
14107#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14108
14109 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
14110 {
14111 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 ) );
14112 }
14113
14114#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14115 void waitEvents( ArrayProxy<const Event> events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
14116 {
14117 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() ) );
14118 }
14119#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14120
14121 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
14122 {
14123 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 ) );
14124 }
14125
14126#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14127 void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
14128 {
14129 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() ) );
14130 }
14131#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14132
14133#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14134 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
14135 {
14136 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
14137 }
14138#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14139
14140#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14141 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
14142 {
14143 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
14144 }
14145#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14146
14147#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14148 void endQuery( QueryPool queryPool, uint32_t query ) const
14149 {
14150 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
14151 }
14152#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14153
14154#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14155 void endQuery( QueryPool queryPool, uint32_t query ) const
14156 {
14157 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
14158 }
14159#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14160
14161#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14162 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
14163 {
14164 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
14165 }
14166#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14167
14168#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14169 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
14170 {
14171 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
14172 }
14173#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14174
14175#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14176 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
14177 {
14178 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
14179 }
14180#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14181
14182#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14183 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
14184 {
14185 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
14186 }
14187#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14188
14189#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14190 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
14191 {
14192 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14193 }
14194#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14195
14196#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14197 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
14198 {
14199 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14200 }
14201#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14202
14203 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues ) const
14204 {
14205 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, size, pValues );
14206 }
14207
14208#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14209 template <typename T>
14210 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, ArrayProxy<const T> values ) const
14211 {
14212 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, values.size() * sizeof( T ) , reinterpret_cast<const void*>( values.data() ) );
14213 }
14214#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14215
14216 void beginRenderPass( const RenderPassBeginInfo* pRenderPassBegin, SubpassContents contents ) const
14217 {
14218 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( pRenderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14219 }
14220
14221#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14222 void beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents ) const
14223 {
14224 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( &renderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14225 }
14226#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14227
14228#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14229 void nextSubpass( SubpassContents contents ) const
14230 {
14231 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14232 }
14233#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14234
14235#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14236 void nextSubpass( SubpassContents contents ) const
14237 {
14238 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14239 }
14240#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14241
14242#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14243 void endRenderPass( ) const
14244 {
14245 vkCmdEndRenderPass( m_commandBuffer );
14246 }
14247#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14248
14249#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14250 void endRenderPass() const
14251 {
14252 vkCmdEndRenderPass( m_commandBuffer );
14253 }
14254#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14255
14256 void executeCommands( uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
14257 {
14258 vkCmdExecuteCommands( m_commandBuffer, commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
14259 }
14260
14261#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14262 void executeCommands( ArrayProxy<const CommandBuffer> commandBuffers ) const
14263 {
14264 vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
14265 }
14266#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14267
14268 void debugMarkerBeginEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14269 {
14270 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14271 }
14272
14273#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14274 DebugMarkerMarkerInfoEXT debugMarkerBeginEXT() const
14275 {
14276 DebugMarkerMarkerInfoEXT markerInfo;
14277 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14278 return markerInfo;
14279 }
14280#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14281
14282#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14283 void debugMarkerEndEXT( ) const
14284 {
14285 vkCmdDebugMarkerEndEXT( m_commandBuffer );
14286 }
14287#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14288
14289#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14290 void debugMarkerEndEXT() const
14291 {
14292 vkCmdDebugMarkerEndEXT( m_commandBuffer );
14293 }
14294#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14295
14296 void debugMarkerInsertEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14297 {
14298 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14299 }
14300
14301#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14302 DebugMarkerMarkerInfoEXT debugMarkerInsertEXT() const
14303 {
14304 DebugMarkerMarkerInfoEXT markerInfo;
14305 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14306 return markerInfo;
14307 }
14308#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14309
Lenny Komow6501c122016-08-31 15:03:49 -060014310#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14311 void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14312 {
14313 vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14314 }
14315#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14316
14317#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14318 void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14319 {
14320 vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14321 }
14322#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14323
14324#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14325 void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14326 {
14327 vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14328 }
14329#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14330
14331#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14332 void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14333 {
14334 vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14335 }
14336#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14337
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014338#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14339 explicit
14340#endif
14341 operator VkCommandBuffer() const
14342 {
14343 return m_commandBuffer;
14344 }
14345
14346 explicit operator bool() const
14347 {
14348 return m_commandBuffer != VK_NULL_HANDLE;
14349 }
14350
14351 bool operator!() const
14352 {
14353 return m_commandBuffer == VK_NULL_HANDLE;
14354 }
14355
14356 private:
14357 VkCommandBuffer m_commandBuffer;
14358 };
14359 static_assert( sizeof( CommandBuffer ) == sizeof( VkCommandBuffer ), "handle and wrapper have different size!" );
14360
14361 struct SubpassDependency
14362 {
14363 SubpassDependency( uint32_t srcSubpass_ = 0, uint32_t dstSubpass_ = 0, PipelineStageFlags srcStageMask_ = PipelineStageFlags(), PipelineStageFlags dstStageMask_ = PipelineStageFlags(), AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), DependencyFlags dependencyFlags_ = DependencyFlags() )
14364 : srcSubpass( srcSubpass_ )
14365 , dstSubpass( dstSubpass_ )
14366 , srcStageMask( srcStageMask_ )
14367 , dstStageMask( dstStageMask_ )
14368 , srcAccessMask( srcAccessMask_ )
14369 , dstAccessMask( dstAccessMask_ )
14370 , dependencyFlags( dependencyFlags_ )
14371 {
14372 }
14373
14374 SubpassDependency( VkSubpassDependency const & rhs )
14375 {
14376 memcpy( this, &rhs, sizeof(SubpassDependency) );
14377 }
14378
14379 SubpassDependency& operator=( VkSubpassDependency const & rhs )
14380 {
14381 memcpy( this, &rhs, sizeof(SubpassDependency) );
14382 return *this;
14383 }
14384
14385 SubpassDependency& setSrcSubpass( uint32_t srcSubpass_ )
14386 {
14387 srcSubpass = srcSubpass_;
14388 return *this;
14389 }
14390
14391 SubpassDependency& setDstSubpass( uint32_t dstSubpass_ )
14392 {
14393 dstSubpass = dstSubpass_;
14394 return *this;
14395 }
14396
14397 SubpassDependency& setSrcStageMask( PipelineStageFlags srcStageMask_ )
14398 {
14399 srcStageMask = srcStageMask_;
14400 return *this;
14401 }
14402
14403 SubpassDependency& setDstStageMask( PipelineStageFlags dstStageMask_ )
14404 {
14405 dstStageMask = dstStageMask_;
14406 return *this;
14407 }
14408
14409 SubpassDependency& setSrcAccessMask( AccessFlags srcAccessMask_ )
14410 {
14411 srcAccessMask = srcAccessMask_;
14412 return *this;
14413 }
14414
14415 SubpassDependency& setDstAccessMask( AccessFlags dstAccessMask_ )
14416 {
14417 dstAccessMask = dstAccessMask_;
14418 return *this;
14419 }
14420
14421 SubpassDependency& setDependencyFlags( DependencyFlags dependencyFlags_ )
14422 {
14423 dependencyFlags = dependencyFlags_;
14424 return *this;
14425 }
14426
14427 operator const VkSubpassDependency&() const
14428 {
14429 return *reinterpret_cast<const VkSubpassDependency*>(this);
14430 }
14431
14432 bool operator==( SubpassDependency const& rhs ) const
14433 {
14434 return ( srcSubpass == rhs.srcSubpass )
14435 && ( dstSubpass == rhs.dstSubpass )
14436 && ( srcStageMask == rhs.srcStageMask )
14437 && ( dstStageMask == rhs.dstStageMask )
14438 && ( srcAccessMask == rhs.srcAccessMask )
14439 && ( dstAccessMask == rhs.dstAccessMask )
14440 && ( dependencyFlags == rhs.dependencyFlags );
14441 }
14442
14443 bool operator!=( SubpassDependency const& rhs ) const
14444 {
14445 return !operator==( rhs );
14446 }
14447
14448 uint32_t srcSubpass;
14449 uint32_t dstSubpass;
14450 PipelineStageFlags srcStageMask;
14451 PipelineStageFlags dstStageMask;
14452 AccessFlags srcAccessMask;
14453 AccessFlags dstAccessMask;
14454 DependencyFlags dependencyFlags;
14455 };
14456 static_assert( sizeof( SubpassDependency ) == sizeof( VkSubpassDependency ), "struct and wrapper have different size!" );
14457
14458 struct RenderPassCreateInfo
14459 {
14460 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 )
14461 : sType( StructureType::eRenderPassCreateInfo )
14462 , pNext( nullptr )
14463 , flags( flags_ )
14464 , attachmentCount( attachmentCount_ )
14465 , pAttachments( pAttachments_ )
14466 , subpassCount( subpassCount_ )
14467 , pSubpasses( pSubpasses_ )
14468 , dependencyCount( dependencyCount_ )
14469 , pDependencies( pDependencies_ )
14470 {
14471 }
14472
14473 RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs )
14474 {
14475 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14476 }
14477
14478 RenderPassCreateInfo& operator=( VkRenderPassCreateInfo const & rhs )
14479 {
14480 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14481 return *this;
14482 }
14483
14484 RenderPassCreateInfo& setSType( StructureType sType_ )
14485 {
14486 sType = sType_;
14487 return *this;
14488 }
14489
14490 RenderPassCreateInfo& setPNext( const void* pNext_ )
14491 {
14492 pNext = pNext_;
14493 return *this;
14494 }
14495
14496 RenderPassCreateInfo& setFlags( RenderPassCreateFlags flags_ )
14497 {
14498 flags = flags_;
14499 return *this;
14500 }
14501
14502 RenderPassCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
14503 {
14504 attachmentCount = attachmentCount_;
14505 return *this;
14506 }
14507
14508 RenderPassCreateInfo& setPAttachments( const AttachmentDescription* pAttachments_ )
14509 {
14510 pAttachments = pAttachments_;
14511 return *this;
14512 }
14513
14514 RenderPassCreateInfo& setSubpassCount( uint32_t subpassCount_ )
14515 {
14516 subpassCount = subpassCount_;
14517 return *this;
14518 }
14519
14520 RenderPassCreateInfo& setPSubpasses( const SubpassDescription* pSubpasses_ )
14521 {
14522 pSubpasses = pSubpasses_;
14523 return *this;
14524 }
14525
14526 RenderPassCreateInfo& setDependencyCount( uint32_t dependencyCount_ )
14527 {
14528 dependencyCount = dependencyCount_;
14529 return *this;
14530 }
14531
14532 RenderPassCreateInfo& setPDependencies( const SubpassDependency* pDependencies_ )
14533 {
14534 pDependencies = pDependencies_;
14535 return *this;
14536 }
14537
14538 operator const VkRenderPassCreateInfo&() const
14539 {
14540 return *reinterpret_cast<const VkRenderPassCreateInfo*>(this);
14541 }
14542
14543 bool operator==( RenderPassCreateInfo const& rhs ) const
14544 {
14545 return ( sType == rhs.sType )
14546 && ( pNext == rhs.pNext )
14547 && ( flags == rhs.flags )
14548 && ( attachmentCount == rhs.attachmentCount )
14549 && ( pAttachments == rhs.pAttachments )
14550 && ( subpassCount == rhs.subpassCount )
14551 && ( pSubpasses == rhs.pSubpasses )
14552 && ( dependencyCount == rhs.dependencyCount )
14553 && ( pDependencies == rhs.pDependencies );
14554 }
14555
14556 bool operator!=( RenderPassCreateInfo const& rhs ) const
14557 {
14558 return !operator==( rhs );
14559 }
14560
14561 private:
14562 StructureType sType;
14563
14564 public:
14565 const void* pNext;
14566 RenderPassCreateFlags flags;
14567 uint32_t attachmentCount;
14568 const AttachmentDescription* pAttachments;
14569 uint32_t subpassCount;
14570 const SubpassDescription* pSubpasses;
14571 uint32_t dependencyCount;
14572 const SubpassDependency* pDependencies;
14573 };
14574 static_assert( sizeof( RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ), "struct and wrapper have different size!" );
14575
14576 struct SubmitInfo
14577 {
14578 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 )
14579 : sType( StructureType::eSubmitInfo )
14580 , pNext( nullptr )
14581 , waitSemaphoreCount( waitSemaphoreCount_ )
14582 , pWaitSemaphores( pWaitSemaphores_ )
14583 , pWaitDstStageMask( pWaitDstStageMask_ )
14584 , commandBufferCount( commandBufferCount_ )
14585 , pCommandBuffers( pCommandBuffers_ )
14586 , signalSemaphoreCount( signalSemaphoreCount_ )
14587 , pSignalSemaphores( pSignalSemaphores_ )
14588 {
14589 }
14590
14591 SubmitInfo( VkSubmitInfo const & rhs )
14592 {
14593 memcpy( this, &rhs, sizeof(SubmitInfo) );
14594 }
14595
14596 SubmitInfo& operator=( VkSubmitInfo const & rhs )
14597 {
14598 memcpy( this, &rhs, sizeof(SubmitInfo) );
14599 return *this;
14600 }
14601
14602 SubmitInfo& setSType( StructureType sType_ )
14603 {
14604 sType = sType_;
14605 return *this;
14606 }
14607
14608 SubmitInfo& setPNext( const void* pNext_ )
14609 {
14610 pNext = pNext_;
14611 return *this;
14612 }
14613
14614 SubmitInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
14615 {
14616 waitSemaphoreCount = waitSemaphoreCount_;
14617 return *this;
14618 }
14619
14620 SubmitInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
14621 {
14622 pWaitSemaphores = pWaitSemaphores_;
14623 return *this;
14624 }
14625
14626 SubmitInfo& setPWaitDstStageMask( const PipelineStageFlags* pWaitDstStageMask_ )
14627 {
14628 pWaitDstStageMask = pWaitDstStageMask_;
14629 return *this;
14630 }
14631
14632 SubmitInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
14633 {
14634 commandBufferCount = commandBufferCount_;
14635 return *this;
14636 }
14637
14638 SubmitInfo& setPCommandBuffers( const CommandBuffer* pCommandBuffers_ )
14639 {
14640 pCommandBuffers = pCommandBuffers_;
14641 return *this;
14642 }
14643
14644 SubmitInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
14645 {
14646 signalSemaphoreCount = signalSemaphoreCount_;
14647 return *this;
14648 }
14649
14650 SubmitInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
14651 {
14652 pSignalSemaphores = pSignalSemaphores_;
14653 return *this;
14654 }
14655
14656 operator const VkSubmitInfo&() const
14657 {
14658 return *reinterpret_cast<const VkSubmitInfo*>(this);
14659 }
14660
14661 bool operator==( SubmitInfo const& rhs ) const
14662 {
14663 return ( sType == rhs.sType )
14664 && ( pNext == rhs.pNext )
14665 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
14666 && ( pWaitSemaphores == rhs.pWaitSemaphores )
14667 && ( pWaitDstStageMask == rhs.pWaitDstStageMask )
14668 && ( commandBufferCount == rhs.commandBufferCount )
14669 && ( pCommandBuffers == rhs.pCommandBuffers )
14670 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
14671 && ( pSignalSemaphores == rhs.pSignalSemaphores );
14672 }
14673
14674 bool operator!=( SubmitInfo const& rhs ) const
14675 {
14676 return !operator==( rhs );
14677 }
14678
14679 private:
14680 StructureType sType;
14681
14682 public:
14683 const void* pNext;
14684 uint32_t waitSemaphoreCount;
14685 const Semaphore* pWaitSemaphores;
14686 const PipelineStageFlags* pWaitDstStageMask;
14687 uint32_t commandBufferCount;
14688 const CommandBuffer* pCommandBuffers;
14689 uint32_t signalSemaphoreCount;
14690 const Semaphore* pSignalSemaphores;
14691 };
14692 static_assert( sizeof( SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" );
14693
14694 class Queue
14695 {
14696 public:
14697 Queue()
14698 : m_queue(VK_NULL_HANDLE)
14699 {}
14700
14701#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14702 Queue(VkQueue queue)
14703 : m_queue(queue)
14704 {}
14705
14706 Queue& operator=(VkQueue queue)
14707 {
14708 m_queue = queue;
14709 return *this;
14710 }
14711#endif
14712
Lenny Komowebf33162016-08-26 14:10:08 -060014713 bool operator==(Queue const &rhs) const
14714 {
14715 return m_queue == rhs.m_queue;
14716 }
14717
14718 bool operator!=(Queue const &rhs) const
14719 {
14720 return m_queue != rhs.m_queue;
14721 }
14722
14723 bool operator<(Queue const &rhs) const
14724 {
14725 return m_queue < rhs.m_queue;
14726 }
14727
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014728 Result submit( uint32_t submitCount, const SubmitInfo* pSubmits, Fence fence ) const
14729 {
14730 return static_cast<Result>( vkQueueSubmit( m_queue, submitCount, reinterpret_cast<const VkSubmitInfo*>( pSubmits ), static_cast<VkFence>( fence ) ) );
14731 }
14732
14733#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14734 ResultValueType<void>::type submit( ArrayProxy<const SubmitInfo> submits, Fence fence ) const
14735 {
14736 Result result = static_cast<Result>( vkQueueSubmit( m_queue, submits.size() , reinterpret_cast<const VkSubmitInfo*>( submits.data() ), static_cast<VkFence>( fence ) ) );
14737 return createResultValue( result, "vk::Queue::submit" );
14738 }
14739#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14740
14741#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14742 Result waitIdle( ) const
14743 {
14744 return static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14745 }
14746#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14747
14748#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14749 ResultValueType<void>::type waitIdle() const
14750 {
14751 Result result = static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14752 return createResultValue( result, "vk::Queue::waitIdle" );
14753 }
14754#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14755
14756 Result bindSparse( uint32_t bindInfoCount, const BindSparseInfo* pBindInfo, Fence fence ) const
14757 {
14758 return static_cast<Result>( vkQueueBindSparse( m_queue, bindInfoCount, reinterpret_cast<const VkBindSparseInfo*>( pBindInfo ), static_cast<VkFence>( fence ) ) );
14759 }
14760
14761#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14762 ResultValueType<void>::type bindSparse( ArrayProxy<const BindSparseInfo> bindInfo, Fence fence ) const
14763 {
14764 Result result = static_cast<Result>( vkQueueBindSparse( m_queue, bindInfo.size() , reinterpret_cast<const VkBindSparseInfo*>( bindInfo.data() ), static_cast<VkFence>( fence ) ) );
14765 return createResultValue( result, "vk::Queue::bindSparse" );
14766 }
14767#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14768
14769 Result presentKHR( const PresentInfoKHR* pPresentInfo ) const
14770 {
14771 return static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( pPresentInfo ) ) );
14772 }
14773
14774#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14775 Result presentKHR( const PresentInfoKHR & presentInfo ) const
14776 {
14777 Result result = static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( &presentInfo ) ) );
14778 return createResultValue( result, "vk::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } );
14779 }
14780#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14781
14782#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14783 explicit
14784#endif
14785 operator VkQueue() const
14786 {
14787 return m_queue;
14788 }
14789
14790 explicit operator bool() const
14791 {
14792 return m_queue != VK_NULL_HANDLE;
14793 }
14794
14795 bool operator!() const
14796 {
14797 return m_queue == VK_NULL_HANDLE;
14798 }
14799
14800 private:
14801 VkQueue m_queue;
14802 };
14803 static_assert( sizeof( Queue ) == sizeof( VkQueue ), "handle and wrapper have different size!" );
14804
14805 enum class PresentModeKHR
14806 {
14807 eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR,
14808 eMailbox = VK_PRESENT_MODE_MAILBOX_KHR,
14809 eFifo = VK_PRESENT_MODE_FIFO_KHR,
14810 eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR
14811 };
14812
14813 enum class ColorSpaceKHR
14814 {
14815 eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
14816 };
14817
14818 struct SurfaceFormatKHR
14819 {
14820 SurfaceFormatKHR( Format format_ = Format::eUndefined, ColorSpaceKHR colorSpace_ = ColorSpaceKHR::eSrgbNonlinear )
14821 : format( format_ )
14822 , colorSpace( colorSpace_ )
14823 {
14824 }
14825
14826 SurfaceFormatKHR( VkSurfaceFormatKHR const & rhs )
14827 {
14828 memcpy( this, &rhs, sizeof(SurfaceFormatKHR) );
14829 }
14830
14831 SurfaceFormatKHR& operator=( VkSurfaceFormatKHR const & rhs )
14832 {
14833 memcpy( this, &rhs, sizeof(SurfaceFormatKHR) );
14834 return *this;
14835 }
14836
14837 SurfaceFormatKHR& setFormat( Format format_ )
14838 {
14839 format = format_;
14840 return *this;
14841 }
14842
14843 SurfaceFormatKHR& setColorSpace( ColorSpaceKHR colorSpace_ )
14844 {
14845 colorSpace = colorSpace_;
14846 return *this;
14847 }
14848
14849 operator const VkSurfaceFormatKHR&() const
14850 {
14851 return *reinterpret_cast<const VkSurfaceFormatKHR*>(this);
14852 }
14853
14854 bool operator==( SurfaceFormatKHR const& rhs ) const
14855 {
14856 return ( format == rhs.format )
14857 && ( colorSpace == rhs.colorSpace );
14858 }
14859
14860 bool operator!=( SurfaceFormatKHR const& rhs ) const
14861 {
14862 return !operator==( rhs );
14863 }
14864
14865 Format format;
14866 ColorSpaceKHR colorSpace;
14867 };
14868 static_assert( sizeof( SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ), "struct and wrapper have different size!" );
14869
14870 enum class DisplayPlaneAlphaFlagBitsKHR
14871 {
14872 eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,
14873 eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,
14874 ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,
14875 ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
14876 };
14877
14878 using DisplayPlaneAlphaFlagsKHR = Flags<DisplayPlaneAlphaFlagBitsKHR, VkDisplayPlaneAlphaFlagsKHR>;
14879
14880 inline DisplayPlaneAlphaFlagsKHR operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 )
14881 {
14882 return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1;
14883 }
14884
14885 struct DisplayPlaneCapabilitiesKHR
14886 {
14887 DisplayPlaneCapabilitiesKHR( DisplayPlaneAlphaFlagsKHR supportedAlpha_ = DisplayPlaneAlphaFlagsKHR(), Offset2D minSrcPosition_ = Offset2D(), Offset2D maxSrcPosition_ = Offset2D(), Extent2D minSrcExtent_ = Extent2D(), Extent2D maxSrcExtent_ = Extent2D(), Offset2D minDstPosition_ = Offset2D(), Offset2D maxDstPosition_ = Offset2D(), Extent2D minDstExtent_ = Extent2D(), Extent2D maxDstExtent_ = Extent2D() )
14888 : supportedAlpha( supportedAlpha_ )
14889 , minSrcPosition( minSrcPosition_ )
14890 , maxSrcPosition( maxSrcPosition_ )
14891 , minSrcExtent( minSrcExtent_ )
14892 , maxSrcExtent( maxSrcExtent_ )
14893 , minDstPosition( minDstPosition_ )
14894 , maxDstPosition( maxDstPosition_ )
14895 , minDstExtent( minDstExtent_ )
14896 , maxDstExtent( maxDstExtent_ )
14897 {
14898 }
14899
14900 DisplayPlaneCapabilitiesKHR( VkDisplayPlaneCapabilitiesKHR const & rhs )
14901 {
14902 memcpy( this, &rhs, sizeof(DisplayPlaneCapabilitiesKHR) );
14903 }
14904
14905 DisplayPlaneCapabilitiesKHR& operator=( VkDisplayPlaneCapabilitiesKHR const & rhs )
14906 {
14907 memcpy( this, &rhs, sizeof(DisplayPlaneCapabilitiesKHR) );
14908 return *this;
14909 }
14910
14911 DisplayPlaneCapabilitiesKHR& setSupportedAlpha( DisplayPlaneAlphaFlagsKHR supportedAlpha_ )
14912 {
14913 supportedAlpha = supportedAlpha_;
14914 return *this;
14915 }
14916
14917 DisplayPlaneCapabilitiesKHR& setMinSrcPosition( Offset2D minSrcPosition_ )
14918 {
14919 minSrcPosition = minSrcPosition_;
14920 return *this;
14921 }
14922
14923 DisplayPlaneCapabilitiesKHR& setMaxSrcPosition( Offset2D maxSrcPosition_ )
14924 {
14925 maxSrcPosition = maxSrcPosition_;
14926 return *this;
14927 }
14928
14929 DisplayPlaneCapabilitiesKHR& setMinSrcExtent( Extent2D minSrcExtent_ )
14930 {
14931 minSrcExtent = minSrcExtent_;
14932 return *this;
14933 }
14934
14935 DisplayPlaneCapabilitiesKHR& setMaxSrcExtent( Extent2D maxSrcExtent_ )
14936 {
14937 maxSrcExtent = maxSrcExtent_;
14938 return *this;
14939 }
14940
14941 DisplayPlaneCapabilitiesKHR& setMinDstPosition( Offset2D minDstPosition_ )
14942 {
14943 minDstPosition = minDstPosition_;
14944 return *this;
14945 }
14946
14947 DisplayPlaneCapabilitiesKHR& setMaxDstPosition( Offset2D maxDstPosition_ )
14948 {
14949 maxDstPosition = maxDstPosition_;
14950 return *this;
14951 }
14952
14953 DisplayPlaneCapabilitiesKHR& setMinDstExtent( Extent2D minDstExtent_ )
14954 {
14955 minDstExtent = minDstExtent_;
14956 return *this;
14957 }
14958
14959 DisplayPlaneCapabilitiesKHR& setMaxDstExtent( Extent2D maxDstExtent_ )
14960 {
14961 maxDstExtent = maxDstExtent_;
14962 return *this;
14963 }
14964
14965 operator const VkDisplayPlaneCapabilitiesKHR&() const
14966 {
14967 return *reinterpret_cast<const VkDisplayPlaneCapabilitiesKHR*>(this);
14968 }
14969
14970 bool operator==( DisplayPlaneCapabilitiesKHR const& rhs ) const
14971 {
14972 return ( supportedAlpha == rhs.supportedAlpha )
14973 && ( minSrcPosition == rhs.minSrcPosition )
14974 && ( maxSrcPosition == rhs.maxSrcPosition )
14975 && ( minSrcExtent == rhs.minSrcExtent )
14976 && ( maxSrcExtent == rhs.maxSrcExtent )
14977 && ( minDstPosition == rhs.minDstPosition )
14978 && ( maxDstPosition == rhs.maxDstPosition )
14979 && ( minDstExtent == rhs.minDstExtent )
14980 && ( maxDstExtent == rhs.maxDstExtent );
14981 }
14982
14983 bool operator!=( DisplayPlaneCapabilitiesKHR const& rhs ) const
14984 {
14985 return !operator==( rhs );
14986 }
14987
14988 DisplayPlaneAlphaFlagsKHR supportedAlpha;
14989 Offset2D minSrcPosition;
14990 Offset2D maxSrcPosition;
14991 Extent2D minSrcExtent;
14992 Extent2D maxSrcExtent;
14993 Offset2D minDstPosition;
14994 Offset2D maxDstPosition;
14995 Extent2D minDstExtent;
14996 Extent2D maxDstExtent;
14997 };
14998 static_assert( sizeof( DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ), "struct and wrapper have different size!" );
14999
15000 enum class CompositeAlphaFlagBitsKHR
15001 {
15002 eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
15003 ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
15004 ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
15005 eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
15006 };
15007
15008 using CompositeAlphaFlagsKHR = Flags<CompositeAlphaFlagBitsKHR, VkCompositeAlphaFlagsKHR>;
15009
15010 inline CompositeAlphaFlagsKHR operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 )
15011 {
15012 return CompositeAlphaFlagsKHR( bit0 ) | bit1;
15013 }
15014
15015 enum class SurfaceTransformFlagBitsKHR
15016 {
15017 eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
15018 eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
15019 eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,
15020 eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,
15021 eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,
15022 eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,
15023 eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,
15024 eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,
15025 eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
15026 };
15027
15028 using SurfaceTransformFlagsKHR = Flags<SurfaceTransformFlagBitsKHR, VkSurfaceTransformFlagsKHR>;
15029
15030 inline SurfaceTransformFlagsKHR operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 )
15031 {
15032 return SurfaceTransformFlagsKHR( bit0 ) | bit1;
15033 }
15034
15035 struct DisplayPropertiesKHR
15036 {
15037 DisplayPropertiesKHR( DisplayKHR display_ = DisplayKHR(), const char* displayName_ = nullptr, Extent2D physicalDimensions_ = Extent2D(), Extent2D physicalResolution_ = Extent2D(), SurfaceTransformFlagsKHR supportedTransforms_ = SurfaceTransformFlagsKHR(), Bool32 planeReorderPossible_ = 0, Bool32 persistentContent_ = 0 )
15038 : display( display_ )
15039 , displayName( displayName_ )
15040 , physicalDimensions( physicalDimensions_ )
15041 , physicalResolution( physicalResolution_ )
15042 , supportedTransforms( supportedTransforms_ )
15043 , planeReorderPossible( planeReorderPossible_ )
15044 , persistentContent( persistentContent_ )
15045 {
15046 }
15047
15048 DisplayPropertiesKHR( VkDisplayPropertiesKHR const & rhs )
15049 {
15050 memcpy( this, &rhs, sizeof(DisplayPropertiesKHR) );
15051 }
15052
15053 DisplayPropertiesKHR& operator=( VkDisplayPropertiesKHR const & rhs )
15054 {
15055 memcpy( this, &rhs, sizeof(DisplayPropertiesKHR) );
15056 return *this;
15057 }
15058
15059 DisplayPropertiesKHR& setDisplay( DisplayKHR display_ )
15060 {
15061 display = display_;
15062 return *this;
15063 }
15064
15065 DisplayPropertiesKHR& setDisplayName( const char* displayName_ )
15066 {
15067 displayName = displayName_;
15068 return *this;
15069 }
15070
15071 DisplayPropertiesKHR& setPhysicalDimensions( Extent2D physicalDimensions_ )
15072 {
15073 physicalDimensions = physicalDimensions_;
15074 return *this;
15075 }
15076
15077 DisplayPropertiesKHR& setPhysicalResolution( Extent2D physicalResolution_ )
15078 {
15079 physicalResolution = physicalResolution_;
15080 return *this;
15081 }
15082
15083 DisplayPropertiesKHR& setSupportedTransforms( SurfaceTransformFlagsKHR supportedTransforms_ )
15084 {
15085 supportedTransforms = supportedTransforms_;
15086 return *this;
15087 }
15088
15089 DisplayPropertiesKHR& setPlaneReorderPossible( Bool32 planeReorderPossible_ )
15090 {
15091 planeReorderPossible = planeReorderPossible_;
15092 return *this;
15093 }
15094
15095 DisplayPropertiesKHR& setPersistentContent( Bool32 persistentContent_ )
15096 {
15097 persistentContent = persistentContent_;
15098 return *this;
15099 }
15100
15101 operator const VkDisplayPropertiesKHR&() const
15102 {
15103 return *reinterpret_cast<const VkDisplayPropertiesKHR*>(this);
15104 }
15105
15106 bool operator==( DisplayPropertiesKHR const& rhs ) const
15107 {
15108 return ( display == rhs.display )
15109 && ( displayName == rhs.displayName )
15110 && ( physicalDimensions == rhs.physicalDimensions )
15111 && ( physicalResolution == rhs.physicalResolution )
15112 && ( supportedTransforms == rhs.supportedTransforms )
15113 && ( planeReorderPossible == rhs.planeReorderPossible )
15114 && ( persistentContent == rhs.persistentContent );
15115 }
15116
15117 bool operator!=( DisplayPropertiesKHR const& rhs ) const
15118 {
15119 return !operator==( rhs );
15120 }
15121
15122 DisplayKHR display;
15123 const char* displayName;
15124 Extent2D physicalDimensions;
15125 Extent2D physicalResolution;
15126 SurfaceTransformFlagsKHR supportedTransforms;
15127 Bool32 planeReorderPossible;
15128 Bool32 persistentContent;
15129 };
15130 static_assert( sizeof( DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ), "struct and wrapper have different size!" );
15131
15132 struct DisplaySurfaceCreateInfoKHR
15133 {
15134 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() )
15135 : sType( StructureType::eDisplaySurfaceCreateInfoKHR )
15136 , pNext( nullptr )
15137 , flags( flags_ )
15138 , displayMode( displayMode_ )
15139 , planeIndex( planeIndex_ )
15140 , planeStackIndex( planeStackIndex_ )
15141 , transform( transform_ )
15142 , globalAlpha( globalAlpha_ )
15143 , alphaMode( alphaMode_ )
15144 , imageExtent( imageExtent_ )
15145 {
15146 }
15147
15148 DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs )
15149 {
15150 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
15151 }
15152
15153 DisplaySurfaceCreateInfoKHR& operator=( VkDisplaySurfaceCreateInfoKHR const & rhs )
15154 {
15155 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
15156 return *this;
15157 }
15158
15159 DisplaySurfaceCreateInfoKHR& setSType( StructureType sType_ )
15160 {
15161 sType = sType_;
15162 return *this;
15163 }
15164
15165 DisplaySurfaceCreateInfoKHR& setPNext( const void* pNext_ )
15166 {
15167 pNext = pNext_;
15168 return *this;
15169 }
15170
15171 DisplaySurfaceCreateInfoKHR& setFlags( DisplaySurfaceCreateFlagsKHR flags_ )
15172 {
15173 flags = flags_;
15174 return *this;
15175 }
15176
15177 DisplaySurfaceCreateInfoKHR& setDisplayMode( DisplayModeKHR displayMode_ )
15178 {
15179 displayMode = displayMode_;
15180 return *this;
15181 }
15182
15183 DisplaySurfaceCreateInfoKHR& setPlaneIndex( uint32_t planeIndex_ )
15184 {
15185 planeIndex = planeIndex_;
15186 return *this;
15187 }
15188
15189 DisplaySurfaceCreateInfoKHR& setPlaneStackIndex( uint32_t planeStackIndex_ )
15190 {
15191 planeStackIndex = planeStackIndex_;
15192 return *this;
15193 }
15194
15195 DisplaySurfaceCreateInfoKHR& setTransform( SurfaceTransformFlagBitsKHR transform_ )
15196 {
15197 transform = transform_;
15198 return *this;
15199 }
15200
15201 DisplaySurfaceCreateInfoKHR& setGlobalAlpha( float globalAlpha_ )
15202 {
15203 globalAlpha = globalAlpha_;
15204 return *this;
15205 }
15206
15207 DisplaySurfaceCreateInfoKHR& setAlphaMode( DisplayPlaneAlphaFlagBitsKHR alphaMode_ )
15208 {
15209 alphaMode = alphaMode_;
15210 return *this;
15211 }
15212
15213 DisplaySurfaceCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
15214 {
15215 imageExtent = imageExtent_;
15216 return *this;
15217 }
15218
15219 operator const VkDisplaySurfaceCreateInfoKHR&() const
15220 {
15221 return *reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>(this);
15222 }
15223
15224 bool operator==( DisplaySurfaceCreateInfoKHR const& rhs ) const
15225 {
15226 return ( sType == rhs.sType )
15227 && ( pNext == rhs.pNext )
15228 && ( flags == rhs.flags )
15229 && ( displayMode == rhs.displayMode )
15230 && ( planeIndex == rhs.planeIndex )
15231 && ( planeStackIndex == rhs.planeStackIndex )
15232 && ( transform == rhs.transform )
15233 && ( globalAlpha == rhs.globalAlpha )
15234 && ( alphaMode == rhs.alphaMode )
15235 && ( imageExtent == rhs.imageExtent );
15236 }
15237
15238 bool operator!=( DisplaySurfaceCreateInfoKHR const& rhs ) const
15239 {
15240 return !operator==( rhs );
15241 }
15242
15243 private:
15244 StructureType sType;
15245
15246 public:
15247 const void* pNext;
15248 DisplaySurfaceCreateFlagsKHR flags;
15249 DisplayModeKHR displayMode;
15250 uint32_t planeIndex;
15251 uint32_t planeStackIndex;
15252 SurfaceTransformFlagBitsKHR transform;
15253 float globalAlpha;
15254 DisplayPlaneAlphaFlagBitsKHR alphaMode;
15255 Extent2D imageExtent;
15256 };
15257 static_assert( sizeof( DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
15258
15259 struct SurfaceCapabilitiesKHR
15260 {
15261 SurfaceCapabilitiesKHR( uint32_t minImageCount_ = 0, uint32_t maxImageCount_ = 0, Extent2D currentExtent_ = Extent2D(), Extent2D minImageExtent_ = Extent2D(), Extent2D maxImageExtent_ = Extent2D(), uint32_t maxImageArrayLayers_ = 0, SurfaceTransformFlagsKHR supportedTransforms_ = SurfaceTransformFlagsKHR(), SurfaceTransformFlagBitsKHR currentTransform_ = SurfaceTransformFlagBitsKHR::eIdentity, CompositeAlphaFlagsKHR supportedCompositeAlpha_ = CompositeAlphaFlagsKHR(), ImageUsageFlags supportedUsageFlags_ = ImageUsageFlags() )
15262 : minImageCount( minImageCount_ )
15263 , maxImageCount( maxImageCount_ )
15264 , currentExtent( currentExtent_ )
15265 , minImageExtent( minImageExtent_ )
15266 , maxImageExtent( maxImageExtent_ )
15267 , maxImageArrayLayers( maxImageArrayLayers_ )
15268 , supportedTransforms( supportedTransforms_ )
15269 , currentTransform( currentTransform_ )
15270 , supportedCompositeAlpha( supportedCompositeAlpha_ )
15271 , supportedUsageFlags( supportedUsageFlags_ )
15272 {
15273 }
15274
15275 SurfaceCapabilitiesKHR( VkSurfaceCapabilitiesKHR const & rhs )
15276 {
15277 memcpy( this, &rhs, sizeof(SurfaceCapabilitiesKHR) );
15278 }
15279
15280 SurfaceCapabilitiesKHR& operator=( VkSurfaceCapabilitiesKHR const & rhs )
15281 {
15282 memcpy( this, &rhs, sizeof(SurfaceCapabilitiesKHR) );
15283 return *this;
15284 }
15285
15286 SurfaceCapabilitiesKHR& setMinImageCount( uint32_t minImageCount_ )
15287 {
15288 minImageCount = minImageCount_;
15289 return *this;
15290 }
15291
15292 SurfaceCapabilitiesKHR& setMaxImageCount( uint32_t maxImageCount_ )
15293 {
15294 maxImageCount = maxImageCount_;
15295 return *this;
15296 }
15297
15298 SurfaceCapabilitiesKHR& setCurrentExtent( Extent2D currentExtent_ )
15299 {
15300 currentExtent = currentExtent_;
15301 return *this;
15302 }
15303
15304 SurfaceCapabilitiesKHR& setMinImageExtent( Extent2D minImageExtent_ )
15305 {
15306 minImageExtent = minImageExtent_;
15307 return *this;
15308 }
15309
15310 SurfaceCapabilitiesKHR& setMaxImageExtent( Extent2D maxImageExtent_ )
15311 {
15312 maxImageExtent = maxImageExtent_;
15313 return *this;
15314 }
15315
15316 SurfaceCapabilitiesKHR& setMaxImageArrayLayers( uint32_t maxImageArrayLayers_ )
15317 {
15318 maxImageArrayLayers = maxImageArrayLayers_;
15319 return *this;
15320 }
15321
15322 SurfaceCapabilitiesKHR& setSupportedTransforms( SurfaceTransformFlagsKHR supportedTransforms_ )
15323 {
15324 supportedTransforms = supportedTransforms_;
15325 return *this;
15326 }
15327
15328 SurfaceCapabilitiesKHR& setCurrentTransform( SurfaceTransformFlagBitsKHR currentTransform_ )
15329 {
15330 currentTransform = currentTransform_;
15331 return *this;
15332 }
15333
15334 SurfaceCapabilitiesKHR& setSupportedCompositeAlpha( CompositeAlphaFlagsKHR supportedCompositeAlpha_ )
15335 {
15336 supportedCompositeAlpha = supportedCompositeAlpha_;
15337 return *this;
15338 }
15339
15340 SurfaceCapabilitiesKHR& setSupportedUsageFlags( ImageUsageFlags supportedUsageFlags_ )
15341 {
15342 supportedUsageFlags = supportedUsageFlags_;
15343 return *this;
15344 }
15345
15346 operator const VkSurfaceCapabilitiesKHR&() const
15347 {
15348 return *reinterpret_cast<const VkSurfaceCapabilitiesKHR*>(this);
15349 }
15350
15351 bool operator==( SurfaceCapabilitiesKHR const& rhs ) const
15352 {
15353 return ( minImageCount == rhs.minImageCount )
15354 && ( maxImageCount == rhs.maxImageCount )
15355 && ( currentExtent == rhs.currentExtent )
15356 && ( minImageExtent == rhs.minImageExtent )
15357 && ( maxImageExtent == rhs.maxImageExtent )
15358 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
15359 && ( supportedTransforms == rhs.supportedTransforms )
15360 && ( currentTransform == rhs.currentTransform )
15361 && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha )
15362 && ( supportedUsageFlags == rhs.supportedUsageFlags );
15363 }
15364
15365 bool operator!=( SurfaceCapabilitiesKHR const& rhs ) const
15366 {
15367 return !operator==( rhs );
15368 }
15369
15370 uint32_t minImageCount;
15371 uint32_t maxImageCount;
15372 Extent2D currentExtent;
15373 Extent2D minImageExtent;
15374 Extent2D maxImageExtent;
15375 uint32_t maxImageArrayLayers;
15376 SurfaceTransformFlagsKHR supportedTransforms;
15377 SurfaceTransformFlagBitsKHR currentTransform;
15378 CompositeAlphaFlagsKHR supportedCompositeAlpha;
15379 ImageUsageFlags supportedUsageFlags;
15380 };
15381 static_assert( sizeof( SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ), "struct and wrapper have different size!" );
15382
15383 struct SwapchainCreateInfoKHR
15384 {
15385 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() )
15386 : sType( StructureType::eSwapchainCreateInfoKHR )
15387 , pNext( nullptr )
15388 , flags( flags_ )
15389 , surface( surface_ )
15390 , minImageCount( minImageCount_ )
15391 , imageFormat( imageFormat_ )
15392 , imageColorSpace( imageColorSpace_ )
15393 , imageExtent( imageExtent_ )
15394 , imageArrayLayers( imageArrayLayers_ )
15395 , imageUsage( imageUsage_ )
15396 , imageSharingMode( imageSharingMode_ )
15397 , queueFamilyIndexCount( queueFamilyIndexCount_ )
15398 , pQueueFamilyIndices( pQueueFamilyIndices_ )
15399 , preTransform( preTransform_ )
15400 , compositeAlpha( compositeAlpha_ )
15401 , presentMode( presentMode_ )
15402 , clipped( clipped_ )
15403 , oldSwapchain( oldSwapchain_ )
15404 {
15405 }
15406
15407 SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs )
15408 {
15409 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15410 }
15411
15412 SwapchainCreateInfoKHR& operator=( VkSwapchainCreateInfoKHR const & rhs )
15413 {
15414 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15415 return *this;
15416 }
15417
15418 SwapchainCreateInfoKHR& setSType( StructureType sType_ )
15419 {
15420 sType = sType_;
15421 return *this;
15422 }
15423
15424 SwapchainCreateInfoKHR& setPNext( const void* pNext_ )
15425 {
15426 pNext = pNext_;
15427 return *this;
15428 }
15429
15430 SwapchainCreateInfoKHR& setFlags( SwapchainCreateFlagsKHR flags_ )
15431 {
15432 flags = flags_;
15433 return *this;
15434 }
15435
15436 SwapchainCreateInfoKHR& setSurface( SurfaceKHR surface_ )
15437 {
15438 surface = surface_;
15439 return *this;
15440 }
15441
15442 SwapchainCreateInfoKHR& setMinImageCount( uint32_t minImageCount_ )
15443 {
15444 minImageCount = minImageCount_;
15445 return *this;
15446 }
15447
15448 SwapchainCreateInfoKHR& setImageFormat( Format imageFormat_ )
15449 {
15450 imageFormat = imageFormat_;
15451 return *this;
15452 }
15453
15454 SwapchainCreateInfoKHR& setImageColorSpace( ColorSpaceKHR imageColorSpace_ )
15455 {
15456 imageColorSpace = imageColorSpace_;
15457 return *this;
15458 }
15459
15460 SwapchainCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
15461 {
15462 imageExtent = imageExtent_;
15463 return *this;
15464 }
15465
15466 SwapchainCreateInfoKHR& setImageArrayLayers( uint32_t imageArrayLayers_ )
15467 {
15468 imageArrayLayers = imageArrayLayers_;
15469 return *this;
15470 }
15471
15472 SwapchainCreateInfoKHR& setImageUsage( ImageUsageFlags imageUsage_ )
15473 {
15474 imageUsage = imageUsage_;
15475 return *this;
15476 }
15477
15478 SwapchainCreateInfoKHR& setImageSharingMode( SharingMode imageSharingMode_ )
15479 {
15480 imageSharingMode = imageSharingMode_;
15481 return *this;
15482 }
15483
15484 SwapchainCreateInfoKHR& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
15485 {
15486 queueFamilyIndexCount = queueFamilyIndexCount_;
15487 return *this;
15488 }
15489
15490 SwapchainCreateInfoKHR& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
15491 {
15492 pQueueFamilyIndices = pQueueFamilyIndices_;
15493 return *this;
15494 }
15495
15496 SwapchainCreateInfoKHR& setPreTransform( SurfaceTransformFlagBitsKHR preTransform_ )
15497 {
15498 preTransform = preTransform_;
15499 return *this;
15500 }
15501
15502 SwapchainCreateInfoKHR& setCompositeAlpha( CompositeAlphaFlagBitsKHR compositeAlpha_ )
15503 {
15504 compositeAlpha = compositeAlpha_;
15505 return *this;
15506 }
15507
15508 SwapchainCreateInfoKHR& setPresentMode( PresentModeKHR presentMode_ )
15509 {
15510 presentMode = presentMode_;
15511 return *this;
15512 }
15513
15514 SwapchainCreateInfoKHR& setClipped( Bool32 clipped_ )
15515 {
15516 clipped = clipped_;
15517 return *this;
15518 }
15519
15520 SwapchainCreateInfoKHR& setOldSwapchain( SwapchainKHR oldSwapchain_ )
15521 {
15522 oldSwapchain = oldSwapchain_;
15523 return *this;
15524 }
15525
15526 operator const VkSwapchainCreateInfoKHR&() const
15527 {
15528 return *reinterpret_cast<const VkSwapchainCreateInfoKHR*>(this);
15529 }
15530
15531 bool operator==( SwapchainCreateInfoKHR const& rhs ) const
15532 {
15533 return ( sType == rhs.sType )
15534 && ( pNext == rhs.pNext )
15535 && ( flags == rhs.flags )
15536 && ( surface == rhs.surface )
15537 && ( minImageCount == rhs.minImageCount )
15538 && ( imageFormat == rhs.imageFormat )
15539 && ( imageColorSpace == rhs.imageColorSpace )
15540 && ( imageExtent == rhs.imageExtent )
15541 && ( imageArrayLayers == rhs.imageArrayLayers )
15542 && ( imageUsage == rhs.imageUsage )
15543 && ( imageSharingMode == rhs.imageSharingMode )
15544 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
15545 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
15546 && ( preTransform == rhs.preTransform )
15547 && ( compositeAlpha == rhs.compositeAlpha )
15548 && ( presentMode == rhs.presentMode )
15549 && ( clipped == rhs.clipped )
15550 && ( oldSwapchain == rhs.oldSwapchain );
15551 }
15552
15553 bool operator!=( SwapchainCreateInfoKHR const& rhs ) const
15554 {
15555 return !operator==( rhs );
15556 }
15557
15558 private:
15559 StructureType sType;
15560
15561 public:
15562 const void* pNext;
15563 SwapchainCreateFlagsKHR flags;
15564 SurfaceKHR surface;
15565 uint32_t minImageCount;
15566 Format imageFormat;
15567 ColorSpaceKHR imageColorSpace;
15568 Extent2D imageExtent;
15569 uint32_t imageArrayLayers;
15570 ImageUsageFlags imageUsage;
15571 SharingMode imageSharingMode;
15572 uint32_t queueFamilyIndexCount;
15573 const uint32_t* pQueueFamilyIndices;
15574 SurfaceTransformFlagBitsKHR preTransform;
15575 CompositeAlphaFlagBitsKHR compositeAlpha;
15576 PresentModeKHR presentMode;
15577 Bool32 clipped;
15578 SwapchainKHR oldSwapchain;
15579 };
15580 static_assert( sizeof( SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ), "struct and wrapper have different size!" );
15581
15582 enum class DebugReportFlagBitsEXT
15583 {
15584 eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT,
15585 eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT,
15586 ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
15587 eError = VK_DEBUG_REPORT_ERROR_BIT_EXT,
15588 eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT
15589 };
15590
15591 using DebugReportFlagsEXT = Flags<DebugReportFlagBitsEXT, VkDebugReportFlagsEXT>;
15592
15593 inline DebugReportFlagsEXT operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 )
15594 {
15595 return DebugReportFlagsEXT( bit0 ) | bit1;
15596 }
15597
15598 struct DebugReportCallbackCreateInfoEXT
15599 {
15600 DebugReportCallbackCreateInfoEXT( DebugReportFlagsEXT flags_ = DebugReportFlagsEXT(), PFN_vkDebugReportCallbackEXT pfnCallback_ = nullptr, void* pUserData_ = nullptr )
15601 : sType( StructureType::eDebugReportCallbackCreateInfoEXT )
15602 , pNext( nullptr )
15603 , flags( flags_ )
15604 , pfnCallback( pfnCallback_ )
15605 , pUserData( pUserData_ )
15606 {
15607 }
15608
15609 DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs )
15610 {
15611 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15612 }
15613
15614 DebugReportCallbackCreateInfoEXT& operator=( VkDebugReportCallbackCreateInfoEXT const & rhs )
15615 {
15616 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15617 return *this;
15618 }
15619
15620 DebugReportCallbackCreateInfoEXT& setSType( StructureType sType_ )
15621 {
15622 sType = sType_;
15623 return *this;
15624 }
15625
15626 DebugReportCallbackCreateInfoEXT& setPNext( const void* pNext_ )
15627 {
15628 pNext = pNext_;
15629 return *this;
15630 }
15631
15632 DebugReportCallbackCreateInfoEXT& setFlags( DebugReportFlagsEXT flags_ )
15633 {
15634 flags = flags_;
15635 return *this;
15636 }
15637
15638 DebugReportCallbackCreateInfoEXT& setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ )
15639 {
15640 pfnCallback = pfnCallback_;
15641 return *this;
15642 }
15643
15644 DebugReportCallbackCreateInfoEXT& setPUserData( void* pUserData_ )
15645 {
15646 pUserData = pUserData_;
15647 return *this;
15648 }
15649
15650 operator const VkDebugReportCallbackCreateInfoEXT&() const
15651 {
15652 return *reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(this);
15653 }
15654
15655 bool operator==( DebugReportCallbackCreateInfoEXT const& rhs ) const
15656 {
15657 return ( sType == rhs.sType )
15658 && ( pNext == rhs.pNext )
15659 && ( flags == rhs.flags )
15660 && ( pfnCallback == rhs.pfnCallback )
15661 && ( pUserData == rhs.pUserData );
15662 }
15663
15664 bool operator!=( DebugReportCallbackCreateInfoEXT const& rhs ) const
15665 {
15666 return !operator==( rhs );
15667 }
15668
15669 private:
15670 StructureType sType;
15671
15672 public:
15673 const void* pNext;
15674 DebugReportFlagsEXT flags;
15675 PFN_vkDebugReportCallbackEXT pfnCallback;
15676 void* pUserData;
15677 };
15678 static_assert( sizeof( DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ), "struct and wrapper have different size!" );
15679
15680 enum class DebugReportObjectTypeEXT
15681 {
15682 eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
15683 eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
15684 ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
15685 eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
15686 eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
15687 eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
15688 eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
15689 eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
15690 eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
15691 eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
15692 eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
15693 eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
15694 eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
15695 eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
15696 eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
15697 eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
15698 ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
15699 ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
15700 eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
15701 ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
15702 eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
15703 eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
15704 eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
15705 eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
15706 eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
15707 eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
15708 eSurfaceKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
15709 eSwapchainKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
15710 eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT
15711 };
15712
15713 struct DebugMarkerObjectNameInfoEXT
15714 {
15715 DebugMarkerObjectNameInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, const char* pObjectName_ = nullptr )
15716 : sType( StructureType::eDebugMarkerObjectNameInfoEXT )
15717 , pNext( nullptr )
15718 , objectType( objectType_ )
15719 , object( object_ )
15720 , pObjectName( pObjectName_ )
15721 {
15722 }
15723
15724 DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs )
15725 {
15726 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15727 }
15728
15729 DebugMarkerObjectNameInfoEXT& operator=( VkDebugMarkerObjectNameInfoEXT const & rhs )
15730 {
15731 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15732 return *this;
15733 }
15734
15735 DebugMarkerObjectNameInfoEXT& setSType( StructureType sType_ )
15736 {
15737 sType = sType_;
15738 return *this;
15739 }
15740
15741 DebugMarkerObjectNameInfoEXT& setPNext( const void* pNext_ )
15742 {
15743 pNext = pNext_;
15744 return *this;
15745 }
15746
15747 DebugMarkerObjectNameInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15748 {
15749 objectType = objectType_;
15750 return *this;
15751 }
15752
15753 DebugMarkerObjectNameInfoEXT& setObject( uint64_t object_ )
15754 {
15755 object = object_;
15756 return *this;
15757 }
15758
15759 DebugMarkerObjectNameInfoEXT& setPObjectName( const char* pObjectName_ )
15760 {
15761 pObjectName = pObjectName_;
15762 return *this;
15763 }
15764
15765 operator const VkDebugMarkerObjectNameInfoEXT&() const
15766 {
15767 return *reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>(this);
15768 }
15769
15770 bool operator==( DebugMarkerObjectNameInfoEXT const& rhs ) const
15771 {
15772 return ( sType == rhs.sType )
15773 && ( pNext == rhs.pNext )
15774 && ( objectType == rhs.objectType )
15775 && ( object == rhs.object )
15776 && ( pObjectName == rhs.pObjectName );
15777 }
15778
15779 bool operator!=( DebugMarkerObjectNameInfoEXT const& rhs ) const
15780 {
15781 return !operator==( rhs );
15782 }
15783
15784 private:
15785 StructureType sType;
15786
15787 public:
15788 const void* pNext;
15789 DebugReportObjectTypeEXT objectType;
15790 uint64_t object;
15791 const char* pObjectName;
15792 };
15793 static_assert( sizeof( DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ), "struct and wrapper have different size!" );
15794
15795 struct DebugMarkerObjectTagInfoEXT
15796 {
15797 DebugMarkerObjectTagInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, uint64_t tagName_ = 0, size_t tagSize_ = 0, const void* pTag_ = nullptr )
15798 : sType( StructureType::eDebugMarkerObjectTagInfoEXT )
15799 , pNext( nullptr )
15800 , objectType( objectType_ )
15801 , object( object_ )
15802 , tagName( tagName_ )
15803 , tagSize( tagSize_ )
15804 , pTag( pTag_ )
15805 {
15806 }
15807
15808 DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs )
15809 {
15810 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15811 }
15812
15813 DebugMarkerObjectTagInfoEXT& operator=( VkDebugMarkerObjectTagInfoEXT const & rhs )
15814 {
15815 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15816 return *this;
15817 }
15818
15819 DebugMarkerObjectTagInfoEXT& setSType( StructureType sType_ )
15820 {
15821 sType = sType_;
15822 return *this;
15823 }
15824
15825 DebugMarkerObjectTagInfoEXT& setPNext( const void* pNext_ )
15826 {
15827 pNext = pNext_;
15828 return *this;
15829 }
15830
15831 DebugMarkerObjectTagInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15832 {
15833 objectType = objectType_;
15834 return *this;
15835 }
15836
15837 DebugMarkerObjectTagInfoEXT& setObject( uint64_t object_ )
15838 {
15839 object = object_;
15840 return *this;
15841 }
15842
15843 DebugMarkerObjectTagInfoEXT& setTagName( uint64_t tagName_ )
15844 {
15845 tagName = tagName_;
15846 return *this;
15847 }
15848
15849 DebugMarkerObjectTagInfoEXT& setTagSize( size_t tagSize_ )
15850 {
15851 tagSize = tagSize_;
15852 return *this;
15853 }
15854
15855 DebugMarkerObjectTagInfoEXT& setPTag( const void* pTag_ )
15856 {
15857 pTag = pTag_;
15858 return *this;
15859 }
15860
15861 operator const VkDebugMarkerObjectTagInfoEXT&() const
15862 {
15863 return *reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>(this);
15864 }
15865
15866 bool operator==( DebugMarkerObjectTagInfoEXT const& rhs ) const
15867 {
15868 return ( sType == rhs.sType )
15869 && ( pNext == rhs.pNext )
15870 && ( objectType == rhs.objectType )
15871 && ( object == rhs.object )
15872 && ( tagName == rhs.tagName )
15873 && ( tagSize == rhs.tagSize )
15874 && ( pTag == rhs.pTag );
15875 }
15876
15877 bool operator!=( DebugMarkerObjectTagInfoEXT const& rhs ) const
15878 {
15879 return !operator==( rhs );
15880 }
15881
15882 private:
15883 StructureType sType;
15884
15885 public:
15886 const void* pNext;
15887 DebugReportObjectTypeEXT objectType;
15888 uint64_t object;
15889 uint64_t tagName;
15890 size_t tagSize;
15891 const void* pTag;
15892 };
15893 static_assert( sizeof( DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ), "struct and wrapper have different size!" );
15894
Lenny Komow6501c122016-08-31 15:03:49 -060015895 enum class DebugReportErrorEXT
15896 {
15897 eNone = VK_DEBUG_REPORT_ERROR_NONE_EXT,
15898 eCallbackRef = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT
15899 };
15900
15901 enum class RasterizationOrderAMD
15902 {
15903 eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD,
15904 eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD
15905 };
15906
15907 struct PipelineRasterizationStateRasterizationOrderAMD
15908 {
15909 PipelineRasterizationStateRasterizationOrderAMD( RasterizationOrderAMD rasterizationOrder_ = RasterizationOrderAMD::eStrict )
15910 : sType( StructureType::ePipelineRasterizationStateRasterizationOrderAMD )
15911 , pNext( nullptr )
15912 , rasterizationOrder( rasterizationOrder_ )
15913 {
15914 }
15915
15916 PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15917 {
15918 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15919 }
15920
15921 PipelineRasterizationStateRasterizationOrderAMD& operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15922 {
15923 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15924 return *this;
15925 }
15926
15927 PipelineRasterizationStateRasterizationOrderAMD& setSType( StructureType sType_ )
15928 {
15929 sType = sType_;
15930 return *this;
15931 }
15932
15933 PipelineRasterizationStateRasterizationOrderAMD& setPNext( const void* pNext_ )
15934 {
15935 pNext = pNext_;
15936 return *this;
15937 }
15938
15939 PipelineRasterizationStateRasterizationOrderAMD& setRasterizationOrder( RasterizationOrderAMD rasterizationOrder_ )
15940 {
15941 rasterizationOrder = rasterizationOrder_;
15942 return *this;
15943 }
15944
15945 operator const VkPipelineRasterizationStateRasterizationOrderAMD&() const
15946 {
15947 return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(this);
15948 }
15949
15950 bool operator==( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15951 {
15952 return ( sType == rhs.sType )
15953 && ( pNext == rhs.pNext )
15954 && ( rasterizationOrder == rhs.rasterizationOrder );
15955 }
15956
15957 bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15958 {
15959 return !operator==( rhs );
15960 }
15961
15962 private:
15963 StructureType sType;
15964
15965 public:
15966 const void* pNext;
15967 RasterizationOrderAMD rasterizationOrder;
15968 };
15969 static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) == sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), "struct and wrapper have different size!" );
15970
15971 enum class ExternalMemoryHandleTypeFlagBitsNV
15972 {
15973 eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV,
15974 eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV,
15975 eD3D11Image = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV,
15976 eD3D11ImageKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
15977 };
15978
15979 using ExternalMemoryHandleTypeFlagsNV = Flags<ExternalMemoryHandleTypeFlagBitsNV, VkExternalMemoryHandleTypeFlagsNV>;
15980
15981 inline ExternalMemoryHandleTypeFlagsNV operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 )
15982 {
15983 return ExternalMemoryHandleTypeFlagsNV( bit0 ) | bit1;
15984 }
15985
Lenny Komowbed9b5c2016-08-11 11:23:15 -060015986 class Device
15987 {
15988 public:
15989 Device()
15990 : m_device(VK_NULL_HANDLE)
15991 {}
15992
15993#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
15994 Device(VkDevice device)
15995 : m_device(device)
15996 {}
15997
15998 Device& operator=(VkDevice device)
15999 {
16000 m_device = device;
16001 return *this;
16002 }
16003#endif
16004
Lenny Komowebf33162016-08-26 14:10:08 -060016005 bool operator==(Device const &rhs) const
16006 {
16007 return m_device == rhs.m_device;
16008 }
16009
16010 bool operator!=(Device const &rhs) const
16011 {
16012 return m_device != rhs.m_device;
16013 }
16014
16015 bool operator<(Device const &rhs) const
16016 {
16017 return m_device < rhs.m_device;
16018 }
16019
Lenny Komowbed9b5c2016-08-11 11:23:15 -060016020 PFN_vkVoidFunction getProcAddr( const char* pName ) const
16021 {
16022 return vkGetDeviceProcAddr( m_device, pName );
16023 }
16024
16025#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16026 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
16027 {
16028 return vkGetDeviceProcAddr( m_device, name.c_str() );
16029 }
16030#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16031
16032 void destroy( const AllocationCallbacks* pAllocator ) const
16033 {
16034 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16035 }
16036
16037#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16038 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
16039 {
16040 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16041 }
16042#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16043
16044 void getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue* pQueue ) const
16045 {
16046 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( pQueue ) );
16047 }
16048
16049#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16050 Queue getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const
16051 {
16052 Queue queue;
16053 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( &queue ) );
16054 return queue;
16055 }
16056#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16057
16058#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16059 Result waitIdle( ) const
16060 {
16061 return static_cast<Result>( vkDeviceWaitIdle( m_device ) );
16062 }
16063#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16064
16065#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16066 ResultValueType<void>::type waitIdle() const
16067 {
16068 Result result = static_cast<Result>( vkDeviceWaitIdle( m_device ) );
16069 return createResultValue( result, "vk::Device::waitIdle" );
16070 }
16071#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16072
16073 Result allocateMemory( const MemoryAllocateInfo* pAllocateInfo, const AllocationCallbacks* pAllocator, DeviceMemory* pMemory ) const
16074 {
16075 return static_cast<Result>( vkAllocateMemory( m_device, reinterpret_cast<const VkMemoryAllocateInfo*>( pAllocateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDeviceMemory*>( pMemory ) ) );
16076 }
16077
16078#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16079 ResultValueType<DeviceMemory>::type allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16080 {
16081 DeviceMemory memory;
16082 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 ) ) );
16083 return createResultValue( result, memory, "vk::Device::allocateMemory" );
16084 }
16085#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16086
16087 void freeMemory( DeviceMemory memory, const AllocationCallbacks* pAllocator ) const
16088 {
16089 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16090 }
16091
16092#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16093 void freeMemory( DeviceMemory memory, Optional<const AllocationCallbacks> allocator = nullptr ) const
16094 {
16095 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16096 }
16097#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16098
16099#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16100 Result mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void** ppData ) const
16101 {
16102 return static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), ppData ) );
16103 }
16104#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16105
16106#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16107 ResultValueType<void*>::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags = MemoryMapFlags() ) const
16108 {
16109 void* pData;
16110 Result result = static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), &pData ) );
16111 return createResultValue( result, pData, "vk::Device::mapMemory" );
16112 }
16113#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16114
16115#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16116 void unmapMemory( DeviceMemory memory ) const
16117 {
16118 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
16119 }
16120#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16121
16122#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16123 void unmapMemory( DeviceMemory memory ) const
16124 {
16125 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
16126 }
16127#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16128
16129 Result flushMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
16130 {
16131 return static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
16132 }
16133
16134#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16135 ResultValueType<void>::type flushMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
16136 {
16137 Result result = static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
16138 return createResultValue( result, "vk::Device::flushMappedMemoryRanges" );
16139 }
16140#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16141
16142 Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
16143 {
16144 return static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
16145 }
16146
16147#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16148 ResultValueType<void>::type invalidateMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
16149 {
16150 Result result = static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
16151 return createResultValue( result, "vk::Device::invalidateMappedMemoryRanges" );
16152 }
16153#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16154
16155 void getMemoryCommitment( DeviceMemory memory, DeviceSize* pCommittedMemoryInBytes ) const
16156 {
16157 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), pCommittedMemoryInBytes );
16158 }
16159
16160#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16161 DeviceSize getMemoryCommitment( DeviceMemory memory ) const
16162 {
16163 DeviceSize committedMemoryInBytes;
16164 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), &committedMemoryInBytes );
16165 return committedMemoryInBytes;
16166 }
16167#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16168
16169 void getBufferMemoryRequirements( Buffer buffer, MemoryRequirements* pMemoryRequirements ) const
16170 {
16171 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
16172 }
16173
16174#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16175 MemoryRequirements getBufferMemoryRequirements( Buffer buffer ) const
16176 {
16177 MemoryRequirements memoryRequirements;
16178 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
16179 return memoryRequirements;
16180 }
16181#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16182
16183#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16184 Result bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
16185 {
16186 return static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16187 }
16188#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16189
16190#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16191 ResultValueType<void>::type bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
16192 {
16193 Result result = static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16194 return createResultValue( result, "vk::Device::bindBufferMemory" );
16195 }
16196#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16197
16198 void getImageMemoryRequirements( Image image, MemoryRequirements* pMemoryRequirements ) const
16199 {
16200 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
16201 }
16202
16203#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16204 MemoryRequirements getImageMemoryRequirements( Image image ) const
16205 {
16206 MemoryRequirements memoryRequirements;
16207 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
16208 return memoryRequirements;
16209 }
16210#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16211
16212#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16213 Result bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
16214 {
16215 return static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16216 }
16217#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16218
16219#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16220 ResultValueType<void>::type bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
16221 {
16222 Result result = static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16223 return createResultValue( result, "vk::Device::bindImageMemory" );
16224 }
16225#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16226
16227 void getImageSparseMemoryRequirements( Image image, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements* pSparseMemoryRequirements ) const
16228 {
16229 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), pSparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( pSparseMemoryRequirements ) );
16230 }
16231
16232#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16233 template <typename Allocator = std::allocator<SparseImageMemoryRequirements>>
16234 std::vector<SparseImageMemoryRequirements,Allocator> getImageSparseMemoryRequirements( Image image ) const
16235 {
16236 std::vector<SparseImageMemoryRequirements,Allocator> sparseMemoryRequirements;
16237 uint32_t sparseMemoryRequirementCount;
16238 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, nullptr );
16239 sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
16240 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( sparseMemoryRequirements.data() ) );
16241 return sparseMemoryRequirements;
16242 }
16243#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16244
16245 Result createFence( const FenceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
16246 {
16247 return static_cast<Result>( vkCreateFence( m_device, reinterpret_cast<const VkFenceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
16248 }
16249
16250#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16251 ResultValueType<Fence>::type createFence( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16252 {
16253 Fence fence;
16254 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 ) ) );
16255 return createResultValue( result, fence, "vk::Device::createFence" );
16256 }
16257#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16258
16259 void destroyFence( Fence fence, const AllocationCallbacks* pAllocator ) const
16260 {
16261 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16262 }
16263
16264#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16265 void destroyFence( Fence fence, Optional<const AllocationCallbacks> allocator = nullptr ) const
16266 {
16267 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16268 }
16269#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16270
16271 Result resetFences( uint32_t fenceCount, const Fence* pFences ) const
16272 {
16273 return static_cast<Result>( vkResetFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ) ) );
16274 }
16275
16276#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16277 ResultValueType<void>::type resetFences( ArrayProxy<const Fence> fences ) const
16278 {
16279 Result result = static_cast<Result>( vkResetFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ) ) );
16280 return createResultValue( result, "vk::Device::resetFences" );
16281 }
16282#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16283
16284#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16285 Result getFenceStatus( Fence fence ) const
16286 {
16287 return static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
16288 }
16289#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16290
16291#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16292 Result getFenceStatus( Fence fence ) const
16293 {
16294 Result result = static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
16295 return createResultValue( result, "vk::Device::getFenceStatus", { Result::eSuccess, Result::eNotReady } );
16296 }
16297#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16298
16299 Result waitForFences( uint32_t fenceCount, const Fence* pFences, Bool32 waitAll, uint64_t timeout ) const
16300 {
16301 return static_cast<Result>( vkWaitForFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ), waitAll, timeout ) );
16302 }
16303
16304#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16305 Result waitForFences( ArrayProxy<const Fence> fences, Bool32 waitAll, uint64_t timeout ) const
16306 {
16307 Result result = static_cast<Result>( vkWaitForFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ), waitAll, timeout ) );
16308 return createResultValue( result, "vk::Device::waitForFences", { Result::eSuccess, Result::eTimeout } );
16309 }
16310#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16311
16312 Result createSemaphore( const SemaphoreCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Semaphore* pSemaphore ) const
16313 {
16314 return static_cast<Result>( vkCreateSemaphore( m_device, reinterpret_cast<const VkSemaphoreCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSemaphore*>( pSemaphore ) ) );
16315 }
16316
16317#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16318 ResultValueType<Semaphore>::type createSemaphore( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16319 {
16320 Semaphore semaphore;
16321 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 ) ) );
16322 return createResultValue( result, semaphore, "vk::Device::createSemaphore" );
16323 }
16324#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16325
16326 void destroySemaphore( Semaphore semaphore, const AllocationCallbacks* pAllocator ) const
16327 {
16328 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16329 }
16330
16331#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16332 void destroySemaphore( Semaphore semaphore, Optional<const AllocationCallbacks> allocator = nullptr ) const
16333 {
16334 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16335 }
16336#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16337
16338 Result createEvent( const EventCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Event* pEvent ) const
16339 {
16340 return static_cast<Result>( vkCreateEvent( m_device, reinterpret_cast<const VkEventCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkEvent*>( pEvent ) ) );
16341 }
16342
16343#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16344 ResultValueType<Event>::type createEvent( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16345 {
16346 Event event;
16347 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 ) ) );
16348 return createResultValue( result, event, "vk::Device::createEvent" );
16349 }
16350#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16351
16352 void destroyEvent( Event event, const AllocationCallbacks* pAllocator ) const
16353 {
16354 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16355 }
16356
16357#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16358 void destroyEvent( Event event, Optional<const AllocationCallbacks> allocator = nullptr ) const
16359 {
16360 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16361 }
16362#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16363
16364#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16365 Result getEventStatus( Event event ) const
16366 {
16367 return static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16368 }
16369#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16370
16371#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16372 Result getEventStatus( Event event ) const
16373 {
16374 Result result = static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16375 return createResultValue( result, "vk::Device::getEventStatus", { Result::eEventSet, Result::eEventReset } );
16376 }
16377#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16378
16379#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16380 Result setEvent( Event event ) const
16381 {
16382 return static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16383 }
16384#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16385
16386#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16387 ResultValueType<void>::type setEvent( Event event ) const
16388 {
16389 Result result = static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16390 return createResultValue( result, "vk::Device::setEvent" );
16391 }
16392#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16393
16394#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16395 Result resetEvent( Event event ) const
16396 {
16397 return static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16398 }
16399#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16400
16401#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16402 ResultValueType<void>::type resetEvent( Event event ) const
16403 {
16404 Result result = static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16405 return createResultValue( result, "vk::Device::resetEvent" );
16406 }
16407#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16408
16409 Result createQueryPool( const QueryPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, QueryPool* pQueryPool ) const
16410 {
16411 return static_cast<Result>( vkCreateQueryPool( m_device, reinterpret_cast<const VkQueryPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkQueryPool*>( pQueryPool ) ) );
16412 }
16413
16414#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16415 ResultValueType<QueryPool>::type createQueryPool( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16416 {
16417 QueryPool queryPool;
16418 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 ) ) );
16419 return createResultValue( result, queryPool, "vk::Device::createQueryPool" );
16420 }
16421#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16422
16423 void destroyQueryPool( QueryPool queryPool, const AllocationCallbacks* pAllocator ) const
16424 {
16425 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16426 }
16427
16428#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16429 void destroyQueryPool( QueryPool queryPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16430 {
16431 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16432 }
16433#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16434
16435 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, DeviceSize stride, QueryResultFlags flags ) const
16436 {
16437 return static_cast<Result>( vkGetQueryPoolResults( m_device, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, dataSize, pData, stride, static_cast<VkQueryResultFlags>( flags ) ) );
16438 }
16439
16440#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16441 template <typename T>
16442 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, ArrayProxy<T> data, DeviceSize stride, QueryResultFlags flags ) const
16443 {
16444 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 ) ) );
16445 return createResultValue( result, "vk::Device::getQueryPoolResults", { Result::eSuccess, Result::eNotReady } );
16446 }
16447#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16448
16449 Result createBuffer( const BufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Buffer* pBuffer ) const
16450 {
16451 return static_cast<Result>( vkCreateBuffer( m_device, reinterpret_cast<const VkBufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBuffer*>( pBuffer ) ) );
16452 }
16453
16454#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16455 ResultValueType<Buffer>::type createBuffer( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16456 {
16457 Buffer buffer;
16458 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 ) ) );
16459 return createResultValue( result, buffer, "vk::Device::createBuffer" );
16460 }
16461#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16462
16463 void destroyBuffer( Buffer buffer, const AllocationCallbacks* pAllocator ) const
16464 {
16465 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16466 }
16467
16468#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16469 void destroyBuffer( Buffer buffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16470 {
16471 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16472 }
16473#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16474
16475 Result createBufferView( const BufferViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, BufferView* pView ) const
16476 {
16477 return static_cast<Result>( vkCreateBufferView( m_device, reinterpret_cast<const VkBufferViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBufferView*>( pView ) ) );
16478 }
16479
16480#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16481 ResultValueType<BufferView>::type createBufferView( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16482 {
16483 BufferView view;
16484 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 ) ) );
16485 return createResultValue( result, view, "vk::Device::createBufferView" );
16486 }
16487#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16488
16489 void destroyBufferView( BufferView bufferView, const AllocationCallbacks* pAllocator ) const
16490 {
16491 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16492 }
16493
16494#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16495 void destroyBufferView( BufferView bufferView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16496 {
16497 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16498 }
16499#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16500
16501 Result createImage( const ImageCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Image* pImage ) const
16502 {
16503 return static_cast<Result>( vkCreateImage( m_device, reinterpret_cast<const VkImageCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImage*>( pImage ) ) );
16504 }
16505
16506#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16507 ResultValueType<Image>::type createImage( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16508 {
16509 Image image;
16510 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 ) ) );
16511 return createResultValue( result, image, "vk::Device::createImage" );
16512 }
16513#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16514
16515 void destroyImage( Image image, const AllocationCallbacks* pAllocator ) const
16516 {
16517 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16518 }
16519
16520#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16521 void destroyImage( Image image, Optional<const AllocationCallbacks> allocator = nullptr ) const
16522 {
16523 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16524 }
16525#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16526
16527 void getImageSubresourceLayout( Image image, const ImageSubresource* pSubresource, SubresourceLayout* pLayout ) const
16528 {
16529 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( pSubresource ), reinterpret_cast<VkSubresourceLayout*>( pLayout ) );
16530 }
16531
16532#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16533 SubresourceLayout getImageSubresourceLayout( Image image, const ImageSubresource & subresource ) const
16534 {
16535 SubresourceLayout layout;
16536 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( &subresource ), reinterpret_cast<VkSubresourceLayout*>( &layout ) );
16537 return layout;
16538 }
16539#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16540
16541 Result createImageView( const ImageViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ImageView* pView ) const
16542 {
16543 return static_cast<Result>( vkCreateImageView( m_device, reinterpret_cast<const VkImageViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImageView*>( pView ) ) );
16544 }
16545
16546#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16547 ResultValueType<ImageView>::type createImageView( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16548 {
16549 ImageView view;
16550 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 ) ) );
16551 return createResultValue( result, view, "vk::Device::createImageView" );
16552 }
16553#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16554
16555 void destroyImageView( ImageView imageView, const AllocationCallbacks* pAllocator ) const
16556 {
16557 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16558 }
16559
16560#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16561 void destroyImageView( ImageView imageView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16562 {
16563 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16564 }
16565#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16566
16567 Result createShaderModule( const ShaderModuleCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ShaderModule* pShaderModule ) const
16568 {
16569 return static_cast<Result>( vkCreateShaderModule( m_device, reinterpret_cast<const VkShaderModuleCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkShaderModule*>( pShaderModule ) ) );
16570 }
16571
16572#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16573 ResultValueType<ShaderModule>::type createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16574 {
16575 ShaderModule shaderModule;
16576 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 ) ) );
16577 return createResultValue( result, shaderModule, "vk::Device::createShaderModule" );
16578 }
16579#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16580
16581 void destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks* pAllocator ) const
16582 {
16583 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16584 }
16585
16586#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16587 void destroyShaderModule( ShaderModule shaderModule, Optional<const AllocationCallbacks> allocator = nullptr ) const
16588 {
16589 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16590 }
16591#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16592
16593 Result createPipelineCache( const PipelineCacheCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineCache* pPipelineCache ) const
16594 {
16595 return static_cast<Result>( vkCreatePipelineCache( m_device, reinterpret_cast<const VkPipelineCacheCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineCache*>( pPipelineCache ) ) );
16596 }
16597
16598#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16599 ResultValueType<PipelineCache>::type createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16600 {
16601 PipelineCache pipelineCache;
16602 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 ) ) );
16603 return createResultValue( result, pipelineCache, "vk::Device::createPipelineCache" );
16604 }
16605#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16606
16607 void destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks* pAllocator ) const
16608 {
16609 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16610 }
16611
16612#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16613 void destroyPipelineCache( PipelineCache pipelineCache, Optional<const AllocationCallbacks> allocator = nullptr ) const
16614 {
16615 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16616 }
16617#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16618
16619 Result getPipelineCacheData( PipelineCache pipelineCache, size_t* pDataSize, void* pData ) const
16620 {
16621 return static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), pDataSize, pData ) );
16622 }
16623
16624#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16625 template <typename Allocator = std::allocator<uint8_t>>
16626 typename ResultValueType<std::vector<uint8_t,Allocator>>::type getPipelineCacheData( PipelineCache pipelineCache ) const
16627 {
16628 std::vector<uint8_t,Allocator> data;
16629 size_t dataSize;
16630 Result result;
16631 do
16632 {
16633 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, nullptr ) );
16634 if ( ( result == Result::eSuccess ) && dataSize )
16635 {
16636 data.resize( dataSize );
16637 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, reinterpret_cast<void*>( data.data() ) ) );
16638 }
16639 } while ( result == Result::eIncomplete );
16640 assert( dataSize <= data.size() );
16641 data.resize( dataSize );
16642 return createResultValue( result, data, "vk::Device::getPipelineCacheData" );
16643 }
16644#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16645
16646 Result mergePipelineCaches( PipelineCache dstCache, uint32_t srcCacheCount, const PipelineCache* pSrcCaches ) const
16647 {
16648 return static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCacheCount, reinterpret_cast<const VkPipelineCache*>( pSrcCaches ) ) );
16649 }
16650
16651#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16652 ResultValueType<void>::type mergePipelineCaches( PipelineCache dstCache, ArrayProxy<const PipelineCache> srcCaches ) const
16653 {
16654 Result result = static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCaches.size() , reinterpret_cast<const VkPipelineCache*>( srcCaches.data() ) ) );
16655 return createResultValue( result, "vk::Device::mergePipelineCaches" );
16656 }
16657#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16658
16659 Result createGraphicsPipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const GraphicsPipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16660 {
16661 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 ) ) );
16662 }
16663
16664#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16665 template <typename Allocator = std::allocator<Pipeline>>
16666 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createGraphicsPipelines( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16667 {
16668 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16669 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() ) ) );
16670 return createResultValue( result, pipelines, "vk::Device::createGraphicsPipelines" );
16671 }
16672
16673 ResultValueType<Pipeline>::type createGraphicsPipeline( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16674 {
16675 Pipeline pipeline;
16676 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 ) ) );
16677 return createResultValue( result, pipeline, "vk::Device::createGraphicsPipeline" );
16678 }
16679#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16680
16681 Result createComputePipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const ComputePipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16682 {
16683 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 ) ) );
16684 }
16685
16686#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16687 template <typename Allocator = std::allocator<Pipeline>>
16688 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createComputePipelines( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16689 {
16690 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16691 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() ) ) );
16692 return createResultValue( result, pipelines, "vk::Device::createComputePipelines" );
16693 }
16694
16695 ResultValueType<Pipeline>::type createComputePipeline( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16696 {
16697 Pipeline pipeline;
16698 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 ) ) );
16699 return createResultValue( result, pipeline, "vk::Device::createComputePipeline" );
16700 }
16701#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16702
16703 void destroyPipeline( Pipeline pipeline, const AllocationCallbacks* pAllocator ) const
16704 {
16705 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16706 }
16707
16708#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16709 void destroyPipeline( Pipeline pipeline, Optional<const AllocationCallbacks> allocator = nullptr ) const
16710 {
16711 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16712 }
16713#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16714
16715 Result createPipelineLayout( const PipelineLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineLayout* pPipelineLayout ) const
16716 {
16717 return static_cast<Result>( vkCreatePipelineLayout( m_device, reinterpret_cast<const VkPipelineLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineLayout*>( pPipelineLayout ) ) );
16718 }
16719
16720#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16721 ResultValueType<PipelineLayout>::type createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16722 {
16723 PipelineLayout pipelineLayout;
16724 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 ) ) );
16725 return createResultValue( result, pipelineLayout, "vk::Device::createPipelineLayout" );
16726 }
16727#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16728
16729 void destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks* pAllocator ) const
16730 {
16731 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16732 }
16733
16734#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16735 void destroyPipelineLayout( PipelineLayout pipelineLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16736 {
16737 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16738 }
16739#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16740
16741 Result createSampler( const SamplerCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Sampler* pSampler ) const
16742 {
16743 return static_cast<Result>( vkCreateSampler( m_device, reinterpret_cast<const VkSamplerCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSampler*>( pSampler ) ) );
16744 }
16745
16746#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16747 ResultValueType<Sampler>::type createSampler( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16748 {
16749 Sampler sampler;
16750 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 ) ) );
16751 return createResultValue( result, sampler, "vk::Device::createSampler" );
16752 }
16753#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16754
16755 void destroySampler( Sampler sampler, const AllocationCallbacks* pAllocator ) const
16756 {
16757 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16758 }
16759
16760#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16761 void destroySampler( Sampler sampler, Optional<const AllocationCallbacks> allocator = nullptr ) const
16762 {
16763 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16764 }
16765#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16766
16767 Result createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorSetLayout* pSetLayout ) const
16768 {
16769 return static_cast<Result>( vkCreateDescriptorSetLayout( m_device, reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorSetLayout*>( pSetLayout ) ) );
16770 }
16771
16772#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16773 ResultValueType<DescriptorSetLayout>::type createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16774 {
16775 DescriptorSetLayout setLayout;
16776 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 ) ) );
16777 return createResultValue( result, setLayout, "vk::Device::createDescriptorSetLayout" );
16778 }
16779#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16780
16781 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks* pAllocator ) const
16782 {
16783 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16784 }
16785
16786#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16787 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16788 {
16789 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16790 }
16791#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16792
16793 Result createDescriptorPool( const DescriptorPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorPool* pDescriptorPool ) const
16794 {
16795 return static_cast<Result>( vkCreateDescriptorPool( m_device, reinterpret_cast<const VkDescriptorPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorPool*>( pDescriptorPool ) ) );
16796 }
16797
16798#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16799 ResultValueType<DescriptorPool>::type createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16800 {
16801 DescriptorPool descriptorPool;
16802 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 ) ) );
16803 return createResultValue( result, descriptorPool, "vk::Device::createDescriptorPool" );
16804 }
16805#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16806
16807 void destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks* pAllocator ) const
16808 {
16809 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16810 }
16811
16812#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16813 void destroyDescriptorPool( DescriptorPool descriptorPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16814 {
16815 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16816 }
16817#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16818
16819#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16820 Result resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const
16821 {
16822 return static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16823 }
16824#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16825
16826#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16827 ResultValueType<void>::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags = DescriptorPoolResetFlags() ) const
16828 {
16829 Result result = static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16830 return createResultValue( result, "vk::Device::resetDescriptorPool" );
16831 }
16832#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16833
16834 Result allocateDescriptorSets( const DescriptorSetAllocateInfo* pAllocateInfo, DescriptorSet* pDescriptorSets ) const
16835 {
16836 return static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkDescriptorSet*>( pDescriptorSets ) ) );
16837 }
16838
16839#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16840 template <typename Allocator = std::allocator<DescriptorSet>>
16841 typename ResultValueType<std::vector<DescriptorSet,Allocator>>::type allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo ) const
16842 {
16843 std::vector<DescriptorSet,Allocator> descriptorSets( allocateInfo.descriptorSetCount );
16844 Result result = static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkDescriptorSet*>( descriptorSets.data() ) ) );
16845 return createResultValue( result, descriptorSets, "vk::Device::allocateDescriptorSets" );
16846 }
16847#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16848
16849 Result freeDescriptorSets( DescriptorPool descriptorPool, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets ) const
16850 {
16851 return static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ) ) );
16852 }
16853
16854#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16855 ResultValueType<void>::type freeDescriptorSets( DescriptorPool descriptorPool, ArrayProxy<const DescriptorSet> descriptorSets ) const
16856 {
16857 Result result = static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ) ) );
16858 return createResultValue( result, "vk::Device::freeDescriptorSets" );
16859 }
16860#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16861
16862 void updateDescriptorSets( uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const CopyDescriptorSet* pDescriptorCopies ) const
16863 {
16864 vkUpdateDescriptorSets( m_device, descriptorWriteCount, reinterpret_cast<const VkWriteDescriptorSet*>( pDescriptorWrites ), descriptorCopyCount, reinterpret_cast<const VkCopyDescriptorSet*>( pDescriptorCopies ) );
16865 }
16866
16867#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16868 void updateDescriptorSets( ArrayProxy<const WriteDescriptorSet> descriptorWrites, ArrayProxy<const CopyDescriptorSet> descriptorCopies ) const
16869 {
16870 vkUpdateDescriptorSets( m_device, descriptorWrites.size() , reinterpret_cast<const VkWriteDescriptorSet*>( descriptorWrites.data() ), descriptorCopies.size() , reinterpret_cast<const VkCopyDescriptorSet*>( descriptorCopies.data() ) );
16871 }
16872#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16873
16874 Result createFramebuffer( const FramebufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Framebuffer* pFramebuffer ) const
16875 {
16876 return static_cast<Result>( vkCreateFramebuffer( m_device, reinterpret_cast<const VkFramebufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFramebuffer*>( pFramebuffer ) ) );
16877 }
16878
16879#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16880 ResultValueType<Framebuffer>::type createFramebuffer( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16881 {
16882 Framebuffer framebuffer;
16883 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 ) ) );
16884 return createResultValue( result, framebuffer, "vk::Device::createFramebuffer" );
16885 }
16886#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16887
16888 void destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks* pAllocator ) const
16889 {
16890 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16891 }
16892
16893#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16894 void destroyFramebuffer( Framebuffer framebuffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16895 {
16896 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16897 }
16898#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16899
16900 Result createRenderPass( const RenderPassCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, RenderPass* pRenderPass ) const
16901 {
16902 return static_cast<Result>( vkCreateRenderPass( m_device, reinterpret_cast<const VkRenderPassCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkRenderPass*>( pRenderPass ) ) );
16903 }
16904
16905#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16906 ResultValueType<RenderPass>::type createRenderPass( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16907 {
16908 RenderPass renderPass;
16909 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 ) ) );
16910 return createResultValue( result, renderPass, "vk::Device::createRenderPass" );
16911 }
16912#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16913
16914 void destroyRenderPass( RenderPass renderPass, const AllocationCallbacks* pAllocator ) const
16915 {
16916 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16917 }
16918
16919#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16920 void destroyRenderPass( RenderPass renderPass, Optional<const AllocationCallbacks> allocator = nullptr ) const
16921 {
16922 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16923 }
16924#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16925
16926 void getRenderAreaGranularity( RenderPass renderPass, Extent2D* pGranularity ) const
16927 {
16928 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( pGranularity ) );
16929 }
16930
16931#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16932 Extent2D getRenderAreaGranularity( RenderPass renderPass ) const
16933 {
16934 Extent2D granularity;
16935 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( &granularity ) );
16936 return granularity;
16937 }
16938#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16939
16940 Result createCommandPool( const CommandPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, CommandPool* pCommandPool ) const
16941 {
16942 return static_cast<Result>( vkCreateCommandPool( m_device, reinterpret_cast<const VkCommandPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkCommandPool*>( pCommandPool ) ) );
16943 }
16944
16945#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16946 ResultValueType<CommandPool>::type createCommandPool( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16947 {
16948 CommandPool commandPool;
16949 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 ) ) );
16950 return createResultValue( result, commandPool, "vk::Device::createCommandPool" );
16951 }
16952#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16953
16954 void destroyCommandPool( CommandPool commandPool, const AllocationCallbacks* pAllocator ) const
16955 {
16956 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16957 }
16958
16959#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16960 void destroyCommandPool( CommandPool commandPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16961 {
16962 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16963 }
16964#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16965
16966#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16967 Result resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16968 {
16969 return static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16970 }
16971#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16972
16973#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16974 ResultValueType<void>::type resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16975 {
16976 Result result = static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16977 return createResultValue( result, "vk::Device::resetCommandPool" );
16978 }
16979#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16980
16981 Result allocateCommandBuffers( const CommandBufferAllocateInfo* pAllocateInfo, CommandBuffer* pCommandBuffers ) const
16982 {
16983 return static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkCommandBuffer*>( pCommandBuffers ) ) );
16984 }
16985
16986#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16987 template <typename Allocator = std::allocator<CommandBuffer>>
16988 typename ResultValueType<std::vector<CommandBuffer,Allocator>>::type allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo ) const
16989 {
16990 std::vector<CommandBuffer,Allocator> commandBuffers( allocateInfo.commandBufferCount );
16991 Result result = static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkCommandBuffer*>( commandBuffers.data() ) ) );
16992 return createResultValue( result, commandBuffers, "vk::Device::allocateCommandBuffers" );
16993 }
16994#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16995
16996 void freeCommandBuffers( CommandPool commandPool, uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
16997 {
16998 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
16999 }
17000
17001#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17002 void freeCommandBuffers( CommandPool commandPool, ArrayProxy<const CommandBuffer> commandBuffers ) const
17003 {
17004 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
17005 }
17006#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17007
17008 Result createSharedSwapchainsKHR( uint32_t swapchainCount, const SwapchainCreateInfoKHR* pCreateInfos, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchains ) const
17009 {
17010 return static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, swapchainCount, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchains ) ) );
17011 }
17012
17013#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17014 template <typename Allocator = std::allocator<SwapchainKHR>>
17015 typename ResultValueType<std::vector<SwapchainKHR,Allocator>>::type createSharedSwapchainsKHR( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
17016 {
17017 std::vector<SwapchainKHR,Allocator> swapchains( createInfos.size() );
17018 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() ) ) );
17019 return createResultValue( result, swapchains, "vk::Device::createSharedSwapchainsKHR" );
17020 }
17021
17022 ResultValueType<SwapchainKHR>::type createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17023 {
17024 SwapchainKHR swapchain;
17025 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 ) ) );
17026 return createResultValue( result, swapchain, "vk::Device::createSharedSwapchainKHR" );
17027 }
17028#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17029
17030 Result createSwapchainKHR( const SwapchainCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchain ) const
17031 {
17032 return static_cast<Result>( vkCreateSwapchainKHR( m_device, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchain ) ) );
17033 }
17034
17035#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17036 ResultValueType<SwapchainKHR>::type createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17037 {
17038 SwapchainKHR swapchain;
17039 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 ) ) );
17040 return createResultValue( result, swapchain, "vk::Device::createSwapchainKHR" );
17041 }
17042#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17043
17044 void destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks* pAllocator ) const
17045 {
17046 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17047 }
17048
17049#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17050 void destroySwapchainKHR( SwapchainKHR swapchain, Optional<const AllocationCallbacks> allocator = nullptr ) const
17051 {
17052 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17053 }
17054#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17055
17056 Result getSwapchainImagesKHR( SwapchainKHR swapchain, uint32_t* pSwapchainImageCount, Image* pSwapchainImages ) const
17057 {
17058 return static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), pSwapchainImageCount, reinterpret_cast<VkImage*>( pSwapchainImages ) ) );
17059 }
17060
17061#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17062 template <typename Allocator = std::allocator<Image>>
17063 typename ResultValueType<std::vector<Image,Allocator>>::type getSwapchainImagesKHR( SwapchainKHR swapchain ) const
17064 {
17065 std::vector<Image,Allocator> swapchainImages;
17066 uint32_t swapchainImageCount;
17067 Result result;
17068 do
17069 {
17070 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, nullptr ) );
17071 if ( ( result == Result::eSuccess ) && swapchainImageCount )
17072 {
17073 swapchainImages.resize( swapchainImageCount );
17074 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, reinterpret_cast<VkImage*>( swapchainImages.data() ) ) );
17075 }
17076 } while ( result == Result::eIncomplete );
17077 assert( swapchainImageCount <= swapchainImages.size() );
17078 swapchainImages.resize( swapchainImageCount );
17079 return createResultValue( result, swapchainImages, "vk::Device::getSwapchainImagesKHR" );
17080 }
17081#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17082
17083 Result acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t* pImageIndex ) const
17084 {
17085 return static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), pImageIndex ) );
17086 }
17087
17088#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17089 ResultValue<uint32_t> acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence ) const
17090 {
17091 uint32_t imageIndex;
17092 Result result = static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), &imageIndex ) );
17093 return createResultValue( result, imageIndex, "vk::Device::acquireNextImageKHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } );
17094 }
17095#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17096
17097 Result debugMarkerSetObjectNameEXT( DebugMarkerObjectNameInfoEXT* pNameInfo ) const
17098 {
17099 return static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( pNameInfo ) ) );
17100 }
17101
17102#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17103 ResultValueType<DebugMarkerObjectNameInfoEXT>::type debugMarkerSetObjectNameEXT() const
17104 {
17105 DebugMarkerObjectNameInfoEXT nameInfo;
17106 Result result = static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( &nameInfo ) ) );
17107 return createResultValue( result, nameInfo, "vk::Device::debugMarkerSetObjectNameEXT" );
17108 }
17109#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17110
17111 Result debugMarkerSetObjectTagEXT( DebugMarkerObjectTagInfoEXT* pTagInfo ) const
17112 {
17113 return static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( pTagInfo ) ) );
17114 }
17115
17116#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17117 ResultValueType<DebugMarkerObjectTagInfoEXT>::type debugMarkerSetObjectTagEXT() const
17118 {
17119 DebugMarkerObjectTagInfoEXT tagInfo;
17120 Result result = static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( &tagInfo ) ) );
17121 return createResultValue( result, tagInfo, "vk::Device::debugMarkerSetObjectTagEXT" );
17122 }
17123#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17124
Lenny Komow6501c122016-08-31 15:03:49 -060017125#ifdef VK_USE_PLATFORM_WIN32_KHR
17126 Result getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle ) const
17127 {
17128 return static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), pHandle ) );
17129 }
17130#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17131
17132#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17133#ifdef VK_USE_PLATFORM_WIN32_KHR
17134 ResultValueType<HANDLE>::type getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType ) const
17135 {
17136 HANDLE handle;
17137 Result result = static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), &handle ) );
17138 return createResultValue( result, handle, "vk::Device::getMemoryWin32HandleNV" );
17139 }
17140#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17141#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17142
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017143#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17144 explicit
17145#endif
17146 operator VkDevice() const
17147 {
17148 return m_device;
17149 }
17150
17151 explicit operator bool() const
17152 {
17153 return m_device != VK_NULL_HANDLE;
17154 }
17155
17156 bool operator!() const
17157 {
17158 return m_device == VK_NULL_HANDLE;
17159 }
17160
17161 private:
17162 VkDevice m_device;
17163 };
17164 static_assert( sizeof( Device ) == sizeof( VkDevice ), "handle and wrapper have different size!" );
17165
Lenny Komow6501c122016-08-31 15:03:49 -060017166 struct ExternalMemoryImageCreateInfoNV
17167 {
17168 ExternalMemoryImageCreateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17169 : sType( StructureType::eExternalMemoryImageCreateInfoNV )
17170 , pNext( nullptr )
17171 , handleTypes( handleTypes_ )
17172 {
17173 }
17174
17175 ExternalMemoryImageCreateInfoNV( VkExternalMemoryImageCreateInfoNV const & rhs )
17176 {
17177 memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
17178 }
17179
17180 ExternalMemoryImageCreateInfoNV& operator=( VkExternalMemoryImageCreateInfoNV const & rhs )
17181 {
17182 memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
17183 return *this;
17184 }
17185
17186 ExternalMemoryImageCreateInfoNV& setSType( StructureType sType_ )
17187 {
17188 sType = sType_;
17189 return *this;
17190 }
17191
17192 ExternalMemoryImageCreateInfoNV& setPNext( const void* pNext_ )
17193 {
17194 pNext = pNext_;
17195 return *this;
17196 }
17197
17198 ExternalMemoryImageCreateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
17199 {
17200 handleTypes = handleTypes_;
17201 return *this;
17202 }
17203
17204 operator const VkExternalMemoryImageCreateInfoNV&() const
17205 {
17206 return *reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(this);
17207 }
17208
17209 bool operator==( ExternalMemoryImageCreateInfoNV const& rhs ) const
17210 {
17211 return ( sType == rhs.sType )
17212 && ( pNext == rhs.pNext )
17213 && ( handleTypes == rhs.handleTypes );
17214 }
17215
17216 bool operator!=( ExternalMemoryImageCreateInfoNV const& rhs ) const
17217 {
17218 return !operator==( rhs );
17219 }
17220
17221 private:
17222 StructureType sType;
17223
17224 public:
17225 const void* pNext;
17226 ExternalMemoryHandleTypeFlagsNV handleTypes;
17227 };
17228 static_assert( sizeof( ExternalMemoryImageCreateInfoNV ) == sizeof( VkExternalMemoryImageCreateInfoNV ), "struct and wrapper have different size!" );
17229
17230 struct ExportMemoryAllocateInfoNV
17231 {
17232 ExportMemoryAllocateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17233 : sType( StructureType::eExportMemoryAllocateInfoNV )
17234 , pNext( nullptr )
17235 , handleTypes( handleTypes_ )
17236 {
17237 }
17238
17239 ExportMemoryAllocateInfoNV( VkExportMemoryAllocateInfoNV const & rhs )
17240 {
17241 memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
17242 }
17243
17244 ExportMemoryAllocateInfoNV& operator=( VkExportMemoryAllocateInfoNV const & rhs )
17245 {
17246 memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
17247 return *this;
17248 }
17249
17250 ExportMemoryAllocateInfoNV& setSType( StructureType sType_ )
17251 {
17252 sType = sType_;
17253 return *this;
17254 }
17255
17256 ExportMemoryAllocateInfoNV& setPNext( const void* pNext_ )
17257 {
17258 pNext = pNext_;
17259 return *this;
17260 }
17261
17262 ExportMemoryAllocateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
17263 {
17264 handleTypes = handleTypes_;
17265 return *this;
17266 }
17267
17268 operator const VkExportMemoryAllocateInfoNV&() const
17269 {
17270 return *reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(this);
17271 }
17272
17273 bool operator==( ExportMemoryAllocateInfoNV const& rhs ) const
17274 {
17275 return ( sType == rhs.sType )
17276 && ( pNext == rhs.pNext )
17277 && ( handleTypes == rhs.handleTypes );
17278 }
17279
17280 bool operator!=( ExportMemoryAllocateInfoNV const& rhs ) const
17281 {
17282 return !operator==( rhs );
17283 }
17284
17285 private:
17286 StructureType sType;
17287
17288 public:
17289 const void* pNext;
17290 ExternalMemoryHandleTypeFlagsNV handleTypes;
17291 };
17292 static_assert( sizeof( ExportMemoryAllocateInfoNV ) == sizeof( VkExportMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
17293
17294#ifdef VK_USE_PLATFORM_WIN32_KHR
17295 struct ImportMemoryWin32HandleInfoNV
17296 {
17297 ImportMemoryWin32HandleInfoNV( ExternalMemoryHandleTypeFlagsNV handleType_ = ExternalMemoryHandleTypeFlagsNV(), HANDLE handle_ = 0 )
17298 : sType( StructureType::eImportMemoryWin32HandleInfoNV )
17299 , pNext( nullptr )
17300 , handleType( handleType_ )
17301 , handle( handle_ )
17302 {
17303 }
17304
17305 ImportMemoryWin32HandleInfoNV( VkImportMemoryWin32HandleInfoNV const & rhs )
17306 {
17307 memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
17308 }
17309
17310 ImportMemoryWin32HandleInfoNV& operator=( VkImportMemoryWin32HandleInfoNV const & rhs )
17311 {
17312 memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
17313 return *this;
17314 }
17315
17316 ImportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
17317 {
17318 sType = sType_;
17319 return *this;
17320 }
17321
17322 ImportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
17323 {
17324 pNext = pNext_;
17325 return *this;
17326 }
17327
17328 ImportMemoryWin32HandleInfoNV& setHandleType( ExternalMemoryHandleTypeFlagsNV handleType_ )
17329 {
17330 handleType = handleType_;
17331 return *this;
17332 }
17333
17334 ImportMemoryWin32HandleInfoNV& setHandle( HANDLE handle_ )
17335 {
17336 handle = handle_;
17337 return *this;
17338 }
17339
17340 operator const VkImportMemoryWin32HandleInfoNV&() const
17341 {
17342 return *reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(this);
17343 }
17344
17345 bool operator==( ImportMemoryWin32HandleInfoNV const& rhs ) const
17346 {
17347 return ( sType == rhs.sType )
17348 && ( pNext == rhs.pNext )
17349 && ( handleType == rhs.handleType )
17350 && ( handle == rhs.handle );
17351 }
17352
17353 bool operator!=( ImportMemoryWin32HandleInfoNV const& rhs ) const
17354 {
17355 return !operator==( rhs );
17356 }
17357
17358 private:
17359 StructureType sType;
17360
17361 public:
17362 const void* pNext;
17363 ExternalMemoryHandleTypeFlagsNV handleType;
17364 HANDLE handle;
17365 };
17366 static_assert( sizeof( ImportMemoryWin32HandleInfoNV ) == sizeof( VkImportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
17367#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17368
17369 enum class ExternalMemoryFeatureFlagBitsNV
17370 {
17371 eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV,
17372 eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV,
17373 eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
17374 };
17375
17376 using ExternalMemoryFeatureFlagsNV = Flags<ExternalMemoryFeatureFlagBitsNV, VkExternalMemoryFeatureFlagsNV>;
17377
17378 inline ExternalMemoryFeatureFlagsNV operator|( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 )
17379 {
17380 return ExternalMemoryFeatureFlagsNV( bit0 ) | bit1;
17381 }
17382
17383 struct ExternalImageFormatPropertiesNV
17384 {
17385 ExternalImageFormatPropertiesNV( ImageFormatProperties imageFormatProperties_ = ImageFormatProperties(), ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ = ExternalMemoryFeatureFlagsNV(), ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ = ExternalMemoryHandleTypeFlagsNV(), ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17386 : imageFormatProperties( imageFormatProperties_ )
17387 , externalMemoryFeatures( externalMemoryFeatures_ )
17388 , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ )
17389 , compatibleHandleTypes( compatibleHandleTypes_ )
17390 {
17391 }
17392
17393 ExternalImageFormatPropertiesNV( VkExternalImageFormatPropertiesNV const & rhs )
17394 {
17395 memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17396 }
17397
17398 ExternalImageFormatPropertiesNV& operator=( VkExternalImageFormatPropertiesNV const & rhs )
17399 {
17400 memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17401 return *this;
17402 }
17403
17404 ExternalImageFormatPropertiesNV& setImageFormatProperties( ImageFormatProperties imageFormatProperties_ )
17405 {
17406 imageFormatProperties = imageFormatProperties_;
17407 return *this;
17408 }
17409
17410 ExternalImageFormatPropertiesNV& setExternalMemoryFeatures( ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ )
17411 {
17412 externalMemoryFeatures = externalMemoryFeatures_;
17413 return *this;
17414 }
17415
17416 ExternalImageFormatPropertiesNV& setExportFromImportedHandleTypes( ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ )
17417 {
17418 exportFromImportedHandleTypes = exportFromImportedHandleTypes_;
17419 return *this;
17420 }
17421
17422 ExternalImageFormatPropertiesNV& setCompatibleHandleTypes( ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ )
17423 {
17424 compatibleHandleTypes = compatibleHandleTypes_;
17425 return *this;
17426 }
17427
17428 operator const VkExternalImageFormatPropertiesNV&() const
17429 {
17430 return *reinterpret_cast<const VkExternalImageFormatPropertiesNV*>(this);
17431 }
17432
17433 bool operator==( ExternalImageFormatPropertiesNV const& rhs ) const
17434 {
17435 return ( imageFormatProperties == rhs.imageFormatProperties )
17436 && ( externalMemoryFeatures == rhs.externalMemoryFeatures )
17437 && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
17438 && ( compatibleHandleTypes == rhs.compatibleHandleTypes );
17439 }
17440
17441 bool operator!=( ExternalImageFormatPropertiesNV const& rhs ) const
17442 {
17443 return !operator==( rhs );
17444 }
17445
17446 ImageFormatProperties imageFormatProperties;
17447 ExternalMemoryFeatureFlagsNV externalMemoryFeatures;
17448 ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
17449 ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
17450 };
17451 static_assert( sizeof( ExternalImageFormatPropertiesNV ) == sizeof( VkExternalImageFormatPropertiesNV ), "struct and wrapper have different size!" );
17452
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017453 class PhysicalDevice
17454 {
17455 public:
17456 PhysicalDevice()
17457 : m_physicalDevice(VK_NULL_HANDLE)
17458 {}
17459
17460#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17461 PhysicalDevice(VkPhysicalDevice physicalDevice)
17462 : m_physicalDevice(physicalDevice)
17463 {}
17464
17465 PhysicalDevice& operator=(VkPhysicalDevice physicalDevice)
17466 {
17467 m_physicalDevice = physicalDevice;
17468 return *this;
17469 }
17470#endif
17471
Lenny Komowebf33162016-08-26 14:10:08 -060017472 bool operator==(PhysicalDevice const &rhs) const
17473 {
17474 return m_physicalDevice == rhs.m_physicalDevice;
17475 }
17476
17477 bool operator!=(PhysicalDevice const &rhs) const
17478 {
17479 return m_physicalDevice != rhs.m_physicalDevice;
17480 }
17481
17482 bool operator<(PhysicalDevice const &rhs) const
17483 {
17484 return m_physicalDevice < rhs.m_physicalDevice;
17485 }
17486
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017487 void getProperties( PhysicalDeviceProperties* pProperties ) const
17488 {
17489 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( pProperties ) );
17490 }
17491
17492#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17493 PhysicalDeviceProperties getProperties() const
17494 {
17495 PhysicalDeviceProperties properties;
17496 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( &properties ) );
17497 return properties;
17498 }
17499#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17500
17501 void getQueueFamilyProperties( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties* pQueueFamilyProperties ) const
17502 {
17503 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( pQueueFamilyProperties ) );
17504 }
17505
17506#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17507 template <typename Allocator = std::allocator<QueueFamilyProperties>>
17508 std::vector<QueueFamilyProperties,Allocator> getQueueFamilyProperties() const
17509 {
17510 std::vector<QueueFamilyProperties,Allocator> queueFamilyProperties;
17511 uint32_t queueFamilyPropertyCount;
17512 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr );
17513 queueFamilyProperties.resize( queueFamilyPropertyCount );
17514 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( queueFamilyProperties.data() ) );
17515 return queueFamilyProperties;
17516 }
17517#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17518
17519 void getMemoryProperties( PhysicalDeviceMemoryProperties* pMemoryProperties ) const
17520 {
17521 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( pMemoryProperties ) );
17522 }
17523
17524#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17525 PhysicalDeviceMemoryProperties getMemoryProperties() const
17526 {
17527 PhysicalDeviceMemoryProperties memoryProperties;
17528 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( &memoryProperties ) );
17529 return memoryProperties;
17530 }
17531#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17532
17533 void getFeatures( PhysicalDeviceFeatures* pFeatures ) const
17534 {
17535 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( pFeatures ) );
17536 }
17537
17538#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17539 PhysicalDeviceFeatures getFeatures() const
17540 {
17541 PhysicalDeviceFeatures features;
17542 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( &features ) );
17543 return features;
17544 }
17545#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17546
17547 void getFormatProperties( Format format, FormatProperties* pFormatProperties ) const
17548 {
17549 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( pFormatProperties ) );
17550 }
17551
17552#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17553 FormatProperties getFormatProperties( Format format ) const
17554 {
17555 FormatProperties formatProperties;
17556 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( &formatProperties ) );
17557 return formatProperties;
17558 }
17559#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17560
17561 Result getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ImageFormatProperties* pImageFormatProperties ) const
17562 {
17563 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 ) ) );
17564 }
17565
17566#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17567 ResultValueType<ImageFormatProperties>::type getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags ) const
17568 {
17569 ImageFormatProperties imageFormatProperties;
17570 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 ) ) );
17571 return createResultValue( result, imageFormatProperties, "vk::PhysicalDevice::getImageFormatProperties" );
17572 }
17573#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17574
17575 Result createDevice( const DeviceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Device* pDevice ) const
17576 {
17577 return static_cast<Result>( vkCreateDevice( m_physicalDevice, reinterpret_cast<const VkDeviceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDevice*>( pDevice ) ) );
17578 }
17579
17580#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17581 ResultValueType<Device>::type createDevice( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17582 {
17583 Device device;
17584 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 ) ) );
17585 return createResultValue( result, device, "vk::PhysicalDevice::createDevice" );
17586 }
17587#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17588
17589 Result enumerateDeviceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties ) const
17590 {
17591 return static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
17592 }
17593
17594#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17595 template <typename Allocator = std::allocator<LayerProperties>>
17596 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateDeviceLayerProperties() const
17597 {
17598 std::vector<LayerProperties,Allocator> properties;
17599 uint32_t propertyCount;
17600 Result result;
17601 do
17602 {
17603 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) );
17604 if ( ( result == Result::eSuccess ) && propertyCount )
17605 {
17606 properties.resize( propertyCount );
17607 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
17608 }
17609 } while ( result == Result::eIncomplete );
17610 assert( propertyCount <= properties.size() );
17611 properties.resize( propertyCount );
17612 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceLayerProperties" );
17613 }
17614#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17615
17616 Result enumerateDeviceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties ) const
17617 {
17618 return static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
17619 }
17620
17621#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17622 template <typename Allocator = std::allocator<ExtensionProperties>>
17623 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateDeviceExtensionProperties( Optional<const std::string> layerName = nullptr ) const
17624 {
17625 std::vector<ExtensionProperties,Allocator> properties;
17626 uint32_t propertyCount;
17627 Result result;
17628 do
17629 {
17630 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
17631 if ( ( result == Result::eSuccess ) && propertyCount )
17632 {
17633 properties.resize( propertyCount );
17634 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
17635 }
17636 } while ( result == Result::eIncomplete );
17637 assert( propertyCount <= properties.size() );
17638 properties.resize( propertyCount );
17639 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceExtensionProperties" );
17640 }
17641#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17642
17643 void getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, uint32_t* pPropertyCount, SparseImageFormatProperties* pProperties ) const
17644 {
17645 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 ) );
17646 }
17647
17648#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17649 template <typename Allocator = std::allocator<SparseImageFormatProperties>>
17650 std::vector<SparseImageFormatProperties,Allocator> getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling ) const
17651 {
17652 std::vector<SparseImageFormatProperties,Allocator> properties;
17653 uint32_t propertyCount;
17654 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 );
17655 properties.resize( propertyCount );
17656 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() ) );
17657 return properties;
17658 }
17659#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17660
17661 Result getDisplayPropertiesKHR( uint32_t* pPropertyCount, DisplayPropertiesKHR* pProperties ) const
17662 {
17663 return static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( pProperties ) ) );
17664 }
17665
17666#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17667 template <typename Allocator = std::allocator<DisplayPropertiesKHR>>
17668 typename ResultValueType<std::vector<DisplayPropertiesKHR,Allocator>>::type getDisplayPropertiesKHR() const
17669 {
17670 std::vector<DisplayPropertiesKHR,Allocator> properties;
17671 uint32_t propertyCount;
17672 Result result;
17673 do
17674 {
17675 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17676 if ( ( result == Result::eSuccess ) && propertyCount )
17677 {
17678 properties.resize( propertyCount );
17679 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( properties.data() ) ) );
17680 }
17681 } while ( result == Result::eIncomplete );
17682 assert( propertyCount <= properties.size() );
17683 properties.resize( propertyCount );
17684 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPropertiesKHR" );
17685 }
17686#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17687
17688 Result getDisplayPlanePropertiesKHR( uint32_t* pPropertyCount, DisplayPlanePropertiesKHR* pProperties ) const
17689 {
17690 return static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( pProperties ) ) );
17691 }
17692
17693#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17694 template <typename Allocator = std::allocator<DisplayPlanePropertiesKHR>>
17695 typename ResultValueType<std::vector<DisplayPlanePropertiesKHR,Allocator>>::type getDisplayPlanePropertiesKHR() const
17696 {
17697 std::vector<DisplayPlanePropertiesKHR,Allocator> properties;
17698 uint32_t propertyCount;
17699 Result result;
17700 do
17701 {
17702 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17703 if ( ( result == Result::eSuccess ) && propertyCount )
17704 {
17705 properties.resize( propertyCount );
17706 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( properties.data() ) ) );
17707 }
17708 } while ( result == Result::eIncomplete );
17709 assert( propertyCount <= properties.size() );
17710 properties.resize( propertyCount );
17711 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPlanePropertiesKHR" );
17712 }
17713#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17714
17715 Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, uint32_t* pDisplayCount, DisplayKHR* pDisplays ) const
17716 {
17717 return static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, pDisplayCount, reinterpret_cast<VkDisplayKHR*>( pDisplays ) ) );
17718 }
17719
17720#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17721 template <typename Allocator = std::allocator<DisplayKHR>>
17722 typename ResultValueType<std::vector<DisplayKHR,Allocator>>::type getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const
17723 {
17724 std::vector<DisplayKHR,Allocator> displays;
17725 uint32_t displayCount;
17726 Result result;
17727 do
17728 {
17729 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) );
17730 if ( ( result == Result::eSuccess ) && displayCount )
17731 {
17732 displays.resize( displayCount );
17733 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR*>( displays.data() ) ) );
17734 }
17735 } while ( result == Result::eIncomplete );
17736 assert( displayCount <= displays.size() );
17737 displays.resize( displayCount );
17738 return createResultValue( result, displays, "vk::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
17739 }
17740#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17741
17742 Result getDisplayModePropertiesKHR( DisplayKHR display, uint32_t* pPropertyCount, DisplayModePropertiesKHR* pProperties ) const
17743 {
17744 return static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), pPropertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( pProperties ) ) );
17745 }
17746
17747#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17748 template <typename Allocator = std::allocator<DisplayModePropertiesKHR>>
17749 typename ResultValueType<std::vector<DisplayModePropertiesKHR,Allocator>>::type getDisplayModePropertiesKHR( DisplayKHR display ) const
17750 {
17751 std::vector<DisplayModePropertiesKHR,Allocator> properties;
17752 uint32_t propertyCount;
17753 Result result;
17754 do
17755 {
17756 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, nullptr ) );
17757 if ( ( result == Result::eSuccess ) && propertyCount )
17758 {
17759 properties.resize( propertyCount );
17760 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( properties.data() ) ) );
17761 }
17762 } while ( result == Result::eIncomplete );
17763 assert( propertyCount <= properties.size() );
17764 properties.resize( propertyCount );
17765 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayModePropertiesKHR" );
17766 }
17767#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17768
17769 Result createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DisplayModeKHR* pMode ) const
17770 {
17771 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 ) ) );
17772 }
17773
17774#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17775 ResultValueType<DisplayModeKHR>::type createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17776 {
17777 DisplayModeKHR mode;
17778 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 ) ) );
17779 return createResultValue( result, mode, "vk::PhysicalDevice::createDisplayModeKHR" );
17780 }
17781#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17782
17783 Result getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, DisplayPlaneCapabilitiesKHR* pCapabilities ) const
17784 {
17785 return static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( pCapabilities ) ) );
17786 }
17787
17788#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17789 ResultValueType<DisplayPlaneCapabilitiesKHR>::type getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex ) const
17790 {
17791 DisplayPlaneCapabilitiesKHR capabilities;
17792 Result result = static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( &capabilities ) ) );
17793 return createResultValue( result, capabilities, "vk::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" );
17794 }
17795#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17796
17797#ifdef VK_USE_PLATFORM_MIR_KHR
17798 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection* connection ) const
17799 {
17800 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection );
17801 }
17802#endif /*VK_USE_PLATFORM_MIR_KHR*/
17803
17804#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17805#ifdef VK_USE_PLATFORM_MIR_KHR
17806 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection & connection ) const
17807 {
17808 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection );
17809 }
17810#endif /*VK_USE_PLATFORM_MIR_KHR*/
17811#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17812
17813 Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32* pSupported ) const
17814 {
17815 return static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), pSupported ) );
17816 }
17817
17818#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17819 ResultValueType<Bool32>::type getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface ) const
17820 {
17821 Bool32 supported;
17822 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), &supported ) );
17823 return createResultValue( result, supported, "vk::PhysicalDevice::getSurfaceSupportKHR" );
17824 }
17825#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17826
17827 Result getSurfaceCapabilitiesKHR( SurfaceKHR surface, SurfaceCapabilitiesKHR* pSurfaceCapabilities ) const
17828 {
17829 return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( pSurfaceCapabilities ) ) );
17830 }
17831
17832#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17833 ResultValueType<SurfaceCapabilitiesKHR>::type getSurfaceCapabilitiesKHR( SurfaceKHR surface ) const
17834 {
17835 SurfaceCapabilitiesKHR surfaceCapabilities;
17836 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( &surfaceCapabilities ) ) );
17837 return createResultValue( result, surfaceCapabilities, "vk::PhysicalDevice::getSurfaceCapabilitiesKHR" );
17838 }
17839#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17840
17841 Result getSurfaceFormatsKHR( SurfaceKHR surface, uint32_t* pSurfaceFormatCount, SurfaceFormatKHR* pSurfaceFormats ) const
17842 {
17843 return static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pSurfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( pSurfaceFormats ) ) );
17844 }
17845
17846#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17847 template <typename Allocator = std::allocator<SurfaceFormatKHR>>
17848 typename ResultValueType<std::vector<SurfaceFormatKHR,Allocator>>::type getSurfaceFormatsKHR( SurfaceKHR surface ) const
17849 {
17850 std::vector<SurfaceFormatKHR,Allocator> surfaceFormats;
17851 uint32_t surfaceFormatCount;
17852 Result result;
17853 do
17854 {
17855 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, nullptr ) );
17856 if ( ( result == Result::eSuccess ) && surfaceFormatCount )
17857 {
17858 surfaceFormats.resize( surfaceFormatCount );
17859 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( surfaceFormats.data() ) ) );
17860 }
17861 } while ( result == Result::eIncomplete );
17862 assert( surfaceFormatCount <= surfaceFormats.size() );
17863 surfaceFormats.resize( surfaceFormatCount );
17864 return createResultValue( result, surfaceFormats, "vk::PhysicalDevice::getSurfaceFormatsKHR" );
17865 }
17866#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17867
17868 Result getSurfacePresentModesKHR( SurfaceKHR surface, uint32_t* pPresentModeCount, PresentModeKHR* pPresentModes ) const
17869 {
17870 return static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pPresentModeCount, reinterpret_cast<VkPresentModeKHR*>( pPresentModes ) ) );
17871 }
17872
17873#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17874 template <typename Allocator = std::allocator<PresentModeKHR>>
17875 typename ResultValueType<std::vector<PresentModeKHR,Allocator>>::type getSurfacePresentModesKHR( SurfaceKHR surface ) const
17876 {
17877 std::vector<PresentModeKHR,Allocator> presentModes;
17878 uint32_t presentModeCount;
17879 Result result;
17880 do
17881 {
17882 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, nullptr ) );
17883 if ( ( result == Result::eSuccess ) && presentModeCount )
17884 {
17885 presentModes.resize( presentModeCount );
17886 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, reinterpret_cast<VkPresentModeKHR*>( presentModes.data() ) ) );
17887 }
17888 } while ( result == Result::eIncomplete );
17889 assert( presentModeCount <= presentModes.size() );
17890 presentModes.resize( presentModeCount );
17891 return createResultValue( result, presentModes, "vk::PhysicalDevice::getSurfacePresentModesKHR" );
17892 }
17893#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17894
17895#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17896 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display* display ) const
17897 {
17898 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, display );
17899 }
17900#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17901
17902#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17903#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17904 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const
17905 {
17906 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display );
17907 }
17908#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17909#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17910
17911#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
17912#ifdef VK_USE_PLATFORM_WIN32_KHR
17913 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
17914 {
17915 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
17916 }
17917#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17918#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17919
17920#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17921#ifdef VK_USE_PLATFORM_WIN32_KHR
17922 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
17923 {
17924 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
17925 }
17926#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17927#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17928
17929#ifdef VK_USE_PLATFORM_XLIB_KHR
17930 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID ) const
17931 {
17932 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, dpy, visualID );
17933 }
17934#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17935
17936#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17937#ifdef VK_USE_PLATFORM_XLIB_KHR
17938 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const
17939 {
17940 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID );
17941 }
17942#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17943#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17944
17945#ifdef VK_USE_PLATFORM_XCB_KHR
17946 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id ) const
17947 {
17948 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection, visual_id );
17949 }
17950#endif /*VK_USE_PLATFORM_XCB_KHR*/
17951
17952#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17953#ifdef VK_USE_PLATFORM_XCB_KHR
17954 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const
17955 {
17956 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id );
17957 }
17958#endif /*VK_USE_PLATFORM_XCB_KHR*/
17959#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17960
Lenny Komow6501c122016-08-31 15:03:49 -060017961 Result getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType, ExternalImageFormatPropertiesNV* pExternalImageFormatProperties ) const
17962 {
17963 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 ) ) );
17964 }
17965
17966#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17967 ResultValueType<ExternalImageFormatPropertiesNV>::type getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType ) const
17968 {
17969 ExternalImageFormatPropertiesNV externalImageFormatProperties;
17970 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 ) ) );
17971 return createResultValue( result, externalImageFormatProperties, "vk::PhysicalDevice::getExternalImageFormatPropertiesNV" );
17972 }
17973#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17974
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017975#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17976 explicit
17977#endif
17978 operator VkPhysicalDevice() const
17979 {
17980 return m_physicalDevice;
17981 }
17982
17983 explicit operator bool() const
17984 {
17985 return m_physicalDevice != VK_NULL_HANDLE;
17986 }
17987
17988 bool operator!() const
17989 {
17990 return m_physicalDevice == VK_NULL_HANDLE;
17991 }
17992
17993 private:
17994 VkPhysicalDevice m_physicalDevice;
17995 };
17996 static_assert( sizeof( PhysicalDevice ) == sizeof( VkPhysicalDevice ), "handle and wrapper have different size!" );
17997
17998 class Instance
17999 {
18000 public:
18001 Instance()
18002 : m_instance(VK_NULL_HANDLE)
18003 {}
18004
18005#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
18006 Instance(VkInstance instance)
18007 : m_instance(instance)
18008 {}
18009
18010 Instance& operator=(VkInstance instance)
18011 {
18012 m_instance = instance;
18013 return *this;
18014 }
18015#endif
18016
Lenny Komowebf33162016-08-26 14:10:08 -060018017 bool operator==(Instance const &rhs) const
18018 {
18019 return m_instance == rhs.m_instance;
18020 }
18021
18022 bool operator!=(Instance const &rhs) const
18023 {
18024 return m_instance != rhs.m_instance;
18025 }
18026
18027 bool operator<(Instance const &rhs) const
18028 {
18029 return m_instance < rhs.m_instance;
18030 }
18031
Lenny Komowbed9b5c2016-08-11 11:23:15 -060018032 void destroy( const AllocationCallbacks* pAllocator ) const
18033 {
18034 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18035 }
18036
18037#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18038 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
18039 {
18040 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18041 }
18042#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18043
18044 Result enumeratePhysicalDevices( uint32_t* pPhysicalDeviceCount, PhysicalDevice* pPhysicalDevices ) const
18045 {
18046 return static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, pPhysicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( pPhysicalDevices ) ) );
18047 }
18048
18049#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18050 template <typename Allocator = std::allocator<PhysicalDevice>>
18051 typename ResultValueType<std::vector<PhysicalDevice,Allocator>>::type enumeratePhysicalDevices() const
18052 {
18053 std::vector<PhysicalDevice,Allocator> physicalDevices;
18054 uint32_t physicalDeviceCount;
18055 Result result;
18056 do
18057 {
18058 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) );
18059 if ( ( result == Result::eSuccess ) && physicalDeviceCount )
18060 {
18061 physicalDevices.resize( physicalDeviceCount );
18062 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( physicalDevices.data() ) ) );
18063 }
18064 } while ( result == Result::eIncomplete );
18065 assert( physicalDeviceCount <= physicalDevices.size() );
18066 physicalDevices.resize( physicalDeviceCount );
18067 return createResultValue( result, physicalDevices, "vk::Instance::enumeratePhysicalDevices" );
18068 }
18069#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18070
18071 PFN_vkVoidFunction getProcAddr( const char* pName ) const
18072 {
18073 return vkGetInstanceProcAddr( m_instance, pName );
18074 }
18075
18076#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18077 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
18078 {
18079 return vkGetInstanceProcAddr( m_instance, name.c_str() );
18080 }
18081#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18082
18083#ifdef VK_USE_PLATFORM_ANDROID_KHR
18084 Result createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18085 {
18086 return static_cast<Result>( vkCreateAndroidSurfaceKHR( m_instance, reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18087 }
18088#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18089
18090#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18091#ifdef VK_USE_PLATFORM_ANDROID_KHR
18092 ResultValueType<SurfaceKHR>::type createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18093 {
18094 SurfaceKHR surface;
18095 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 ) ) );
18096 return createResultValue( result, surface, "vk::Instance::createAndroidSurfaceKHR" );
18097 }
18098#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18099#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18100
18101 Result createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18102 {
18103 return static_cast<Result>( vkCreateDisplayPlaneSurfaceKHR( m_instance, reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18104 }
18105
18106#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18107 ResultValueType<SurfaceKHR>::type createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18108 {
18109 SurfaceKHR surface;
18110 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 ) ) );
18111 return createResultValue( result, surface, "vk::Instance::createDisplayPlaneSurfaceKHR" );
18112 }
18113#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18114
18115#ifdef VK_USE_PLATFORM_MIR_KHR
18116 Result createMirSurfaceKHR( const MirSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18117 {
18118 return static_cast<Result>( vkCreateMirSurfaceKHR( m_instance, reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18119 }
18120#endif /*VK_USE_PLATFORM_MIR_KHR*/
18121
18122#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18123#ifdef VK_USE_PLATFORM_MIR_KHR
18124 ResultValueType<SurfaceKHR>::type createMirSurfaceKHR( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18125 {
18126 SurfaceKHR surface;
18127 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 ) ) );
18128 return createResultValue( result, surface, "vk::Instance::createMirSurfaceKHR" );
18129 }
18130#endif /*VK_USE_PLATFORM_MIR_KHR*/
18131#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18132
18133 void destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks* pAllocator ) const
18134 {
18135 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18136 }
18137
18138#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18139 void destroySurfaceKHR( SurfaceKHR surface, Optional<const AllocationCallbacks> allocator = nullptr ) const
18140 {
18141 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18142 }
18143#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18144
18145#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18146 Result createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18147 {
18148 return static_cast<Result>( vkCreateWaylandSurfaceKHR( m_instance, reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18149 }
18150#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18151
18152#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18153#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18154 ResultValueType<SurfaceKHR>::type createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18155 {
18156 SurfaceKHR surface;
18157 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 ) ) );
18158 return createResultValue( result, surface, "vk::Instance::createWaylandSurfaceKHR" );
18159 }
18160#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18161#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18162
18163#ifdef VK_USE_PLATFORM_WIN32_KHR
18164 Result createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18165 {
18166 return static_cast<Result>( vkCreateWin32SurfaceKHR( m_instance, reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18167 }
18168#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18169
18170#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18171#ifdef VK_USE_PLATFORM_WIN32_KHR
18172 ResultValueType<SurfaceKHR>::type createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18173 {
18174 SurfaceKHR surface;
18175 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 ) ) );
18176 return createResultValue( result, surface, "vk::Instance::createWin32SurfaceKHR" );
18177 }
18178#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18179#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18180
18181#ifdef VK_USE_PLATFORM_XLIB_KHR
18182 Result createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18183 {
18184 return static_cast<Result>( vkCreateXlibSurfaceKHR( m_instance, reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18185 }
18186#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18187
18188#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18189#ifdef VK_USE_PLATFORM_XLIB_KHR
18190 ResultValueType<SurfaceKHR>::type createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18191 {
18192 SurfaceKHR surface;
18193 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 ) ) );
18194 return createResultValue( result, surface, "vk::Instance::createXlibSurfaceKHR" );
18195 }
18196#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18197#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18198
18199#ifdef VK_USE_PLATFORM_XCB_KHR
18200 Result createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18201 {
18202 return static_cast<Result>( vkCreateXcbSurfaceKHR( m_instance, reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18203 }
18204#endif /*VK_USE_PLATFORM_XCB_KHR*/
18205
18206#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18207#ifdef VK_USE_PLATFORM_XCB_KHR
18208 ResultValueType<SurfaceKHR>::type createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18209 {
18210 SurfaceKHR surface;
18211 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 ) ) );
18212 return createResultValue( result, surface, "vk::Instance::createXcbSurfaceKHR" );
18213 }
18214#endif /*VK_USE_PLATFORM_XCB_KHR*/
18215#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18216
18217 Result createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, DebugReportCallbackEXT* pCallback ) const
18218 {
18219 return static_cast<Result>( vkCreateDebugReportCallbackEXT( m_instance, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDebugReportCallbackEXT*>( pCallback ) ) );
18220 }
18221
18222#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18223 ResultValueType<DebugReportCallbackEXT>::type createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18224 {
18225 DebugReportCallbackEXT callback;
18226 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 ) ) );
18227 return createResultValue( result, callback, "vk::Instance::createDebugReportCallbackEXT" );
18228 }
18229#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18230
18231 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, const AllocationCallbacks* pAllocator ) const
18232 {
18233 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18234 }
18235
18236#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18237 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, Optional<const AllocationCallbacks> allocator = nullptr ) const
18238 {
18239 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18240 }
18241#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18242
18243 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage ) const
18244 {
18245 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, pLayerPrefix, pMessage );
18246 }
18247
18248#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18249 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const std::string & layerPrefix, const std::string & message ) const
18250 {
18251 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, layerPrefix.c_str(), message.c_str() );
18252 }
18253#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18254
18255#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
18256 explicit
18257#endif
18258 operator VkInstance() const
18259 {
18260 return m_instance;
18261 }
18262
18263 explicit operator bool() const
18264 {
18265 return m_instance != VK_NULL_HANDLE;
18266 }
18267
18268 bool operator!() const
18269 {
18270 return m_instance == VK_NULL_HANDLE;
18271 }
18272
18273 private:
18274 VkInstance m_instance;
18275 };
18276 static_assert( sizeof( Instance ) == sizeof( VkInstance ), "handle and wrapper have different size!" );
18277
Lenny Komowbed9b5c2016-08-11 11:23:15 -060018278 inline Result createInstance( const InstanceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Instance* pInstance )
18279 {
18280 return static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkInstance*>( pInstance ) ) );
18281 }
18282
18283#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18284 inline ResultValueType<Instance>::type createInstance( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr )
18285 {
18286 Instance instance;
18287 Result result = static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkInstance*>( &instance ) ) );
18288 return createResultValue( result, instance, "vk::createInstance" );
18289 }
18290#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18291
18292 inline Result enumerateInstanceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties )
18293 {
18294 return static_cast<Result>( vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
18295 }
18296
18297#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18298 template <typename Allocator = std::allocator<LayerProperties>>
18299 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties()
18300 {
18301 std::vector<LayerProperties,Allocator> properties;
18302 uint32_t propertyCount;
18303 Result result;
18304 do
18305 {
18306 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) );
18307 if ( ( result == Result::eSuccess ) && propertyCount )
18308 {
18309 properties.resize( propertyCount );
18310 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
18311 }
18312 } while ( result == Result::eIncomplete );
18313 assert( propertyCount <= properties.size() );
18314 properties.resize( propertyCount );
18315 return createResultValue( result, properties, "vk::enumerateInstanceLayerProperties" );
18316 }
18317#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18318
18319 inline Result enumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties )
18320 {
18321 return static_cast<Result>( vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
18322 }
18323
18324#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18325 template <typename Allocator = std::allocator<ExtensionProperties>>
18326 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateInstanceExtensionProperties( Optional<const std::string> layerName = nullptr )
18327 {
18328 std::vector<ExtensionProperties,Allocator> properties;
18329 uint32_t propertyCount;
18330 Result result;
18331 do
18332 {
18333 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
18334 if ( ( result == Result::eSuccess ) && propertyCount )
18335 {
18336 properties.resize( propertyCount );
18337 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
18338 }
18339 } while ( result == Result::eIncomplete );
18340 assert( propertyCount <= properties.size() );
18341 properties.resize( propertyCount );
18342 return createResultValue( result, properties, "vk::enumerateInstanceExtensionProperties" );
18343 }
18344#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18345
18346 inline std::string to_string(FramebufferCreateFlagBits)
18347 {
18348 return "(void)";
18349 }
18350
18351 inline std::string to_string(FramebufferCreateFlags)
18352 {
18353 return "{}";
18354 }
18355
18356 inline std::string to_string(QueryPoolCreateFlagBits)
18357 {
18358 return "(void)";
18359 }
18360
18361 inline std::string to_string(QueryPoolCreateFlags)
18362 {
18363 return "{}";
18364 }
18365
18366 inline std::string to_string(RenderPassCreateFlagBits)
18367 {
18368 return "(void)";
18369 }
18370
18371 inline std::string to_string(RenderPassCreateFlags)
18372 {
18373 return "{}";
18374 }
18375
18376 inline std::string to_string(SamplerCreateFlagBits)
18377 {
18378 return "(void)";
18379 }
18380
18381 inline std::string to_string(SamplerCreateFlags)
18382 {
18383 return "{}";
18384 }
18385
18386 inline std::string to_string(PipelineLayoutCreateFlagBits)
18387 {
18388 return "(void)";
18389 }
18390
18391 inline std::string to_string(PipelineLayoutCreateFlags)
18392 {
18393 return "{}";
18394 }
18395
18396 inline std::string to_string(PipelineCacheCreateFlagBits)
18397 {
18398 return "(void)";
18399 }
18400
18401 inline std::string to_string(PipelineCacheCreateFlags)
18402 {
18403 return "{}";
18404 }
18405
18406 inline std::string to_string(PipelineDepthStencilStateCreateFlagBits)
18407 {
18408 return "(void)";
18409 }
18410
18411 inline std::string to_string(PipelineDepthStencilStateCreateFlags)
18412 {
18413 return "{}";
18414 }
18415
18416 inline std::string to_string(PipelineDynamicStateCreateFlagBits)
18417 {
18418 return "(void)";
18419 }
18420
18421 inline std::string to_string(PipelineDynamicStateCreateFlags)
18422 {
18423 return "{}";
18424 }
18425
18426 inline std::string to_string(PipelineColorBlendStateCreateFlagBits)
18427 {
18428 return "(void)";
18429 }
18430
18431 inline std::string to_string(PipelineColorBlendStateCreateFlags)
18432 {
18433 return "{}";
18434 }
18435
18436 inline std::string to_string(PipelineMultisampleStateCreateFlagBits)
18437 {
18438 return "(void)";
18439 }
18440
18441 inline std::string to_string(PipelineMultisampleStateCreateFlags)
18442 {
18443 return "{}";
18444 }
18445
18446 inline std::string to_string(PipelineRasterizationStateCreateFlagBits)
18447 {
18448 return "(void)";
18449 }
18450
18451 inline std::string to_string(PipelineRasterizationStateCreateFlags)
18452 {
18453 return "{}";
18454 }
18455
18456 inline std::string to_string(PipelineViewportStateCreateFlagBits)
18457 {
18458 return "(void)";
18459 }
18460
18461 inline std::string to_string(PipelineViewportStateCreateFlags)
18462 {
18463 return "{}";
18464 }
18465
18466 inline std::string to_string(PipelineTessellationStateCreateFlagBits)
18467 {
18468 return "(void)";
18469 }
18470
18471 inline std::string to_string(PipelineTessellationStateCreateFlags)
18472 {
18473 return "{}";
18474 }
18475
18476 inline std::string to_string(PipelineInputAssemblyStateCreateFlagBits)
18477 {
18478 return "(void)";
18479 }
18480
18481 inline std::string to_string(PipelineInputAssemblyStateCreateFlags)
18482 {
18483 return "{}";
18484 }
18485
18486 inline std::string to_string(PipelineVertexInputStateCreateFlagBits)
18487 {
18488 return "(void)";
18489 }
18490
18491 inline std::string to_string(PipelineVertexInputStateCreateFlags)
18492 {
18493 return "{}";
18494 }
18495
18496 inline std::string to_string(PipelineShaderStageCreateFlagBits)
18497 {
18498 return "(void)";
18499 }
18500
18501 inline std::string to_string(PipelineShaderStageCreateFlags)
18502 {
18503 return "{}";
18504 }
18505
18506 inline std::string to_string(DescriptorSetLayoutCreateFlagBits)
18507 {
18508 return "(void)";
18509 }
18510
18511 inline std::string to_string(DescriptorSetLayoutCreateFlags)
18512 {
18513 return "{}";
18514 }
18515
18516 inline std::string to_string(BufferViewCreateFlagBits)
18517 {
18518 return "(void)";
18519 }
18520
18521 inline std::string to_string(BufferViewCreateFlags)
18522 {
18523 return "{}";
18524 }
18525
18526 inline std::string to_string(InstanceCreateFlagBits)
18527 {
18528 return "(void)";
18529 }
18530
18531 inline std::string to_string(InstanceCreateFlags)
18532 {
18533 return "{}";
18534 }
18535
18536 inline std::string to_string(DeviceCreateFlagBits)
18537 {
18538 return "(void)";
18539 }
18540
18541 inline std::string to_string(DeviceCreateFlags)
18542 {
18543 return "{}";
18544 }
18545
18546 inline std::string to_string(DeviceQueueCreateFlagBits)
18547 {
18548 return "(void)";
18549 }
18550
18551 inline std::string to_string(DeviceQueueCreateFlags)
18552 {
18553 return "{}";
18554 }
18555
18556 inline std::string to_string(ImageViewCreateFlagBits)
18557 {
18558 return "(void)";
18559 }
18560
18561 inline std::string to_string(ImageViewCreateFlags)
18562 {
18563 return "{}";
18564 }
18565
18566 inline std::string to_string(SemaphoreCreateFlagBits)
18567 {
18568 return "(void)";
18569 }
18570
18571 inline std::string to_string(SemaphoreCreateFlags)
18572 {
18573 return "{}";
18574 }
18575
18576 inline std::string to_string(ShaderModuleCreateFlagBits)
18577 {
18578 return "(void)";
18579 }
18580
18581 inline std::string to_string(ShaderModuleCreateFlags)
18582 {
18583 return "{}";
18584 }
18585
18586 inline std::string to_string(EventCreateFlagBits)
18587 {
18588 return "(void)";
18589 }
18590
18591 inline std::string to_string(EventCreateFlags)
18592 {
18593 return "{}";
18594 }
18595
18596 inline std::string to_string(MemoryMapFlagBits)
18597 {
18598 return "(void)";
18599 }
18600
18601 inline std::string to_string(MemoryMapFlags)
18602 {
18603 return "{}";
18604 }
18605
18606 inline std::string to_string(SubpassDescriptionFlagBits)
18607 {
18608 return "(void)";
18609 }
18610
18611 inline std::string to_string(SubpassDescriptionFlags)
18612 {
18613 return "{}";
18614 }
18615
18616 inline std::string to_string(DescriptorPoolResetFlagBits)
18617 {
18618 return "(void)";
18619 }
18620
18621 inline std::string to_string(DescriptorPoolResetFlags)
18622 {
18623 return "{}";
18624 }
18625
18626 inline std::string to_string(SwapchainCreateFlagBitsKHR)
18627 {
18628 return "(void)";
18629 }
18630
18631 inline std::string to_string(SwapchainCreateFlagsKHR)
18632 {
18633 return "{}";
18634 }
18635
18636 inline std::string to_string(DisplayModeCreateFlagBitsKHR)
18637 {
18638 return "(void)";
18639 }
18640
18641 inline std::string to_string(DisplayModeCreateFlagsKHR)
18642 {
18643 return "{}";
18644 }
18645
18646 inline std::string to_string(DisplaySurfaceCreateFlagBitsKHR)
18647 {
18648 return "(void)";
18649 }
18650
18651 inline std::string to_string(DisplaySurfaceCreateFlagsKHR)
18652 {
18653 return "{}";
18654 }
18655
18656#ifdef VK_USE_PLATFORM_ANDROID_KHR
18657 inline std::string to_string(AndroidSurfaceCreateFlagBitsKHR)
18658 {
18659 return "(void)";
18660 }
18661#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18662
18663#ifdef VK_USE_PLATFORM_ANDROID_KHR
18664 inline std::string to_string(AndroidSurfaceCreateFlagsKHR)
18665 {
18666 return "{}";
18667 }
18668#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18669
18670#ifdef VK_USE_PLATFORM_MIR_KHR
18671 inline std::string to_string(MirSurfaceCreateFlagBitsKHR)
18672 {
18673 return "(void)";
18674 }
18675#endif /*VK_USE_PLATFORM_MIR_KHR*/
18676
18677#ifdef VK_USE_PLATFORM_MIR_KHR
18678 inline std::string to_string(MirSurfaceCreateFlagsKHR)
18679 {
18680 return "{}";
18681 }
18682#endif /*VK_USE_PLATFORM_MIR_KHR*/
18683
18684#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18685 inline std::string to_string(WaylandSurfaceCreateFlagBitsKHR)
18686 {
18687 return "(void)";
18688 }
18689#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18690
18691#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18692 inline std::string to_string(WaylandSurfaceCreateFlagsKHR)
18693 {
18694 return "{}";
18695 }
18696#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18697
18698#ifdef VK_USE_PLATFORM_WIN32_KHR
18699 inline std::string to_string(Win32SurfaceCreateFlagBitsKHR)
18700 {
18701 return "(void)";
18702 }
18703#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18704
18705#ifdef VK_USE_PLATFORM_WIN32_KHR
18706 inline std::string to_string(Win32SurfaceCreateFlagsKHR)
18707 {
18708 return "{}";
18709 }
18710#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18711
18712#ifdef VK_USE_PLATFORM_XLIB_KHR
18713 inline std::string to_string(XlibSurfaceCreateFlagBitsKHR)
18714 {
18715 return "(void)";
18716 }
18717#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18718
18719#ifdef VK_USE_PLATFORM_XLIB_KHR
18720 inline std::string to_string(XlibSurfaceCreateFlagsKHR)
18721 {
18722 return "{}";
18723 }
18724#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18725
18726#ifdef VK_USE_PLATFORM_XCB_KHR
18727 inline std::string to_string(XcbSurfaceCreateFlagBitsKHR)
18728 {
18729 return "(void)";
18730 }
18731#endif /*VK_USE_PLATFORM_XCB_KHR*/
18732
18733#ifdef VK_USE_PLATFORM_XCB_KHR
18734 inline std::string to_string(XcbSurfaceCreateFlagsKHR)
18735 {
18736 return "{}";
18737 }
18738#endif /*VK_USE_PLATFORM_XCB_KHR*/
18739
18740 inline std::string to_string(ImageLayout value)
18741 {
18742 switch (value)
18743 {
18744 case ImageLayout::eUndefined: return "Undefined";
18745 case ImageLayout::eGeneral: return "General";
18746 case ImageLayout::eColorAttachmentOptimal: return "ColorAttachmentOptimal";
18747 case ImageLayout::eDepthStencilAttachmentOptimal: return "DepthStencilAttachmentOptimal";
18748 case ImageLayout::eDepthStencilReadOnlyOptimal: return "DepthStencilReadOnlyOptimal";
18749 case ImageLayout::eShaderReadOnlyOptimal: return "ShaderReadOnlyOptimal";
18750 case ImageLayout::eTransferSrcOptimal: return "TransferSrcOptimal";
18751 case ImageLayout::eTransferDstOptimal: return "TransferDstOptimal";
18752 case ImageLayout::ePreinitialized: return "Preinitialized";
18753 case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR";
18754 default: return "invalid";
18755 }
18756 }
18757
18758 inline std::string to_string(AttachmentLoadOp value)
18759 {
18760 switch (value)
18761 {
18762 case AttachmentLoadOp::eLoad: return "Load";
18763 case AttachmentLoadOp::eClear: return "Clear";
18764 case AttachmentLoadOp::eDontCare: return "DontCare";
18765 default: return "invalid";
18766 }
18767 }
18768
18769 inline std::string to_string(AttachmentStoreOp value)
18770 {
18771 switch (value)
18772 {
18773 case AttachmentStoreOp::eStore: return "Store";
18774 case AttachmentStoreOp::eDontCare: return "DontCare";
18775 default: return "invalid";
18776 }
18777 }
18778
18779 inline std::string to_string(ImageType value)
18780 {
18781 switch (value)
18782 {
18783 case ImageType::e1D: return "1D";
18784 case ImageType::e2D: return "2D";
18785 case ImageType::e3D: return "3D";
18786 default: return "invalid";
18787 }
18788 }
18789
18790 inline std::string to_string(ImageTiling value)
18791 {
18792 switch (value)
18793 {
18794 case ImageTiling::eOptimal: return "Optimal";
18795 case ImageTiling::eLinear: return "Linear";
18796 default: return "invalid";
18797 }
18798 }
18799
18800 inline std::string to_string(ImageViewType value)
18801 {
18802 switch (value)
18803 {
18804 case ImageViewType::e1D: return "1D";
18805 case ImageViewType::e2D: return "2D";
18806 case ImageViewType::e3D: return "3D";
18807 case ImageViewType::eCube: return "Cube";
18808 case ImageViewType::e1DArray: return "1DArray";
18809 case ImageViewType::e2DArray: return "2DArray";
18810 case ImageViewType::eCubeArray: return "CubeArray";
18811 default: return "invalid";
18812 }
18813 }
18814
18815 inline std::string to_string(CommandBufferLevel value)
18816 {
18817 switch (value)
18818 {
18819 case CommandBufferLevel::ePrimary: return "Primary";
18820 case CommandBufferLevel::eSecondary: return "Secondary";
18821 default: return "invalid";
18822 }
18823 }
18824
18825 inline std::string to_string(ComponentSwizzle value)
18826 {
18827 switch (value)
18828 {
18829 case ComponentSwizzle::eIdentity: return "Identity";
18830 case ComponentSwizzle::eZero: return "Zero";
18831 case ComponentSwizzle::eOne: return "One";
18832 case ComponentSwizzle::eR: return "R";
18833 case ComponentSwizzle::eG: return "G";
18834 case ComponentSwizzle::eB: return "B";
18835 case ComponentSwizzle::eA: return "A";
18836 default: return "invalid";
18837 }
18838 }
18839
18840 inline std::string to_string(DescriptorType value)
18841 {
18842 switch (value)
18843 {
18844 case DescriptorType::eSampler: return "Sampler";
18845 case DescriptorType::eCombinedImageSampler: return "CombinedImageSampler";
18846 case DescriptorType::eSampledImage: return "SampledImage";
18847 case DescriptorType::eStorageImage: return "StorageImage";
18848 case DescriptorType::eUniformTexelBuffer: return "UniformTexelBuffer";
18849 case DescriptorType::eStorageTexelBuffer: return "StorageTexelBuffer";
18850 case DescriptorType::eUniformBuffer: return "UniformBuffer";
18851 case DescriptorType::eStorageBuffer: return "StorageBuffer";
18852 case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic";
18853 case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic";
18854 case DescriptorType::eInputAttachment: return "InputAttachment";
18855 default: return "invalid";
18856 }
18857 }
18858
18859 inline std::string to_string(QueryType value)
18860 {
18861 switch (value)
18862 {
18863 case QueryType::eOcclusion: return "Occlusion";
18864 case QueryType::ePipelineStatistics: return "PipelineStatistics";
18865 case QueryType::eTimestamp: return "Timestamp";
18866 default: return "invalid";
18867 }
18868 }
18869
18870 inline std::string to_string(BorderColor value)
18871 {
18872 switch (value)
18873 {
18874 case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack";
18875 case BorderColor::eIntTransparentBlack: return "IntTransparentBlack";
18876 case BorderColor::eFloatOpaqueBlack: return "FloatOpaqueBlack";
18877 case BorderColor::eIntOpaqueBlack: return "IntOpaqueBlack";
18878 case BorderColor::eFloatOpaqueWhite: return "FloatOpaqueWhite";
18879 case BorderColor::eIntOpaqueWhite: return "IntOpaqueWhite";
18880 default: return "invalid";
18881 }
18882 }
18883
18884 inline std::string to_string(PipelineBindPoint value)
18885 {
18886 switch (value)
18887 {
18888 case PipelineBindPoint::eGraphics: return "Graphics";
18889 case PipelineBindPoint::eCompute: return "Compute";
18890 default: return "invalid";
18891 }
18892 }
18893
18894 inline std::string to_string(PipelineCacheHeaderVersion value)
18895 {
18896 switch (value)
18897 {
18898 case PipelineCacheHeaderVersion::eOne: return "One";
18899 default: return "invalid";
18900 }
18901 }
18902
18903 inline std::string to_string(PrimitiveTopology value)
18904 {
18905 switch (value)
18906 {
18907 case PrimitiveTopology::ePointList: return "PointList";
18908 case PrimitiveTopology::eLineList: return "LineList";
18909 case PrimitiveTopology::eLineStrip: return "LineStrip";
18910 case PrimitiveTopology::eTriangleList: return "TriangleList";
18911 case PrimitiveTopology::eTriangleStrip: return "TriangleStrip";
18912 case PrimitiveTopology::eTriangleFan: return "TriangleFan";
18913 case PrimitiveTopology::eLineListWithAdjacency: return "LineListWithAdjacency";
18914 case PrimitiveTopology::eLineStripWithAdjacency: return "LineStripWithAdjacency";
18915 case PrimitiveTopology::eTriangleListWithAdjacency: return "TriangleListWithAdjacency";
18916 case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency";
18917 case PrimitiveTopology::ePatchList: return "PatchList";
18918 default: return "invalid";
18919 }
18920 }
18921
18922 inline std::string to_string(SharingMode value)
18923 {
18924 switch (value)
18925 {
18926 case SharingMode::eExclusive: return "Exclusive";
18927 case SharingMode::eConcurrent: return "Concurrent";
18928 default: return "invalid";
18929 }
18930 }
18931
18932 inline std::string to_string(IndexType value)
18933 {
18934 switch (value)
18935 {
18936 case IndexType::eUint16: return "Uint16";
18937 case IndexType::eUint32: return "Uint32";
18938 default: return "invalid";
18939 }
18940 }
18941
18942 inline std::string to_string(Filter value)
18943 {
18944 switch (value)
18945 {
18946 case Filter::eNearest: return "Nearest";
18947 case Filter::eLinear: return "Linear";
18948 case Filter::eCubicIMG: return "CubicIMG";
18949 default: return "invalid";
18950 }
18951 }
18952
18953 inline std::string to_string(SamplerMipmapMode value)
18954 {
18955 switch (value)
18956 {
18957 case SamplerMipmapMode::eNearest: return "Nearest";
18958 case SamplerMipmapMode::eLinear: return "Linear";
18959 default: return "invalid";
18960 }
18961 }
18962
18963 inline std::string to_string(SamplerAddressMode value)
18964 {
18965 switch (value)
18966 {
18967 case SamplerAddressMode::eRepeat: return "Repeat";
18968 case SamplerAddressMode::eMirroredRepeat: return "MirroredRepeat";
18969 case SamplerAddressMode::eClampToEdge: return "ClampToEdge";
18970 case SamplerAddressMode::eClampToBorder: return "ClampToBorder";
18971 case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge";
18972 default: return "invalid";
18973 }
18974 }
18975
18976 inline std::string to_string(CompareOp value)
18977 {
18978 switch (value)
18979 {
18980 case CompareOp::eNever: return "Never";
18981 case CompareOp::eLess: return "Less";
18982 case CompareOp::eEqual: return "Equal";
18983 case CompareOp::eLessOrEqual: return "LessOrEqual";
18984 case CompareOp::eGreater: return "Greater";
18985 case CompareOp::eNotEqual: return "NotEqual";
18986 case CompareOp::eGreaterOrEqual: return "GreaterOrEqual";
18987 case CompareOp::eAlways: return "Always";
18988 default: return "invalid";
18989 }
18990 }
18991
18992 inline std::string to_string(PolygonMode value)
18993 {
18994 switch (value)
18995 {
18996 case PolygonMode::eFill: return "Fill";
18997 case PolygonMode::eLine: return "Line";
18998 case PolygonMode::ePoint: return "Point";
18999 default: return "invalid";
19000 }
19001 }
19002
19003 inline std::string to_string(CullModeFlagBits value)
19004 {
19005 switch (value)
19006 {
19007 case CullModeFlagBits::eNone: return "None";
19008 case CullModeFlagBits::eFront: return "Front";
19009 case CullModeFlagBits::eBack: return "Back";
19010 case CullModeFlagBits::eFrontAndBack: return "FrontAndBack";
19011 default: return "invalid";
19012 }
19013 }
19014
19015 inline std::string to_string(CullModeFlags value)
19016 {
19017 if (!value) return "{}";
19018 std::string result;
19019 if (value & CullModeFlagBits::eNone) result += "None | ";
19020 if (value & CullModeFlagBits::eFront) result += "Front | ";
19021 if (value & CullModeFlagBits::eBack) result += "Back | ";
19022 if (value & CullModeFlagBits::eFrontAndBack) result += "FrontAndBack | ";
19023 return "{" + result.substr(0, result.size() - 3) + "}";
19024 }
19025
19026 inline std::string to_string(FrontFace value)
19027 {
19028 switch (value)
19029 {
19030 case FrontFace::eCounterClockwise: return "CounterClockwise";
19031 case FrontFace::eClockwise: return "Clockwise";
19032 default: return "invalid";
19033 }
19034 }
19035
19036 inline std::string to_string(BlendFactor value)
19037 {
19038 switch (value)
19039 {
19040 case BlendFactor::eZero: return "Zero";
19041 case BlendFactor::eOne: return "One";
19042 case BlendFactor::eSrcColor: return "SrcColor";
19043 case BlendFactor::eOneMinusSrcColor: return "OneMinusSrcColor";
19044 case BlendFactor::eDstColor: return "DstColor";
19045 case BlendFactor::eOneMinusDstColor: return "OneMinusDstColor";
19046 case BlendFactor::eSrcAlpha: return "SrcAlpha";
19047 case BlendFactor::eOneMinusSrcAlpha: return "OneMinusSrcAlpha";
19048 case BlendFactor::eDstAlpha: return "DstAlpha";
19049 case BlendFactor::eOneMinusDstAlpha: return "OneMinusDstAlpha";
19050 case BlendFactor::eConstantColor: return "ConstantColor";
19051 case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor";
19052 case BlendFactor::eConstantAlpha: return "ConstantAlpha";
19053 case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha";
19054 case BlendFactor::eSrcAlphaSaturate: return "SrcAlphaSaturate";
19055 case BlendFactor::eSrc1Color: return "Src1Color";
19056 case BlendFactor::eOneMinusSrc1Color: return "OneMinusSrc1Color";
19057 case BlendFactor::eSrc1Alpha: return "Src1Alpha";
19058 case BlendFactor::eOneMinusSrc1Alpha: return "OneMinusSrc1Alpha";
19059 default: return "invalid";
19060 }
19061 }
19062
19063 inline std::string to_string(BlendOp value)
19064 {
19065 switch (value)
19066 {
19067 case BlendOp::eAdd: return "Add";
19068 case BlendOp::eSubtract: return "Subtract";
19069 case BlendOp::eReverseSubtract: return "ReverseSubtract";
19070 case BlendOp::eMin: return "Min";
19071 case BlendOp::eMax: return "Max";
19072 default: return "invalid";
19073 }
19074 }
19075
19076 inline std::string to_string(StencilOp value)
19077 {
19078 switch (value)
19079 {
19080 case StencilOp::eKeep: return "Keep";
19081 case StencilOp::eZero: return "Zero";
19082 case StencilOp::eReplace: return "Replace";
19083 case StencilOp::eIncrementAndClamp: return "IncrementAndClamp";
19084 case StencilOp::eDecrementAndClamp: return "DecrementAndClamp";
19085 case StencilOp::eInvert: return "Invert";
19086 case StencilOp::eIncrementAndWrap: return "IncrementAndWrap";
19087 case StencilOp::eDecrementAndWrap: return "DecrementAndWrap";
19088 default: return "invalid";
19089 }
19090 }
19091
19092 inline std::string to_string(LogicOp value)
19093 {
19094 switch (value)
19095 {
19096 case LogicOp::eClear: return "Clear";
19097 case LogicOp::eAnd: return "And";
19098 case LogicOp::eAndReverse: return "AndReverse";
19099 case LogicOp::eCopy: return "Copy";
19100 case LogicOp::eAndInverted: return "AndInverted";
19101 case LogicOp::eNoOp: return "NoOp";
19102 case LogicOp::eXor: return "Xor";
19103 case LogicOp::eOr: return "Or";
19104 case LogicOp::eNor: return "Nor";
19105 case LogicOp::eEquivalent: return "Equivalent";
19106 case LogicOp::eInvert: return "Invert";
19107 case LogicOp::eOrReverse: return "OrReverse";
19108 case LogicOp::eCopyInverted: return "CopyInverted";
19109 case LogicOp::eOrInverted: return "OrInverted";
19110 case LogicOp::eNand: return "Nand";
19111 case LogicOp::eSet: return "Set";
19112 default: return "invalid";
19113 }
19114 }
19115
19116 inline std::string to_string(InternalAllocationType value)
19117 {
19118 switch (value)
19119 {
19120 case InternalAllocationType::eExecutable: return "Executable";
19121 default: return "invalid";
19122 }
19123 }
19124
19125 inline std::string to_string(SystemAllocationScope value)
19126 {
19127 switch (value)
19128 {
19129 case SystemAllocationScope::eCommand: return "Command";
19130 case SystemAllocationScope::eObject: return "Object";
19131 case SystemAllocationScope::eCache: return "Cache";
19132 case SystemAllocationScope::eDevice: return "Device";
19133 case SystemAllocationScope::eInstance: return "Instance";
19134 default: return "invalid";
19135 }
19136 }
19137
19138 inline std::string to_string(PhysicalDeviceType value)
19139 {
19140 switch (value)
19141 {
19142 case PhysicalDeviceType::eOther: return "Other";
19143 case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu";
19144 case PhysicalDeviceType::eDiscreteGpu: return "DiscreteGpu";
19145 case PhysicalDeviceType::eVirtualGpu: return "VirtualGpu";
19146 case PhysicalDeviceType::eCpu: return "Cpu";
19147 default: return "invalid";
19148 }
19149 }
19150
19151 inline std::string to_string(VertexInputRate value)
19152 {
19153 switch (value)
19154 {
19155 case VertexInputRate::eVertex: return "Vertex";
19156 case VertexInputRate::eInstance: return "Instance";
19157 default: return "invalid";
19158 }
19159 }
19160
19161 inline std::string to_string(Format value)
19162 {
19163 switch (value)
19164 {
19165 case Format::eUndefined: return "Undefined";
19166 case Format::eR4G4UnormPack8: return "R4G4UnormPack8";
19167 case Format::eR4G4B4A4UnormPack16: return "R4G4B4A4UnormPack16";
19168 case Format::eB4G4R4A4UnormPack16: return "B4G4R4A4UnormPack16";
19169 case Format::eR5G6B5UnormPack16: return "R5G6B5UnormPack16";
19170 case Format::eB5G6R5UnormPack16: return "B5G6R5UnormPack16";
19171 case Format::eR5G5B5A1UnormPack16: return "R5G5B5A1UnormPack16";
19172 case Format::eB5G5R5A1UnormPack16: return "B5G5R5A1UnormPack16";
19173 case Format::eA1R5G5B5UnormPack16: return "A1R5G5B5UnormPack16";
19174 case Format::eR8Unorm: return "R8Unorm";
19175 case Format::eR8Snorm: return "R8Snorm";
19176 case Format::eR8Uscaled: return "R8Uscaled";
19177 case Format::eR8Sscaled: return "R8Sscaled";
19178 case Format::eR8Uint: return "R8Uint";
19179 case Format::eR8Sint: return "R8Sint";
19180 case Format::eR8Srgb: return "R8Srgb";
19181 case Format::eR8G8Unorm: return "R8G8Unorm";
19182 case Format::eR8G8Snorm: return "R8G8Snorm";
19183 case Format::eR8G8Uscaled: return "R8G8Uscaled";
19184 case Format::eR8G8Sscaled: return "R8G8Sscaled";
19185 case Format::eR8G8Uint: return "R8G8Uint";
19186 case Format::eR8G8Sint: return "R8G8Sint";
19187 case Format::eR8G8Srgb: return "R8G8Srgb";
19188 case Format::eR8G8B8Unorm: return "R8G8B8Unorm";
19189 case Format::eR8G8B8Snorm: return "R8G8B8Snorm";
19190 case Format::eR8G8B8Uscaled: return "R8G8B8Uscaled";
19191 case Format::eR8G8B8Sscaled: return "R8G8B8Sscaled";
19192 case Format::eR8G8B8Uint: return "R8G8B8Uint";
19193 case Format::eR8G8B8Sint: return "R8G8B8Sint";
19194 case Format::eR8G8B8Srgb: return "R8G8B8Srgb";
19195 case Format::eB8G8R8Unorm: return "B8G8R8Unorm";
19196 case Format::eB8G8R8Snorm: return "B8G8R8Snorm";
19197 case Format::eB8G8R8Uscaled: return "B8G8R8Uscaled";
19198 case Format::eB8G8R8Sscaled: return "B8G8R8Sscaled";
19199 case Format::eB8G8R8Uint: return "B8G8R8Uint";
19200 case Format::eB8G8R8Sint: return "B8G8R8Sint";
19201 case Format::eB8G8R8Srgb: return "B8G8R8Srgb";
19202 case Format::eR8G8B8A8Unorm: return "R8G8B8A8Unorm";
19203 case Format::eR8G8B8A8Snorm: return "R8G8B8A8Snorm";
19204 case Format::eR8G8B8A8Uscaled: return "R8G8B8A8Uscaled";
19205 case Format::eR8G8B8A8Sscaled: return "R8G8B8A8Sscaled";
19206 case Format::eR8G8B8A8Uint: return "R8G8B8A8Uint";
19207 case Format::eR8G8B8A8Sint: return "R8G8B8A8Sint";
19208 case Format::eR8G8B8A8Srgb: return "R8G8B8A8Srgb";
19209 case Format::eB8G8R8A8Unorm: return "B8G8R8A8Unorm";
19210 case Format::eB8G8R8A8Snorm: return "B8G8R8A8Snorm";
19211 case Format::eB8G8R8A8Uscaled: return "B8G8R8A8Uscaled";
19212 case Format::eB8G8R8A8Sscaled: return "B8G8R8A8Sscaled";
19213 case Format::eB8G8R8A8Uint: return "B8G8R8A8Uint";
19214 case Format::eB8G8R8A8Sint: return "B8G8R8A8Sint";
19215 case Format::eB8G8R8A8Srgb: return "B8G8R8A8Srgb";
19216 case Format::eA8B8G8R8UnormPack32: return "A8B8G8R8UnormPack32";
19217 case Format::eA8B8G8R8SnormPack32: return "A8B8G8R8SnormPack32";
19218 case Format::eA8B8G8R8UscaledPack32: return "A8B8G8R8UscaledPack32";
19219 case Format::eA8B8G8R8SscaledPack32: return "A8B8G8R8SscaledPack32";
19220 case Format::eA8B8G8R8UintPack32: return "A8B8G8R8UintPack32";
19221 case Format::eA8B8G8R8SintPack32: return "A8B8G8R8SintPack32";
19222 case Format::eA8B8G8R8SrgbPack32: return "A8B8G8R8SrgbPack32";
19223 case Format::eA2R10G10B10UnormPack32: return "A2R10G10B10UnormPack32";
19224 case Format::eA2R10G10B10SnormPack32: return "A2R10G10B10SnormPack32";
19225 case Format::eA2R10G10B10UscaledPack32: return "A2R10G10B10UscaledPack32";
19226 case Format::eA2R10G10B10SscaledPack32: return "A2R10G10B10SscaledPack32";
19227 case Format::eA2R10G10B10UintPack32: return "A2R10G10B10UintPack32";
19228 case Format::eA2R10G10B10SintPack32: return "A2R10G10B10SintPack32";
19229 case Format::eA2B10G10R10UnormPack32: return "A2B10G10R10UnormPack32";
19230 case Format::eA2B10G10R10SnormPack32: return "A2B10G10R10SnormPack32";
19231 case Format::eA2B10G10R10UscaledPack32: return "A2B10G10R10UscaledPack32";
19232 case Format::eA2B10G10R10SscaledPack32: return "A2B10G10R10SscaledPack32";
19233 case Format::eA2B10G10R10UintPack32: return "A2B10G10R10UintPack32";
19234 case Format::eA2B10G10R10SintPack32: return "A2B10G10R10SintPack32";
19235 case Format::eR16Unorm: return "R16Unorm";
19236 case Format::eR16Snorm: return "R16Snorm";
19237 case Format::eR16Uscaled: return "R16Uscaled";
19238 case Format::eR16Sscaled: return "R16Sscaled";
19239 case Format::eR16Uint: return "R16Uint";
19240 case Format::eR16Sint: return "R16Sint";
19241 case Format::eR16Sfloat: return "R16Sfloat";
19242 case Format::eR16G16Unorm: return "R16G16Unorm";
19243 case Format::eR16G16Snorm: return "R16G16Snorm";
19244 case Format::eR16G16Uscaled: return "R16G16Uscaled";
19245 case Format::eR16G16Sscaled: return "R16G16Sscaled";
19246 case Format::eR16G16Uint: return "R16G16Uint";
19247 case Format::eR16G16Sint: return "R16G16Sint";
19248 case Format::eR16G16Sfloat: return "R16G16Sfloat";
19249 case Format::eR16G16B16Unorm: return "R16G16B16Unorm";
19250 case Format::eR16G16B16Snorm: return "R16G16B16Snorm";
19251 case Format::eR16G16B16Uscaled: return "R16G16B16Uscaled";
19252 case Format::eR16G16B16Sscaled: return "R16G16B16Sscaled";
19253 case Format::eR16G16B16Uint: return "R16G16B16Uint";
19254 case Format::eR16G16B16Sint: return "R16G16B16Sint";
19255 case Format::eR16G16B16Sfloat: return "R16G16B16Sfloat";
19256 case Format::eR16G16B16A16Unorm: return "R16G16B16A16Unorm";
19257 case Format::eR16G16B16A16Snorm: return "R16G16B16A16Snorm";
19258 case Format::eR16G16B16A16Uscaled: return "R16G16B16A16Uscaled";
19259 case Format::eR16G16B16A16Sscaled: return "R16G16B16A16Sscaled";
19260 case Format::eR16G16B16A16Uint: return "R16G16B16A16Uint";
19261 case Format::eR16G16B16A16Sint: return "R16G16B16A16Sint";
19262 case Format::eR16G16B16A16Sfloat: return "R16G16B16A16Sfloat";
19263 case Format::eR32Uint: return "R32Uint";
19264 case Format::eR32Sint: return "R32Sint";
19265 case Format::eR32Sfloat: return "R32Sfloat";
19266 case Format::eR32G32Uint: return "R32G32Uint";
19267 case Format::eR32G32Sint: return "R32G32Sint";
19268 case Format::eR32G32Sfloat: return "R32G32Sfloat";
19269 case Format::eR32G32B32Uint: return "R32G32B32Uint";
19270 case Format::eR32G32B32Sint: return "R32G32B32Sint";
19271 case Format::eR32G32B32Sfloat: return "R32G32B32Sfloat";
19272 case Format::eR32G32B32A32Uint: return "R32G32B32A32Uint";
19273 case Format::eR32G32B32A32Sint: return "R32G32B32A32Sint";
19274 case Format::eR32G32B32A32Sfloat: return "R32G32B32A32Sfloat";
19275 case Format::eR64Uint: return "R64Uint";
19276 case Format::eR64Sint: return "R64Sint";
19277 case Format::eR64Sfloat: return "R64Sfloat";
19278 case Format::eR64G64Uint: return "R64G64Uint";
19279 case Format::eR64G64Sint: return "R64G64Sint";
19280 case Format::eR64G64Sfloat: return "R64G64Sfloat";
19281 case Format::eR64G64B64Uint: return "R64G64B64Uint";
19282 case Format::eR64G64B64Sint: return "R64G64B64Sint";
19283 case Format::eR64G64B64Sfloat: return "R64G64B64Sfloat";
19284 case Format::eR64G64B64A64Uint: return "R64G64B64A64Uint";
19285 case Format::eR64G64B64A64Sint: return "R64G64B64A64Sint";
19286 case Format::eR64G64B64A64Sfloat: return "R64G64B64A64Sfloat";
19287 case Format::eB10G11R11UfloatPack32: return "B10G11R11UfloatPack32";
19288 case Format::eE5B9G9R9UfloatPack32: return "E5B9G9R9UfloatPack32";
19289 case Format::eD16Unorm: return "D16Unorm";
19290 case Format::eX8D24UnormPack32: return "X8D24UnormPack32";
19291 case Format::eD32Sfloat: return "D32Sfloat";
19292 case Format::eS8Uint: return "S8Uint";
19293 case Format::eD16UnormS8Uint: return "D16UnormS8Uint";
19294 case Format::eD24UnormS8Uint: return "D24UnormS8Uint";
19295 case Format::eD32SfloatS8Uint: return "D32SfloatS8Uint";
19296 case Format::eBc1RgbUnormBlock: return "Bc1RgbUnormBlock";
19297 case Format::eBc1RgbSrgbBlock: return "Bc1RgbSrgbBlock";
19298 case Format::eBc1RgbaUnormBlock: return "Bc1RgbaUnormBlock";
19299 case Format::eBc1RgbaSrgbBlock: return "Bc1RgbaSrgbBlock";
19300 case Format::eBc2UnormBlock: return "Bc2UnormBlock";
19301 case Format::eBc2SrgbBlock: return "Bc2SrgbBlock";
19302 case Format::eBc3UnormBlock: return "Bc3UnormBlock";
19303 case Format::eBc3SrgbBlock: return "Bc3SrgbBlock";
19304 case Format::eBc4UnormBlock: return "Bc4UnormBlock";
19305 case Format::eBc4SnormBlock: return "Bc4SnormBlock";
19306 case Format::eBc5UnormBlock: return "Bc5UnormBlock";
19307 case Format::eBc5SnormBlock: return "Bc5SnormBlock";
19308 case Format::eBc6HUfloatBlock: return "Bc6HUfloatBlock";
19309 case Format::eBc6HSfloatBlock: return "Bc6HSfloatBlock";
19310 case Format::eBc7UnormBlock: return "Bc7UnormBlock";
19311 case Format::eBc7SrgbBlock: return "Bc7SrgbBlock";
19312 case Format::eEtc2R8G8B8UnormBlock: return "Etc2R8G8B8UnormBlock";
19313 case Format::eEtc2R8G8B8SrgbBlock: return "Etc2R8G8B8SrgbBlock";
19314 case Format::eEtc2R8G8B8A1UnormBlock: return "Etc2R8G8B8A1UnormBlock";
19315 case Format::eEtc2R8G8B8A1SrgbBlock: return "Etc2R8G8B8A1SrgbBlock";
19316 case Format::eEtc2R8G8B8A8UnormBlock: return "Etc2R8G8B8A8UnormBlock";
19317 case Format::eEtc2R8G8B8A8SrgbBlock: return "Etc2R8G8B8A8SrgbBlock";
19318 case Format::eEacR11UnormBlock: return "EacR11UnormBlock";
19319 case Format::eEacR11SnormBlock: return "EacR11SnormBlock";
19320 case Format::eEacR11G11UnormBlock: return "EacR11G11UnormBlock";
19321 case Format::eEacR11G11SnormBlock: return "EacR11G11SnormBlock";
19322 case Format::eAstc4x4UnormBlock: return "Astc4x4UnormBlock";
19323 case Format::eAstc4x4SrgbBlock: return "Astc4x4SrgbBlock";
19324 case Format::eAstc5x4UnormBlock: return "Astc5x4UnormBlock";
19325 case Format::eAstc5x4SrgbBlock: return "Astc5x4SrgbBlock";
19326 case Format::eAstc5x5UnormBlock: return "Astc5x5UnormBlock";
19327 case Format::eAstc5x5SrgbBlock: return "Astc5x5SrgbBlock";
19328 case Format::eAstc6x5UnormBlock: return "Astc6x5UnormBlock";
19329 case Format::eAstc6x5SrgbBlock: return "Astc6x5SrgbBlock";
19330 case Format::eAstc6x6UnormBlock: return "Astc6x6UnormBlock";
19331 case Format::eAstc6x6SrgbBlock: return "Astc6x6SrgbBlock";
19332 case Format::eAstc8x5UnormBlock: return "Astc8x5UnormBlock";
19333 case Format::eAstc8x5SrgbBlock: return "Astc8x5SrgbBlock";
19334 case Format::eAstc8x6UnormBlock: return "Astc8x6UnormBlock";
19335 case Format::eAstc8x6SrgbBlock: return "Astc8x6SrgbBlock";
19336 case Format::eAstc8x8UnormBlock: return "Astc8x8UnormBlock";
19337 case Format::eAstc8x8SrgbBlock: return "Astc8x8SrgbBlock";
19338 case Format::eAstc10x5UnormBlock: return "Astc10x5UnormBlock";
19339 case Format::eAstc10x5SrgbBlock: return "Astc10x5SrgbBlock";
19340 case Format::eAstc10x6UnormBlock: return "Astc10x6UnormBlock";
19341 case Format::eAstc10x6SrgbBlock: return "Astc10x6SrgbBlock";
19342 case Format::eAstc10x8UnormBlock: return "Astc10x8UnormBlock";
19343 case Format::eAstc10x8SrgbBlock: return "Astc10x8SrgbBlock";
19344 case Format::eAstc10x10UnormBlock: return "Astc10x10UnormBlock";
19345 case Format::eAstc10x10SrgbBlock: return "Astc10x10SrgbBlock";
19346 case Format::eAstc12x10UnormBlock: return "Astc12x10UnormBlock";
19347 case Format::eAstc12x10SrgbBlock: return "Astc12x10SrgbBlock";
19348 case Format::eAstc12x12UnormBlock: return "Astc12x12UnormBlock";
19349 case Format::eAstc12x12SrgbBlock: return "Astc12x12SrgbBlock";
Lenny Komowebf33162016-08-26 14:10:08 -060019350 case Format::ePvrtc12BppUnormBlockIMG: return "Pvrtc12BppUnormBlockIMG";
19351 case Format::ePvrtc14BppUnormBlockIMG: return "Pvrtc14BppUnormBlockIMG";
19352 case Format::ePvrtc22BppUnormBlockIMG: return "Pvrtc22BppUnormBlockIMG";
19353 case Format::ePvrtc24BppUnormBlockIMG: return "Pvrtc24BppUnormBlockIMG";
19354 case Format::ePvrtc12BppSrgbBlockIMG: return "Pvrtc12BppSrgbBlockIMG";
19355 case Format::ePvrtc14BppSrgbBlockIMG: return "Pvrtc14BppSrgbBlockIMG";
19356 case Format::ePvrtc22BppSrgbBlockIMG: return "Pvrtc22BppSrgbBlockIMG";
19357 case Format::ePvrtc24BppSrgbBlockIMG: return "Pvrtc24BppSrgbBlockIMG";
Lenny Komowbed9b5c2016-08-11 11:23:15 -060019358 default: return "invalid";
19359 }
19360 }
19361
19362 inline std::string to_string(StructureType value)
19363 {
19364 switch (value)
19365 {
19366 case StructureType::eApplicationInfo: return "ApplicationInfo";
19367 case StructureType::eInstanceCreateInfo: return "InstanceCreateInfo";
19368 case StructureType::eDeviceQueueCreateInfo: return "DeviceQueueCreateInfo";
19369 case StructureType::eDeviceCreateInfo: return "DeviceCreateInfo";
19370 case StructureType::eSubmitInfo: return "SubmitInfo";
19371 case StructureType::eMemoryAllocateInfo: return "MemoryAllocateInfo";
19372 case StructureType::eMappedMemoryRange: return "MappedMemoryRange";
19373 case StructureType::eBindSparseInfo: return "BindSparseInfo";
19374 case StructureType::eFenceCreateInfo: return "FenceCreateInfo";
19375 case StructureType::eSemaphoreCreateInfo: return "SemaphoreCreateInfo";
19376 case StructureType::eEventCreateInfo: return "EventCreateInfo";
19377 case StructureType::eQueryPoolCreateInfo: return "QueryPoolCreateInfo";
19378 case StructureType::eBufferCreateInfo: return "BufferCreateInfo";
19379 case StructureType::eBufferViewCreateInfo: return "BufferViewCreateInfo";
19380 case StructureType::eImageCreateInfo: return "ImageCreateInfo";
19381 case StructureType::eImageViewCreateInfo: return "ImageViewCreateInfo";
19382 case StructureType::eShaderModuleCreateInfo: return "ShaderModuleCreateInfo";
19383 case StructureType::ePipelineCacheCreateInfo: return "PipelineCacheCreateInfo";
19384 case StructureType::ePipelineShaderStageCreateInfo: return "PipelineShaderStageCreateInfo";
19385 case StructureType::ePipelineVertexInputStateCreateInfo: return "PipelineVertexInputStateCreateInfo";
19386 case StructureType::ePipelineInputAssemblyStateCreateInfo: return "PipelineInputAssemblyStateCreateInfo";
19387 case StructureType::ePipelineTessellationStateCreateInfo: return "PipelineTessellationStateCreateInfo";
19388 case StructureType::ePipelineViewportStateCreateInfo: return "PipelineViewportStateCreateInfo";
19389 case StructureType::ePipelineRasterizationStateCreateInfo: return "PipelineRasterizationStateCreateInfo";
19390 case StructureType::ePipelineMultisampleStateCreateInfo: return "PipelineMultisampleStateCreateInfo";
19391 case StructureType::ePipelineDepthStencilStateCreateInfo: return "PipelineDepthStencilStateCreateInfo";
19392 case StructureType::ePipelineColorBlendStateCreateInfo: return "PipelineColorBlendStateCreateInfo";
19393 case StructureType::ePipelineDynamicStateCreateInfo: return "PipelineDynamicStateCreateInfo";
19394 case StructureType::eGraphicsPipelineCreateInfo: return "GraphicsPipelineCreateInfo";
19395 case StructureType::eComputePipelineCreateInfo: return "ComputePipelineCreateInfo";
19396 case StructureType::ePipelineLayoutCreateInfo: return "PipelineLayoutCreateInfo";
19397 case StructureType::eSamplerCreateInfo: return "SamplerCreateInfo";
19398 case StructureType::eDescriptorSetLayoutCreateInfo: return "DescriptorSetLayoutCreateInfo";
19399 case StructureType::eDescriptorPoolCreateInfo: return "DescriptorPoolCreateInfo";
19400 case StructureType::eDescriptorSetAllocateInfo: return "DescriptorSetAllocateInfo";
19401 case StructureType::eWriteDescriptorSet: return "WriteDescriptorSet";
19402 case StructureType::eCopyDescriptorSet: return "CopyDescriptorSet";
19403 case StructureType::eFramebufferCreateInfo: return "FramebufferCreateInfo";
19404 case StructureType::eRenderPassCreateInfo: return "RenderPassCreateInfo";
19405 case StructureType::eCommandPoolCreateInfo: return "CommandPoolCreateInfo";
19406 case StructureType::eCommandBufferAllocateInfo: return "CommandBufferAllocateInfo";
19407 case StructureType::eCommandBufferInheritanceInfo: return "CommandBufferInheritanceInfo";
19408 case StructureType::eCommandBufferBeginInfo: return "CommandBufferBeginInfo";
19409 case StructureType::eRenderPassBeginInfo: return "RenderPassBeginInfo";
19410 case StructureType::eBufferMemoryBarrier: return "BufferMemoryBarrier";
19411 case StructureType::eImageMemoryBarrier: return "ImageMemoryBarrier";
19412 case StructureType::eMemoryBarrier: return "MemoryBarrier";
19413 case StructureType::eLoaderInstanceCreateInfo: return "LoaderInstanceCreateInfo";
19414 case StructureType::eLoaderDeviceCreateInfo: return "LoaderDeviceCreateInfo";
19415 case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR";
19416 case StructureType::ePresentInfoKHR: return "PresentInfoKHR";
19417 case StructureType::eDisplayModeCreateInfoKHR: return "DisplayModeCreateInfoKHR";
19418 case StructureType::eDisplaySurfaceCreateInfoKHR: return "DisplaySurfaceCreateInfoKHR";
19419 case StructureType::eDisplayPresentInfoKHR: return "DisplayPresentInfoKHR";
19420 case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR";
19421 case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR";
19422 case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR";
19423 case StructureType::eMirSurfaceCreateInfoKHR: return "MirSurfaceCreateInfoKHR";
19424 case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR";
19425 case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR";
19426 case StructureType::eDebugReportCallbackCreateInfoEXT: return "DebugReportCallbackCreateInfoEXT";
19427 case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD";
19428 case StructureType::eDebugMarkerObjectNameInfoEXT: return "DebugMarkerObjectNameInfoEXT";
19429 case StructureType::eDebugMarkerObjectTagInfoEXT: return "DebugMarkerObjectTagInfoEXT";
19430 case StructureType::eDebugMarkerMarkerInfoEXT: return "DebugMarkerMarkerInfoEXT";
19431 case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV";
19432 case StructureType::eDedicatedAllocationBufferCreateInfoNV: return "DedicatedAllocationBufferCreateInfoNV";
19433 case StructureType::eDedicatedAllocationMemoryAllocateInfoNV: return "DedicatedAllocationMemoryAllocateInfoNV";
Lenny Komow6501c122016-08-31 15:03:49 -060019434 case StructureType::eExternalMemoryImageCreateInfoNV: return "ExternalMemoryImageCreateInfoNV";
19435 case StructureType::eExportMemoryAllocateInfoNV: return "ExportMemoryAllocateInfoNV";
19436 case StructureType::eImportMemoryWin32HandleInfoNV: return "ImportMemoryWin32HandleInfoNV";
19437 case StructureType::eExportMemoryWin32HandleInfoNV: return "ExportMemoryWin32HandleInfoNV";
19438 case StructureType::eWin32KeyedMutexAcquireReleaseInfoNV: return "Win32KeyedMutexAcquireReleaseInfoNV";
Lenny Komowbed9b5c2016-08-11 11:23:15 -060019439 default: return "invalid";
19440 }
19441 }
19442
19443 inline std::string to_string(SubpassContents value)
19444 {
19445 switch (value)
19446 {
19447 case SubpassContents::eInline: return "Inline";
19448 case SubpassContents::eSecondaryCommandBuffers: return "SecondaryCommandBuffers";
19449 default: return "invalid";
19450 }
19451 }
19452
19453 inline std::string to_string(DynamicState value)
19454 {
19455 switch (value)
19456 {
19457 case DynamicState::eViewport: return "Viewport";
19458 case DynamicState::eScissor: return "Scissor";
19459 case DynamicState::eLineWidth: return "LineWidth";
19460 case DynamicState::eDepthBias: return "DepthBias";
19461 case DynamicState::eBlendConstants: return "BlendConstants";
19462 case DynamicState::eDepthBounds: return "DepthBounds";
19463 case DynamicState::eStencilCompareMask: return "StencilCompareMask";
19464 case DynamicState::eStencilWriteMask: return "StencilWriteMask";
19465 case DynamicState::eStencilReference: return "StencilReference";
19466 default: return "invalid";
19467 }
19468 }
19469
19470 inline std::string to_string(QueueFlagBits value)
19471 {
19472 switch (value)
19473 {
19474 case QueueFlagBits::eGraphics: return "Graphics";
19475 case QueueFlagBits::eCompute: return "Compute";
19476 case QueueFlagBits::eTransfer: return "Transfer";
19477 case QueueFlagBits::eSparseBinding: return "SparseBinding";
19478 default: return "invalid";
19479 }
19480 }
19481
19482 inline std::string to_string(QueueFlags value)
19483 {
19484 if (!value) return "{}";
19485 std::string result;
19486 if (value & QueueFlagBits::eGraphics) result += "Graphics | ";
19487 if (value & QueueFlagBits::eCompute) result += "Compute | ";
19488 if (value & QueueFlagBits::eTransfer) result += "Transfer | ";
19489 if (value & QueueFlagBits::eSparseBinding) result += "SparseBinding | ";
19490 return "{" + result.substr(0, result.size() - 3) + "}";
19491 }
19492
19493 inline std::string to_string(MemoryPropertyFlagBits value)
19494 {
19495 switch (value)
19496 {
19497 case MemoryPropertyFlagBits::eDeviceLocal: return "DeviceLocal";
19498 case MemoryPropertyFlagBits::eHostVisible: return "HostVisible";
19499 case MemoryPropertyFlagBits::eHostCoherent: return "HostCoherent";
19500 case MemoryPropertyFlagBits::eHostCached: return "HostCached";
19501 case MemoryPropertyFlagBits::eLazilyAllocated: return "LazilyAllocated";
19502 default: return "invalid";
19503 }
19504 }
19505
19506 inline std::string to_string(MemoryPropertyFlags value)
19507 {
19508 if (!value) return "{}";
19509 std::string result;
19510 if (value & MemoryPropertyFlagBits::eDeviceLocal) result += "DeviceLocal | ";
19511 if (value & MemoryPropertyFlagBits::eHostVisible) result += "HostVisible | ";
19512 if (value & MemoryPropertyFlagBits::eHostCoherent) result += "HostCoherent | ";
19513 if (value & MemoryPropertyFlagBits::eHostCached) result += "HostCached | ";
19514 if (value & MemoryPropertyFlagBits::eLazilyAllocated) result += "LazilyAllocated | ";
19515 return "{" + result.substr(0, result.size() - 3) + "}";
19516 }
19517
19518 inline std::string to_string(MemoryHeapFlagBits value)
19519 {
19520 switch (value)
19521 {
19522 case MemoryHeapFlagBits::eDeviceLocal: return "DeviceLocal";
19523 default: return "invalid";
19524 }
19525 }
19526
19527 inline std::string to_string(MemoryHeapFlags value)
19528 {
19529 if (!value) return "{}";
19530 std::string result;
19531 if (value & MemoryHeapFlagBits::eDeviceLocal) result += "DeviceLocal | ";
19532 return "{" + result.substr(0, result.size() - 3) + "}";
19533 }
19534
19535 inline std::string to_string(AccessFlagBits value)
19536 {
19537 switch (value)
19538 {
19539 case AccessFlagBits::eIndirectCommandRead: return "IndirectCommandRead";
19540 case AccessFlagBits::eIndexRead: return "IndexRead";
19541 case AccessFlagBits::eVertexAttributeRead: return "VertexAttributeRead";
19542 case AccessFlagBits::eUniformRead: return "UniformRead";
19543 case AccessFlagBits::eInputAttachmentRead: return "InputAttachmentRead";
19544 case AccessFlagBits::eShaderRead: return "ShaderRead";
19545 case AccessFlagBits::eShaderWrite: return "ShaderWrite";
19546 case AccessFlagBits::eColorAttachmentRead: return "ColorAttachmentRead";
19547 case AccessFlagBits::eColorAttachmentWrite: return "ColorAttachmentWrite";
19548 case AccessFlagBits::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
19549 case AccessFlagBits::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
19550 case AccessFlagBits::eTransferRead: return "TransferRead";
19551 case AccessFlagBits::eTransferWrite: return "TransferWrite";
19552 case AccessFlagBits::eHostRead: return "HostRead";
19553 case AccessFlagBits::eHostWrite: return "HostWrite";
19554 case AccessFlagBits::eMemoryRead: return "MemoryRead";
19555 case AccessFlagBits::eMemoryWrite: return "MemoryWrite";
19556 default: return "invalid";
19557 }
19558 }
19559
19560 inline std::string to_string(AccessFlags value)
19561 {
19562 if (!value) return "{}";
19563 std::string result;
19564 if (value & AccessFlagBits::eIndirectCommandRead) result += "IndirectCommandRead | ";
19565 if (value & AccessFlagBits::eIndexRead) result += "IndexRead | ";
19566 if (value & AccessFlagBits::eVertexAttributeRead) result += "VertexAttributeRead | ";
19567 if (value & AccessFlagBits::eUniformRead) result += "UniformRead | ";
19568 if (value & AccessFlagBits::eInputAttachmentRead) result += "InputAttachmentRead | ";
19569 if (value & AccessFlagBits::eShaderRead) result += "ShaderRead | ";
19570 if (value & AccessFlagBits::eShaderWrite) result += "ShaderWrite | ";
19571 if (value & AccessFlagBits::eColorAttachmentRead) result += "ColorAttachmentRead | ";
19572 if (value & AccessFlagBits::eColorAttachmentWrite) result += "ColorAttachmentWrite | ";
19573 if (value & AccessFlagBits::eDepthStencilAttachmentRead) result += "DepthStencilAttachmentRead | ";
19574 if (value & AccessFlagBits::eDepthStencilAttachmentWrite) result += "DepthStencilAttachmentWrite | ";
19575 if (value & AccessFlagBits::eTransferRead) result += "TransferRead | ";
19576 if (value & AccessFlagBits::eTransferWrite) result += "TransferWrite | ";
19577 if (value & AccessFlagBits::eHostRead) result += "HostRead | ";
19578 if (value & AccessFlagBits::eHostWrite) result += "HostWrite | ";
19579 if (value & AccessFlagBits::eMemoryRead) result += "MemoryRead | ";
19580 if (value & AccessFlagBits::eMemoryWrite) result += "MemoryWrite | ";
19581 return "{" + result.substr(0, result.size() - 3) + "}";
19582 }
19583
19584 inline std::string to_string(BufferUsageFlagBits value)
19585 {
19586 switch (value)
19587 {
19588 case BufferUsageFlagBits::eTransferSrc: return "TransferSrc";
19589 case BufferUsageFlagBits::eTransferDst: return "TransferDst";
19590 case BufferUsageFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19591 case BufferUsageFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19592 case BufferUsageFlagBits::eUniformBuffer: return "UniformBuffer";
19593 case BufferUsageFlagBits::eStorageBuffer: return "StorageBuffer";
19594 case BufferUsageFlagBits::eIndexBuffer: return "IndexBuffer";
19595 case BufferUsageFlagBits::eVertexBuffer: return "VertexBuffer";
19596 case BufferUsageFlagBits::eIndirectBuffer: return "IndirectBuffer";
19597 default: return "invalid";
19598 }
19599 }
19600
19601 inline std::string to_string(BufferUsageFlags value)
19602 {
19603 if (!value) return "{}";
19604 std::string result;
19605 if (value & BufferUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19606 if (value & BufferUsageFlagBits::eTransferDst) result += "TransferDst | ";
19607 if (value & BufferUsageFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19608 if (value & BufferUsageFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19609 if (value & BufferUsageFlagBits::eUniformBuffer) result += "UniformBuffer | ";
19610 if (value & BufferUsageFlagBits::eStorageBuffer) result += "StorageBuffer | ";
19611 if (value & BufferUsageFlagBits::eIndexBuffer) result += "IndexBuffer | ";
19612 if (value & BufferUsageFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19613 if (value & BufferUsageFlagBits::eIndirectBuffer) result += "IndirectBuffer | ";
19614 return "{" + result.substr(0, result.size() - 3) + "}";
19615 }
19616
19617 inline std::string to_string(BufferCreateFlagBits value)
19618 {
19619 switch (value)
19620 {
19621 case BufferCreateFlagBits::eSparseBinding: return "SparseBinding";
19622 case BufferCreateFlagBits::eSparseResidency: return "SparseResidency";
19623 case BufferCreateFlagBits::eSparseAliased: return "SparseAliased";
19624 default: return "invalid";
19625 }
19626 }
19627
19628 inline std::string to_string(BufferCreateFlags value)
19629 {
19630 if (!value) return "{}";
19631 std::string result;
19632 if (value & BufferCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19633 if (value & BufferCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19634 if (value & BufferCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19635 return "{" + result.substr(0, result.size() - 3) + "}";
19636 }
19637
19638 inline std::string to_string(ShaderStageFlagBits value)
19639 {
19640 switch (value)
19641 {
19642 case ShaderStageFlagBits::eVertex: return "Vertex";
19643 case ShaderStageFlagBits::eTessellationControl: return "TessellationControl";
19644 case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation";
19645 case ShaderStageFlagBits::eGeometry: return "Geometry";
19646 case ShaderStageFlagBits::eFragment: return "Fragment";
19647 case ShaderStageFlagBits::eCompute: return "Compute";
19648 case ShaderStageFlagBits::eAllGraphics: return "AllGraphics";
19649 case ShaderStageFlagBits::eAll: return "All";
19650 default: return "invalid";
19651 }
19652 }
19653
19654 inline std::string to_string(ShaderStageFlags value)
19655 {
19656 if (!value) return "{}";
19657 std::string result;
19658 if (value & ShaderStageFlagBits::eVertex) result += "Vertex | ";
19659 if (value & ShaderStageFlagBits::eTessellationControl) result += "TessellationControl | ";
19660 if (value & ShaderStageFlagBits::eTessellationEvaluation) result += "TessellationEvaluation | ";
19661 if (value & ShaderStageFlagBits::eGeometry) result += "Geometry | ";
19662 if (value & ShaderStageFlagBits::eFragment) result += "Fragment | ";
19663 if (value & ShaderStageFlagBits::eCompute) result += "Compute | ";
19664 if (value & ShaderStageFlagBits::eAllGraphics) result += "AllGraphics | ";
19665 if (value & ShaderStageFlagBits::eAll) result += "All | ";
19666 return "{" + result.substr(0, result.size() - 3) + "}";
19667 }
19668
19669 inline std::string to_string(ImageUsageFlagBits value)
19670 {
19671 switch (value)
19672 {
19673 case ImageUsageFlagBits::eTransferSrc: return "TransferSrc";
19674 case ImageUsageFlagBits::eTransferDst: return "TransferDst";
19675 case ImageUsageFlagBits::eSampled: return "Sampled";
19676 case ImageUsageFlagBits::eStorage: return "Storage";
19677 case ImageUsageFlagBits::eColorAttachment: return "ColorAttachment";
19678 case ImageUsageFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
19679 case ImageUsageFlagBits::eTransientAttachment: return "TransientAttachment";
19680 case ImageUsageFlagBits::eInputAttachment: return "InputAttachment";
19681 default: return "invalid";
19682 }
19683 }
19684
19685 inline std::string to_string(ImageUsageFlags value)
19686 {
19687 if (!value) return "{}";
19688 std::string result;
19689 if (value & ImageUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19690 if (value & ImageUsageFlagBits::eTransferDst) result += "TransferDst | ";
19691 if (value & ImageUsageFlagBits::eSampled) result += "Sampled | ";
19692 if (value & ImageUsageFlagBits::eStorage) result += "Storage | ";
19693 if (value & ImageUsageFlagBits::eColorAttachment) result += "ColorAttachment | ";
19694 if (value & ImageUsageFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
19695 if (value & ImageUsageFlagBits::eTransientAttachment) result += "TransientAttachment | ";
19696 if (value & ImageUsageFlagBits::eInputAttachment) result += "InputAttachment | ";
19697 return "{" + result.substr(0, result.size() - 3) + "}";
19698 }
19699
19700 inline std::string to_string(ImageCreateFlagBits value)
19701 {
19702 switch (value)
19703 {
19704 case ImageCreateFlagBits::eSparseBinding: return "SparseBinding";
19705 case ImageCreateFlagBits::eSparseResidency: return "SparseResidency";
19706 case ImageCreateFlagBits::eSparseAliased: return "SparseAliased";
19707 case ImageCreateFlagBits::eMutableFormat: return "MutableFormat";
19708 case ImageCreateFlagBits::eCubeCompatible: return "CubeCompatible";
19709 default: return "invalid";
19710 }
19711 }
19712
19713 inline std::string to_string(ImageCreateFlags value)
19714 {
19715 if (!value) return "{}";
19716 std::string result;
19717 if (value & ImageCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19718 if (value & ImageCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19719 if (value & ImageCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19720 if (value & ImageCreateFlagBits::eMutableFormat) result += "MutableFormat | ";
19721 if (value & ImageCreateFlagBits::eCubeCompatible) result += "CubeCompatible | ";
19722 return "{" + result.substr(0, result.size() - 3) + "}";
19723 }
19724
19725 inline std::string to_string(PipelineCreateFlagBits value)
19726 {
19727 switch (value)
19728 {
19729 case PipelineCreateFlagBits::eDisableOptimization: return "DisableOptimization";
19730 case PipelineCreateFlagBits::eAllowDerivatives: return "AllowDerivatives";
19731 case PipelineCreateFlagBits::eDerivative: return "Derivative";
19732 default: return "invalid";
19733 }
19734 }
19735
19736 inline std::string to_string(PipelineCreateFlags value)
19737 {
19738 if (!value) return "{}";
19739 std::string result;
19740 if (value & PipelineCreateFlagBits::eDisableOptimization) result += "DisableOptimization | ";
19741 if (value & PipelineCreateFlagBits::eAllowDerivatives) result += "AllowDerivatives | ";
19742 if (value & PipelineCreateFlagBits::eDerivative) result += "Derivative | ";
19743 return "{" + result.substr(0, result.size() - 3) + "}";
19744 }
19745
19746 inline std::string to_string(ColorComponentFlagBits value)
19747 {
19748 switch (value)
19749 {
19750 case ColorComponentFlagBits::eR: return "R";
19751 case ColorComponentFlagBits::eG: return "G";
19752 case ColorComponentFlagBits::eB: return "B";
19753 case ColorComponentFlagBits::eA: return "A";
19754 default: return "invalid";
19755 }
19756 }
19757
19758 inline std::string to_string(ColorComponentFlags value)
19759 {
19760 if (!value) return "{}";
19761 std::string result;
19762 if (value & ColorComponentFlagBits::eR) result += "R | ";
19763 if (value & ColorComponentFlagBits::eG) result += "G | ";
19764 if (value & ColorComponentFlagBits::eB) result += "B | ";
19765 if (value & ColorComponentFlagBits::eA) result += "A | ";
19766 return "{" + result.substr(0, result.size() - 3) + "}";
19767 }
19768
19769 inline std::string to_string(FenceCreateFlagBits value)
19770 {
19771 switch (value)
19772 {
19773 case FenceCreateFlagBits::eSignaled: return "Signaled";
19774 default: return "invalid";
19775 }
19776 }
19777
19778 inline std::string to_string(FenceCreateFlags value)
19779 {
19780 if (!value) return "{}";
19781 std::string result;
19782 if (value & FenceCreateFlagBits::eSignaled) result += "Signaled | ";
19783 return "{" + result.substr(0, result.size() - 3) + "}";
19784 }
19785
19786 inline std::string to_string(FormatFeatureFlagBits value)
19787 {
19788 switch (value)
19789 {
19790 case FormatFeatureFlagBits::eSampledImage: return "SampledImage";
19791 case FormatFeatureFlagBits::eStorageImage: return "StorageImage";
19792 case FormatFeatureFlagBits::eStorageImageAtomic: return "StorageImageAtomic";
19793 case FormatFeatureFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19794 case FormatFeatureFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19795 case FormatFeatureFlagBits::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic";
19796 case FormatFeatureFlagBits::eVertexBuffer: return "VertexBuffer";
19797 case FormatFeatureFlagBits::eColorAttachment: return "ColorAttachment";
19798 case FormatFeatureFlagBits::eColorAttachmentBlend: return "ColorAttachmentBlend";
19799 case FormatFeatureFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
19800 case FormatFeatureFlagBits::eBlitSrc: return "BlitSrc";
19801 case FormatFeatureFlagBits::eBlitDst: return "BlitDst";
19802 case FormatFeatureFlagBits::eSampledImageFilterLinear: return "SampledImageFilterLinear";
19803 case FormatFeatureFlagBits::eSampledImageFilterCubicIMG: return "SampledImageFilterCubicIMG";
19804 default: return "invalid";
19805 }
19806 }
19807
19808 inline std::string to_string(FormatFeatureFlags value)
19809 {
19810 if (!value) return "{}";
19811 std::string result;
19812 if (value & FormatFeatureFlagBits::eSampledImage) result += "SampledImage | ";
19813 if (value & FormatFeatureFlagBits::eStorageImage) result += "StorageImage | ";
19814 if (value & FormatFeatureFlagBits::eStorageImageAtomic) result += "StorageImageAtomic | ";
19815 if (value & FormatFeatureFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19816 if (value & FormatFeatureFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19817 if (value & FormatFeatureFlagBits::eStorageTexelBufferAtomic) result += "StorageTexelBufferAtomic | ";
19818 if (value & FormatFeatureFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19819 if (value & FormatFeatureFlagBits::eColorAttachment) result += "ColorAttachment | ";
19820 if (value & FormatFeatureFlagBits::eColorAttachmentBlend) result += "ColorAttachmentBlend | ";
19821 if (value & FormatFeatureFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
19822 if (value & FormatFeatureFlagBits::eBlitSrc) result += "BlitSrc | ";
19823 if (value & FormatFeatureFlagBits::eBlitDst) result += "BlitDst | ";
19824 if (value & FormatFeatureFlagBits::eSampledImageFilterLinear) result += "SampledImageFilterLinear | ";
19825 if (value & FormatFeatureFlagBits::eSampledImageFilterCubicIMG) result += "SampledImageFilterCubicIMG | ";
19826 return "{" + result.substr(0, result.size() - 3) + "}";
19827 }
19828
19829 inline std::string to_string(QueryControlFlagBits value)
19830 {
19831 switch (value)
19832 {
19833 case QueryControlFlagBits::ePrecise: return "Precise";
19834 default: return "invalid";
19835 }
19836 }
19837
19838 inline std::string to_string(QueryControlFlags value)
19839 {
19840 if (!value) return "{}";
19841 std::string result;
19842 if (value & QueryControlFlagBits::ePrecise) result += "Precise | ";
19843 return "{" + result.substr(0, result.size() - 3) + "}";
19844 }
19845
19846 inline std::string to_string(QueryResultFlagBits value)
19847 {
19848 switch (value)
19849 {
19850 case QueryResultFlagBits::e64: return "64";
19851 case QueryResultFlagBits::eWait: return "Wait";
19852 case QueryResultFlagBits::eWithAvailability: return "WithAvailability";
19853 case QueryResultFlagBits::ePartial: return "Partial";
19854 default: return "invalid";
19855 }
19856 }
19857
19858 inline std::string to_string(QueryResultFlags value)
19859 {
19860 if (!value) return "{}";
19861 std::string result;
19862 if (value & QueryResultFlagBits::e64) result += "64 | ";
19863 if (value & QueryResultFlagBits::eWait) result += "Wait | ";
19864 if (value & QueryResultFlagBits::eWithAvailability) result += "WithAvailability | ";
19865 if (value & QueryResultFlagBits::ePartial) result += "Partial | ";
19866 return "{" + result.substr(0, result.size() - 3) + "}";
19867 }
19868
19869 inline std::string to_string(CommandBufferUsageFlagBits value)
19870 {
19871 switch (value)
19872 {
19873 case CommandBufferUsageFlagBits::eOneTimeSubmit: return "OneTimeSubmit";
19874 case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue";
19875 case CommandBufferUsageFlagBits::eSimultaneousUse: return "SimultaneousUse";
19876 default: return "invalid";
19877 }
19878 }
19879
19880 inline std::string to_string(CommandBufferUsageFlags value)
19881 {
19882 if (!value) return "{}";
19883 std::string result;
19884 if (value & CommandBufferUsageFlagBits::eOneTimeSubmit) result += "OneTimeSubmit | ";
19885 if (value & CommandBufferUsageFlagBits::eRenderPassContinue) result += "RenderPassContinue | ";
19886 if (value & CommandBufferUsageFlagBits::eSimultaneousUse) result += "SimultaneousUse | ";
19887 return "{" + result.substr(0, result.size() - 3) + "}";
19888 }
19889
19890 inline std::string to_string(QueryPipelineStatisticFlagBits value)
19891 {
19892 switch (value)
19893 {
19894 case QueryPipelineStatisticFlagBits::eInputAssemblyVertices: return "InputAssemblyVertices";
19895 case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives: return "InputAssemblyPrimitives";
19896 case QueryPipelineStatisticFlagBits::eVertexShaderInvocations: return "VertexShaderInvocations";
19897 case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations: return "GeometryShaderInvocations";
19898 case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives: return "GeometryShaderPrimitives";
19899 case QueryPipelineStatisticFlagBits::eClippingInvocations: return "ClippingInvocations";
19900 case QueryPipelineStatisticFlagBits::eClippingPrimitives: return "ClippingPrimitives";
19901 case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations: return "FragmentShaderInvocations";
19902 case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches: return "TessellationControlShaderPatches";
19903 case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations";
19904 case QueryPipelineStatisticFlagBits::eComputeShaderInvocations: return "ComputeShaderInvocations";
19905 default: return "invalid";
19906 }
19907 }
19908
19909 inline std::string to_string(QueryPipelineStatisticFlags value)
19910 {
19911 if (!value) return "{}";
19912 std::string result;
19913 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices) result += "InputAssemblyVertices | ";
19914 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives) result += "InputAssemblyPrimitives | ";
19915 if (value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations) result += "VertexShaderInvocations | ";
19916 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations) result += "GeometryShaderInvocations | ";
19917 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives) result += "GeometryShaderPrimitives | ";
19918 if (value & QueryPipelineStatisticFlagBits::eClippingInvocations) result += "ClippingInvocations | ";
19919 if (value & QueryPipelineStatisticFlagBits::eClippingPrimitives) result += "ClippingPrimitives | ";
19920 if (value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations) result += "FragmentShaderInvocations | ";
19921 if (value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches) result += "TessellationControlShaderPatches | ";
19922 if (value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations) result += "TessellationEvaluationShaderInvocations | ";
19923 if (value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations) result += "ComputeShaderInvocations | ";
19924 return "{" + result.substr(0, result.size() - 3) + "}";
19925 }
19926
19927 inline std::string to_string(ImageAspectFlagBits value)
19928 {
19929 switch (value)
19930 {
19931 case ImageAspectFlagBits::eColor: return "Color";
19932 case ImageAspectFlagBits::eDepth: return "Depth";
19933 case ImageAspectFlagBits::eStencil: return "Stencil";
19934 case ImageAspectFlagBits::eMetadata: return "Metadata";
19935 default: return "invalid";
19936 }
19937 }
19938
19939 inline std::string to_string(ImageAspectFlags value)
19940 {
19941 if (!value) return "{}";
19942 std::string result;
19943 if (value & ImageAspectFlagBits::eColor) result += "Color | ";
19944 if (value & ImageAspectFlagBits::eDepth) result += "Depth | ";
19945 if (value & ImageAspectFlagBits::eStencil) result += "Stencil | ";
19946 if (value & ImageAspectFlagBits::eMetadata) result += "Metadata | ";
19947 return "{" + result.substr(0, result.size() - 3) + "}";
19948 }
19949
19950 inline std::string to_string(SparseImageFormatFlagBits value)
19951 {
19952 switch (value)
19953 {
19954 case SparseImageFormatFlagBits::eSingleMiptail: return "SingleMiptail";
19955 case SparseImageFormatFlagBits::eAlignedMipSize: return "AlignedMipSize";
19956 case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize";
19957 default: return "invalid";
19958 }
19959 }
19960
19961 inline std::string to_string(SparseImageFormatFlags value)
19962 {
19963 if (!value) return "{}";
19964 std::string result;
19965 if (value & SparseImageFormatFlagBits::eSingleMiptail) result += "SingleMiptail | ";
19966 if (value & SparseImageFormatFlagBits::eAlignedMipSize) result += "AlignedMipSize | ";
19967 if (value & SparseImageFormatFlagBits::eNonstandardBlockSize) result += "NonstandardBlockSize | ";
19968 return "{" + result.substr(0, result.size() - 3) + "}";
19969 }
19970
19971 inline std::string to_string(SparseMemoryBindFlagBits value)
19972 {
19973 switch (value)
19974 {
19975 case SparseMemoryBindFlagBits::eMetadata: return "Metadata";
19976 default: return "invalid";
19977 }
19978 }
19979
19980 inline std::string to_string(SparseMemoryBindFlags value)
19981 {
19982 if (!value) return "{}";
19983 std::string result;
19984 if (value & SparseMemoryBindFlagBits::eMetadata) result += "Metadata | ";
19985 return "{" + result.substr(0, result.size() - 3) + "}";
19986 }
19987
19988 inline std::string to_string(PipelineStageFlagBits value)
19989 {
19990 switch (value)
19991 {
19992 case PipelineStageFlagBits::eTopOfPipe: return "TopOfPipe";
19993 case PipelineStageFlagBits::eDrawIndirect: return "DrawIndirect";
19994 case PipelineStageFlagBits::eVertexInput: return "VertexInput";
19995 case PipelineStageFlagBits::eVertexShader: return "VertexShader";
19996 case PipelineStageFlagBits::eTessellationControlShader: return "TessellationControlShader";
19997 case PipelineStageFlagBits::eTessellationEvaluationShader: return "TessellationEvaluationShader";
19998 case PipelineStageFlagBits::eGeometryShader: return "GeometryShader";
19999 case PipelineStageFlagBits::eFragmentShader: return "FragmentShader";
20000 case PipelineStageFlagBits::eEarlyFragmentTests: return "EarlyFragmentTests";
20001 case PipelineStageFlagBits::eLateFragmentTests: return "LateFragmentTests";
20002 case PipelineStageFlagBits::eColorAttachmentOutput: return "ColorAttachmentOutput";
20003 case PipelineStageFlagBits::eComputeShader: return "ComputeShader";
20004 case PipelineStageFlagBits::eTransfer: return "Transfer";
20005 case PipelineStageFlagBits::eBottomOfPipe: return "BottomOfPipe";
20006 case PipelineStageFlagBits::eHost: return "Host";
20007 case PipelineStageFlagBits::eAllGraphics: return "AllGraphics";
20008 case PipelineStageFlagBits::eAllCommands: return "AllCommands";
20009 default: return "invalid";
20010 }
20011 }
20012
20013 inline std::string to_string(PipelineStageFlags value)
20014 {
20015 if (!value) return "{}";
20016 std::string result;
20017 if (value & PipelineStageFlagBits::eTopOfPipe) result += "TopOfPipe | ";
20018 if (value & PipelineStageFlagBits::eDrawIndirect) result += "DrawIndirect | ";
20019 if (value & PipelineStageFlagBits::eVertexInput) result += "VertexInput | ";
20020 if (value & PipelineStageFlagBits::eVertexShader) result += "VertexShader | ";
20021 if (value & PipelineStageFlagBits::eTessellationControlShader) result += "TessellationControlShader | ";
20022 if (value & PipelineStageFlagBits::eTessellationEvaluationShader) result += "TessellationEvaluationShader | ";
20023 if (value & PipelineStageFlagBits::eGeometryShader) result += "GeometryShader | ";
20024 if (value & PipelineStageFlagBits::eFragmentShader) result += "FragmentShader | ";
20025 if (value & PipelineStageFlagBits::eEarlyFragmentTests) result += "EarlyFragmentTests | ";
20026 if (value & PipelineStageFlagBits::eLateFragmentTests) result += "LateFragmentTests | ";
20027 if (value & PipelineStageFlagBits::eColorAttachmentOutput) result += "ColorAttachmentOutput | ";
20028 if (value & PipelineStageFlagBits::eComputeShader) result += "ComputeShader | ";
20029 if (value & PipelineStageFlagBits::eTransfer) result += "Transfer | ";
20030 if (value & PipelineStageFlagBits::eBottomOfPipe) result += "BottomOfPipe | ";
20031 if (value & PipelineStageFlagBits::eHost) result += "Host | ";
20032 if (value & PipelineStageFlagBits::eAllGraphics) result += "AllGraphics | ";
20033 if (value & PipelineStageFlagBits::eAllCommands) result += "AllCommands | ";
20034 return "{" + result.substr(0, result.size() - 3) + "}";
20035 }
20036
20037 inline std::string to_string(CommandPoolCreateFlagBits value)
20038 {
20039 switch (value)
20040 {
20041 case CommandPoolCreateFlagBits::eTransient: return "Transient";
20042 case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer";
20043 default: return "invalid";
20044 }
20045 }
20046
20047 inline std::string to_string(CommandPoolCreateFlags value)
20048 {
20049 if (!value) return "{}";
20050 std::string result;
20051 if (value & CommandPoolCreateFlagBits::eTransient) result += "Transient | ";
20052 if (value & CommandPoolCreateFlagBits::eResetCommandBuffer) result += "ResetCommandBuffer | ";
20053 return "{" + result.substr(0, result.size() - 3) + "}";
20054 }
20055
20056 inline std::string to_string(CommandPoolResetFlagBits value)
20057 {
20058 switch (value)
20059 {
20060 case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources";
20061 default: return "invalid";
20062 }
20063 }
20064
20065 inline std::string to_string(CommandPoolResetFlags value)
20066 {
20067 if (!value) return "{}";
20068 std::string result;
20069 if (value & CommandPoolResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
20070 return "{" + result.substr(0, result.size() - 3) + "}";
20071 }
20072
20073 inline std::string to_string(CommandBufferResetFlagBits value)
20074 {
20075 switch (value)
20076 {
20077 case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources";
20078 default: return "invalid";
20079 }
20080 }
20081
20082 inline std::string to_string(CommandBufferResetFlags value)
20083 {
20084 if (!value) return "{}";
20085 std::string result;
20086 if (value & CommandBufferResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
20087 return "{" + result.substr(0, result.size() - 3) + "}";
20088 }
20089
20090 inline std::string to_string(SampleCountFlagBits value)
20091 {
20092 switch (value)
20093 {
20094 case SampleCountFlagBits::e1: return "1";
20095 case SampleCountFlagBits::e2: return "2";
20096 case SampleCountFlagBits::e4: return "4";
20097 case SampleCountFlagBits::e8: return "8";
20098 case SampleCountFlagBits::e16: return "16";
20099 case SampleCountFlagBits::e32: return "32";
20100 case SampleCountFlagBits::e64: return "64";
20101 default: return "invalid";
20102 }
20103 }
20104
20105 inline std::string to_string(SampleCountFlags value)
20106 {
20107 if (!value) return "{}";
20108 std::string result;
20109 if (value & SampleCountFlagBits::e1) result += "1 | ";
20110 if (value & SampleCountFlagBits::e2) result += "2 | ";
20111 if (value & SampleCountFlagBits::e4) result += "4 | ";
20112 if (value & SampleCountFlagBits::e8) result += "8 | ";
20113 if (value & SampleCountFlagBits::e16) result += "16 | ";
20114 if (value & SampleCountFlagBits::e32) result += "32 | ";
20115 if (value & SampleCountFlagBits::e64) result += "64 | ";
20116 return "{" + result.substr(0, result.size() - 3) + "}";
20117 }
20118
20119 inline std::string to_string(AttachmentDescriptionFlagBits value)
20120 {
20121 switch (value)
20122 {
20123 case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias";
20124 default: return "invalid";
20125 }
20126 }
20127
20128 inline std::string to_string(AttachmentDescriptionFlags value)
20129 {
20130 if (!value) return "{}";
20131 std::string result;
20132 if (value & AttachmentDescriptionFlagBits::eMayAlias) result += "MayAlias | ";
20133 return "{" + result.substr(0, result.size() - 3) + "}";
20134 }
20135
20136 inline std::string to_string(StencilFaceFlagBits value)
20137 {
20138 switch (value)
20139 {
20140 case StencilFaceFlagBits::eFront: return "Front";
20141 case StencilFaceFlagBits::eBack: return "Back";
20142 case StencilFaceFlagBits::eVkStencilFrontAndBack: return "VkStencilFrontAndBack";
20143 default: return "invalid";
20144 }
20145 }
20146
20147 inline std::string to_string(StencilFaceFlags value)
20148 {
20149 if (!value) return "{}";
20150 std::string result;
20151 if (value & StencilFaceFlagBits::eFront) result += "Front | ";
20152 if (value & StencilFaceFlagBits::eBack) result += "Back | ";
20153 if (value & StencilFaceFlagBits::eVkStencilFrontAndBack) result += "VkStencilFrontAndBack | ";
20154 return "{" + result.substr(0, result.size() - 3) + "}";
20155 }
20156
20157 inline std::string to_string(DescriptorPoolCreateFlagBits value)
20158 {
20159 switch (value)
20160 {
20161 case DescriptorPoolCreateFlagBits::eFreeDescriptorSet: return "FreeDescriptorSet";
20162 default: return "invalid";
20163 }
20164 }
20165
20166 inline std::string to_string(DescriptorPoolCreateFlags value)
20167 {
20168 if (!value) return "{}";
20169 std::string result;
20170 if (value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet) result += "FreeDescriptorSet | ";
20171 return "{" + result.substr(0, result.size() - 3) + "}";
20172 }
20173
20174 inline std::string to_string(DependencyFlagBits value)
20175 {
20176 switch (value)
20177 {
20178 case DependencyFlagBits::eByRegion: return "ByRegion";
20179 default: return "invalid";
20180 }
20181 }
20182
20183 inline std::string to_string(DependencyFlags value)
20184 {
20185 if (!value) return "{}";
20186 std::string result;
20187 if (value & DependencyFlagBits::eByRegion) result += "ByRegion | ";
20188 return "{" + result.substr(0, result.size() - 3) + "}";
20189 }
20190
20191 inline std::string to_string(PresentModeKHR value)
20192 {
20193 switch (value)
20194 {
20195 case PresentModeKHR::eImmediate: return "Immediate";
20196 case PresentModeKHR::eMailbox: return "Mailbox";
20197 case PresentModeKHR::eFifo: return "Fifo";
20198 case PresentModeKHR::eFifoRelaxed: return "FifoRelaxed";
20199 default: return "invalid";
20200 }
20201 }
20202
20203 inline std::string to_string(ColorSpaceKHR value)
20204 {
20205 switch (value)
20206 {
20207 case ColorSpaceKHR::eSrgbNonlinear: return "SrgbNonlinear";
20208 default: return "invalid";
20209 }
20210 }
20211
20212 inline std::string to_string(DisplayPlaneAlphaFlagBitsKHR value)
20213 {
20214 switch (value)
20215 {
20216 case DisplayPlaneAlphaFlagBitsKHR::eOpaque: return "Opaque";
20217 case DisplayPlaneAlphaFlagBitsKHR::eGlobal: return "Global";
20218 case DisplayPlaneAlphaFlagBitsKHR::ePerPixel: return "PerPixel";
20219 case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied";
20220 default: return "invalid";
20221 }
20222 }
20223
20224 inline std::string to_string(DisplayPlaneAlphaFlagsKHR value)
20225 {
20226 if (!value) return "{}";
20227 std::string result;
20228 if (value & DisplayPlaneAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
20229 if (value & DisplayPlaneAlphaFlagBitsKHR::eGlobal) result += "Global | ";
20230 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel) result += "PerPixel | ";
20231 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied) result += "PerPixelPremultiplied | ";
20232 return "{" + result.substr(0, result.size() - 3) + "}";
20233 }
20234
20235 inline std::string to_string(CompositeAlphaFlagBitsKHR value)
20236 {
20237 switch (value)
20238 {
20239 case CompositeAlphaFlagBitsKHR::eOpaque: return "Opaque";
20240 case CompositeAlphaFlagBitsKHR::ePreMultiplied: return "PreMultiplied";
20241 case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied";
20242 case CompositeAlphaFlagBitsKHR::eInherit: return "Inherit";
20243 default: return "invalid";
20244 }
20245 }
20246
20247 inline std::string to_string(CompositeAlphaFlagsKHR value)
20248 {
20249 if (!value) return "{}";
20250 std::string result;
20251 if (value & CompositeAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
20252 if (value & CompositeAlphaFlagBitsKHR::ePreMultiplied) result += "PreMultiplied | ";
20253 if (value & CompositeAlphaFlagBitsKHR::ePostMultiplied) result += "PostMultiplied | ";
20254 if (value & CompositeAlphaFlagBitsKHR::eInherit) result += "Inherit | ";
20255 return "{" + result.substr(0, result.size() - 3) + "}";
20256 }
20257
20258 inline std::string to_string(SurfaceTransformFlagBitsKHR value)
20259 {
20260 switch (value)
20261 {
20262 case SurfaceTransformFlagBitsKHR::eIdentity: return "Identity";
20263 case SurfaceTransformFlagBitsKHR::eRotate90: return "Rotate90";
20264 case SurfaceTransformFlagBitsKHR::eRotate180: return "Rotate180";
20265 case SurfaceTransformFlagBitsKHR::eRotate270: return "Rotate270";
20266 case SurfaceTransformFlagBitsKHR::eHorizontalMirror: return "HorizontalMirror";
20267 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90: return "HorizontalMirrorRotate90";
20268 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180";
20269 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270";
20270 case SurfaceTransformFlagBitsKHR::eInherit: return "Inherit";
20271 default: return "invalid";
20272 }
20273 }
20274
20275 inline std::string to_string(SurfaceTransformFlagsKHR value)
20276 {
20277 if (!value) return "{}";
20278 std::string result;
20279 if (value & SurfaceTransformFlagBitsKHR::eIdentity) result += "Identity | ";
20280 if (value & SurfaceTransformFlagBitsKHR::eRotate90) result += "Rotate90 | ";
20281 if (value & SurfaceTransformFlagBitsKHR::eRotate180) result += "Rotate180 | ";
20282 if (value & SurfaceTransformFlagBitsKHR::eRotate270) result += "Rotate270 | ";
20283 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirror) result += "HorizontalMirror | ";
20284 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90) result += "HorizontalMirrorRotate90 | ";
20285 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180) result += "HorizontalMirrorRotate180 | ";
20286 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270) result += "HorizontalMirrorRotate270 | ";
20287 if (value & SurfaceTransformFlagBitsKHR::eInherit) result += "Inherit | ";
20288 return "{" + result.substr(0, result.size() - 3) + "}";
20289 }
20290
20291 inline std::string to_string(DebugReportFlagBitsEXT value)
20292 {
20293 switch (value)
20294 {
20295 case DebugReportFlagBitsEXT::eInformation: return "Information";
20296 case DebugReportFlagBitsEXT::eWarning: return "Warning";
20297 case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning";
20298 case DebugReportFlagBitsEXT::eError: return "Error";
20299 case DebugReportFlagBitsEXT::eDebug: return "Debug";
20300 default: return "invalid";
20301 }
20302 }
20303
20304 inline std::string to_string(DebugReportFlagsEXT value)
20305 {
20306 if (!value) return "{}";
20307 std::string result;
20308 if (value & DebugReportFlagBitsEXT::eInformation) result += "Information | ";
20309 if (value & DebugReportFlagBitsEXT::eWarning) result += "Warning | ";
20310 if (value & DebugReportFlagBitsEXT::ePerformanceWarning) result += "PerformanceWarning | ";
20311 if (value & DebugReportFlagBitsEXT::eError) result += "Error | ";
20312 if (value & DebugReportFlagBitsEXT::eDebug) result += "Debug | ";
20313 return "{" + result.substr(0, result.size() - 3) + "}";
20314 }
20315
20316 inline std::string to_string(DebugReportObjectTypeEXT value)
20317 {
20318 switch (value)
20319 {
20320 case DebugReportObjectTypeEXT::eUnknown: return "Unknown";
20321 case DebugReportObjectTypeEXT::eInstance: return "Instance";
20322 case DebugReportObjectTypeEXT::ePhysicalDevice: return "PhysicalDevice";
20323 case DebugReportObjectTypeEXT::eDevice: return "Device";
20324 case DebugReportObjectTypeEXT::eQueue: return "Queue";
20325 case DebugReportObjectTypeEXT::eSemaphore: return "Semaphore";
20326 case DebugReportObjectTypeEXT::eCommandBuffer: return "CommandBuffer";
20327 case DebugReportObjectTypeEXT::eFence: return "Fence";
20328 case DebugReportObjectTypeEXT::eDeviceMemory: return "DeviceMemory";
20329 case DebugReportObjectTypeEXT::eBuffer: return "Buffer";
20330 case DebugReportObjectTypeEXT::eImage: return "Image";
20331 case DebugReportObjectTypeEXT::eEvent: return "Event";
20332 case DebugReportObjectTypeEXT::eQueryPool: return "QueryPool";
20333 case DebugReportObjectTypeEXT::eBufferView: return "BufferView";
20334 case DebugReportObjectTypeEXT::eImageView: return "ImageView";
20335 case DebugReportObjectTypeEXT::eShaderModule: return "ShaderModule";
20336 case DebugReportObjectTypeEXT::ePipelineCache: return "PipelineCache";
20337 case DebugReportObjectTypeEXT::ePipelineLayout: return "PipelineLayout";
20338 case DebugReportObjectTypeEXT::eRenderPass: return "RenderPass";
20339 case DebugReportObjectTypeEXT::ePipeline: return "Pipeline";
20340 case DebugReportObjectTypeEXT::eDescriptorSetLayout: return "DescriptorSetLayout";
20341 case DebugReportObjectTypeEXT::eSampler: return "Sampler";
20342 case DebugReportObjectTypeEXT::eDescriptorPool: return "DescriptorPool";
20343 case DebugReportObjectTypeEXT::eDescriptorSet: return "DescriptorSet";
20344 case DebugReportObjectTypeEXT::eFramebuffer: return "Framebuffer";
20345 case DebugReportObjectTypeEXT::eCommandPool: return "CommandPool";
20346 case DebugReportObjectTypeEXT::eSurfaceKhr: return "SurfaceKhr";
20347 case DebugReportObjectTypeEXT::eSwapchainKhr: return "SwapchainKhr";
20348 case DebugReportObjectTypeEXT::eDebugReport: return "DebugReport";
20349 default: return "invalid";
20350 }
20351 }
20352
20353 inline std::string to_string(DebugReportErrorEXT value)
20354 {
20355 switch (value)
20356 {
20357 case DebugReportErrorEXT::eNone: return "None";
20358 case DebugReportErrorEXT::eCallbackRef: return "CallbackRef";
20359 default: return "invalid";
20360 }
20361 }
20362
20363 inline std::string to_string(RasterizationOrderAMD value)
20364 {
20365 switch (value)
20366 {
20367 case RasterizationOrderAMD::eStrict: return "Strict";
20368 case RasterizationOrderAMD::eRelaxed: return "Relaxed";
20369 default: return "invalid";
20370 }
20371 }
20372
Lenny Komow6501c122016-08-31 15:03:49 -060020373 inline std::string to_string(ExternalMemoryHandleTypeFlagBitsNV value)
20374 {
20375 switch (value)
20376 {
20377 case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32: return "OpaqueWin32";
20378 case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt: return "OpaqueWin32Kmt";
20379 case ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image: return "D3D11Image";
20380 case ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt: return "D3D11ImageKmt";
20381 default: return "invalid";
20382 }
20383 }
20384
20385 inline std::string to_string(ExternalMemoryHandleTypeFlagsNV value)
20386 {
20387 if (!value) return "{}";
20388 std::string result;
20389 if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32) result += "OpaqueWin32 | ";
20390 if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt) result += "OpaqueWin32Kmt | ";
20391 if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image) result += "D3D11Image | ";
20392 if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt) result += "D3D11ImageKmt | ";
20393 return "{" + result.substr(0, result.size() - 3) + "}";
20394 }
20395
20396 inline std::string to_string(ExternalMemoryFeatureFlagBitsNV value)
20397 {
20398 switch (value)
20399 {
20400 case ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly: return "DedicatedOnly";
20401 case ExternalMemoryFeatureFlagBitsNV::eExportable: return "Exportable";
20402 case ExternalMemoryFeatureFlagBitsNV::eImportable: return "Importable";
20403 default: return "invalid";
20404 }
20405 }
20406
20407 inline std::string to_string(ExternalMemoryFeatureFlagsNV value)
20408 {
20409 if (!value) return "{}";
20410 std::string result;
20411 if (value & ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly) result += "DedicatedOnly | ";
20412 if (value & ExternalMemoryFeatureFlagBitsNV::eExportable) result += "Exportable | ";
20413 if (value & ExternalMemoryFeatureFlagBitsNV::eImportable) result += "Importable | ";
20414 return "{" + result.substr(0, result.size() - 3) + "}";
20415 }
20416
Lenny Komowbed9b5c2016-08-11 11:23:15 -060020417} // namespace vk
20418
20419#endif