blob: 3a4e7fe86014d677cd169013ebecd20b430e8ccc [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 Komow68432d72016-09-29 14:16:59 -060043static_assert( VK_HEADER_VERSION == 28 , "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,
Lenny Komow68432d72016-09-29 14:16:59 -06005422 eWin32KeyedMutexAcquireReleaseInfoNV = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV,
5423 eValidationFlagsEXT = VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT
Lenny Komowbed9b5c2016-08-11 11:23:15 -06005424 };
5425
5426 struct ApplicationInfo
5427 {
5428 ApplicationInfo( const char* pApplicationName_ = nullptr, uint32_t applicationVersion_ = 0, const char* pEngineName_ = nullptr, uint32_t engineVersion_ = 0, uint32_t apiVersion_ = 0 )
5429 : sType( StructureType::eApplicationInfo )
5430 , pNext( nullptr )
5431 , pApplicationName( pApplicationName_ )
5432 , applicationVersion( applicationVersion_ )
5433 , pEngineName( pEngineName_ )
5434 , engineVersion( engineVersion_ )
5435 , apiVersion( apiVersion_ )
5436 {
5437 }
5438
5439 ApplicationInfo( VkApplicationInfo const & rhs )
5440 {
5441 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5442 }
5443
5444 ApplicationInfo& operator=( VkApplicationInfo const & rhs )
5445 {
5446 memcpy( this, &rhs, sizeof(ApplicationInfo) );
5447 return *this;
5448 }
5449
5450 ApplicationInfo& setSType( StructureType sType_ )
5451 {
5452 sType = sType_;
5453 return *this;
5454 }
5455
5456 ApplicationInfo& setPNext( const void* pNext_ )
5457 {
5458 pNext = pNext_;
5459 return *this;
5460 }
5461
5462 ApplicationInfo& setPApplicationName( const char* pApplicationName_ )
5463 {
5464 pApplicationName = pApplicationName_;
5465 return *this;
5466 }
5467
5468 ApplicationInfo& setApplicationVersion( uint32_t applicationVersion_ )
5469 {
5470 applicationVersion = applicationVersion_;
5471 return *this;
5472 }
5473
5474 ApplicationInfo& setPEngineName( const char* pEngineName_ )
5475 {
5476 pEngineName = pEngineName_;
5477 return *this;
5478 }
5479
5480 ApplicationInfo& setEngineVersion( uint32_t engineVersion_ )
5481 {
5482 engineVersion = engineVersion_;
5483 return *this;
5484 }
5485
5486 ApplicationInfo& setApiVersion( uint32_t apiVersion_ )
5487 {
5488 apiVersion = apiVersion_;
5489 return *this;
5490 }
5491
5492 operator const VkApplicationInfo&() const
5493 {
5494 return *reinterpret_cast<const VkApplicationInfo*>(this);
5495 }
5496
5497 bool operator==( ApplicationInfo const& rhs ) const
5498 {
5499 return ( sType == rhs.sType )
5500 && ( pNext == rhs.pNext )
5501 && ( pApplicationName == rhs.pApplicationName )
5502 && ( applicationVersion == rhs.applicationVersion )
5503 && ( pEngineName == rhs.pEngineName )
5504 && ( engineVersion == rhs.engineVersion )
5505 && ( apiVersion == rhs.apiVersion );
5506 }
5507
5508 bool operator!=( ApplicationInfo const& rhs ) const
5509 {
5510 return !operator==( rhs );
5511 }
5512
5513 private:
5514 StructureType sType;
5515
5516 public:
5517 const void* pNext;
5518 const char* pApplicationName;
5519 uint32_t applicationVersion;
5520 const char* pEngineName;
5521 uint32_t engineVersion;
5522 uint32_t apiVersion;
5523 };
5524 static_assert( sizeof( ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" );
5525
5526 struct DeviceQueueCreateInfo
5527 {
5528 DeviceQueueCreateInfo( DeviceQueueCreateFlags flags_ = DeviceQueueCreateFlags(), uint32_t queueFamilyIndex_ = 0, uint32_t queueCount_ = 0, const float* pQueuePriorities_ = nullptr )
5529 : sType( StructureType::eDeviceQueueCreateInfo )
5530 , pNext( nullptr )
5531 , flags( flags_ )
5532 , queueFamilyIndex( queueFamilyIndex_ )
5533 , queueCount( queueCount_ )
5534 , pQueuePriorities( pQueuePriorities_ )
5535 {
5536 }
5537
5538 DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs )
5539 {
5540 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5541 }
5542
5543 DeviceQueueCreateInfo& operator=( VkDeviceQueueCreateInfo const & rhs )
5544 {
5545 memcpy( this, &rhs, sizeof(DeviceQueueCreateInfo) );
5546 return *this;
5547 }
5548
5549 DeviceQueueCreateInfo& setSType( StructureType sType_ )
5550 {
5551 sType = sType_;
5552 return *this;
5553 }
5554
5555 DeviceQueueCreateInfo& setPNext( const void* pNext_ )
5556 {
5557 pNext = pNext_;
5558 return *this;
5559 }
5560
5561 DeviceQueueCreateInfo& setFlags( DeviceQueueCreateFlags flags_ )
5562 {
5563 flags = flags_;
5564 return *this;
5565 }
5566
5567 DeviceQueueCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
5568 {
5569 queueFamilyIndex = queueFamilyIndex_;
5570 return *this;
5571 }
5572
5573 DeviceQueueCreateInfo& setQueueCount( uint32_t queueCount_ )
5574 {
5575 queueCount = queueCount_;
5576 return *this;
5577 }
5578
5579 DeviceQueueCreateInfo& setPQueuePriorities( const float* pQueuePriorities_ )
5580 {
5581 pQueuePriorities = pQueuePriorities_;
5582 return *this;
5583 }
5584
5585 operator const VkDeviceQueueCreateInfo&() const
5586 {
5587 return *reinterpret_cast<const VkDeviceQueueCreateInfo*>(this);
5588 }
5589
5590 bool operator==( DeviceQueueCreateInfo const& rhs ) const
5591 {
5592 return ( sType == rhs.sType )
5593 && ( pNext == rhs.pNext )
5594 && ( flags == rhs.flags )
5595 && ( queueFamilyIndex == rhs.queueFamilyIndex )
5596 && ( queueCount == rhs.queueCount )
5597 && ( pQueuePriorities == rhs.pQueuePriorities );
5598 }
5599
5600 bool operator!=( DeviceQueueCreateInfo const& rhs ) const
5601 {
5602 return !operator==( rhs );
5603 }
5604
5605 private:
5606 StructureType sType;
5607
5608 public:
5609 const void* pNext;
5610 DeviceQueueCreateFlags flags;
5611 uint32_t queueFamilyIndex;
5612 uint32_t queueCount;
5613 const float* pQueuePriorities;
5614 };
5615 static_assert( sizeof( DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ), "struct and wrapper have different size!" );
5616
5617 struct DeviceCreateInfo
5618 {
5619 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 )
5620 : sType( StructureType::eDeviceCreateInfo )
5621 , pNext( nullptr )
5622 , flags( flags_ )
5623 , queueCreateInfoCount( queueCreateInfoCount_ )
5624 , pQueueCreateInfos( pQueueCreateInfos_ )
5625 , enabledLayerCount( enabledLayerCount_ )
5626 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5627 , enabledExtensionCount( enabledExtensionCount_ )
5628 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5629 , pEnabledFeatures( pEnabledFeatures_ )
5630 {
5631 }
5632
5633 DeviceCreateInfo( VkDeviceCreateInfo const & rhs )
5634 {
5635 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5636 }
5637
5638 DeviceCreateInfo& operator=( VkDeviceCreateInfo const & rhs )
5639 {
5640 memcpy( this, &rhs, sizeof(DeviceCreateInfo) );
5641 return *this;
5642 }
5643
5644 DeviceCreateInfo& setSType( StructureType sType_ )
5645 {
5646 sType = sType_;
5647 return *this;
5648 }
5649
5650 DeviceCreateInfo& setPNext( const void* pNext_ )
5651 {
5652 pNext = pNext_;
5653 return *this;
5654 }
5655
5656 DeviceCreateInfo& setFlags( DeviceCreateFlags flags_ )
5657 {
5658 flags = flags_;
5659 return *this;
5660 }
5661
5662 DeviceCreateInfo& setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ )
5663 {
5664 queueCreateInfoCount = queueCreateInfoCount_;
5665 return *this;
5666 }
5667
5668 DeviceCreateInfo& setPQueueCreateInfos( const DeviceQueueCreateInfo* pQueueCreateInfos_ )
5669 {
5670 pQueueCreateInfos = pQueueCreateInfos_;
5671 return *this;
5672 }
5673
5674 DeviceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5675 {
5676 enabledLayerCount = enabledLayerCount_;
5677 return *this;
5678 }
5679
5680 DeviceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5681 {
5682 ppEnabledLayerNames = ppEnabledLayerNames_;
5683 return *this;
5684 }
5685
5686 DeviceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5687 {
5688 enabledExtensionCount = enabledExtensionCount_;
5689 return *this;
5690 }
5691
5692 DeviceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5693 {
5694 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5695 return *this;
5696 }
5697
5698 DeviceCreateInfo& setPEnabledFeatures( const PhysicalDeviceFeatures* pEnabledFeatures_ )
5699 {
5700 pEnabledFeatures = pEnabledFeatures_;
5701 return *this;
5702 }
5703
5704 operator const VkDeviceCreateInfo&() const
5705 {
5706 return *reinterpret_cast<const VkDeviceCreateInfo*>(this);
5707 }
5708
5709 bool operator==( DeviceCreateInfo const& rhs ) const
5710 {
5711 return ( sType == rhs.sType )
5712 && ( pNext == rhs.pNext )
5713 && ( flags == rhs.flags )
5714 && ( queueCreateInfoCount == rhs.queueCreateInfoCount )
5715 && ( pQueueCreateInfos == rhs.pQueueCreateInfos )
5716 && ( enabledLayerCount == rhs.enabledLayerCount )
5717 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5718 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5719 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames )
5720 && ( pEnabledFeatures == rhs.pEnabledFeatures );
5721 }
5722
5723 bool operator!=( DeviceCreateInfo const& rhs ) const
5724 {
5725 return !operator==( rhs );
5726 }
5727
5728 private:
5729 StructureType sType;
5730
5731 public:
5732 const void* pNext;
5733 DeviceCreateFlags flags;
5734 uint32_t queueCreateInfoCount;
5735 const DeviceQueueCreateInfo* pQueueCreateInfos;
5736 uint32_t enabledLayerCount;
5737 const char* const* ppEnabledLayerNames;
5738 uint32_t enabledExtensionCount;
5739 const char* const* ppEnabledExtensionNames;
5740 const PhysicalDeviceFeatures* pEnabledFeatures;
5741 };
5742 static_assert( sizeof( DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ), "struct and wrapper have different size!" );
5743
5744 struct InstanceCreateInfo
5745 {
5746 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 )
5747 : sType( StructureType::eInstanceCreateInfo )
5748 , pNext( nullptr )
5749 , flags( flags_ )
5750 , pApplicationInfo( pApplicationInfo_ )
5751 , enabledLayerCount( enabledLayerCount_ )
5752 , ppEnabledLayerNames( ppEnabledLayerNames_ )
5753 , enabledExtensionCount( enabledExtensionCount_ )
5754 , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
5755 {
5756 }
5757
5758 InstanceCreateInfo( VkInstanceCreateInfo const & rhs )
5759 {
5760 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5761 }
5762
5763 InstanceCreateInfo& operator=( VkInstanceCreateInfo const & rhs )
5764 {
5765 memcpy( this, &rhs, sizeof(InstanceCreateInfo) );
5766 return *this;
5767 }
5768
5769 InstanceCreateInfo& setSType( StructureType sType_ )
5770 {
5771 sType = sType_;
5772 return *this;
5773 }
5774
5775 InstanceCreateInfo& setPNext( const void* pNext_ )
5776 {
5777 pNext = pNext_;
5778 return *this;
5779 }
5780
5781 InstanceCreateInfo& setFlags( InstanceCreateFlags flags_ )
5782 {
5783 flags = flags_;
5784 return *this;
5785 }
5786
5787 InstanceCreateInfo& setPApplicationInfo( const ApplicationInfo* pApplicationInfo_ )
5788 {
5789 pApplicationInfo = pApplicationInfo_;
5790 return *this;
5791 }
5792
5793 InstanceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
5794 {
5795 enabledLayerCount = enabledLayerCount_;
5796 return *this;
5797 }
5798
5799 InstanceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
5800 {
5801 ppEnabledLayerNames = ppEnabledLayerNames_;
5802 return *this;
5803 }
5804
5805 InstanceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
5806 {
5807 enabledExtensionCount = enabledExtensionCount_;
5808 return *this;
5809 }
5810
5811 InstanceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
5812 {
5813 ppEnabledExtensionNames = ppEnabledExtensionNames_;
5814 return *this;
5815 }
5816
5817 operator const VkInstanceCreateInfo&() const
5818 {
5819 return *reinterpret_cast<const VkInstanceCreateInfo*>(this);
5820 }
5821
5822 bool operator==( InstanceCreateInfo const& rhs ) const
5823 {
5824 return ( sType == rhs.sType )
5825 && ( pNext == rhs.pNext )
5826 && ( flags == rhs.flags )
5827 && ( pApplicationInfo == rhs.pApplicationInfo )
5828 && ( enabledLayerCount == rhs.enabledLayerCount )
5829 && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
5830 && ( enabledExtensionCount == rhs.enabledExtensionCount )
5831 && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames );
5832 }
5833
5834 bool operator!=( InstanceCreateInfo const& rhs ) const
5835 {
5836 return !operator==( rhs );
5837 }
5838
5839 private:
5840 StructureType sType;
5841
5842 public:
5843 const void* pNext;
5844 InstanceCreateFlags flags;
5845 const ApplicationInfo* pApplicationInfo;
5846 uint32_t enabledLayerCount;
5847 const char* const* ppEnabledLayerNames;
5848 uint32_t enabledExtensionCount;
5849 const char* const* ppEnabledExtensionNames;
5850 };
5851 static_assert( sizeof( InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ), "struct and wrapper have different size!" );
5852
5853 struct MemoryAllocateInfo
5854 {
5855 MemoryAllocateInfo( DeviceSize allocationSize_ = 0, uint32_t memoryTypeIndex_ = 0 )
5856 : sType( StructureType::eMemoryAllocateInfo )
5857 , pNext( nullptr )
5858 , allocationSize( allocationSize_ )
5859 , memoryTypeIndex( memoryTypeIndex_ )
5860 {
5861 }
5862
5863 MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs )
5864 {
5865 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5866 }
5867
5868 MemoryAllocateInfo& operator=( VkMemoryAllocateInfo const & rhs )
5869 {
5870 memcpy( this, &rhs, sizeof(MemoryAllocateInfo) );
5871 return *this;
5872 }
5873
5874 MemoryAllocateInfo& setSType( StructureType sType_ )
5875 {
5876 sType = sType_;
5877 return *this;
5878 }
5879
5880 MemoryAllocateInfo& setPNext( const void* pNext_ )
5881 {
5882 pNext = pNext_;
5883 return *this;
5884 }
5885
5886 MemoryAllocateInfo& setAllocationSize( DeviceSize allocationSize_ )
5887 {
5888 allocationSize = allocationSize_;
5889 return *this;
5890 }
5891
5892 MemoryAllocateInfo& setMemoryTypeIndex( uint32_t memoryTypeIndex_ )
5893 {
5894 memoryTypeIndex = memoryTypeIndex_;
5895 return *this;
5896 }
5897
5898 operator const VkMemoryAllocateInfo&() const
5899 {
5900 return *reinterpret_cast<const VkMemoryAllocateInfo*>(this);
5901 }
5902
5903 bool operator==( MemoryAllocateInfo const& rhs ) const
5904 {
5905 return ( sType == rhs.sType )
5906 && ( pNext == rhs.pNext )
5907 && ( allocationSize == rhs.allocationSize )
5908 && ( memoryTypeIndex == rhs.memoryTypeIndex );
5909 }
5910
5911 bool operator!=( MemoryAllocateInfo const& rhs ) const
5912 {
5913 return !operator==( rhs );
5914 }
5915
5916 private:
5917 StructureType sType;
5918
5919 public:
5920 const void* pNext;
5921 DeviceSize allocationSize;
5922 uint32_t memoryTypeIndex;
5923 };
5924 static_assert( sizeof( MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ), "struct and wrapper have different size!" );
5925
5926 struct MappedMemoryRange
5927 {
5928 MappedMemoryRange( DeviceMemory memory_ = DeviceMemory(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
5929 : sType( StructureType::eMappedMemoryRange )
5930 , pNext( nullptr )
5931 , memory( memory_ )
5932 , offset( offset_ )
5933 , size( size_ )
5934 {
5935 }
5936
5937 MappedMemoryRange( VkMappedMemoryRange const & rhs )
5938 {
5939 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5940 }
5941
5942 MappedMemoryRange& operator=( VkMappedMemoryRange const & rhs )
5943 {
5944 memcpy( this, &rhs, sizeof(MappedMemoryRange) );
5945 return *this;
5946 }
5947
5948 MappedMemoryRange& setSType( StructureType sType_ )
5949 {
5950 sType = sType_;
5951 return *this;
5952 }
5953
5954 MappedMemoryRange& setPNext( const void* pNext_ )
5955 {
5956 pNext = pNext_;
5957 return *this;
5958 }
5959
5960 MappedMemoryRange& setMemory( DeviceMemory memory_ )
5961 {
5962 memory = memory_;
5963 return *this;
5964 }
5965
5966 MappedMemoryRange& setOffset( DeviceSize offset_ )
5967 {
5968 offset = offset_;
5969 return *this;
5970 }
5971
5972 MappedMemoryRange& setSize( DeviceSize size_ )
5973 {
5974 size = size_;
5975 return *this;
5976 }
5977
5978 operator const VkMappedMemoryRange&() const
5979 {
5980 return *reinterpret_cast<const VkMappedMemoryRange*>(this);
5981 }
5982
5983 bool operator==( MappedMemoryRange const& rhs ) const
5984 {
5985 return ( sType == rhs.sType )
5986 && ( pNext == rhs.pNext )
5987 && ( memory == rhs.memory )
5988 && ( offset == rhs.offset )
5989 && ( size == rhs.size );
5990 }
5991
5992 bool operator!=( MappedMemoryRange const& rhs ) const
5993 {
5994 return !operator==( rhs );
5995 }
5996
5997 private:
5998 StructureType sType;
5999
6000 public:
6001 const void* pNext;
6002 DeviceMemory memory;
6003 DeviceSize offset;
6004 DeviceSize size;
6005 };
6006 static_assert( sizeof( MappedMemoryRange ) == sizeof( VkMappedMemoryRange ), "struct and wrapper have different size!" );
6007
6008 struct WriteDescriptorSet
6009 {
6010 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 )
6011 : sType( StructureType::eWriteDescriptorSet )
6012 , pNext( nullptr )
6013 , dstSet( dstSet_ )
6014 , dstBinding( dstBinding_ )
6015 , dstArrayElement( dstArrayElement_ )
6016 , descriptorCount( descriptorCount_ )
6017 , descriptorType( descriptorType_ )
6018 , pImageInfo( pImageInfo_ )
6019 , pBufferInfo( pBufferInfo_ )
6020 , pTexelBufferView( pTexelBufferView_ )
6021 {
6022 }
6023
6024 WriteDescriptorSet( VkWriteDescriptorSet const & rhs )
6025 {
6026 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
6027 }
6028
6029 WriteDescriptorSet& operator=( VkWriteDescriptorSet const & rhs )
6030 {
6031 memcpy( this, &rhs, sizeof(WriteDescriptorSet) );
6032 return *this;
6033 }
6034
6035 WriteDescriptorSet& setSType( StructureType sType_ )
6036 {
6037 sType = sType_;
6038 return *this;
6039 }
6040
6041 WriteDescriptorSet& setPNext( const void* pNext_ )
6042 {
6043 pNext = pNext_;
6044 return *this;
6045 }
6046
6047 WriteDescriptorSet& setDstSet( DescriptorSet dstSet_ )
6048 {
6049 dstSet = dstSet_;
6050 return *this;
6051 }
6052
6053 WriteDescriptorSet& setDstBinding( uint32_t dstBinding_ )
6054 {
6055 dstBinding = dstBinding_;
6056 return *this;
6057 }
6058
6059 WriteDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6060 {
6061 dstArrayElement = dstArrayElement_;
6062 return *this;
6063 }
6064
6065 WriteDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6066 {
6067 descriptorCount = descriptorCount_;
6068 return *this;
6069 }
6070
6071 WriteDescriptorSet& setDescriptorType( DescriptorType descriptorType_ )
6072 {
6073 descriptorType = descriptorType_;
6074 return *this;
6075 }
6076
6077 WriteDescriptorSet& setPImageInfo( const DescriptorImageInfo* pImageInfo_ )
6078 {
6079 pImageInfo = pImageInfo_;
6080 return *this;
6081 }
6082
6083 WriteDescriptorSet& setPBufferInfo( const DescriptorBufferInfo* pBufferInfo_ )
6084 {
6085 pBufferInfo = pBufferInfo_;
6086 return *this;
6087 }
6088
6089 WriteDescriptorSet& setPTexelBufferView( const BufferView* pTexelBufferView_ )
6090 {
6091 pTexelBufferView = pTexelBufferView_;
6092 return *this;
6093 }
6094
6095 operator const VkWriteDescriptorSet&() const
6096 {
6097 return *reinterpret_cast<const VkWriteDescriptorSet*>(this);
6098 }
6099
6100 bool operator==( WriteDescriptorSet const& rhs ) const
6101 {
6102 return ( sType == rhs.sType )
6103 && ( pNext == rhs.pNext )
6104 && ( dstSet == rhs.dstSet )
6105 && ( dstBinding == rhs.dstBinding )
6106 && ( dstArrayElement == rhs.dstArrayElement )
6107 && ( descriptorCount == rhs.descriptorCount )
6108 && ( descriptorType == rhs.descriptorType )
6109 && ( pImageInfo == rhs.pImageInfo )
6110 && ( pBufferInfo == rhs.pBufferInfo )
6111 && ( pTexelBufferView == rhs.pTexelBufferView );
6112 }
6113
6114 bool operator!=( WriteDescriptorSet const& rhs ) const
6115 {
6116 return !operator==( rhs );
6117 }
6118
6119 private:
6120 StructureType sType;
6121
6122 public:
6123 const void* pNext;
6124 DescriptorSet dstSet;
6125 uint32_t dstBinding;
6126 uint32_t dstArrayElement;
6127 uint32_t descriptorCount;
6128 DescriptorType descriptorType;
6129 const DescriptorImageInfo* pImageInfo;
6130 const DescriptorBufferInfo* pBufferInfo;
6131 const BufferView* pTexelBufferView;
6132 };
6133 static_assert( sizeof( WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ), "struct and wrapper have different size!" );
6134
6135 struct CopyDescriptorSet
6136 {
6137 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 )
6138 : sType( StructureType::eCopyDescriptorSet )
6139 , pNext( nullptr )
6140 , srcSet( srcSet_ )
6141 , srcBinding( srcBinding_ )
6142 , srcArrayElement( srcArrayElement_ )
6143 , dstSet( dstSet_ )
6144 , dstBinding( dstBinding_ )
6145 , dstArrayElement( dstArrayElement_ )
6146 , descriptorCount( descriptorCount_ )
6147 {
6148 }
6149
6150 CopyDescriptorSet( VkCopyDescriptorSet const & rhs )
6151 {
6152 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6153 }
6154
6155 CopyDescriptorSet& operator=( VkCopyDescriptorSet const & rhs )
6156 {
6157 memcpy( this, &rhs, sizeof(CopyDescriptorSet) );
6158 return *this;
6159 }
6160
6161 CopyDescriptorSet& setSType( StructureType sType_ )
6162 {
6163 sType = sType_;
6164 return *this;
6165 }
6166
6167 CopyDescriptorSet& setPNext( const void* pNext_ )
6168 {
6169 pNext = pNext_;
6170 return *this;
6171 }
6172
6173 CopyDescriptorSet& setSrcSet( DescriptorSet srcSet_ )
6174 {
6175 srcSet = srcSet_;
6176 return *this;
6177 }
6178
6179 CopyDescriptorSet& setSrcBinding( uint32_t srcBinding_ )
6180 {
6181 srcBinding = srcBinding_;
6182 return *this;
6183 }
6184
6185 CopyDescriptorSet& setSrcArrayElement( uint32_t srcArrayElement_ )
6186 {
6187 srcArrayElement = srcArrayElement_;
6188 return *this;
6189 }
6190
6191 CopyDescriptorSet& setDstSet( DescriptorSet dstSet_ )
6192 {
6193 dstSet = dstSet_;
6194 return *this;
6195 }
6196
6197 CopyDescriptorSet& setDstBinding( uint32_t dstBinding_ )
6198 {
6199 dstBinding = dstBinding_;
6200 return *this;
6201 }
6202
6203 CopyDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
6204 {
6205 dstArrayElement = dstArrayElement_;
6206 return *this;
6207 }
6208
6209 CopyDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
6210 {
6211 descriptorCount = descriptorCount_;
6212 return *this;
6213 }
6214
6215 operator const VkCopyDescriptorSet&() const
6216 {
6217 return *reinterpret_cast<const VkCopyDescriptorSet*>(this);
6218 }
6219
6220 bool operator==( CopyDescriptorSet const& rhs ) const
6221 {
6222 return ( sType == rhs.sType )
6223 && ( pNext == rhs.pNext )
6224 && ( srcSet == rhs.srcSet )
6225 && ( srcBinding == rhs.srcBinding )
6226 && ( srcArrayElement == rhs.srcArrayElement )
6227 && ( dstSet == rhs.dstSet )
6228 && ( dstBinding == rhs.dstBinding )
6229 && ( dstArrayElement == rhs.dstArrayElement )
6230 && ( descriptorCount == rhs.descriptorCount );
6231 }
6232
6233 bool operator!=( CopyDescriptorSet const& rhs ) const
6234 {
6235 return !operator==( rhs );
6236 }
6237
6238 private:
6239 StructureType sType;
6240
6241 public:
6242 const void* pNext;
6243 DescriptorSet srcSet;
6244 uint32_t srcBinding;
6245 uint32_t srcArrayElement;
6246 DescriptorSet dstSet;
6247 uint32_t dstBinding;
6248 uint32_t dstArrayElement;
6249 uint32_t descriptorCount;
6250 };
6251 static_assert( sizeof( CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ), "struct and wrapper have different size!" );
6252
6253 struct BufferViewCreateInfo
6254 {
6255 BufferViewCreateInfo( BufferViewCreateFlags flags_ = BufferViewCreateFlags(), Buffer buffer_ = Buffer(), Format format_ = Format::eUndefined, DeviceSize offset_ = 0, DeviceSize range_ = 0 )
6256 : sType( StructureType::eBufferViewCreateInfo )
6257 , pNext( nullptr )
6258 , flags( flags_ )
6259 , buffer( buffer_ )
6260 , format( format_ )
6261 , offset( offset_ )
6262 , range( range_ )
6263 {
6264 }
6265
6266 BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs )
6267 {
6268 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6269 }
6270
6271 BufferViewCreateInfo& operator=( VkBufferViewCreateInfo const & rhs )
6272 {
6273 memcpy( this, &rhs, sizeof(BufferViewCreateInfo) );
6274 return *this;
6275 }
6276
6277 BufferViewCreateInfo& setSType( StructureType sType_ )
6278 {
6279 sType = sType_;
6280 return *this;
6281 }
6282
6283 BufferViewCreateInfo& setPNext( const void* pNext_ )
6284 {
6285 pNext = pNext_;
6286 return *this;
6287 }
6288
6289 BufferViewCreateInfo& setFlags( BufferViewCreateFlags flags_ )
6290 {
6291 flags = flags_;
6292 return *this;
6293 }
6294
6295 BufferViewCreateInfo& setBuffer( Buffer buffer_ )
6296 {
6297 buffer = buffer_;
6298 return *this;
6299 }
6300
6301 BufferViewCreateInfo& setFormat( Format format_ )
6302 {
6303 format = format_;
6304 return *this;
6305 }
6306
6307 BufferViewCreateInfo& setOffset( DeviceSize offset_ )
6308 {
6309 offset = offset_;
6310 return *this;
6311 }
6312
6313 BufferViewCreateInfo& setRange( DeviceSize range_ )
6314 {
6315 range = range_;
6316 return *this;
6317 }
6318
6319 operator const VkBufferViewCreateInfo&() const
6320 {
6321 return *reinterpret_cast<const VkBufferViewCreateInfo*>(this);
6322 }
6323
6324 bool operator==( BufferViewCreateInfo const& rhs ) const
6325 {
6326 return ( sType == rhs.sType )
6327 && ( pNext == rhs.pNext )
6328 && ( flags == rhs.flags )
6329 && ( buffer == rhs.buffer )
6330 && ( format == rhs.format )
6331 && ( offset == rhs.offset )
6332 && ( range == rhs.range );
6333 }
6334
6335 bool operator!=( BufferViewCreateInfo const& rhs ) const
6336 {
6337 return !operator==( rhs );
6338 }
6339
6340 private:
6341 StructureType sType;
6342
6343 public:
6344 const void* pNext;
6345 BufferViewCreateFlags flags;
6346 Buffer buffer;
6347 Format format;
6348 DeviceSize offset;
6349 DeviceSize range;
6350 };
6351 static_assert( sizeof( BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ), "struct and wrapper have different size!" );
6352
6353 struct ShaderModuleCreateInfo
6354 {
6355 ShaderModuleCreateInfo( ShaderModuleCreateFlags flags_ = ShaderModuleCreateFlags(), size_t codeSize_ = 0, const uint32_t* pCode_ = nullptr )
6356 : sType( StructureType::eShaderModuleCreateInfo )
6357 , pNext( nullptr )
6358 , flags( flags_ )
6359 , codeSize( codeSize_ )
6360 , pCode( pCode_ )
6361 {
6362 }
6363
6364 ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs )
6365 {
6366 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6367 }
6368
6369 ShaderModuleCreateInfo& operator=( VkShaderModuleCreateInfo const & rhs )
6370 {
6371 memcpy( this, &rhs, sizeof(ShaderModuleCreateInfo) );
6372 return *this;
6373 }
6374
6375 ShaderModuleCreateInfo& setSType( StructureType sType_ )
6376 {
6377 sType = sType_;
6378 return *this;
6379 }
6380
6381 ShaderModuleCreateInfo& setPNext( const void* pNext_ )
6382 {
6383 pNext = pNext_;
6384 return *this;
6385 }
6386
6387 ShaderModuleCreateInfo& setFlags( ShaderModuleCreateFlags flags_ )
6388 {
6389 flags = flags_;
6390 return *this;
6391 }
6392
6393 ShaderModuleCreateInfo& setCodeSize( size_t codeSize_ )
6394 {
6395 codeSize = codeSize_;
6396 return *this;
6397 }
6398
6399 ShaderModuleCreateInfo& setPCode( const uint32_t* pCode_ )
6400 {
6401 pCode = pCode_;
6402 return *this;
6403 }
6404
6405 operator const VkShaderModuleCreateInfo&() const
6406 {
6407 return *reinterpret_cast<const VkShaderModuleCreateInfo*>(this);
6408 }
6409
6410 bool operator==( ShaderModuleCreateInfo const& rhs ) const
6411 {
6412 return ( sType == rhs.sType )
6413 && ( pNext == rhs.pNext )
6414 && ( flags == rhs.flags )
6415 && ( codeSize == rhs.codeSize )
6416 && ( pCode == rhs.pCode );
6417 }
6418
6419 bool operator!=( ShaderModuleCreateInfo const& rhs ) const
6420 {
6421 return !operator==( rhs );
6422 }
6423
6424 private:
6425 StructureType sType;
6426
6427 public:
6428 const void* pNext;
6429 ShaderModuleCreateFlags flags;
6430 size_t codeSize;
6431 const uint32_t* pCode;
6432 };
6433 static_assert( sizeof( ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ), "struct and wrapper have different size!" );
6434
6435 struct DescriptorSetAllocateInfo
6436 {
6437 DescriptorSetAllocateInfo( DescriptorPool descriptorPool_ = DescriptorPool(), uint32_t descriptorSetCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr )
6438 : sType( StructureType::eDescriptorSetAllocateInfo )
6439 , pNext( nullptr )
6440 , descriptorPool( descriptorPool_ )
6441 , descriptorSetCount( descriptorSetCount_ )
6442 , pSetLayouts( pSetLayouts_ )
6443 {
6444 }
6445
6446 DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs )
6447 {
6448 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6449 }
6450
6451 DescriptorSetAllocateInfo& operator=( VkDescriptorSetAllocateInfo const & rhs )
6452 {
6453 memcpy( this, &rhs, sizeof(DescriptorSetAllocateInfo) );
6454 return *this;
6455 }
6456
6457 DescriptorSetAllocateInfo& setSType( StructureType sType_ )
6458 {
6459 sType = sType_;
6460 return *this;
6461 }
6462
6463 DescriptorSetAllocateInfo& setPNext( const void* pNext_ )
6464 {
6465 pNext = pNext_;
6466 return *this;
6467 }
6468
6469 DescriptorSetAllocateInfo& setDescriptorPool( DescriptorPool descriptorPool_ )
6470 {
6471 descriptorPool = descriptorPool_;
6472 return *this;
6473 }
6474
6475 DescriptorSetAllocateInfo& setDescriptorSetCount( uint32_t descriptorSetCount_ )
6476 {
6477 descriptorSetCount = descriptorSetCount_;
6478 return *this;
6479 }
6480
6481 DescriptorSetAllocateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
6482 {
6483 pSetLayouts = pSetLayouts_;
6484 return *this;
6485 }
6486
6487 operator const VkDescriptorSetAllocateInfo&() const
6488 {
6489 return *reinterpret_cast<const VkDescriptorSetAllocateInfo*>(this);
6490 }
6491
6492 bool operator==( DescriptorSetAllocateInfo const& rhs ) const
6493 {
6494 return ( sType == rhs.sType )
6495 && ( pNext == rhs.pNext )
6496 && ( descriptorPool == rhs.descriptorPool )
6497 && ( descriptorSetCount == rhs.descriptorSetCount )
6498 && ( pSetLayouts == rhs.pSetLayouts );
6499 }
6500
6501 bool operator!=( DescriptorSetAllocateInfo const& rhs ) const
6502 {
6503 return !operator==( rhs );
6504 }
6505
6506 private:
6507 StructureType sType;
6508
6509 public:
6510 const void* pNext;
6511 DescriptorPool descriptorPool;
6512 uint32_t descriptorSetCount;
6513 const DescriptorSetLayout* pSetLayouts;
6514 };
6515 static_assert( sizeof( DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ), "struct and wrapper have different size!" );
6516
6517 struct PipelineVertexInputStateCreateInfo
6518 {
6519 PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateFlags flags_ = PipelineVertexInputStateCreateFlags(), uint32_t vertexBindingDescriptionCount_ = 0, const VertexInputBindingDescription* pVertexBindingDescriptions_ = nullptr, uint32_t vertexAttributeDescriptionCount_ = 0, const VertexInputAttributeDescription* pVertexAttributeDescriptions_ = nullptr )
6520 : sType( StructureType::ePipelineVertexInputStateCreateInfo )
6521 , pNext( nullptr )
6522 , flags( flags_ )
6523 , vertexBindingDescriptionCount( vertexBindingDescriptionCount_ )
6524 , pVertexBindingDescriptions( pVertexBindingDescriptions_ )
6525 , vertexAttributeDescriptionCount( vertexAttributeDescriptionCount_ )
6526 , pVertexAttributeDescriptions( pVertexAttributeDescriptions_ )
6527 {
6528 }
6529
6530 PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs )
6531 {
6532 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6533 }
6534
6535 PipelineVertexInputStateCreateInfo& operator=( VkPipelineVertexInputStateCreateInfo const & rhs )
6536 {
6537 memcpy( this, &rhs, sizeof(PipelineVertexInputStateCreateInfo) );
6538 return *this;
6539 }
6540
6541 PipelineVertexInputStateCreateInfo& setSType( StructureType sType_ )
6542 {
6543 sType = sType_;
6544 return *this;
6545 }
6546
6547 PipelineVertexInputStateCreateInfo& setPNext( const void* pNext_ )
6548 {
6549 pNext = pNext_;
6550 return *this;
6551 }
6552
6553 PipelineVertexInputStateCreateInfo& setFlags( PipelineVertexInputStateCreateFlags flags_ )
6554 {
6555 flags = flags_;
6556 return *this;
6557 }
6558
6559 PipelineVertexInputStateCreateInfo& setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ )
6560 {
6561 vertexBindingDescriptionCount = vertexBindingDescriptionCount_;
6562 return *this;
6563 }
6564
6565 PipelineVertexInputStateCreateInfo& setPVertexBindingDescriptions( const VertexInputBindingDescription* pVertexBindingDescriptions_ )
6566 {
6567 pVertexBindingDescriptions = pVertexBindingDescriptions_;
6568 return *this;
6569 }
6570
6571 PipelineVertexInputStateCreateInfo& setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ )
6572 {
6573 vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_;
6574 return *this;
6575 }
6576
6577 PipelineVertexInputStateCreateInfo& setPVertexAttributeDescriptions( const VertexInputAttributeDescription* pVertexAttributeDescriptions_ )
6578 {
6579 pVertexAttributeDescriptions = pVertexAttributeDescriptions_;
6580 return *this;
6581 }
6582
6583 operator const VkPipelineVertexInputStateCreateInfo&() const
6584 {
6585 return *reinterpret_cast<const VkPipelineVertexInputStateCreateInfo*>(this);
6586 }
6587
6588 bool operator==( PipelineVertexInputStateCreateInfo const& rhs ) const
6589 {
6590 return ( sType == rhs.sType )
6591 && ( pNext == rhs.pNext )
6592 && ( flags == rhs.flags )
6593 && ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount )
6594 && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions )
6595 && ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount )
6596 && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions );
6597 }
6598
6599 bool operator!=( PipelineVertexInputStateCreateInfo const& rhs ) const
6600 {
6601 return !operator==( rhs );
6602 }
6603
6604 private:
6605 StructureType sType;
6606
6607 public:
6608 const void* pNext;
6609 PipelineVertexInputStateCreateFlags flags;
6610 uint32_t vertexBindingDescriptionCount;
6611 const VertexInputBindingDescription* pVertexBindingDescriptions;
6612 uint32_t vertexAttributeDescriptionCount;
6613 const VertexInputAttributeDescription* pVertexAttributeDescriptions;
6614 };
6615 static_assert( sizeof( PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ), "struct and wrapper have different size!" );
6616
6617 struct PipelineInputAssemblyStateCreateInfo
6618 {
6619 PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateFlags flags_ = PipelineInputAssemblyStateCreateFlags(), PrimitiveTopology topology_ = PrimitiveTopology::ePointList, Bool32 primitiveRestartEnable_ = 0 )
6620 : sType( StructureType::ePipelineInputAssemblyStateCreateInfo )
6621 , pNext( nullptr )
6622 , flags( flags_ )
6623 , topology( topology_ )
6624 , primitiveRestartEnable( primitiveRestartEnable_ )
6625 {
6626 }
6627
6628 PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6629 {
6630 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6631 }
6632
6633 PipelineInputAssemblyStateCreateInfo& operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs )
6634 {
6635 memcpy( this, &rhs, sizeof(PipelineInputAssemblyStateCreateInfo) );
6636 return *this;
6637 }
6638
6639 PipelineInputAssemblyStateCreateInfo& setSType( StructureType sType_ )
6640 {
6641 sType = sType_;
6642 return *this;
6643 }
6644
6645 PipelineInputAssemblyStateCreateInfo& setPNext( const void* pNext_ )
6646 {
6647 pNext = pNext_;
6648 return *this;
6649 }
6650
6651 PipelineInputAssemblyStateCreateInfo& setFlags( PipelineInputAssemblyStateCreateFlags flags_ )
6652 {
6653 flags = flags_;
6654 return *this;
6655 }
6656
6657 PipelineInputAssemblyStateCreateInfo& setTopology( PrimitiveTopology topology_ )
6658 {
6659 topology = topology_;
6660 return *this;
6661 }
6662
6663 PipelineInputAssemblyStateCreateInfo& setPrimitiveRestartEnable( Bool32 primitiveRestartEnable_ )
6664 {
6665 primitiveRestartEnable = primitiveRestartEnable_;
6666 return *this;
6667 }
6668
6669 operator const VkPipelineInputAssemblyStateCreateInfo&() const
6670 {
6671 return *reinterpret_cast<const VkPipelineInputAssemblyStateCreateInfo*>(this);
6672 }
6673
6674 bool operator==( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6675 {
6676 return ( sType == rhs.sType )
6677 && ( pNext == rhs.pNext )
6678 && ( flags == rhs.flags )
6679 && ( topology == rhs.topology )
6680 && ( primitiveRestartEnable == rhs.primitiveRestartEnable );
6681 }
6682
6683 bool operator!=( PipelineInputAssemblyStateCreateInfo const& rhs ) const
6684 {
6685 return !operator==( rhs );
6686 }
6687
6688 private:
6689 StructureType sType;
6690
6691 public:
6692 const void* pNext;
6693 PipelineInputAssemblyStateCreateFlags flags;
6694 PrimitiveTopology topology;
6695 Bool32 primitiveRestartEnable;
6696 };
6697 static_assert( sizeof( PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ), "struct and wrapper have different size!" );
6698
6699 struct PipelineTessellationStateCreateInfo
6700 {
6701 PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateFlags flags_ = PipelineTessellationStateCreateFlags(), uint32_t patchControlPoints_ = 0 )
6702 : sType( StructureType::ePipelineTessellationStateCreateInfo )
6703 , pNext( nullptr )
6704 , flags( flags_ )
6705 , patchControlPoints( patchControlPoints_ )
6706 {
6707 }
6708
6709 PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs )
6710 {
6711 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6712 }
6713
6714 PipelineTessellationStateCreateInfo& operator=( VkPipelineTessellationStateCreateInfo const & rhs )
6715 {
6716 memcpy( this, &rhs, sizeof(PipelineTessellationStateCreateInfo) );
6717 return *this;
6718 }
6719
6720 PipelineTessellationStateCreateInfo& setSType( StructureType sType_ )
6721 {
6722 sType = sType_;
6723 return *this;
6724 }
6725
6726 PipelineTessellationStateCreateInfo& setPNext( const void* pNext_ )
6727 {
6728 pNext = pNext_;
6729 return *this;
6730 }
6731
6732 PipelineTessellationStateCreateInfo& setFlags( PipelineTessellationStateCreateFlags flags_ )
6733 {
6734 flags = flags_;
6735 return *this;
6736 }
6737
6738 PipelineTessellationStateCreateInfo& setPatchControlPoints( uint32_t patchControlPoints_ )
6739 {
6740 patchControlPoints = patchControlPoints_;
6741 return *this;
6742 }
6743
6744 operator const VkPipelineTessellationStateCreateInfo&() const
6745 {
6746 return *reinterpret_cast<const VkPipelineTessellationStateCreateInfo*>(this);
6747 }
6748
6749 bool operator==( PipelineTessellationStateCreateInfo const& rhs ) const
6750 {
6751 return ( sType == rhs.sType )
6752 && ( pNext == rhs.pNext )
6753 && ( flags == rhs.flags )
6754 && ( patchControlPoints == rhs.patchControlPoints );
6755 }
6756
6757 bool operator!=( PipelineTessellationStateCreateInfo const& rhs ) const
6758 {
6759 return !operator==( rhs );
6760 }
6761
6762 private:
6763 StructureType sType;
6764
6765 public:
6766 const void* pNext;
6767 PipelineTessellationStateCreateFlags flags;
6768 uint32_t patchControlPoints;
6769 };
6770 static_assert( sizeof( PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ), "struct and wrapper have different size!" );
6771
6772 struct PipelineViewportStateCreateInfo
6773 {
6774 PipelineViewportStateCreateInfo( PipelineViewportStateCreateFlags flags_ = PipelineViewportStateCreateFlags(), uint32_t viewportCount_ = 0, const Viewport* pViewports_ = nullptr, uint32_t scissorCount_ = 0, const Rect2D* pScissors_ = nullptr )
6775 : sType( StructureType::ePipelineViewportStateCreateInfo )
6776 , pNext( nullptr )
6777 , flags( flags_ )
6778 , viewportCount( viewportCount_ )
6779 , pViewports( pViewports_ )
6780 , scissorCount( scissorCount_ )
6781 , pScissors( pScissors_ )
6782 {
6783 }
6784
6785 PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs )
6786 {
6787 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6788 }
6789
6790 PipelineViewportStateCreateInfo& operator=( VkPipelineViewportStateCreateInfo const & rhs )
6791 {
6792 memcpy( this, &rhs, sizeof(PipelineViewportStateCreateInfo) );
6793 return *this;
6794 }
6795
6796 PipelineViewportStateCreateInfo& setSType( StructureType sType_ )
6797 {
6798 sType = sType_;
6799 return *this;
6800 }
6801
6802 PipelineViewportStateCreateInfo& setPNext( const void* pNext_ )
6803 {
6804 pNext = pNext_;
6805 return *this;
6806 }
6807
6808 PipelineViewportStateCreateInfo& setFlags( PipelineViewportStateCreateFlags flags_ )
6809 {
6810 flags = flags_;
6811 return *this;
6812 }
6813
6814 PipelineViewportStateCreateInfo& setViewportCount( uint32_t viewportCount_ )
6815 {
6816 viewportCount = viewportCount_;
6817 return *this;
6818 }
6819
6820 PipelineViewportStateCreateInfo& setPViewports( const Viewport* pViewports_ )
6821 {
6822 pViewports = pViewports_;
6823 return *this;
6824 }
6825
6826 PipelineViewportStateCreateInfo& setScissorCount( uint32_t scissorCount_ )
6827 {
6828 scissorCount = scissorCount_;
6829 return *this;
6830 }
6831
6832 PipelineViewportStateCreateInfo& setPScissors( const Rect2D* pScissors_ )
6833 {
6834 pScissors = pScissors_;
6835 return *this;
6836 }
6837
6838 operator const VkPipelineViewportStateCreateInfo&() const
6839 {
6840 return *reinterpret_cast<const VkPipelineViewportStateCreateInfo*>(this);
6841 }
6842
6843 bool operator==( PipelineViewportStateCreateInfo const& rhs ) const
6844 {
6845 return ( sType == rhs.sType )
6846 && ( pNext == rhs.pNext )
6847 && ( flags == rhs.flags )
6848 && ( viewportCount == rhs.viewportCount )
6849 && ( pViewports == rhs.pViewports )
6850 && ( scissorCount == rhs.scissorCount )
6851 && ( pScissors == rhs.pScissors );
6852 }
6853
6854 bool operator!=( PipelineViewportStateCreateInfo const& rhs ) const
6855 {
6856 return !operator==( rhs );
6857 }
6858
6859 private:
6860 StructureType sType;
6861
6862 public:
6863 const void* pNext;
6864 PipelineViewportStateCreateFlags flags;
6865 uint32_t viewportCount;
6866 const Viewport* pViewports;
6867 uint32_t scissorCount;
6868 const Rect2D* pScissors;
6869 };
6870 static_assert( sizeof( PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ), "struct and wrapper have different size!" );
6871
6872 struct PipelineRasterizationStateCreateInfo
6873 {
6874 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 )
6875 : sType( StructureType::ePipelineRasterizationStateCreateInfo )
6876 , pNext( nullptr )
6877 , flags( flags_ )
6878 , depthClampEnable( depthClampEnable_ )
6879 , rasterizerDiscardEnable( rasterizerDiscardEnable_ )
6880 , polygonMode( polygonMode_ )
6881 , cullMode( cullMode_ )
6882 , frontFace( frontFace_ )
6883 , depthBiasEnable( depthBiasEnable_ )
6884 , depthBiasConstantFactor( depthBiasConstantFactor_ )
6885 , depthBiasClamp( depthBiasClamp_ )
6886 , depthBiasSlopeFactor( depthBiasSlopeFactor_ )
6887 , lineWidth( lineWidth_ )
6888 {
6889 }
6890
6891 PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs )
6892 {
6893 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6894 }
6895
6896 PipelineRasterizationStateCreateInfo& operator=( VkPipelineRasterizationStateCreateInfo const & rhs )
6897 {
6898 memcpy( this, &rhs, sizeof(PipelineRasterizationStateCreateInfo) );
6899 return *this;
6900 }
6901
6902 PipelineRasterizationStateCreateInfo& setSType( StructureType sType_ )
6903 {
6904 sType = sType_;
6905 return *this;
6906 }
6907
6908 PipelineRasterizationStateCreateInfo& setPNext( const void* pNext_ )
6909 {
6910 pNext = pNext_;
6911 return *this;
6912 }
6913
6914 PipelineRasterizationStateCreateInfo& setFlags( PipelineRasterizationStateCreateFlags flags_ )
6915 {
6916 flags = flags_;
6917 return *this;
6918 }
6919
6920 PipelineRasterizationStateCreateInfo& setDepthClampEnable( Bool32 depthClampEnable_ )
6921 {
6922 depthClampEnable = depthClampEnable_;
6923 return *this;
6924 }
6925
6926 PipelineRasterizationStateCreateInfo& setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable_ )
6927 {
6928 rasterizerDiscardEnable = rasterizerDiscardEnable_;
6929 return *this;
6930 }
6931
6932 PipelineRasterizationStateCreateInfo& setPolygonMode( PolygonMode polygonMode_ )
6933 {
6934 polygonMode = polygonMode_;
6935 return *this;
6936 }
6937
6938 PipelineRasterizationStateCreateInfo& setCullMode( CullModeFlags cullMode_ )
6939 {
6940 cullMode = cullMode_;
6941 return *this;
6942 }
6943
6944 PipelineRasterizationStateCreateInfo& setFrontFace( FrontFace frontFace_ )
6945 {
6946 frontFace = frontFace_;
6947 return *this;
6948 }
6949
6950 PipelineRasterizationStateCreateInfo& setDepthBiasEnable( Bool32 depthBiasEnable_ )
6951 {
6952 depthBiasEnable = depthBiasEnable_;
6953 return *this;
6954 }
6955
6956 PipelineRasterizationStateCreateInfo& setDepthBiasConstantFactor( float depthBiasConstantFactor_ )
6957 {
6958 depthBiasConstantFactor = depthBiasConstantFactor_;
6959 return *this;
6960 }
6961
6962 PipelineRasterizationStateCreateInfo& setDepthBiasClamp( float depthBiasClamp_ )
6963 {
6964 depthBiasClamp = depthBiasClamp_;
6965 return *this;
6966 }
6967
6968 PipelineRasterizationStateCreateInfo& setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ )
6969 {
6970 depthBiasSlopeFactor = depthBiasSlopeFactor_;
6971 return *this;
6972 }
6973
6974 PipelineRasterizationStateCreateInfo& setLineWidth( float lineWidth_ )
6975 {
6976 lineWidth = lineWidth_;
6977 return *this;
6978 }
6979
6980 operator const VkPipelineRasterizationStateCreateInfo&() const
6981 {
6982 return *reinterpret_cast<const VkPipelineRasterizationStateCreateInfo*>(this);
6983 }
6984
6985 bool operator==( PipelineRasterizationStateCreateInfo const& rhs ) const
6986 {
6987 return ( sType == rhs.sType )
6988 && ( pNext == rhs.pNext )
6989 && ( flags == rhs.flags )
6990 && ( depthClampEnable == rhs.depthClampEnable )
6991 && ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable )
6992 && ( polygonMode == rhs.polygonMode )
6993 && ( cullMode == rhs.cullMode )
6994 && ( frontFace == rhs.frontFace )
6995 && ( depthBiasEnable == rhs.depthBiasEnable )
6996 && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor )
6997 && ( depthBiasClamp == rhs.depthBiasClamp )
6998 && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor )
6999 && ( lineWidth == rhs.lineWidth );
7000 }
7001
7002 bool operator!=( PipelineRasterizationStateCreateInfo const& rhs ) const
7003 {
7004 return !operator==( rhs );
7005 }
7006
7007 private:
7008 StructureType sType;
7009
7010 public:
7011 const void* pNext;
7012 PipelineRasterizationStateCreateFlags flags;
7013 Bool32 depthClampEnable;
7014 Bool32 rasterizerDiscardEnable;
7015 PolygonMode polygonMode;
7016 CullModeFlags cullMode;
7017 FrontFace frontFace;
7018 Bool32 depthBiasEnable;
7019 float depthBiasConstantFactor;
7020 float depthBiasClamp;
7021 float depthBiasSlopeFactor;
7022 float lineWidth;
7023 };
7024 static_assert( sizeof( PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ), "struct and wrapper have different size!" );
7025
7026 struct PipelineDepthStencilStateCreateInfo
7027 {
7028 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 )
7029 : sType( StructureType::ePipelineDepthStencilStateCreateInfo )
7030 , pNext( nullptr )
7031 , flags( flags_ )
7032 , depthTestEnable( depthTestEnable_ )
7033 , depthWriteEnable( depthWriteEnable_ )
7034 , depthCompareOp( depthCompareOp_ )
7035 , depthBoundsTestEnable( depthBoundsTestEnable_ )
7036 , stencilTestEnable( stencilTestEnable_ )
7037 , front( front_ )
7038 , back( back_ )
7039 , minDepthBounds( minDepthBounds_ )
7040 , maxDepthBounds( maxDepthBounds_ )
7041 {
7042 }
7043
7044 PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs )
7045 {
7046 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
7047 }
7048
7049 PipelineDepthStencilStateCreateInfo& operator=( VkPipelineDepthStencilStateCreateInfo const & rhs )
7050 {
7051 memcpy( this, &rhs, sizeof(PipelineDepthStencilStateCreateInfo) );
7052 return *this;
7053 }
7054
7055 PipelineDepthStencilStateCreateInfo& setSType( StructureType sType_ )
7056 {
7057 sType = sType_;
7058 return *this;
7059 }
7060
7061 PipelineDepthStencilStateCreateInfo& setPNext( const void* pNext_ )
7062 {
7063 pNext = pNext_;
7064 return *this;
7065 }
7066
7067 PipelineDepthStencilStateCreateInfo& setFlags( PipelineDepthStencilStateCreateFlags flags_ )
7068 {
7069 flags = flags_;
7070 return *this;
7071 }
7072
7073 PipelineDepthStencilStateCreateInfo& setDepthTestEnable( Bool32 depthTestEnable_ )
7074 {
7075 depthTestEnable = depthTestEnable_;
7076 return *this;
7077 }
7078
7079 PipelineDepthStencilStateCreateInfo& setDepthWriteEnable( Bool32 depthWriteEnable_ )
7080 {
7081 depthWriteEnable = depthWriteEnable_;
7082 return *this;
7083 }
7084
7085 PipelineDepthStencilStateCreateInfo& setDepthCompareOp( CompareOp depthCompareOp_ )
7086 {
7087 depthCompareOp = depthCompareOp_;
7088 return *this;
7089 }
7090
7091 PipelineDepthStencilStateCreateInfo& setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable_ )
7092 {
7093 depthBoundsTestEnable = depthBoundsTestEnable_;
7094 return *this;
7095 }
7096
7097 PipelineDepthStencilStateCreateInfo& setStencilTestEnable( Bool32 stencilTestEnable_ )
7098 {
7099 stencilTestEnable = stencilTestEnable_;
7100 return *this;
7101 }
7102
7103 PipelineDepthStencilStateCreateInfo& setFront( StencilOpState front_ )
7104 {
7105 front = front_;
7106 return *this;
7107 }
7108
7109 PipelineDepthStencilStateCreateInfo& setBack( StencilOpState back_ )
7110 {
7111 back = back_;
7112 return *this;
7113 }
7114
7115 PipelineDepthStencilStateCreateInfo& setMinDepthBounds( float minDepthBounds_ )
7116 {
7117 minDepthBounds = minDepthBounds_;
7118 return *this;
7119 }
7120
7121 PipelineDepthStencilStateCreateInfo& setMaxDepthBounds( float maxDepthBounds_ )
7122 {
7123 maxDepthBounds = maxDepthBounds_;
7124 return *this;
7125 }
7126
7127 operator const VkPipelineDepthStencilStateCreateInfo&() const
7128 {
7129 return *reinterpret_cast<const VkPipelineDepthStencilStateCreateInfo*>(this);
7130 }
7131
7132 bool operator==( PipelineDepthStencilStateCreateInfo const& rhs ) const
7133 {
7134 return ( sType == rhs.sType )
7135 && ( pNext == rhs.pNext )
7136 && ( flags == rhs.flags )
7137 && ( depthTestEnable == rhs.depthTestEnable )
7138 && ( depthWriteEnable == rhs.depthWriteEnable )
7139 && ( depthCompareOp == rhs.depthCompareOp )
7140 && ( depthBoundsTestEnable == rhs.depthBoundsTestEnable )
7141 && ( stencilTestEnable == rhs.stencilTestEnable )
7142 && ( front == rhs.front )
7143 && ( back == rhs.back )
7144 && ( minDepthBounds == rhs.minDepthBounds )
7145 && ( maxDepthBounds == rhs.maxDepthBounds );
7146 }
7147
7148 bool operator!=( PipelineDepthStencilStateCreateInfo const& rhs ) const
7149 {
7150 return !operator==( rhs );
7151 }
7152
7153 private:
7154 StructureType sType;
7155
7156 public:
7157 const void* pNext;
7158 PipelineDepthStencilStateCreateFlags flags;
7159 Bool32 depthTestEnable;
7160 Bool32 depthWriteEnable;
7161 CompareOp depthCompareOp;
7162 Bool32 depthBoundsTestEnable;
7163 Bool32 stencilTestEnable;
7164 StencilOpState front;
7165 StencilOpState back;
7166 float minDepthBounds;
7167 float maxDepthBounds;
7168 };
7169 static_assert( sizeof( PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ), "struct and wrapper have different size!" );
7170
7171 struct PipelineCacheCreateInfo
7172 {
7173 PipelineCacheCreateInfo( PipelineCacheCreateFlags flags_ = PipelineCacheCreateFlags(), size_t initialDataSize_ = 0, const void* pInitialData_ = nullptr )
7174 : sType( StructureType::ePipelineCacheCreateInfo )
7175 , pNext( nullptr )
7176 , flags( flags_ )
7177 , initialDataSize( initialDataSize_ )
7178 , pInitialData( pInitialData_ )
7179 {
7180 }
7181
7182 PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs )
7183 {
7184 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7185 }
7186
7187 PipelineCacheCreateInfo& operator=( VkPipelineCacheCreateInfo const & rhs )
7188 {
7189 memcpy( this, &rhs, sizeof(PipelineCacheCreateInfo) );
7190 return *this;
7191 }
7192
7193 PipelineCacheCreateInfo& setSType( StructureType sType_ )
7194 {
7195 sType = sType_;
7196 return *this;
7197 }
7198
7199 PipelineCacheCreateInfo& setPNext( const void* pNext_ )
7200 {
7201 pNext = pNext_;
7202 return *this;
7203 }
7204
7205 PipelineCacheCreateInfo& setFlags( PipelineCacheCreateFlags flags_ )
7206 {
7207 flags = flags_;
7208 return *this;
7209 }
7210
7211 PipelineCacheCreateInfo& setInitialDataSize( size_t initialDataSize_ )
7212 {
7213 initialDataSize = initialDataSize_;
7214 return *this;
7215 }
7216
7217 PipelineCacheCreateInfo& setPInitialData( const void* pInitialData_ )
7218 {
7219 pInitialData = pInitialData_;
7220 return *this;
7221 }
7222
7223 operator const VkPipelineCacheCreateInfo&() const
7224 {
7225 return *reinterpret_cast<const VkPipelineCacheCreateInfo*>(this);
7226 }
7227
7228 bool operator==( PipelineCacheCreateInfo const& rhs ) const
7229 {
7230 return ( sType == rhs.sType )
7231 && ( pNext == rhs.pNext )
7232 && ( flags == rhs.flags )
7233 && ( initialDataSize == rhs.initialDataSize )
7234 && ( pInitialData == rhs.pInitialData );
7235 }
7236
7237 bool operator!=( PipelineCacheCreateInfo const& rhs ) const
7238 {
7239 return !operator==( rhs );
7240 }
7241
7242 private:
7243 StructureType sType;
7244
7245 public:
7246 const void* pNext;
7247 PipelineCacheCreateFlags flags;
7248 size_t initialDataSize;
7249 const void* pInitialData;
7250 };
7251 static_assert( sizeof( PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ), "struct and wrapper have different size!" );
7252
7253 struct SamplerCreateInfo
7254 {
7255 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 )
7256 : sType( StructureType::eSamplerCreateInfo )
7257 , pNext( nullptr )
7258 , flags( flags_ )
7259 , magFilter( magFilter_ )
7260 , minFilter( minFilter_ )
7261 , mipmapMode( mipmapMode_ )
7262 , addressModeU( addressModeU_ )
7263 , addressModeV( addressModeV_ )
7264 , addressModeW( addressModeW_ )
7265 , mipLodBias( mipLodBias_ )
7266 , anisotropyEnable( anisotropyEnable_ )
7267 , maxAnisotropy( maxAnisotropy_ )
7268 , compareEnable( compareEnable_ )
7269 , compareOp( compareOp_ )
7270 , minLod( minLod_ )
7271 , maxLod( maxLod_ )
7272 , borderColor( borderColor_ )
7273 , unnormalizedCoordinates( unnormalizedCoordinates_ )
7274 {
7275 }
7276
7277 SamplerCreateInfo( VkSamplerCreateInfo const & rhs )
7278 {
7279 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7280 }
7281
7282 SamplerCreateInfo& operator=( VkSamplerCreateInfo const & rhs )
7283 {
7284 memcpy( this, &rhs, sizeof(SamplerCreateInfo) );
7285 return *this;
7286 }
7287
7288 SamplerCreateInfo& setSType( StructureType sType_ )
7289 {
7290 sType = sType_;
7291 return *this;
7292 }
7293
7294 SamplerCreateInfo& setPNext( const void* pNext_ )
7295 {
7296 pNext = pNext_;
7297 return *this;
7298 }
7299
7300 SamplerCreateInfo& setFlags( SamplerCreateFlags flags_ )
7301 {
7302 flags = flags_;
7303 return *this;
7304 }
7305
7306 SamplerCreateInfo& setMagFilter( Filter magFilter_ )
7307 {
7308 magFilter = magFilter_;
7309 return *this;
7310 }
7311
7312 SamplerCreateInfo& setMinFilter( Filter minFilter_ )
7313 {
7314 minFilter = minFilter_;
7315 return *this;
7316 }
7317
7318 SamplerCreateInfo& setMipmapMode( SamplerMipmapMode mipmapMode_ )
7319 {
7320 mipmapMode = mipmapMode_;
7321 return *this;
7322 }
7323
7324 SamplerCreateInfo& setAddressModeU( SamplerAddressMode addressModeU_ )
7325 {
7326 addressModeU = addressModeU_;
7327 return *this;
7328 }
7329
7330 SamplerCreateInfo& setAddressModeV( SamplerAddressMode addressModeV_ )
7331 {
7332 addressModeV = addressModeV_;
7333 return *this;
7334 }
7335
7336 SamplerCreateInfo& setAddressModeW( SamplerAddressMode addressModeW_ )
7337 {
7338 addressModeW = addressModeW_;
7339 return *this;
7340 }
7341
7342 SamplerCreateInfo& setMipLodBias( float mipLodBias_ )
7343 {
7344 mipLodBias = mipLodBias_;
7345 return *this;
7346 }
7347
7348 SamplerCreateInfo& setAnisotropyEnable( Bool32 anisotropyEnable_ )
7349 {
7350 anisotropyEnable = anisotropyEnable_;
7351 return *this;
7352 }
7353
7354 SamplerCreateInfo& setMaxAnisotropy( float maxAnisotropy_ )
7355 {
7356 maxAnisotropy = maxAnisotropy_;
7357 return *this;
7358 }
7359
7360 SamplerCreateInfo& setCompareEnable( Bool32 compareEnable_ )
7361 {
7362 compareEnable = compareEnable_;
7363 return *this;
7364 }
7365
7366 SamplerCreateInfo& setCompareOp( CompareOp compareOp_ )
7367 {
7368 compareOp = compareOp_;
7369 return *this;
7370 }
7371
7372 SamplerCreateInfo& setMinLod( float minLod_ )
7373 {
7374 minLod = minLod_;
7375 return *this;
7376 }
7377
7378 SamplerCreateInfo& setMaxLod( float maxLod_ )
7379 {
7380 maxLod = maxLod_;
7381 return *this;
7382 }
7383
7384 SamplerCreateInfo& setBorderColor( BorderColor borderColor_ )
7385 {
7386 borderColor = borderColor_;
7387 return *this;
7388 }
7389
7390 SamplerCreateInfo& setUnnormalizedCoordinates( Bool32 unnormalizedCoordinates_ )
7391 {
7392 unnormalizedCoordinates = unnormalizedCoordinates_;
7393 return *this;
7394 }
7395
7396 operator const VkSamplerCreateInfo&() const
7397 {
7398 return *reinterpret_cast<const VkSamplerCreateInfo*>(this);
7399 }
7400
7401 bool operator==( SamplerCreateInfo const& rhs ) const
7402 {
7403 return ( sType == rhs.sType )
7404 && ( pNext == rhs.pNext )
7405 && ( flags == rhs.flags )
7406 && ( magFilter == rhs.magFilter )
7407 && ( minFilter == rhs.minFilter )
7408 && ( mipmapMode == rhs.mipmapMode )
7409 && ( addressModeU == rhs.addressModeU )
7410 && ( addressModeV == rhs.addressModeV )
7411 && ( addressModeW == rhs.addressModeW )
7412 && ( mipLodBias == rhs.mipLodBias )
7413 && ( anisotropyEnable == rhs.anisotropyEnable )
7414 && ( maxAnisotropy == rhs.maxAnisotropy )
7415 && ( compareEnable == rhs.compareEnable )
7416 && ( compareOp == rhs.compareOp )
7417 && ( minLod == rhs.minLod )
7418 && ( maxLod == rhs.maxLod )
7419 && ( borderColor == rhs.borderColor )
7420 && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates );
7421 }
7422
7423 bool operator!=( SamplerCreateInfo const& rhs ) const
7424 {
7425 return !operator==( rhs );
7426 }
7427
7428 private:
7429 StructureType sType;
7430
7431 public:
7432 const void* pNext;
7433 SamplerCreateFlags flags;
7434 Filter magFilter;
7435 Filter minFilter;
7436 SamplerMipmapMode mipmapMode;
7437 SamplerAddressMode addressModeU;
7438 SamplerAddressMode addressModeV;
7439 SamplerAddressMode addressModeW;
7440 float mipLodBias;
7441 Bool32 anisotropyEnable;
7442 float maxAnisotropy;
7443 Bool32 compareEnable;
7444 CompareOp compareOp;
7445 float minLod;
7446 float maxLod;
7447 BorderColor borderColor;
7448 Bool32 unnormalizedCoordinates;
7449 };
7450 static_assert( sizeof( SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ), "struct and wrapper have different size!" );
7451
7452 struct CommandBufferAllocateInfo
7453 {
7454 CommandBufferAllocateInfo( CommandPool commandPool_ = CommandPool(), CommandBufferLevel level_ = CommandBufferLevel::ePrimary, uint32_t commandBufferCount_ = 0 )
7455 : sType( StructureType::eCommandBufferAllocateInfo )
7456 , pNext( nullptr )
7457 , commandPool( commandPool_ )
7458 , level( level_ )
7459 , commandBufferCount( commandBufferCount_ )
7460 {
7461 }
7462
7463 CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs )
7464 {
7465 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7466 }
7467
7468 CommandBufferAllocateInfo& operator=( VkCommandBufferAllocateInfo const & rhs )
7469 {
7470 memcpy( this, &rhs, sizeof(CommandBufferAllocateInfo) );
7471 return *this;
7472 }
7473
7474 CommandBufferAllocateInfo& setSType( StructureType sType_ )
7475 {
7476 sType = sType_;
7477 return *this;
7478 }
7479
7480 CommandBufferAllocateInfo& setPNext( const void* pNext_ )
7481 {
7482 pNext = pNext_;
7483 return *this;
7484 }
7485
7486 CommandBufferAllocateInfo& setCommandPool( CommandPool commandPool_ )
7487 {
7488 commandPool = commandPool_;
7489 return *this;
7490 }
7491
7492 CommandBufferAllocateInfo& setLevel( CommandBufferLevel level_ )
7493 {
7494 level = level_;
7495 return *this;
7496 }
7497
7498 CommandBufferAllocateInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
7499 {
7500 commandBufferCount = commandBufferCount_;
7501 return *this;
7502 }
7503
7504 operator const VkCommandBufferAllocateInfo&() const
7505 {
7506 return *reinterpret_cast<const VkCommandBufferAllocateInfo*>(this);
7507 }
7508
7509 bool operator==( CommandBufferAllocateInfo const& rhs ) const
7510 {
7511 return ( sType == rhs.sType )
7512 && ( pNext == rhs.pNext )
7513 && ( commandPool == rhs.commandPool )
7514 && ( level == rhs.level )
7515 && ( commandBufferCount == rhs.commandBufferCount );
7516 }
7517
7518 bool operator!=( CommandBufferAllocateInfo const& rhs ) const
7519 {
7520 return !operator==( rhs );
7521 }
7522
7523 private:
7524 StructureType sType;
7525
7526 public:
7527 const void* pNext;
7528 CommandPool commandPool;
7529 CommandBufferLevel level;
7530 uint32_t commandBufferCount;
7531 };
7532 static_assert( sizeof( CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ), "struct and wrapper have different size!" );
7533
7534 struct RenderPassBeginInfo
7535 {
7536 RenderPassBeginInfo( RenderPass renderPass_ = RenderPass(), Framebuffer framebuffer_ = Framebuffer(), Rect2D renderArea_ = Rect2D(), uint32_t clearValueCount_ = 0, const ClearValue* pClearValues_ = nullptr )
7537 : sType( StructureType::eRenderPassBeginInfo )
7538 , pNext( nullptr )
7539 , renderPass( renderPass_ )
7540 , framebuffer( framebuffer_ )
7541 , renderArea( renderArea_ )
7542 , clearValueCount( clearValueCount_ )
7543 , pClearValues( pClearValues_ )
7544 {
7545 }
7546
7547 RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs )
7548 {
7549 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7550 }
7551
7552 RenderPassBeginInfo& operator=( VkRenderPassBeginInfo const & rhs )
7553 {
7554 memcpy( this, &rhs, sizeof(RenderPassBeginInfo) );
7555 return *this;
7556 }
7557
7558 RenderPassBeginInfo& setSType( StructureType sType_ )
7559 {
7560 sType = sType_;
7561 return *this;
7562 }
7563
7564 RenderPassBeginInfo& setPNext( const void* pNext_ )
7565 {
7566 pNext = pNext_;
7567 return *this;
7568 }
7569
7570 RenderPassBeginInfo& setRenderPass( RenderPass renderPass_ )
7571 {
7572 renderPass = renderPass_;
7573 return *this;
7574 }
7575
7576 RenderPassBeginInfo& setFramebuffer( Framebuffer framebuffer_ )
7577 {
7578 framebuffer = framebuffer_;
7579 return *this;
7580 }
7581
7582 RenderPassBeginInfo& setRenderArea( Rect2D renderArea_ )
7583 {
7584 renderArea = renderArea_;
7585 return *this;
7586 }
7587
7588 RenderPassBeginInfo& setClearValueCount( uint32_t clearValueCount_ )
7589 {
7590 clearValueCount = clearValueCount_;
7591 return *this;
7592 }
7593
7594 RenderPassBeginInfo& setPClearValues( const ClearValue* pClearValues_ )
7595 {
7596 pClearValues = pClearValues_;
7597 return *this;
7598 }
7599
7600 operator const VkRenderPassBeginInfo&() const
7601 {
7602 return *reinterpret_cast<const VkRenderPassBeginInfo*>(this);
7603 }
7604
7605 bool operator==( RenderPassBeginInfo const& rhs ) const
7606 {
7607 return ( sType == rhs.sType )
7608 && ( pNext == rhs.pNext )
7609 && ( renderPass == rhs.renderPass )
7610 && ( framebuffer == rhs.framebuffer )
7611 && ( renderArea == rhs.renderArea )
7612 && ( clearValueCount == rhs.clearValueCount )
7613 && ( pClearValues == rhs.pClearValues );
7614 }
7615
7616 bool operator!=( RenderPassBeginInfo const& rhs ) const
7617 {
7618 return !operator==( rhs );
7619 }
7620
7621 private:
7622 StructureType sType;
7623
7624 public:
7625 const void* pNext;
7626 RenderPass renderPass;
7627 Framebuffer framebuffer;
7628 Rect2D renderArea;
7629 uint32_t clearValueCount;
7630 const ClearValue* pClearValues;
7631 };
7632 static_assert( sizeof( RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ), "struct and wrapper have different size!" );
7633
7634 struct EventCreateInfo
7635 {
7636 EventCreateInfo( EventCreateFlags flags_ = EventCreateFlags() )
7637 : sType( StructureType::eEventCreateInfo )
7638 , pNext( nullptr )
7639 , flags( flags_ )
7640 {
7641 }
7642
7643 EventCreateInfo( VkEventCreateInfo const & rhs )
7644 {
7645 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7646 }
7647
7648 EventCreateInfo& operator=( VkEventCreateInfo const & rhs )
7649 {
7650 memcpy( this, &rhs, sizeof(EventCreateInfo) );
7651 return *this;
7652 }
7653
7654 EventCreateInfo& setSType( StructureType sType_ )
7655 {
7656 sType = sType_;
7657 return *this;
7658 }
7659
7660 EventCreateInfo& setPNext( const void* pNext_ )
7661 {
7662 pNext = pNext_;
7663 return *this;
7664 }
7665
7666 EventCreateInfo& setFlags( EventCreateFlags flags_ )
7667 {
7668 flags = flags_;
7669 return *this;
7670 }
7671
7672 operator const VkEventCreateInfo&() const
7673 {
7674 return *reinterpret_cast<const VkEventCreateInfo*>(this);
7675 }
7676
7677 bool operator==( EventCreateInfo const& rhs ) const
7678 {
7679 return ( sType == rhs.sType )
7680 && ( pNext == rhs.pNext )
7681 && ( flags == rhs.flags );
7682 }
7683
7684 bool operator!=( EventCreateInfo const& rhs ) const
7685 {
7686 return !operator==( rhs );
7687 }
7688
7689 private:
7690 StructureType sType;
7691
7692 public:
7693 const void* pNext;
7694 EventCreateFlags flags;
7695 };
7696 static_assert( sizeof( EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" );
7697
7698 struct SemaphoreCreateInfo
7699 {
7700 SemaphoreCreateInfo( SemaphoreCreateFlags flags_ = SemaphoreCreateFlags() )
7701 : sType( StructureType::eSemaphoreCreateInfo )
7702 , pNext( nullptr )
7703 , flags( flags_ )
7704 {
7705 }
7706
7707 SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs )
7708 {
7709 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7710 }
7711
7712 SemaphoreCreateInfo& operator=( VkSemaphoreCreateInfo const & rhs )
7713 {
7714 memcpy( this, &rhs, sizeof(SemaphoreCreateInfo) );
7715 return *this;
7716 }
7717
7718 SemaphoreCreateInfo& setSType( StructureType sType_ )
7719 {
7720 sType = sType_;
7721 return *this;
7722 }
7723
7724 SemaphoreCreateInfo& setPNext( const void* pNext_ )
7725 {
7726 pNext = pNext_;
7727 return *this;
7728 }
7729
7730 SemaphoreCreateInfo& setFlags( SemaphoreCreateFlags flags_ )
7731 {
7732 flags = flags_;
7733 return *this;
7734 }
7735
7736 operator const VkSemaphoreCreateInfo&() const
7737 {
7738 return *reinterpret_cast<const VkSemaphoreCreateInfo*>(this);
7739 }
7740
7741 bool operator==( SemaphoreCreateInfo const& rhs ) const
7742 {
7743 return ( sType == rhs.sType )
7744 && ( pNext == rhs.pNext )
7745 && ( flags == rhs.flags );
7746 }
7747
7748 bool operator!=( SemaphoreCreateInfo const& rhs ) const
7749 {
7750 return !operator==( rhs );
7751 }
7752
7753 private:
7754 StructureType sType;
7755
7756 public:
7757 const void* pNext;
7758 SemaphoreCreateFlags flags;
7759 };
7760 static_assert( sizeof( SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ), "struct and wrapper have different size!" );
7761
7762 struct FramebufferCreateInfo
7763 {
7764 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 )
7765 : sType( StructureType::eFramebufferCreateInfo )
7766 , pNext( nullptr )
7767 , flags( flags_ )
7768 , renderPass( renderPass_ )
7769 , attachmentCount( attachmentCount_ )
7770 , pAttachments( pAttachments_ )
7771 , width( width_ )
7772 , height( height_ )
7773 , layers( layers_ )
7774 {
7775 }
7776
7777 FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs )
7778 {
7779 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7780 }
7781
7782 FramebufferCreateInfo& operator=( VkFramebufferCreateInfo const & rhs )
7783 {
7784 memcpy( this, &rhs, sizeof(FramebufferCreateInfo) );
7785 return *this;
7786 }
7787
7788 FramebufferCreateInfo& setSType( StructureType sType_ )
7789 {
7790 sType = sType_;
7791 return *this;
7792 }
7793
7794 FramebufferCreateInfo& setPNext( const void* pNext_ )
7795 {
7796 pNext = pNext_;
7797 return *this;
7798 }
7799
7800 FramebufferCreateInfo& setFlags( FramebufferCreateFlags flags_ )
7801 {
7802 flags = flags_;
7803 return *this;
7804 }
7805
7806 FramebufferCreateInfo& setRenderPass( RenderPass renderPass_ )
7807 {
7808 renderPass = renderPass_;
7809 return *this;
7810 }
7811
7812 FramebufferCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
7813 {
7814 attachmentCount = attachmentCount_;
7815 return *this;
7816 }
7817
7818 FramebufferCreateInfo& setPAttachments( const ImageView* pAttachments_ )
7819 {
7820 pAttachments = pAttachments_;
7821 return *this;
7822 }
7823
7824 FramebufferCreateInfo& setWidth( uint32_t width_ )
7825 {
7826 width = width_;
7827 return *this;
7828 }
7829
7830 FramebufferCreateInfo& setHeight( uint32_t height_ )
7831 {
7832 height = height_;
7833 return *this;
7834 }
7835
7836 FramebufferCreateInfo& setLayers( uint32_t layers_ )
7837 {
7838 layers = layers_;
7839 return *this;
7840 }
7841
7842 operator const VkFramebufferCreateInfo&() const
7843 {
7844 return *reinterpret_cast<const VkFramebufferCreateInfo*>(this);
7845 }
7846
7847 bool operator==( FramebufferCreateInfo const& rhs ) const
7848 {
7849 return ( sType == rhs.sType )
7850 && ( pNext == rhs.pNext )
7851 && ( flags == rhs.flags )
7852 && ( renderPass == rhs.renderPass )
7853 && ( attachmentCount == rhs.attachmentCount )
7854 && ( pAttachments == rhs.pAttachments )
7855 && ( width == rhs.width )
7856 && ( height == rhs.height )
7857 && ( layers == rhs.layers );
7858 }
7859
7860 bool operator!=( FramebufferCreateInfo const& rhs ) const
7861 {
7862 return !operator==( rhs );
7863 }
7864
7865 private:
7866 StructureType sType;
7867
7868 public:
7869 const void* pNext;
7870 FramebufferCreateFlags flags;
7871 RenderPass renderPass;
7872 uint32_t attachmentCount;
7873 const ImageView* pAttachments;
7874 uint32_t width;
7875 uint32_t height;
7876 uint32_t layers;
7877 };
7878 static_assert( sizeof( FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ), "struct and wrapper have different size!" );
7879
7880 struct DisplayModeCreateInfoKHR
7881 {
7882 DisplayModeCreateInfoKHR( DisplayModeCreateFlagsKHR flags_ = DisplayModeCreateFlagsKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
7883 : sType( StructureType::eDisplayModeCreateInfoKHR )
7884 , pNext( nullptr )
7885 , flags( flags_ )
7886 , parameters( parameters_ )
7887 {
7888 }
7889
7890 DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs )
7891 {
7892 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7893 }
7894
7895 DisplayModeCreateInfoKHR& operator=( VkDisplayModeCreateInfoKHR const & rhs )
7896 {
7897 memcpy( this, &rhs, sizeof(DisplayModeCreateInfoKHR) );
7898 return *this;
7899 }
7900
7901 DisplayModeCreateInfoKHR& setSType( StructureType sType_ )
7902 {
7903 sType = sType_;
7904 return *this;
7905 }
7906
7907 DisplayModeCreateInfoKHR& setPNext( const void* pNext_ )
7908 {
7909 pNext = pNext_;
7910 return *this;
7911 }
7912
7913 DisplayModeCreateInfoKHR& setFlags( DisplayModeCreateFlagsKHR flags_ )
7914 {
7915 flags = flags_;
7916 return *this;
7917 }
7918
7919 DisplayModeCreateInfoKHR& setParameters( DisplayModeParametersKHR parameters_ )
7920 {
7921 parameters = parameters_;
7922 return *this;
7923 }
7924
7925 operator const VkDisplayModeCreateInfoKHR&() const
7926 {
7927 return *reinterpret_cast<const VkDisplayModeCreateInfoKHR*>(this);
7928 }
7929
7930 bool operator==( DisplayModeCreateInfoKHR const& rhs ) const
7931 {
7932 return ( sType == rhs.sType )
7933 && ( pNext == rhs.pNext )
7934 && ( flags == rhs.flags )
7935 && ( parameters == rhs.parameters );
7936 }
7937
7938 bool operator!=( DisplayModeCreateInfoKHR const& rhs ) const
7939 {
7940 return !operator==( rhs );
7941 }
7942
7943 private:
7944 StructureType sType;
7945
7946 public:
7947 const void* pNext;
7948 DisplayModeCreateFlagsKHR flags;
7949 DisplayModeParametersKHR parameters;
7950 };
7951 static_assert( sizeof( DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ), "struct and wrapper have different size!" );
7952
7953 struct DisplayPresentInfoKHR
7954 {
7955 DisplayPresentInfoKHR( Rect2D srcRect_ = Rect2D(), Rect2D dstRect_ = Rect2D(), Bool32 persistent_ = 0 )
7956 : sType( StructureType::eDisplayPresentInfoKHR )
7957 , pNext( nullptr )
7958 , srcRect( srcRect_ )
7959 , dstRect( dstRect_ )
7960 , persistent( persistent_ )
7961 {
7962 }
7963
7964 DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs )
7965 {
7966 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7967 }
7968
7969 DisplayPresentInfoKHR& operator=( VkDisplayPresentInfoKHR const & rhs )
7970 {
7971 memcpy( this, &rhs, sizeof(DisplayPresentInfoKHR) );
7972 return *this;
7973 }
7974
7975 DisplayPresentInfoKHR& setSType( StructureType sType_ )
7976 {
7977 sType = sType_;
7978 return *this;
7979 }
7980
7981 DisplayPresentInfoKHR& setPNext( const void* pNext_ )
7982 {
7983 pNext = pNext_;
7984 return *this;
7985 }
7986
7987 DisplayPresentInfoKHR& setSrcRect( Rect2D srcRect_ )
7988 {
7989 srcRect = srcRect_;
7990 return *this;
7991 }
7992
7993 DisplayPresentInfoKHR& setDstRect( Rect2D dstRect_ )
7994 {
7995 dstRect = dstRect_;
7996 return *this;
7997 }
7998
7999 DisplayPresentInfoKHR& setPersistent( Bool32 persistent_ )
8000 {
8001 persistent = persistent_;
8002 return *this;
8003 }
8004
8005 operator const VkDisplayPresentInfoKHR&() const
8006 {
8007 return *reinterpret_cast<const VkDisplayPresentInfoKHR*>(this);
8008 }
8009
8010 bool operator==( DisplayPresentInfoKHR const& rhs ) const
8011 {
8012 return ( sType == rhs.sType )
8013 && ( pNext == rhs.pNext )
8014 && ( srcRect == rhs.srcRect )
8015 && ( dstRect == rhs.dstRect )
8016 && ( persistent == rhs.persistent );
8017 }
8018
8019 bool operator!=( DisplayPresentInfoKHR const& rhs ) const
8020 {
8021 return !operator==( rhs );
8022 }
8023
8024 private:
8025 StructureType sType;
8026
8027 public:
8028 const void* pNext;
8029 Rect2D srcRect;
8030 Rect2D dstRect;
8031 Bool32 persistent;
8032 };
8033 static_assert( sizeof( DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ), "struct and wrapper have different size!" );
8034
8035#ifdef VK_USE_PLATFORM_ANDROID_KHR
8036 struct AndroidSurfaceCreateInfoKHR
8037 {
8038 AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateFlagsKHR flags_ = AndroidSurfaceCreateFlagsKHR(), ANativeWindow* window_ = nullptr )
8039 : sType( StructureType::eAndroidSurfaceCreateInfoKHR )
8040 , pNext( nullptr )
8041 , flags( flags_ )
8042 , window( window_ )
8043 {
8044 }
8045
8046 AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs )
8047 {
8048 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
8049 }
8050
8051 AndroidSurfaceCreateInfoKHR& operator=( VkAndroidSurfaceCreateInfoKHR const & rhs )
8052 {
8053 memcpy( this, &rhs, sizeof(AndroidSurfaceCreateInfoKHR) );
8054 return *this;
8055 }
8056
8057 AndroidSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8058 {
8059 sType = sType_;
8060 return *this;
8061 }
8062
8063 AndroidSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8064 {
8065 pNext = pNext_;
8066 return *this;
8067 }
8068
8069 AndroidSurfaceCreateInfoKHR& setFlags( AndroidSurfaceCreateFlagsKHR flags_ )
8070 {
8071 flags = flags_;
8072 return *this;
8073 }
8074
8075 AndroidSurfaceCreateInfoKHR& setWindow( ANativeWindow* window_ )
8076 {
8077 window = window_;
8078 return *this;
8079 }
8080
8081 operator const VkAndroidSurfaceCreateInfoKHR&() const
8082 {
8083 return *reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>(this);
8084 }
8085
8086 bool operator==( AndroidSurfaceCreateInfoKHR const& rhs ) const
8087 {
8088 return ( sType == rhs.sType )
8089 && ( pNext == rhs.pNext )
8090 && ( flags == rhs.flags )
8091 && ( window == rhs.window );
8092 }
8093
8094 bool operator!=( AndroidSurfaceCreateInfoKHR const& rhs ) const
8095 {
8096 return !operator==( rhs );
8097 }
8098
8099 private:
8100 StructureType sType;
8101
8102 public:
8103 const void* pNext;
8104 AndroidSurfaceCreateFlagsKHR flags;
8105 ANativeWindow* window;
8106 };
8107 static_assert( sizeof( AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8108#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
8109
8110#ifdef VK_USE_PLATFORM_MIR_KHR
8111 struct MirSurfaceCreateInfoKHR
8112 {
8113 MirSurfaceCreateInfoKHR( MirSurfaceCreateFlagsKHR flags_ = MirSurfaceCreateFlagsKHR(), MirConnection* connection_ = nullptr, MirSurface* mirSurface_ = nullptr )
8114 : sType( StructureType::eMirSurfaceCreateInfoKHR )
8115 , pNext( nullptr )
8116 , flags( flags_ )
8117 , connection( connection_ )
8118 , mirSurface( mirSurface_ )
8119 {
8120 }
8121
8122 MirSurfaceCreateInfoKHR( VkMirSurfaceCreateInfoKHR const & rhs )
8123 {
8124 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8125 }
8126
8127 MirSurfaceCreateInfoKHR& operator=( VkMirSurfaceCreateInfoKHR const & rhs )
8128 {
8129 memcpy( this, &rhs, sizeof(MirSurfaceCreateInfoKHR) );
8130 return *this;
8131 }
8132
8133 MirSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8134 {
8135 sType = sType_;
8136 return *this;
8137 }
8138
8139 MirSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8140 {
8141 pNext = pNext_;
8142 return *this;
8143 }
8144
8145 MirSurfaceCreateInfoKHR& setFlags( MirSurfaceCreateFlagsKHR flags_ )
8146 {
8147 flags = flags_;
8148 return *this;
8149 }
8150
8151 MirSurfaceCreateInfoKHR& setConnection( MirConnection* connection_ )
8152 {
8153 connection = connection_;
8154 return *this;
8155 }
8156
8157 MirSurfaceCreateInfoKHR& setMirSurface( MirSurface* mirSurface_ )
8158 {
8159 mirSurface = mirSurface_;
8160 return *this;
8161 }
8162
8163 operator const VkMirSurfaceCreateInfoKHR&() const
8164 {
8165 return *reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>(this);
8166 }
8167
8168 bool operator==( MirSurfaceCreateInfoKHR const& rhs ) const
8169 {
8170 return ( sType == rhs.sType )
8171 && ( pNext == rhs.pNext )
8172 && ( flags == rhs.flags )
8173 && ( connection == rhs.connection )
8174 && ( mirSurface == rhs.mirSurface );
8175 }
8176
8177 bool operator!=( MirSurfaceCreateInfoKHR const& rhs ) const
8178 {
8179 return !operator==( rhs );
8180 }
8181
8182 private:
8183 StructureType sType;
8184
8185 public:
8186 const void* pNext;
8187 MirSurfaceCreateFlagsKHR flags;
8188 MirConnection* connection;
8189 MirSurface* mirSurface;
8190 };
8191 static_assert( sizeof( MirSurfaceCreateInfoKHR ) == sizeof( VkMirSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8192#endif /*VK_USE_PLATFORM_MIR_KHR*/
8193
8194#ifdef VK_USE_PLATFORM_WAYLAND_KHR
8195 struct WaylandSurfaceCreateInfoKHR
8196 {
8197 WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateFlagsKHR flags_ = WaylandSurfaceCreateFlagsKHR(), struct wl_display* display_ = nullptr, struct wl_surface* surface_ = nullptr )
8198 : sType( StructureType::eWaylandSurfaceCreateInfoKHR )
8199 , pNext( nullptr )
8200 , flags( flags_ )
8201 , display( display_ )
8202 , surface( surface_ )
8203 {
8204 }
8205
8206 WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs )
8207 {
8208 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8209 }
8210
8211 WaylandSurfaceCreateInfoKHR& operator=( VkWaylandSurfaceCreateInfoKHR const & rhs )
8212 {
8213 memcpy( this, &rhs, sizeof(WaylandSurfaceCreateInfoKHR) );
8214 return *this;
8215 }
8216
8217 WaylandSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8218 {
8219 sType = sType_;
8220 return *this;
8221 }
8222
8223 WaylandSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8224 {
8225 pNext = pNext_;
8226 return *this;
8227 }
8228
8229 WaylandSurfaceCreateInfoKHR& setFlags( WaylandSurfaceCreateFlagsKHR flags_ )
8230 {
8231 flags = flags_;
8232 return *this;
8233 }
8234
8235 WaylandSurfaceCreateInfoKHR& setDisplay( struct wl_display* display_ )
8236 {
8237 display = display_;
8238 return *this;
8239 }
8240
8241 WaylandSurfaceCreateInfoKHR& setSurface( struct wl_surface* surface_ )
8242 {
8243 surface = surface_;
8244 return *this;
8245 }
8246
8247 operator const VkWaylandSurfaceCreateInfoKHR&() const
8248 {
8249 return *reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>(this);
8250 }
8251
8252 bool operator==( WaylandSurfaceCreateInfoKHR const& rhs ) const
8253 {
8254 return ( sType == rhs.sType )
8255 && ( pNext == rhs.pNext )
8256 && ( flags == rhs.flags )
8257 && ( display == rhs.display )
8258 && ( surface == rhs.surface );
8259 }
8260
8261 bool operator!=( WaylandSurfaceCreateInfoKHR const& rhs ) const
8262 {
8263 return !operator==( rhs );
8264 }
8265
8266 private:
8267 StructureType sType;
8268
8269 public:
8270 const void* pNext;
8271 WaylandSurfaceCreateFlagsKHR flags;
8272 struct wl_display* display;
8273 struct wl_surface* surface;
8274 };
8275 static_assert( sizeof( WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8276#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
8277
8278#ifdef VK_USE_PLATFORM_WIN32_KHR
8279 struct Win32SurfaceCreateInfoKHR
8280 {
8281 Win32SurfaceCreateInfoKHR( Win32SurfaceCreateFlagsKHR flags_ = Win32SurfaceCreateFlagsKHR(), HINSTANCE hinstance_ = 0, HWND hwnd_ = 0 )
8282 : sType( StructureType::eWin32SurfaceCreateInfoKHR )
8283 , pNext( nullptr )
8284 , flags( flags_ )
8285 , hinstance( hinstance_ )
8286 , hwnd( hwnd_ )
8287 {
8288 }
8289
8290 Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs )
8291 {
8292 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8293 }
8294
8295 Win32SurfaceCreateInfoKHR& operator=( VkWin32SurfaceCreateInfoKHR const & rhs )
8296 {
8297 memcpy( this, &rhs, sizeof(Win32SurfaceCreateInfoKHR) );
8298 return *this;
8299 }
8300
8301 Win32SurfaceCreateInfoKHR& setSType( StructureType sType_ )
8302 {
8303 sType = sType_;
8304 return *this;
8305 }
8306
8307 Win32SurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8308 {
8309 pNext = pNext_;
8310 return *this;
8311 }
8312
8313 Win32SurfaceCreateInfoKHR& setFlags( Win32SurfaceCreateFlagsKHR flags_ )
8314 {
8315 flags = flags_;
8316 return *this;
8317 }
8318
8319 Win32SurfaceCreateInfoKHR& setHinstance( HINSTANCE hinstance_ )
8320 {
8321 hinstance = hinstance_;
8322 return *this;
8323 }
8324
8325 Win32SurfaceCreateInfoKHR& setHwnd( HWND hwnd_ )
8326 {
8327 hwnd = hwnd_;
8328 return *this;
8329 }
8330
8331 operator const VkWin32SurfaceCreateInfoKHR&() const
8332 {
8333 return *reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>(this);
8334 }
8335
8336 bool operator==( Win32SurfaceCreateInfoKHR const& rhs ) const
8337 {
8338 return ( sType == rhs.sType )
8339 && ( pNext == rhs.pNext )
8340 && ( flags == rhs.flags )
8341 && ( hinstance == rhs.hinstance )
8342 && ( hwnd == rhs.hwnd );
8343 }
8344
8345 bool operator!=( Win32SurfaceCreateInfoKHR const& rhs ) const
8346 {
8347 return !operator==( rhs );
8348 }
8349
8350 private:
8351 StructureType sType;
8352
8353 public:
8354 const void* pNext;
8355 Win32SurfaceCreateFlagsKHR flags;
8356 HINSTANCE hinstance;
8357 HWND hwnd;
8358 };
8359 static_assert( sizeof( Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8360#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8361
8362#ifdef VK_USE_PLATFORM_XLIB_KHR
8363 struct XlibSurfaceCreateInfoKHR
8364 {
8365 XlibSurfaceCreateInfoKHR( XlibSurfaceCreateFlagsKHR flags_ = XlibSurfaceCreateFlagsKHR(), Display* dpy_ = nullptr, Window window_ = 0 )
8366 : sType( StructureType::eXlibSurfaceCreateInfoKHR )
8367 , pNext( nullptr )
8368 , flags( flags_ )
8369 , dpy( dpy_ )
8370 , window( window_ )
8371 {
8372 }
8373
8374 XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs )
8375 {
8376 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8377 }
8378
8379 XlibSurfaceCreateInfoKHR& operator=( VkXlibSurfaceCreateInfoKHR const & rhs )
8380 {
8381 memcpy( this, &rhs, sizeof(XlibSurfaceCreateInfoKHR) );
8382 return *this;
8383 }
8384
8385 XlibSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8386 {
8387 sType = sType_;
8388 return *this;
8389 }
8390
8391 XlibSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8392 {
8393 pNext = pNext_;
8394 return *this;
8395 }
8396
8397 XlibSurfaceCreateInfoKHR& setFlags( XlibSurfaceCreateFlagsKHR flags_ )
8398 {
8399 flags = flags_;
8400 return *this;
8401 }
8402
8403 XlibSurfaceCreateInfoKHR& setDpy( Display* dpy_ )
8404 {
8405 dpy = dpy_;
8406 return *this;
8407 }
8408
8409 XlibSurfaceCreateInfoKHR& setWindow( Window window_ )
8410 {
8411 window = window_;
8412 return *this;
8413 }
8414
8415 operator const VkXlibSurfaceCreateInfoKHR&() const
8416 {
8417 return *reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>(this);
8418 }
8419
8420 bool operator==( XlibSurfaceCreateInfoKHR const& rhs ) const
8421 {
8422 return ( sType == rhs.sType )
8423 && ( pNext == rhs.pNext )
8424 && ( flags == rhs.flags )
8425 && ( dpy == rhs.dpy )
8426 && ( window == rhs.window );
8427 }
8428
8429 bool operator!=( XlibSurfaceCreateInfoKHR const& rhs ) const
8430 {
8431 return !operator==( rhs );
8432 }
8433
8434 private:
8435 StructureType sType;
8436
8437 public:
8438 const void* pNext;
8439 XlibSurfaceCreateFlagsKHR flags;
8440 Display* dpy;
8441 Window window;
8442 };
8443 static_assert( sizeof( XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8444#endif /*VK_USE_PLATFORM_XLIB_KHR*/
8445
8446#ifdef VK_USE_PLATFORM_XCB_KHR
8447 struct XcbSurfaceCreateInfoKHR
8448 {
8449 XcbSurfaceCreateInfoKHR( XcbSurfaceCreateFlagsKHR flags_ = XcbSurfaceCreateFlagsKHR(), xcb_connection_t* connection_ = nullptr, xcb_window_t window_ = 0 )
8450 : sType( StructureType::eXcbSurfaceCreateInfoKHR )
8451 , pNext( nullptr )
8452 , flags( flags_ )
8453 , connection( connection_ )
8454 , window( window_ )
8455 {
8456 }
8457
8458 XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs )
8459 {
8460 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8461 }
8462
8463 XcbSurfaceCreateInfoKHR& operator=( VkXcbSurfaceCreateInfoKHR const & rhs )
8464 {
8465 memcpy( this, &rhs, sizeof(XcbSurfaceCreateInfoKHR) );
8466 return *this;
8467 }
8468
8469 XcbSurfaceCreateInfoKHR& setSType( StructureType sType_ )
8470 {
8471 sType = sType_;
8472 return *this;
8473 }
8474
8475 XcbSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
8476 {
8477 pNext = pNext_;
8478 return *this;
8479 }
8480
8481 XcbSurfaceCreateInfoKHR& setFlags( XcbSurfaceCreateFlagsKHR flags_ )
8482 {
8483 flags = flags_;
8484 return *this;
8485 }
8486
8487 XcbSurfaceCreateInfoKHR& setConnection( xcb_connection_t* connection_ )
8488 {
8489 connection = connection_;
8490 return *this;
8491 }
8492
8493 XcbSurfaceCreateInfoKHR& setWindow( xcb_window_t window_ )
8494 {
8495 window = window_;
8496 return *this;
8497 }
8498
8499 operator const VkXcbSurfaceCreateInfoKHR&() const
8500 {
8501 return *reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>(this);
8502 }
8503
8504 bool operator==( XcbSurfaceCreateInfoKHR const& rhs ) const
8505 {
8506 return ( sType == rhs.sType )
8507 && ( pNext == rhs.pNext )
8508 && ( flags == rhs.flags )
8509 && ( connection == rhs.connection )
8510 && ( window == rhs.window );
8511 }
8512
8513 bool operator!=( XcbSurfaceCreateInfoKHR const& rhs ) const
8514 {
8515 return !operator==( rhs );
8516 }
8517
8518 private:
8519 StructureType sType;
8520
8521 public:
8522 const void* pNext;
8523 XcbSurfaceCreateFlagsKHR flags;
8524 xcb_connection_t* connection;
8525 xcb_window_t window;
8526 };
8527 static_assert( sizeof( XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
8528#endif /*VK_USE_PLATFORM_XCB_KHR*/
8529
8530 struct DebugMarkerMarkerInfoEXT
8531 {
8532 DebugMarkerMarkerInfoEXT( const char* pMarkerName_ = nullptr, std::array<float,4> const& color_ = { { 0, 0, 0, 0 } } )
8533 : sType( StructureType::eDebugMarkerMarkerInfoEXT )
8534 , pNext( nullptr )
8535 , pMarkerName( pMarkerName_ )
8536 {
8537 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8538 }
8539
8540 DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs )
8541 {
8542 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8543 }
8544
8545 DebugMarkerMarkerInfoEXT& operator=( VkDebugMarkerMarkerInfoEXT const & rhs )
8546 {
8547 memcpy( this, &rhs, sizeof(DebugMarkerMarkerInfoEXT) );
8548 return *this;
8549 }
8550
8551 DebugMarkerMarkerInfoEXT& setSType( StructureType sType_ )
8552 {
8553 sType = sType_;
8554 return *this;
8555 }
8556
8557 DebugMarkerMarkerInfoEXT& setPNext( const void* pNext_ )
8558 {
8559 pNext = pNext_;
8560 return *this;
8561 }
8562
8563 DebugMarkerMarkerInfoEXT& setPMarkerName( const char* pMarkerName_ )
8564 {
8565 pMarkerName = pMarkerName_;
8566 return *this;
8567 }
8568
8569 DebugMarkerMarkerInfoEXT& setColor( std::array<float,4> color_ )
8570 {
8571 memcpy( &color, color_.data(), 4 * sizeof( float ) );
8572 return *this;
8573 }
8574
8575 operator const VkDebugMarkerMarkerInfoEXT&() const
8576 {
8577 return *reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>(this);
8578 }
8579
8580 bool operator==( DebugMarkerMarkerInfoEXT const& rhs ) const
8581 {
8582 return ( sType == rhs.sType )
8583 && ( pNext == rhs.pNext )
8584 && ( pMarkerName == rhs.pMarkerName )
8585 && ( memcmp( color, rhs.color, 4 * sizeof( float ) ) == 0 );
8586 }
8587
8588 bool operator!=( DebugMarkerMarkerInfoEXT const& rhs ) const
8589 {
8590 return !operator==( rhs );
8591 }
8592
8593 private:
8594 StructureType sType;
8595
8596 public:
8597 const void* pNext;
8598 const char* pMarkerName;
8599 float color[4];
8600 };
8601 static_assert( sizeof( DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ), "struct and wrapper have different size!" );
8602
8603 struct DedicatedAllocationImageCreateInfoNV
8604 {
8605 DedicatedAllocationImageCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8606 : sType( StructureType::eDedicatedAllocationImageCreateInfoNV )
8607 , pNext( nullptr )
8608 , dedicatedAllocation( dedicatedAllocation_ )
8609 {
8610 }
8611
8612 DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8613 {
8614 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8615 }
8616
8617 DedicatedAllocationImageCreateInfoNV& operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs )
8618 {
8619 memcpy( this, &rhs, sizeof(DedicatedAllocationImageCreateInfoNV) );
8620 return *this;
8621 }
8622
8623 DedicatedAllocationImageCreateInfoNV& setSType( StructureType sType_ )
8624 {
8625 sType = sType_;
8626 return *this;
8627 }
8628
8629 DedicatedAllocationImageCreateInfoNV& setPNext( const void* pNext_ )
8630 {
8631 pNext = pNext_;
8632 return *this;
8633 }
8634
8635 DedicatedAllocationImageCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8636 {
8637 dedicatedAllocation = dedicatedAllocation_;
8638 return *this;
8639 }
8640
8641 operator const VkDedicatedAllocationImageCreateInfoNV&() const
8642 {
8643 return *reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(this);
8644 }
8645
8646 bool operator==( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8647 {
8648 return ( sType == rhs.sType )
8649 && ( pNext == rhs.pNext )
8650 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8651 }
8652
8653 bool operator!=( DedicatedAllocationImageCreateInfoNV const& rhs ) const
8654 {
8655 return !operator==( rhs );
8656 }
8657
8658 private:
8659 StructureType sType;
8660
8661 public:
8662 const void* pNext;
8663 Bool32 dedicatedAllocation;
8664 };
8665 static_assert( sizeof( DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ), "struct and wrapper have different size!" );
8666
8667 struct DedicatedAllocationBufferCreateInfoNV
8668 {
8669 DedicatedAllocationBufferCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
8670 : sType( StructureType::eDedicatedAllocationBufferCreateInfoNV )
8671 , pNext( nullptr )
8672 , dedicatedAllocation( dedicatedAllocation_ )
8673 {
8674 }
8675
8676 DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8677 {
8678 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8679 }
8680
8681 DedicatedAllocationBufferCreateInfoNV& operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
8682 {
8683 memcpy( this, &rhs, sizeof(DedicatedAllocationBufferCreateInfoNV) );
8684 return *this;
8685 }
8686
8687 DedicatedAllocationBufferCreateInfoNV& setSType( StructureType sType_ )
8688 {
8689 sType = sType_;
8690 return *this;
8691 }
8692
8693 DedicatedAllocationBufferCreateInfoNV& setPNext( const void* pNext_ )
8694 {
8695 pNext = pNext_;
8696 return *this;
8697 }
8698
8699 DedicatedAllocationBufferCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
8700 {
8701 dedicatedAllocation = dedicatedAllocation_;
8702 return *this;
8703 }
8704
8705 operator const VkDedicatedAllocationBufferCreateInfoNV&() const
8706 {
8707 return *reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(this);
8708 }
8709
8710 bool operator==( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8711 {
8712 return ( sType == rhs.sType )
8713 && ( pNext == rhs.pNext )
8714 && ( dedicatedAllocation == rhs.dedicatedAllocation );
8715 }
8716
8717 bool operator!=( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
8718 {
8719 return !operator==( rhs );
8720 }
8721
8722 private:
8723 StructureType sType;
8724
8725 public:
8726 const void* pNext;
8727 Bool32 dedicatedAllocation;
8728 };
8729 static_assert( sizeof( DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ), "struct and wrapper have different size!" );
8730
8731 struct DedicatedAllocationMemoryAllocateInfoNV
8732 {
8733 DedicatedAllocationMemoryAllocateInfoNV( Image image_ = Image(), Buffer buffer_ = Buffer() )
8734 : sType( StructureType::eDedicatedAllocationMemoryAllocateInfoNV )
8735 , pNext( nullptr )
8736 , image( image_ )
8737 , buffer( buffer_ )
8738 {
8739 }
8740
8741 DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8742 {
8743 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8744 }
8745
8746 DedicatedAllocationMemoryAllocateInfoNV& operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
8747 {
8748 memcpy( this, &rhs, sizeof(DedicatedAllocationMemoryAllocateInfoNV) );
8749 return *this;
8750 }
8751
8752 DedicatedAllocationMemoryAllocateInfoNV& setSType( StructureType sType_ )
8753 {
8754 sType = sType_;
8755 return *this;
8756 }
8757
8758 DedicatedAllocationMemoryAllocateInfoNV& setPNext( const void* pNext_ )
8759 {
8760 pNext = pNext_;
8761 return *this;
8762 }
8763
8764 DedicatedAllocationMemoryAllocateInfoNV& setImage( Image image_ )
8765 {
8766 image = image_;
8767 return *this;
8768 }
8769
8770 DedicatedAllocationMemoryAllocateInfoNV& setBuffer( Buffer buffer_ )
8771 {
8772 buffer = buffer_;
8773 return *this;
8774 }
8775
8776 operator const VkDedicatedAllocationMemoryAllocateInfoNV&() const
8777 {
8778 return *reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(this);
8779 }
8780
8781 bool operator==( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8782 {
8783 return ( sType == rhs.sType )
8784 && ( pNext == rhs.pNext )
8785 && ( image == rhs.image )
8786 && ( buffer == rhs.buffer );
8787 }
8788
8789 bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
8790 {
8791 return !operator==( rhs );
8792 }
8793
8794 private:
8795 StructureType sType;
8796
8797 public:
8798 const void* pNext;
8799 Image image;
8800 Buffer buffer;
8801 };
8802 static_assert( sizeof( DedicatedAllocationMemoryAllocateInfoNV ) == sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
8803
Lenny Komow6501c122016-08-31 15:03:49 -06008804#ifdef VK_USE_PLATFORM_WIN32_KHR
8805 struct ExportMemoryWin32HandleInfoNV
8806 {
8807 ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0 )
8808 : sType( StructureType::eExportMemoryWin32HandleInfoNV )
8809 , pNext( nullptr )
8810 , pAttributes( pAttributes_ )
8811 , dwAccess( dwAccess_ )
8812 {
8813 }
8814
8815 ExportMemoryWin32HandleInfoNV( VkExportMemoryWin32HandleInfoNV const & rhs )
8816 {
8817 memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
8818 }
8819
8820 ExportMemoryWin32HandleInfoNV& operator=( VkExportMemoryWin32HandleInfoNV const & rhs )
8821 {
8822 memcpy( this, &rhs, sizeof(ExportMemoryWin32HandleInfoNV) );
8823 return *this;
8824 }
8825
8826 ExportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
8827 {
8828 sType = sType_;
8829 return *this;
8830 }
8831
8832 ExportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
8833 {
8834 pNext = pNext_;
8835 return *this;
8836 }
8837
8838 ExportMemoryWin32HandleInfoNV& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
8839 {
8840 pAttributes = pAttributes_;
8841 return *this;
8842 }
8843
8844 ExportMemoryWin32HandleInfoNV& setDwAccess( DWORD dwAccess_ )
8845 {
8846 dwAccess = dwAccess_;
8847 return *this;
8848 }
8849
8850 operator const VkExportMemoryWin32HandleInfoNV&() const
8851 {
8852 return *reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(this);
8853 }
8854
8855 bool operator==( ExportMemoryWin32HandleInfoNV const& rhs ) const
8856 {
8857 return ( sType == rhs.sType )
8858 && ( pNext == rhs.pNext )
8859 && ( pAttributes == rhs.pAttributes )
8860 && ( dwAccess == rhs.dwAccess );
8861 }
8862
8863 bool operator!=( ExportMemoryWin32HandleInfoNV const& rhs ) const
8864 {
8865 return !operator==( rhs );
8866 }
8867
8868 private:
8869 StructureType sType;
8870
8871 public:
8872 const void* pNext;
8873 const SECURITY_ATTRIBUTES* pAttributes;
8874 DWORD dwAccess;
8875 };
8876 static_assert( sizeof( ExportMemoryWin32HandleInfoNV ) == sizeof( VkExportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
8877#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8878
8879#ifdef VK_USE_PLATFORM_WIN32_KHR
8880 struct Win32KeyedMutexAcquireReleaseInfoNV
8881 {
8882 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 )
8883 : sType( StructureType::eWin32KeyedMutexAcquireReleaseInfoNV )
8884 , pNext( nullptr )
8885 , acquireCount( acquireCount_ )
8886 , pAcquireSyncs( pAcquireSyncs_ )
8887 , pAcquireKeys( pAcquireKeys_ )
8888 , pAcquireTimeoutMilliseconds( pAcquireTimeoutMilliseconds_ )
8889 , releaseCount( releaseCount_ )
8890 , pReleaseSyncs( pReleaseSyncs_ )
8891 , pReleaseKeys( pReleaseKeys_ )
8892 {
8893 }
8894
8895 Win32KeyedMutexAcquireReleaseInfoNV( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
8896 {
8897 memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
8898 }
8899
8900 Win32KeyedMutexAcquireReleaseInfoNV& operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
8901 {
8902 memcpy( this, &rhs, sizeof(Win32KeyedMutexAcquireReleaseInfoNV) );
8903 return *this;
8904 }
8905
8906 Win32KeyedMutexAcquireReleaseInfoNV& setSType( StructureType sType_ )
8907 {
8908 sType = sType_;
8909 return *this;
8910 }
8911
8912 Win32KeyedMutexAcquireReleaseInfoNV& setPNext( const void* pNext_ )
8913 {
8914 pNext = pNext_;
8915 return *this;
8916 }
8917
8918 Win32KeyedMutexAcquireReleaseInfoNV& setAcquireCount( uint32_t acquireCount_ )
8919 {
8920 acquireCount = acquireCount_;
8921 return *this;
8922 }
8923
8924 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireSyncs( const DeviceMemory* pAcquireSyncs_ )
8925 {
8926 pAcquireSyncs = pAcquireSyncs_;
8927 return *this;
8928 }
8929
8930 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireKeys( const uint64_t* pAcquireKeys_ )
8931 {
8932 pAcquireKeys = pAcquireKeys_;
8933 return *this;
8934 }
8935
8936 Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireTimeoutMilliseconds( const uint32_t* pAcquireTimeoutMilliseconds_ )
8937 {
8938 pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_;
8939 return *this;
8940 }
8941
8942 Win32KeyedMutexAcquireReleaseInfoNV& setReleaseCount( uint32_t releaseCount_ )
8943 {
8944 releaseCount = releaseCount_;
8945 return *this;
8946 }
8947
8948 Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseSyncs( const DeviceMemory* pReleaseSyncs_ )
8949 {
8950 pReleaseSyncs = pReleaseSyncs_;
8951 return *this;
8952 }
8953
8954 Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseKeys( const uint64_t* pReleaseKeys_ )
8955 {
8956 pReleaseKeys = pReleaseKeys_;
8957 return *this;
8958 }
8959
8960 operator const VkWin32KeyedMutexAcquireReleaseInfoNV&() const
8961 {
8962 return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(this);
8963 }
8964
8965 bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
8966 {
8967 return ( sType == rhs.sType )
8968 && ( pNext == rhs.pNext )
8969 && ( acquireCount == rhs.acquireCount )
8970 && ( pAcquireSyncs == rhs.pAcquireSyncs )
8971 && ( pAcquireKeys == rhs.pAcquireKeys )
8972 && ( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds )
8973 && ( releaseCount == rhs.releaseCount )
8974 && ( pReleaseSyncs == rhs.pReleaseSyncs )
8975 && ( pReleaseKeys == rhs.pReleaseKeys );
8976 }
8977
8978 bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
8979 {
8980 return !operator==( rhs );
8981 }
8982
8983 private:
8984 StructureType sType;
8985
8986 public:
8987 const void* pNext;
8988 uint32_t acquireCount;
8989 const DeviceMemory* pAcquireSyncs;
8990 const uint64_t* pAcquireKeys;
8991 const uint32_t* pAcquireTimeoutMilliseconds;
8992 uint32_t releaseCount;
8993 const DeviceMemory* pReleaseSyncs;
8994 const uint64_t* pReleaseKeys;
8995 };
8996 static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ), "struct and wrapper have different size!" );
8997#endif /*VK_USE_PLATFORM_WIN32_KHR*/
8998
Lenny Komowbed9b5c2016-08-11 11:23:15 -06008999 enum class SubpassContents
9000 {
9001 eInline = VK_SUBPASS_CONTENTS_INLINE,
9002 eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
9003 };
9004
9005 struct PresentInfoKHR
9006 {
9007 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 )
9008 : sType( StructureType::ePresentInfoKHR )
9009 , pNext( nullptr )
9010 , waitSemaphoreCount( waitSemaphoreCount_ )
9011 , pWaitSemaphores( pWaitSemaphores_ )
9012 , swapchainCount( swapchainCount_ )
9013 , pSwapchains( pSwapchains_ )
9014 , pImageIndices( pImageIndices_ )
9015 , pResults( pResults_ )
9016 {
9017 }
9018
9019 PresentInfoKHR( VkPresentInfoKHR const & rhs )
9020 {
9021 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
9022 }
9023
9024 PresentInfoKHR& operator=( VkPresentInfoKHR const & rhs )
9025 {
9026 memcpy( this, &rhs, sizeof(PresentInfoKHR) );
9027 return *this;
9028 }
9029
9030 PresentInfoKHR& setSType( StructureType sType_ )
9031 {
9032 sType = sType_;
9033 return *this;
9034 }
9035
9036 PresentInfoKHR& setPNext( const void* pNext_ )
9037 {
9038 pNext = pNext_;
9039 return *this;
9040 }
9041
9042 PresentInfoKHR& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
9043 {
9044 waitSemaphoreCount = waitSemaphoreCount_;
9045 return *this;
9046 }
9047
9048 PresentInfoKHR& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
9049 {
9050 pWaitSemaphores = pWaitSemaphores_;
9051 return *this;
9052 }
9053
9054 PresentInfoKHR& setSwapchainCount( uint32_t swapchainCount_ )
9055 {
9056 swapchainCount = swapchainCount_;
9057 return *this;
9058 }
9059
9060 PresentInfoKHR& setPSwapchains( const SwapchainKHR* pSwapchains_ )
9061 {
9062 pSwapchains = pSwapchains_;
9063 return *this;
9064 }
9065
9066 PresentInfoKHR& setPImageIndices( const uint32_t* pImageIndices_ )
9067 {
9068 pImageIndices = pImageIndices_;
9069 return *this;
9070 }
9071
9072 PresentInfoKHR& setPResults( Result* pResults_ )
9073 {
9074 pResults = pResults_;
9075 return *this;
9076 }
9077
9078 operator const VkPresentInfoKHR&() const
9079 {
9080 return *reinterpret_cast<const VkPresentInfoKHR*>(this);
9081 }
9082
9083 bool operator==( PresentInfoKHR const& rhs ) const
9084 {
9085 return ( sType == rhs.sType )
9086 && ( pNext == rhs.pNext )
9087 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
9088 && ( pWaitSemaphores == rhs.pWaitSemaphores )
9089 && ( swapchainCount == rhs.swapchainCount )
9090 && ( pSwapchains == rhs.pSwapchains )
9091 && ( pImageIndices == rhs.pImageIndices )
9092 && ( pResults == rhs.pResults );
9093 }
9094
9095 bool operator!=( PresentInfoKHR const& rhs ) const
9096 {
9097 return !operator==( rhs );
9098 }
9099
9100 private:
9101 StructureType sType;
9102
9103 public:
9104 const void* pNext;
9105 uint32_t waitSemaphoreCount;
9106 const Semaphore* pWaitSemaphores;
9107 uint32_t swapchainCount;
9108 const SwapchainKHR* pSwapchains;
9109 const uint32_t* pImageIndices;
9110 Result* pResults;
9111 };
9112 static_assert( sizeof( PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" );
9113
9114 enum class DynamicState
9115 {
9116 eViewport = VK_DYNAMIC_STATE_VIEWPORT,
9117 eScissor = VK_DYNAMIC_STATE_SCISSOR,
9118 eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH,
9119 eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS,
9120 eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS,
9121 eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS,
9122 eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
9123 eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
9124 eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE
9125 };
9126
9127 struct PipelineDynamicStateCreateInfo
9128 {
9129 PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateFlags flags_ = PipelineDynamicStateCreateFlags(), uint32_t dynamicStateCount_ = 0, const DynamicState* pDynamicStates_ = nullptr )
9130 : sType( StructureType::ePipelineDynamicStateCreateInfo )
9131 , pNext( nullptr )
9132 , flags( flags_ )
9133 , dynamicStateCount( dynamicStateCount_ )
9134 , pDynamicStates( pDynamicStates_ )
9135 {
9136 }
9137
9138 PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs )
9139 {
9140 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
9141 }
9142
9143 PipelineDynamicStateCreateInfo& operator=( VkPipelineDynamicStateCreateInfo const & rhs )
9144 {
9145 memcpy( this, &rhs, sizeof(PipelineDynamicStateCreateInfo) );
9146 return *this;
9147 }
9148
9149 PipelineDynamicStateCreateInfo& setSType( StructureType sType_ )
9150 {
9151 sType = sType_;
9152 return *this;
9153 }
9154
9155 PipelineDynamicStateCreateInfo& setPNext( const void* pNext_ )
9156 {
9157 pNext = pNext_;
9158 return *this;
9159 }
9160
9161 PipelineDynamicStateCreateInfo& setFlags( PipelineDynamicStateCreateFlags flags_ )
9162 {
9163 flags = flags_;
9164 return *this;
9165 }
9166
9167 PipelineDynamicStateCreateInfo& setDynamicStateCount( uint32_t dynamicStateCount_ )
9168 {
9169 dynamicStateCount = dynamicStateCount_;
9170 return *this;
9171 }
9172
9173 PipelineDynamicStateCreateInfo& setPDynamicStates( const DynamicState* pDynamicStates_ )
9174 {
9175 pDynamicStates = pDynamicStates_;
9176 return *this;
9177 }
9178
9179 operator const VkPipelineDynamicStateCreateInfo&() const
9180 {
9181 return *reinterpret_cast<const VkPipelineDynamicStateCreateInfo*>(this);
9182 }
9183
9184 bool operator==( PipelineDynamicStateCreateInfo const& rhs ) const
9185 {
9186 return ( sType == rhs.sType )
9187 && ( pNext == rhs.pNext )
9188 && ( flags == rhs.flags )
9189 && ( dynamicStateCount == rhs.dynamicStateCount )
9190 && ( pDynamicStates == rhs.pDynamicStates );
9191 }
9192
9193 bool operator!=( PipelineDynamicStateCreateInfo const& rhs ) const
9194 {
9195 return !operator==( rhs );
9196 }
9197
9198 private:
9199 StructureType sType;
9200
9201 public:
9202 const void* pNext;
9203 PipelineDynamicStateCreateFlags flags;
9204 uint32_t dynamicStateCount;
9205 const DynamicState* pDynamicStates;
9206 };
9207 static_assert( sizeof( PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ), "struct and wrapper have different size!" );
9208
9209 enum class QueueFlagBits
9210 {
9211 eGraphics = VK_QUEUE_GRAPHICS_BIT,
9212 eCompute = VK_QUEUE_COMPUTE_BIT,
9213 eTransfer = VK_QUEUE_TRANSFER_BIT,
9214 eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT
9215 };
9216
9217 using QueueFlags = Flags<QueueFlagBits, VkQueueFlags>;
9218
9219 inline QueueFlags operator|( QueueFlagBits bit0, QueueFlagBits bit1 )
9220 {
9221 return QueueFlags( bit0 ) | bit1;
9222 }
9223
9224 struct QueueFamilyProperties
9225 {
9226 operator const VkQueueFamilyProperties&() const
9227 {
9228 return *reinterpret_cast<const VkQueueFamilyProperties*>(this);
9229 }
9230
9231 bool operator==( QueueFamilyProperties const& rhs ) const
9232 {
9233 return ( queueFlags == rhs.queueFlags )
9234 && ( queueCount == rhs.queueCount )
9235 && ( timestampValidBits == rhs.timestampValidBits )
9236 && ( minImageTransferGranularity == rhs.minImageTransferGranularity );
9237 }
9238
9239 bool operator!=( QueueFamilyProperties const& rhs ) const
9240 {
9241 return !operator==( rhs );
9242 }
9243
9244 QueueFlags queueFlags;
9245 uint32_t queueCount;
9246 uint32_t timestampValidBits;
9247 Extent3D minImageTransferGranularity;
9248 };
9249 static_assert( sizeof( QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ), "struct and wrapper have different size!" );
9250
9251 enum class MemoryPropertyFlagBits
9252 {
9253 eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
9254 eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
9255 eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
9256 eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
9257 eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
9258 };
9259
9260 using MemoryPropertyFlags = Flags<MemoryPropertyFlagBits, VkMemoryPropertyFlags>;
9261
9262 inline MemoryPropertyFlags operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 )
9263 {
9264 return MemoryPropertyFlags( bit0 ) | bit1;
9265 }
9266
9267 struct MemoryType
9268 {
9269 operator const VkMemoryType&() const
9270 {
9271 return *reinterpret_cast<const VkMemoryType*>(this);
9272 }
9273
9274 bool operator==( MemoryType const& rhs ) const
9275 {
9276 return ( propertyFlags == rhs.propertyFlags )
9277 && ( heapIndex == rhs.heapIndex );
9278 }
9279
9280 bool operator!=( MemoryType const& rhs ) const
9281 {
9282 return !operator==( rhs );
9283 }
9284
9285 MemoryPropertyFlags propertyFlags;
9286 uint32_t heapIndex;
9287 };
9288 static_assert( sizeof( MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" );
9289
9290 enum class MemoryHeapFlagBits
9291 {
9292 eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
9293 };
9294
9295 using MemoryHeapFlags = Flags<MemoryHeapFlagBits, VkMemoryHeapFlags>;
9296
9297 inline MemoryHeapFlags operator|( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 )
9298 {
9299 return MemoryHeapFlags( bit0 ) | bit1;
9300 }
9301
9302 struct MemoryHeap
9303 {
9304 operator const VkMemoryHeap&() const
9305 {
9306 return *reinterpret_cast<const VkMemoryHeap*>(this);
9307 }
9308
9309 bool operator==( MemoryHeap const& rhs ) const
9310 {
9311 return ( size == rhs.size )
9312 && ( flags == rhs.flags );
9313 }
9314
9315 bool operator!=( MemoryHeap const& rhs ) const
9316 {
9317 return !operator==( rhs );
9318 }
9319
9320 DeviceSize size;
9321 MemoryHeapFlags flags;
9322 };
9323 static_assert( sizeof( MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" );
9324
9325 struct PhysicalDeviceMemoryProperties
9326 {
9327 operator const VkPhysicalDeviceMemoryProperties&() const
9328 {
9329 return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties*>(this);
9330 }
9331
9332 bool operator==( PhysicalDeviceMemoryProperties const& rhs ) const
9333 {
9334 return ( memoryTypeCount == rhs.memoryTypeCount )
9335 && ( memcmp( memoryTypes, rhs.memoryTypes, VK_MAX_MEMORY_TYPES * sizeof( MemoryType ) ) == 0 )
9336 && ( memoryHeapCount == rhs.memoryHeapCount )
9337 && ( memcmp( memoryHeaps, rhs.memoryHeaps, VK_MAX_MEMORY_HEAPS * sizeof( MemoryHeap ) ) == 0 );
9338 }
9339
9340 bool operator!=( PhysicalDeviceMemoryProperties const& rhs ) const
9341 {
9342 return !operator==( rhs );
9343 }
9344
9345 uint32_t memoryTypeCount;
9346 MemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
9347 uint32_t memoryHeapCount;
9348 MemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
9349 };
9350 static_assert( sizeof( PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ), "struct and wrapper have different size!" );
9351
9352 enum class AccessFlagBits
9353 {
9354 eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
9355 eIndexRead = VK_ACCESS_INDEX_READ_BIT,
9356 eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
9357 eUniformRead = VK_ACCESS_UNIFORM_READ_BIT,
9358 eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
9359 eShaderRead = VK_ACCESS_SHADER_READ_BIT,
9360 eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT,
9361 eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
9362 eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
9363 eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
9364 eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
9365 eTransferRead = VK_ACCESS_TRANSFER_READ_BIT,
9366 eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT,
9367 eHostRead = VK_ACCESS_HOST_READ_BIT,
9368 eHostWrite = VK_ACCESS_HOST_WRITE_BIT,
9369 eMemoryRead = VK_ACCESS_MEMORY_READ_BIT,
9370 eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT
9371 };
9372
9373 using AccessFlags = Flags<AccessFlagBits, VkAccessFlags>;
9374
9375 inline AccessFlags operator|( AccessFlagBits bit0, AccessFlagBits bit1 )
9376 {
9377 return AccessFlags( bit0 ) | bit1;
9378 }
9379
9380 struct MemoryBarrier
9381 {
9382 MemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags() )
9383 : sType( StructureType::eMemoryBarrier )
9384 , pNext( nullptr )
9385 , srcAccessMask( srcAccessMask_ )
9386 , dstAccessMask( dstAccessMask_ )
9387 {
9388 }
9389
9390 MemoryBarrier( VkMemoryBarrier const & rhs )
9391 {
9392 memcpy( this, &rhs, sizeof(MemoryBarrier) );
9393 }
9394
9395 MemoryBarrier& operator=( VkMemoryBarrier const & rhs )
9396 {
9397 memcpy( this, &rhs, sizeof(MemoryBarrier) );
9398 return *this;
9399 }
9400
9401 MemoryBarrier& setSType( StructureType sType_ )
9402 {
9403 sType = sType_;
9404 return *this;
9405 }
9406
9407 MemoryBarrier& setPNext( const void* pNext_ )
9408 {
9409 pNext = pNext_;
9410 return *this;
9411 }
9412
9413 MemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9414 {
9415 srcAccessMask = srcAccessMask_;
9416 return *this;
9417 }
9418
9419 MemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9420 {
9421 dstAccessMask = dstAccessMask_;
9422 return *this;
9423 }
9424
9425 operator const VkMemoryBarrier&() const
9426 {
9427 return *reinterpret_cast<const VkMemoryBarrier*>(this);
9428 }
9429
9430 bool operator==( MemoryBarrier const& rhs ) const
9431 {
9432 return ( sType == rhs.sType )
9433 && ( pNext == rhs.pNext )
9434 && ( srcAccessMask == rhs.srcAccessMask )
9435 && ( dstAccessMask == rhs.dstAccessMask );
9436 }
9437
9438 bool operator!=( MemoryBarrier const& rhs ) const
9439 {
9440 return !operator==( rhs );
9441 }
9442
9443 private:
9444 StructureType sType;
9445
9446 public:
9447 const void* pNext;
9448 AccessFlags srcAccessMask;
9449 AccessFlags dstAccessMask;
9450 };
9451 static_assert( sizeof( MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" );
9452
9453 struct BufferMemoryBarrier
9454 {
9455 BufferMemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), uint32_t srcQueueFamilyIndex_ = 0, uint32_t dstQueueFamilyIndex_ = 0, Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
9456 : sType( StructureType::eBufferMemoryBarrier )
9457 , pNext( nullptr )
9458 , srcAccessMask( srcAccessMask_ )
9459 , dstAccessMask( dstAccessMask_ )
9460 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
9461 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
9462 , buffer( buffer_ )
9463 , offset( offset_ )
9464 , size( size_ )
9465 {
9466 }
9467
9468 BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs )
9469 {
9470 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9471 }
9472
9473 BufferMemoryBarrier& operator=( VkBufferMemoryBarrier const & rhs )
9474 {
9475 memcpy( this, &rhs, sizeof(BufferMemoryBarrier) );
9476 return *this;
9477 }
9478
9479 BufferMemoryBarrier& setSType( StructureType sType_ )
9480 {
9481 sType = sType_;
9482 return *this;
9483 }
9484
9485 BufferMemoryBarrier& setPNext( const void* pNext_ )
9486 {
9487 pNext = pNext_;
9488 return *this;
9489 }
9490
9491 BufferMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
9492 {
9493 srcAccessMask = srcAccessMask_;
9494 return *this;
9495 }
9496
9497 BufferMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
9498 {
9499 dstAccessMask = dstAccessMask_;
9500 return *this;
9501 }
9502
9503 BufferMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
9504 {
9505 srcQueueFamilyIndex = srcQueueFamilyIndex_;
9506 return *this;
9507 }
9508
9509 BufferMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
9510 {
9511 dstQueueFamilyIndex = dstQueueFamilyIndex_;
9512 return *this;
9513 }
9514
9515 BufferMemoryBarrier& setBuffer( Buffer buffer_ )
9516 {
9517 buffer = buffer_;
9518 return *this;
9519 }
9520
9521 BufferMemoryBarrier& setOffset( DeviceSize offset_ )
9522 {
9523 offset = offset_;
9524 return *this;
9525 }
9526
9527 BufferMemoryBarrier& setSize( DeviceSize size_ )
9528 {
9529 size = size_;
9530 return *this;
9531 }
9532
9533 operator const VkBufferMemoryBarrier&() const
9534 {
9535 return *reinterpret_cast<const VkBufferMemoryBarrier*>(this);
9536 }
9537
9538 bool operator==( BufferMemoryBarrier const& rhs ) const
9539 {
9540 return ( sType == rhs.sType )
9541 && ( pNext == rhs.pNext )
9542 && ( srcAccessMask == rhs.srcAccessMask )
9543 && ( dstAccessMask == rhs.dstAccessMask )
9544 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
9545 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
9546 && ( buffer == rhs.buffer )
9547 && ( offset == rhs.offset )
9548 && ( size == rhs.size );
9549 }
9550
9551 bool operator!=( BufferMemoryBarrier const& rhs ) const
9552 {
9553 return !operator==( rhs );
9554 }
9555
9556 private:
9557 StructureType sType;
9558
9559 public:
9560 const void* pNext;
9561 AccessFlags srcAccessMask;
9562 AccessFlags dstAccessMask;
9563 uint32_t srcQueueFamilyIndex;
9564 uint32_t dstQueueFamilyIndex;
9565 Buffer buffer;
9566 DeviceSize offset;
9567 DeviceSize size;
9568 };
9569 static_assert( sizeof( BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ), "struct and wrapper have different size!" );
9570
9571 enum class BufferUsageFlagBits
9572 {
9573 eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
9574 eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
9575 eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,
9576 eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,
9577 eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
9578 eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
9579 eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
9580 eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
9581 eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
9582 };
9583
9584 using BufferUsageFlags = Flags<BufferUsageFlagBits, VkBufferUsageFlags>;
9585
9586 inline BufferUsageFlags operator|( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 )
9587 {
9588 return BufferUsageFlags( bit0 ) | bit1;
9589 }
9590
9591 enum class BufferCreateFlagBits
9592 {
9593 eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
9594 eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
9595 eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
9596 };
9597
9598 using BufferCreateFlags = Flags<BufferCreateFlagBits, VkBufferCreateFlags>;
9599
9600 inline BufferCreateFlags operator|( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 )
9601 {
9602 return BufferCreateFlags( bit0 ) | bit1;
9603 }
9604
9605 struct BufferCreateInfo
9606 {
9607 BufferCreateInfo( BufferCreateFlags flags_ = BufferCreateFlags(), DeviceSize size_ = 0, BufferUsageFlags usage_ = BufferUsageFlags(), SharingMode sharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr )
9608 : sType( StructureType::eBufferCreateInfo )
9609 , pNext( nullptr )
9610 , flags( flags_ )
9611 , size( size_ )
9612 , usage( usage_ )
9613 , sharingMode( sharingMode_ )
9614 , queueFamilyIndexCount( queueFamilyIndexCount_ )
9615 , pQueueFamilyIndices( pQueueFamilyIndices_ )
9616 {
9617 }
9618
9619 BufferCreateInfo( VkBufferCreateInfo const & rhs )
9620 {
9621 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9622 }
9623
9624 BufferCreateInfo& operator=( VkBufferCreateInfo const & rhs )
9625 {
9626 memcpy( this, &rhs, sizeof(BufferCreateInfo) );
9627 return *this;
9628 }
9629
9630 BufferCreateInfo& setSType( StructureType sType_ )
9631 {
9632 sType = sType_;
9633 return *this;
9634 }
9635
9636 BufferCreateInfo& setPNext( const void* pNext_ )
9637 {
9638 pNext = pNext_;
9639 return *this;
9640 }
9641
9642 BufferCreateInfo& setFlags( BufferCreateFlags flags_ )
9643 {
9644 flags = flags_;
9645 return *this;
9646 }
9647
9648 BufferCreateInfo& setSize( DeviceSize size_ )
9649 {
9650 size = size_;
9651 return *this;
9652 }
9653
9654 BufferCreateInfo& setUsage( BufferUsageFlags usage_ )
9655 {
9656 usage = usage_;
9657 return *this;
9658 }
9659
9660 BufferCreateInfo& setSharingMode( SharingMode sharingMode_ )
9661 {
9662 sharingMode = sharingMode_;
9663 return *this;
9664 }
9665
9666 BufferCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
9667 {
9668 queueFamilyIndexCount = queueFamilyIndexCount_;
9669 return *this;
9670 }
9671
9672 BufferCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
9673 {
9674 pQueueFamilyIndices = pQueueFamilyIndices_;
9675 return *this;
9676 }
9677
9678 operator const VkBufferCreateInfo&() const
9679 {
9680 return *reinterpret_cast<const VkBufferCreateInfo*>(this);
9681 }
9682
9683 bool operator==( BufferCreateInfo const& rhs ) const
9684 {
9685 return ( sType == rhs.sType )
9686 && ( pNext == rhs.pNext )
9687 && ( flags == rhs.flags )
9688 && ( size == rhs.size )
9689 && ( usage == rhs.usage )
9690 && ( sharingMode == rhs.sharingMode )
9691 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
9692 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
9693 }
9694
9695 bool operator!=( BufferCreateInfo const& rhs ) const
9696 {
9697 return !operator==( rhs );
9698 }
9699
9700 private:
9701 StructureType sType;
9702
9703 public:
9704 const void* pNext;
9705 BufferCreateFlags flags;
9706 DeviceSize size;
9707 BufferUsageFlags usage;
9708 SharingMode sharingMode;
9709 uint32_t queueFamilyIndexCount;
9710 const uint32_t* pQueueFamilyIndices;
9711 };
9712 static_assert( sizeof( BufferCreateInfo ) == sizeof( VkBufferCreateInfo ), "struct and wrapper have different size!" );
9713
9714 enum class ShaderStageFlagBits
9715 {
9716 eVertex = VK_SHADER_STAGE_VERTEX_BIT,
9717 eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
9718 eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
9719 eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT,
9720 eFragment = VK_SHADER_STAGE_FRAGMENT_BIT,
9721 eCompute = VK_SHADER_STAGE_COMPUTE_BIT,
9722 eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS,
9723 eAll = VK_SHADER_STAGE_ALL
9724 };
9725
9726 using ShaderStageFlags = Flags<ShaderStageFlagBits, VkShaderStageFlags>;
9727
9728 inline ShaderStageFlags operator|( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 )
9729 {
9730 return ShaderStageFlags( bit0 ) | bit1;
9731 }
9732
9733 struct DescriptorSetLayoutBinding
9734 {
9735 DescriptorSetLayoutBinding( uint32_t binding_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0, ShaderStageFlags stageFlags_ = ShaderStageFlags(), const Sampler* pImmutableSamplers_ = nullptr )
9736 : binding( binding_ )
9737 , descriptorType( descriptorType_ )
9738 , descriptorCount( descriptorCount_ )
9739 , stageFlags( stageFlags_ )
9740 , pImmutableSamplers( pImmutableSamplers_ )
9741 {
9742 }
9743
9744 DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs )
9745 {
9746 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9747 }
9748
9749 DescriptorSetLayoutBinding& operator=( VkDescriptorSetLayoutBinding const & rhs )
9750 {
9751 memcpy( this, &rhs, sizeof(DescriptorSetLayoutBinding) );
9752 return *this;
9753 }
9754
9755 DescriptorSetLayoutBinding& setBinding( uint32_t binding_ )
9756 {
9757 binding = binding_;
9758 return *this;
9759 }
9760
9761 DescriptorSetLayoutBinding& setDescriptorType( DescriptorType descriptorType_ )
9762 {
9763 descriptorType = descriptorType_;
9764 return *this;
9765 }
9766
9767 DescriptorSetLayoutBinding& setDescriptorCount( uint32_t descriptorCount_ )
9768 {
9769 descriptorCount = descriptorCount_;
9770 return *this;
9771 }
9772
9773 DescriptorSetLayoutBinding& setStageFlags( ShaderStageFlags stageFlags_ )
9774 {
9775 stageFlags = stageFlags_;
9776 return *this;
9777 }
9778
9779 DescriptorSetLayoutBinding& setPImmutableSamplers( const Sampler* pImmutableSamplers_ )
9780 {
9781 pImmutableSamplers = pImmutableSamplers_;
9782 return *this;
9783 }
9784
9785 operator const VkDescriptorSetLayoutBinding&() const
9786 {
9787 return *reinterpret_cast<const VkDescriptorSetLayoutBinding*>(this);
9788 }
9789
9790 bool operator==( DescriptorSetLayoutBinding const& rhs ) const
9791 {
9792 return ( binding == rhs.binding )
9793 && ( descriptorType == rhs.descriptorType )
9794 && ( descriptorCount == rhs.descriptorCount )
9795 && ( stageFlags == rhs.stageFlags )
9796 && ( pImmutableSamplers == rhs.pImmutableSamplers );
9797 }
9798
9799 bool operator!=( DescriptorSetLayoutBinding const& rhs ) const
9800 {
9801 return !operator==( rhs );
9802 }
9803
9804 uint32_t binding;
9805 DescriptorType descriptorType;
9806 uint32_t descriptorCount;
9807 ShaderStageFlags stageFlags;
9808 const Sampler* pImmutableSamplers;
9809 };
9810 static_assert( sizeof( DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ), "struct and wrapper have different size!" );
9811
9812 struct DescriptorSetLayoutCreateInfo
9813 {
9814 DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateFlags flags_ = DescriptorSetLayoutCreateFlags(), uint32_t bindingCount_ = 0, const DescriptorSetLayoutBinding* pBindings_ = nullptr )
9815 : sType( StructureType::eDescriptorSetLayoutCreateInfo )
9816 , pNext( nullptr )
9817 , flags( flags_ )
9818 , bindingCount( bindingCount_ )
9819 , pBindings( pBindings_ )
9820 {
9821 }
9822
9823 DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs )
9824 {
9825 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9826 }
9827
9828 DescriptorSetLayoutCreateInfo& operator=( VkDescriptorSetLayoutCreateInfo const & rhs )
9829 {
9830 memcpy( this, &rhs, sizeof(DescriptorSetLayoutCreateInfo) );
9831 return *this;
9832 }
9833
9834 DescriptorSetLayoutCreateInfo& setSType( StructureType sType_ )
9835 {
9836 sType = sType_;
9837 return *this;
9838 }
9839
9840 DescriptorSetLayoutCreateInfo& setPNext( const void* pNext_ )
9841 {
9842 pNext = pNext_;
9843 return *this;
9844 }
9845
9846 DescriptorSetLayoutCreateInfo& setFlags( DescriptorSetLayoutCreateFlags flags_ )
9847 {
9848 flags = flags_;
9849 return *this;
9850 }
9851
9852 DescriptorSetLayoutCreateInfo& setBindingCount( uint32_t bindingCount_ )
9853 {
9854 bindingCount = bindingCount_;
9855 return *this;
9856 }
9857
9858 DescriptorSetLayoutCreateInfo& setPBindings( const DescriptorSetLayoutBinding* pBindings_ )
9859 {
9860 pBindings = pBindings_;
9861 return *this;
9862 }
9863
9864 operator const VkDescriptorSetLayoutCreateInfo&() const
9865 {
9866 return *reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>(this);
9867 }
9868
9869 bool operator==( DescriptorSetLayoutCreateInfo const& rhs ) const
9870 {
9871 return ( sType == rhs.sType )
9872 && ( pNext == rhs.pNext )
9873 && ( flags == rhs.flags )
9874 && ( bindingCount == rhs.bindingCount )
9875 && ( pBindings == rhs.pBindings );
9876 }
9877
9878 bool operator!=( DescriptorSetLayoutCreateInfo const& rhs ) const
9879 {
9880 return !operator==( rhs );
9881 }
9882
9883 private:
9884 StructureType sType;
9885
9886 public:
9887 const void* pNext;
9888 DescriptorSetLayoutCreateFlags flags;
9889 uint32_t bindingCount;
9890 const DescriptorSetLayoutBinding* pBindings;
9891 };
9892 static_assert( sizeof( DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ), "struct and wrapper have different size!" );
9893
9894 struct PipelineShaderStageCreateInfo
9895 {
9896 PipelineShaderStageCreateInfo( PipelineShaderStageCreateFlags flags_ = PipelineShaderStageCreateFlags(), ShaderStageFlagBits stage_ = ShaderStageFlagBits::eVertex, ShaderModule module_ = ShaderModule(), const char* pName_ = nullptr, const SpecializationInfo* pSpecializationInfo_ = nullptr )
9897 : sType( StructureType::ePipelineShaderStageCreateInfo )
9898 , pNext( nullptr )
9899 , flags( flags_ )
9900 , stage( stage_ )
9901 , module( module_ )
9902 , pName( pName_ )
9903 , pSpecializationInfo( pSpecializationInfo_ )
9904 {
9905 }
9906
9907 PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs )
9908 {
9909 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9910 }
9911
9912 PipelineShaderStageCreateInfo& operator=( VkPipelineShaderStageCreateInfo const & rhs )
9913 {
9914 memcpy( this, &rhs, sizeof(PipelineShaderStageCreateInfo) );
9915 return *this;
9916 }
9917
9918 PipelineShaderStageCreateInfo& setSType( StructureType sType_ )
9919 {
9920 sType = sType_;
9921 return *this;
9922 }
9923
9924 PipelineShaderStageCreateInfo& setPNext( const void* pNext_ )
9925 {
9926 pNext = pNext_;
9927 return *this;
9928 }
9929
9930 PipelineShaderStageCreateInfo& setFlags( PipelineShaderStageCreateFlags flags_ )
9931 {
9932 flags = flags_;
9933 return *this;
9934 }
9935
9936 PipelineShaderStageCreateInfo& setStage( ShaderStageFlagBits stage_ )
9937 {
9938 stage = stage_;
9939 return *this;
9940 }
9941
9942 PipelineShaderStageCreateInfo& setModule( ShaderModule module_ )
9943 {
9944 module = module_;
9945 return *this;
9946 }
9947
9948 PipelineShaderStageCreateInfo& setPName( const char* pName_ )
9949 {
9950 pName = pName_;
9951 return *this;
9952 }
9953
9954 PipelineShaderStageCreateInfo& setPSpecializationInfo( const SpecializationInfo* pSpecializationInfo_ )
9955 {
9956 pSpecializationInfo = pSpecializationInfo_;
9957 return *this;
9958 }
9959
9960 operator const VkPipelineShaderStageCreateInfo&() const
9961 {
9962 return *reinterpret_cast<const VkPipelineShaderStageCreateInfo*>(this);
9963 }
9964
9965 bool operator==( PipelineShaderStageCreateInfo const& rhs ) const
9966 {
9967 return ( sType == rhs.sType )
9968 && ( pNext == rhs.pNext )
9969 && ( flags == rhs.flags )
9970 && ( stage == rhs.stage )
9971 && ( module == rhs.module )
9972 && ( pName == rhs.pName )
9973 && ( pSpecializationInfo == rhs.pSpecializationInfo );
9974 }
9975
9976 bool operator!=( PipelineShaderStageCreateInfo const& rhs ) const
9977 {
9978 return !operator==( rhs );
9979 }
9980
9981 private:
9982 StructureType sType;
9983
9984 public:
9985 const void* pNext;
9986 PipelineShaderStageCreateFlags flags;
9987 ShaderStageFlagBits stage;
9988 ShaderModule module;
9989 const char* pName;
9990 const SpecializationInfo* pSpecializationInfo;
9991 };
9992 static_assert( sizeof( PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ), "struct and wrapper have different size!" );
9993
9994 struct PushConstantRange
9995 {
9996 PushConstantRange( ShaderStageFlags stageFlags_ = ShaderStageFlags(), uint32_t offset_ = 0, uint32_t size_ = 0 )
9997 : stageFlags( stageFlags_ )
9998 , offset( offset_ )
9999 , size( size_ )
10000 {
10001 }
10002
10003 PushConstantRange( VkPushConstantRange const & rhs )
10004 {
10005 memcpy( this, &rhs, sizeof(PushConstantRange) );
10006 }
10007
10008 PushConstantRange& operator=( VkPushConstantRange const & rhs )
10009 {
10010 memcpy( this, &rhs, sizeof(PushConstantRange) );
10011 return *this;
10012 }
10013
10014 PushConstantRange& setStageFlags( ShaderStageFlags stageFlags_ )
10015 {
10016 stageFlags = stageFlags_;
10017 return *this;
10018 }
10019
10020 PushConstantRange& setOffset( uint32_t offset_ )
10021 {
10022 offset = offset_;
10023 return *this;
10024 }
10025
10026 PushConstantRange& setSize( uint32_t size_ )
10027 {
10028 size = size_;
10029 return *this;
10030 }
10031
10032 operator const VkPushConstantRange&() const
10033 {
10034 return *reinterpret_cast<const VkPushConstantRange*>(this);
10035 }
10036
10037 bool operator==( PushConstantRange const& rhs ) const
10038 {
10039 return ( stageFlags == rhs.stageFlags )
10040 && ( offset == rhs.offset )
10041 && ( size == rhs.size );
10042 }
10043
10044 bool operator!=( PushConstantRange const& rhs ) const
10045 {
10046 return !operator==( rhs );
10047 }
10048
10049 ShaderStageFlags stageFlags;
10050 uint32_t offset;
10051 uint32_t size;
10052 };
10053 static_assert( sizeof( PushConstantRange ) == sizeof( VkPushConstantRange ), "struct and wrapper have different size!" );
10054
10055 struct PipelineLayoutCreateInfo
10056 {
10057 PipelineLayoutCreateInfo( PipelineLayoutCreateFlags flags_ = PipelineLayoutCreateFlags(), uint32_t setLayoutCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr, uint32_t pushConstantRangeCount_ = 0, const PushConstantRange* pPushConstantRanges_ = nullptr )
10058 : sType( StructureType::ePipelineLayoutCreateInfo )
10059 , pNext( nullptr )
10060 , flags( flags_ )
10061 , setLayoutCount( setLayoutCount_ )
10062 , pSetLayouts( pSetLayouts_ )
10063 , pushConstantRangeCount( pushConstantRangeCount_ )
10064 , pPushConstantRanges( pPushConstantRanges_ )
10065 {
10066 }
10067
10068 PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs )
10069 {
10070 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
10071 }
10072
10073 PipelineLayoutCreateInfo& operator=( VkPipelineLayoutCreateInfo const & rhs )
10074 {
10075 memcpy( this, &rhs, sizeof(PipelineLayoutCreateInfo) );
10076 return *this;
10077 }
10078
10079 PipelineLayoutCreateInfo& setSType( StructureType sType_ )
10080 {
10081 sType = sType_;
10082 return *this;
10083 }
10084
10085 PipelineLayoutCreateInfo& setPNext( const void* pNext_ )
10086 {
10087 pNext = pNext_;
10088 return *this;
10089 }
10090
10091 PipelineLayoutCreateInfo& setFlags( PipelineLayoutCreateFlags flags_ )
10092 {
10093 flags = flags_;
10094 return *this;
10095 }
10096
10097 PipelineLayoutCreateInfo& setSetLayoutCount( uint32_t setLayoutCount_ )
10098 {
10099 setLayoutCount = setLayoutCount_;
10100 return *this;
10101 }
10102
10103 PipelineLayoutCreateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
10104 {
10105 pSetLayouts = pSetLayouts_;
10106 return *this;
10107 }
10108
10109 PipelineLayoutCreateInfo& setPushConstantRangeCount( uint32_t pushConstantRangeCount_ )
10110 {
10111 pushConstantRangeCount = pushConstantRangeCount_;
10112 return *this;
10113 }
10114
10115 PipelineLayoutCreateInfo& setPPushConstantRanges( const PushConstantRange* pPushConstantRanges_ )
10116 {
10117 pPushConstantRanges = pPushConstantRanges_;
10118 return *this;
10119 }
10120
10121 operator const VkPipelineLayoutCreateInfo&() const
10122 {
10123 return *reinterpret_cast<const VkPipelineLayoutCreateInfo*>(this);
10124 }
10125
10126 bool operator==( PipelineLayoutCreateInfo const& rhs ) const
10127 {
10128 return ( sType == rhs.sType )
10129 && ( pNext == rhs.pNext )
10130 && ( flags == rhs.flags )
10131 && ( setLayoutCount == rhs.setLayoutCount )
10132 && ( pSetLayouts == rhs.pSetLayouts )
10133 && ( pushConstantRangeCount == rhs.pushConstantRangeCount )
10134 && ( pPushConstantRanges == rhs.pPushConstantRanges );
10135 }
10136
10137 bool operator!=( PipelineLayoutCreateInfo const& rhs ) const
10138 {
10139 return !operator==( rhs );
10140 }
10141
10142 private:
10143 StructureType sType;
10144
10145 public:
10146 const void* pNext;
10147 PipelineLayoutCreateFlags flags;
10148 uint32_t setLayoutCount;
10149 const DescriptorSetLayout* pSetLayouts;
10150 uint32_t pushConstantRangeCount;
10151 const PushConstantRange* pPushConstantRanges;
10152 };
10153 static_assert( sizeof( PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ), "struct and wrapper have different size!" );
10154
10155 enum class ImageUsageFlagBits
10156 {
10157 eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
10158 eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT,
10159 eSampled = VK_IMAGE_USAGE_SAMPLED_BIT,
10160 eStorage = VK_IMAGE_USAGE_STORAGE_BIT,
10161 eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
10162 eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
10163 eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
10164 eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
10165 };
10166
10167 using ImageUsageFlags = Flags<ImageUsageFlagBits, VkImageUsageFlags>;
10168
10169 inline ImageUsageFlags operator|( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 )
10170 {
10171 return ImageUsageFlags( bit0 ) | bit1;
10172 }
10173
10174 enum class ImageCreateFlagBits
10175 {
10176 eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
10177 eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
10178 eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,
10179 eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
10180 eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
10181 };
10182
10183 using ImageCreateFlags = Flags<ImageCreateFlagBits, VkImageCreateFlags>;
10184
10185 inline ImageCreateFlags operator|( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 )
10186 {
10187 return ImageCreateFlags( bit0 ) | bit1;
10188 }
10189
10190 enum class PipelineCreateFlagBits
10191 {
10192 eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
10193 eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
10194 eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT
10195 };
10196
10197 using PipelineCreateFlags = Flags<PipelineCreateFlagBits, VkPipelineCreateFlags>;
10198
10199 inline PipelineCreateFlags operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 )
10200 {
10201 return PipelineCreateFlags( bit0 ) | bit1;
10202 }
10203
10204 struct ComputePipelineCreateInfo
10205 {
10206 ComputePipelineCreateInfo( PipelineCreateFlags flags_ = PipelineCreateFlags(), PipelineShaderStageCreateInfo stage_ = PipelineShaderStageCreateInfo(), PipelineLayout layout_ = PipelineLayout(), Pipeline basePipelineHandle_ = Pipeline(), int32_t basePipelineIndex_ = 0 )
10207 : sType( StructureType::eComputePipelineCreateInfo )
10208 , pNext( nullptr )
10209 , flags( flags_ )
10210 , stage( stage_ )
10211 , layout( layout_ )
10212 , basePipelineHandle( basePipelineHandle_ )
10213 , basePipelineIndex( basePipelineIndex_ )
10214 {
10215 }
10216
10217 ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs )
10218 {
10219 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10220 }
10221
10222 ComputePipelineCreateInfo& operator=( VkComputePipelineCreateInfo const & rhs )
10223 {
10224 memcpy( this, &rhs, sizeof(ComputePipelineCreateInfo) );
10225 return *this;
10226 }
10227
10228 ComputePipelineCreateInfo& setSType( StructureType sType_ )
10229 {
10230 sType = sType_;
10231 return *this;
10232 }
10233
10234 ComputePipelineCreateInfo& setPNext( const void* pNext_ )
10235 {
10236 pNext = pNext_;
10237 return *this;
10238 }
10239
10240 ComputePipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
10241 {
10242 flags = flags_;
10243 return *this;
10244 }
10245
10246 ComputePipelineCreateInfo& setStage( PipelineShaderStageCreateInfo stage_ )
10247 {
10248 stage = stage_;
10249 return *this;
10250 }
10251
10252 ComputePipelineCreateInfo& setLayout( PipelineLayout layout_ )
10253 {
10254 layout = layout_;
10255 return *this;
10256 }
10257
10258 ComputePipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
10259 {
10260 basePipelineHandle = basePipelineHandle_;
10261 return *this;
10262 }
10263
10264 ComputePipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
10265 {
10266 basePipelineIndex = basePipelineIndex_;
10267 return *this;
10268 }
10269
10270 operator const VkComputePipelineCreateInfo&() const
10271 {
10272 return *reinterpret_cast<const VkComputePipelineCreateInfo*>(this);
10273 }
10274
10275 bool operator==( ComputePipelineCreateInfo const& rhs ) const
10276 {
10277 return ( sType == rhs.sType )
10278 && ( pNext == rhs.pNext )
10279 && ( flags == rhs.flags )
10280 && ( stage == rhs.stage )
10281 && ( layout == rhs.layout )
10282 && ( basePipelineHandle == rhs.basePipelineHandle )
10283 && ( basePipelineIndex == rhs.basePipelineIndex );
10284 }
10285
10286 bool operator!=( ComputePipelineCreateInfo const& rhs ) const
10287 {
10288 return !operator==( rhs );
10289 }
10290
10291 private:
10292 StructureType sType;
10293
10294 public:
10295 const void* pNext;
10296 PipelineCreateFlags flags;
10297 PipelineShaderStageCreateInfo stage;
10298 PipelineLayout layout;
10299 Pipeline basePipelineHandle;
10300 int32_t basePipelineIndex;
10301 };
10302 static_assert( sizeof( ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ), "struct and wrapper have different size!" );
10303
10304 enum class ColorComponentFlagBits
10305 {
10306 eR = VK_COLOR_COMPONENT_R_BIT,
10307 eG = VK_COLOR_COMPONENT_G_BIT,
10308 eB = VK_COLOR_COMPONENT_B_BIT,
10309 eA = VK_COLOR_COMPONENT_A_BIT
10310 };
10311
10312 using ColorComponentFlags = Flags<ColorComponentFlagBits, VkColorComponentFlags>;
10313
10314 inline ColorComponentFlags operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 )
10315 {
10316 return ColorComponentFlags( bit0 ) | bit1;
10317 }
10318
10319 struct PipelineColorBlendAttachmentState
10320 {
10321 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() )
10322 : blendEnable( blendEnable_ )
10323 , srcColorBlendFactor( srcColorBlendFactor_ )
10324 , dstColorBlendFactor( dstColorBlendFactor_ )
10325 , colorBlendOp( colorBlendOp_ )
10326 , srcAlphaBlendFactor( srcAlphaBlendFactor_ )
10327 , dstAlphaBlendFactor( dstAlphaBlendFactor_ )
10328 , alphaBlendOp( alphaBlendOp_ )
10329 , colorWriteMask( colorWriteMask_ )
10330 {
10331 }
10332
10333 PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs )
10334 {
10335 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10336 }
10337
10338 PipelineColorBlendAttachmentState& operator=( VkPipelineColorBlendAttachmentState const & rhs )
10339 {
10340 memcpy( this, &rhs, sizeof(PipelineColorBlendAttachmentState) );
10341 return *this;
10342 }
10343
10344 PipelineColorBlendAttachmentState& setBlendEnable( Bool32 blendEnable_ )
10345 {
10346 blendEnable = blendEnable_;
10347 return *this;
10348 }
10349
10350 PipelineColorBlendAttachmentState& setSrcColorBlendFactor( BlendFactor srcColorBlendFactor_ )
10351 {
10352 srcColorBlendFactor = srcColorBlendFactor_;
10353 return *this;
10354 }
10355
10356 PipelineColorBlendAttachmentState& setDstColorBlendFactor( BlendFactor dstColorBlendFactor_ )
10357 {
10358 dstColorBlendFactor = dstColorBlendFactor_;
10359 return *this;
10360 }
10361
10362 PipelineColorBlendAttachmentState& setColorBlendOp( BlendOp colorBlendOp_ )
10363 {
10364 colorBlendOp = colorBlendOp_;
10365 return *this;
10366 }
10367
10368 PipelineColorBlendAttachmentState& setSrcAlphaBlendFactor( BlendFactor srcAlphaBlendFactor_ )
10369 {
10370 srcAlphaBlendFactor = srcAlphaBlendFactor_;
10371 return *this;
10372 }
10373
10374 PipelineColorBlendAttachmentState& setDstAlphaBlendFactor( BlendFactor dstAlphaBlendFactor_ )
10375 {
10376 dstAlphaBlendFactor = dstAlphaBlendFactor_;
10377 return *this;
10378 }
10379
10380 PipelineColorBlendAttachmentState& setAlphaBlendOp( BlendOp alphaBlendOp_ )
10381 {
10382 alphaBlendOp = alphaBlendOp_;
10383 return *this;
10384 }
10385
10386 PipelineColorBlendAttachmentState& setColorWriteMask( ColorComponentFlags colorWriteMask_ )
10387 {
10388 colorWriteMask = colorWriteMask_;
10389 return *this;
10390 }
10391
10392 operator const VkPipelineColorBlendAttachmentState&() const
10393 {
10394 return *reinterpret_cast<const VkPipelineColorBlendAttachmentState*>(this);
10395 }
10396
10397 bool operator==( PipelineColorBlendAttachmentState const& rhs ) const
10398 {
10399 return ( blendEnable == rhs.blendEnable )
10400 && ( srcColorBlendFactor == rhs.srcColorBlendFactor )
10401 && ( dstColorBlendFactor == rhs.dstColorBlendFactor )
10402 && ( colorBlendOp == rhs.colorBlendOp )
10403 && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor )
10404 && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor )
10405 && ( alphaBlendOp == rhs.alphaBlendOp )
10406 && ( colorWriteMask == rhs.colorWriteMask );
10407 }
10408
10409 bool operator!=( PipelineColorBlendAttachmentState const& rhs ) const
10410 {
10411 return !operator==( rhs );
10412 }
10413
10414 Bool32 blendEnable;
10415 BlendFactor srcColorBlendFactor;
10416 BlendFactor dstColorBlendFactor;
10417 BlendOp colorBlendOp;
10418 BlendFactor srcAlphaBlendFactor;
10419 BlendFactor dstAlphaBlendFactor;
10420 BlendOp alphaBlendOp;
10421 ColorComponentFlags colorWriteMask;
10422 };
10423 static_assert( sizeof( PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ), "struct and wrapper have different size!" );
10424
10425 struct PipelineColorBlendStateCreateInfo
10426 {
10427 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 } } )
10428 : sType( StructureType::ePipelineColorBlendStateCreateInfo )
10429 , pNext( nullptr )
10430 , flags( flags_ )
10431 , logicOpEnable( logicOpEnable_ )
10432 , logicOp( logicOp_ )
10433 , attachmentCount( attachmentCount_ )
10434 , pAttachments( pAttachments_ )
10435 {
10436 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10437 }
10438
10439 PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs )
10440 {
10441 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10442 }
10443
10444 PipelineColorBlendStateCreateInfo& operator=( VkPipelineColorBlendStateCreateInfo const & rhs )
10445 {
10446 memcpy( this, &rhs, sizeof(PipelineColorBlendStateCreateInfo) );
10447 return *this;
10448 }
10449
10450 PipelineColorBlendStateCreateInfo& setSType( StructureType sType_ )
10451 {
10452 sType = sType_;
10453 return *this;
10454 }
10455
10456 PipelineColorBlendStateCreateInfo& setPNext( const void* pNext_ )
10457 {
10458 pNext = pNext_;
10459 return *this;
10460 }
10461
10462 PipelineColorBlendStateCreateInfo& setFlags( PipelineColorBlendStateCreateFlags flags_ )
10463 {
10464 flags = flags_;
10465 return *this;
10466 }
10467
10468 PipelineColorBlendStateCreateInfo& setLogicOpEnable( Bool32 logicOpEnable_ )
10469 {
10470 logicOpEnable = logicOpEnable_;
10471 return *this;
10472 }
10473
10474 PipelineColorBlendStateCreateInfo& setLogicOp( LogicOp logicOp_ )
10475 {
10476 logicOp = logicOp_;
10477 return *this;
10478 }
10479
10480 PipelineColorBlendStateCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
10481 {
10482 attachmentCount = attachmentCount_;
10483 return *this;
10484 }
10485
10486 PipelineColorBlendStateCreateInfo& setPAttachments( const PipelineColorBlendAttachmentState* pAttachments_ )
10487 {
10488 pAttachments = pAttachments_;
10489 return *this;
10490 }
10491
10492 PipelineColorBlendStateCreateInfo& setBlendConstants( std::array<float,4> blendConstants_ )
10493 {
10494 memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
10495 return *this;
10496 }
10497
10498 operator const VkPipelineColorBlendStateCreateInfo&() const
10499 {
10500 return *reinterpret_cast<const VkPipelineColorBlendStateCreateInfo*>(this);
10501 }
10502
10503 bool operator==( PipelineColorBlendStateCreateInfo const& rhs ) const
10504 {
10505 return ( sType == rhs.sType )
10506 && ( pNext == rhs.pNext )
10507 && ( flags == rhs.flags )
10508 && ( logicOpEnable == rhs.logicOpEnable )
10509 && ( logicOp == rhs.logicOp )
10510 && ( attachmentCount == rhs.attachmentCount )
10511 && ( pAttachments == rhs.pAttachments )
10512 && ( memcmp( blendConstants, rhs.blendConstants, 4 * sizeof( float ) ) == 0 );
10513 }
10514
10515 bool operator!=( PipelineColorBlendStateCreateInfo const& rhs ) const
10516 {
10517 return !operator==( rhs );
10518 }
10519
10520 private:
10521 StructureType sType;
10522
10523 public:
10524 const void* pNext;
10525 PipelineColorBlendStateCreateFlags flags;
10526 Bool32 logicOpEnable;
10527 LogicOp logicOp;
10528 uint32_t attachmentCount;
10529 const PipelineColorBlendAttachmentState* pAttachments;
10530 float blendConstants[4];
10531 };
10532 static_assert( sizeof( PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ), "struct and wrapper have different size!" );
10533
10534 enum class FenceCreateFlagBits
10535 {
10536 eSignaled = VK_FENCE_CREATE_SIGNALED_BIT
10537 };
10538
10539 using FenceCreateFlags = Flags<FenceCreateFlagBits, VkFenceCreateFlags>;
10540
10541 inline FenceCreateFlags operator|( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 )
10542 {
10543 return FenceCreateFlags( bit0 ) | bit1;
10544 }
10545
10546 struct FenceCreateInfo
10547 {
10548 FenceCreateInfo( FenceCreateFlags flags_ = FenceCreateFlags() )
10549 : sType( StructureType::eFenceCreateInfo )
10550 , pNext( nullptr )
10551 , flags( flags_ )
10552 {
10553 }
10554
10555 FenceCreateInfo( VkFenceCreateInfo const & rhs )
10556 {
10557 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10558 }
10559
10560 FenceCreateInfo& operator=( VkFenceCreateInfo const & rhs )
10561 {
10562 memcpy( this, &rhs, sizeof(FenceCreateInfo) );
10563 return *this;
10564 }
10565
10566 FenceCreateInfo& setSType( StructureType sType_ )
10567 {
10568 sType = sType_;
10569 return *this;
10570 }
10571
10572 FenceCreateInfo& setPNext( const void* pNext_ )
10573 {
10574 pNext = pNext_;
10575 return *this;
10576 }
10577
10578 FenceCreateInfo& setFlags( FenceCreateFlags flags_ )
10579 {
10580 flags = flags_;
10581 return *this;
10582 }
10583
10584 operator const VkFenceCreateInfo&() const
10585 {
10586 return *reinterpret_cast<const VkFenceCreateInfo*>(this);
10587 }
10588
10589 bool operator==( FenceCreateInfo const& rhs ) const
10590 {
10591 return ( sType == rhs.sType )
10592 && ( pNext == rhs.pNext )
10593 && ( flags == rhs.flags );
10594 }
10595
10596 bool operator!=( FenceCreateInfo const& rhs ) const
10597 {
10598 return !operator==( rhs );
10599 }
10600
10601 private:
10602 StructureType sType;
10603
10604 public:
10605 const void* pNext;
10606 FenceCreateFlags flags;
10607 };
10608 static_assert( sizeof( FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" );
10609
10610 enum class FormatFeatureFlagBits
10611 {
10612 eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
10613 eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
10614 eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,
10615 eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,
10616 eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,
10617 eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,
10618 eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,
10619 eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
10620 eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,
10621 eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,
10622 eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT,
10623 eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT,
10624 eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
10625 eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
10626 };
10627
10628 using FormatFeatureFlags = Flags<FormatFeatureFlagBits, VkFormatFeatureFlags>;
10629
10630 inline FormatFeatureFlags operator|( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 )
10631 {
10632 return FormatFeatureFlags( bit0 ) | bit1;
10633 }
10634
10635 struct FormatProperties
10636 {
10637 operator const VkFormatProperties&() const
10638 {
10639 return *reinterpret_cast<const VkFormatProperties*>(this);
10640 }
10641
10642 bool operator==( FormatProperties const& rhs ) const
10643 {
10644 return ( linearTilingFeatures == rhs.linearTilingFeatures )
10645 && ( optimalTilingFeatures == rhs.optimalTilingFeatures )
10646 && ( bufferFeatures == rhs.bufferFeatures );
10647 }
10648
10649 bool operator!=( FormatProperties const& rhs ) const
10650 {
10651 return !operator==( rhs );
10652 }
10653
10654 FormatFeatureFlags linearTilingFeatures;
10655 FormatFeatureFlags optimalTilingFeatures;
10656 FormatFeatureFlags bufferFeatures;
10657 };
10658 static_assert( sizeof( FormatProperties ) == sizeof( VkFormatProperties ), "struct and wrapper have different size!" );
10659
10660 enum class QueryControlFlagBits
10661 {
10662 ePrecise = VK_QUERY_CONTROL_PRECISE_BIT
10663 };
10664
10665 using QueryControlFlags = Flags<QueryControlFlagBits, VkQueryControlFlags>;
10666
10667 inline QueryControlFlags operator|( QueryControlFlagBits bit0, QueryControlFlagBits bit1 )
10668 {
10669 return QueryControlFlags( bit0 ) | bit1;
10670 }
10671
10672 enum class QueryResultFlagBits
10673 {
10674 e64 = VK_QUERY_RESULT_64_BIT,
10675 eWait = VK_QUERY_RESULT_WAIT_BIT,
10676 eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
10677 ePartial = VK_QUERY_RESULT_PARTIAL_BIT
10678 };
10679
10680 using QueryResultFlags = Flags<QueryResultFlagBits, VkQueryResultFlags>;
10681
10682 inline QueryResultFlags operator|( QueryResultFlagBits bit0, QueryResultFlagBits bit1 )
10683 {
10684 return QueryResultFlags( bit0 ) | bit1;
10685 }
10686
10687 enum class CommandBufferUsageFlagBits
10688 {
10689 eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
10690 eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
10691 eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
10692 };
10693
10694 using CommandBufferUsageFlags = Flags<CommandBufferUsageFlagBits, VkCommandBufferUsageFlags>;
10695
10696 inline CommandBufferUsageFlags operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 )
10697 {
10698 return CommandBufferUsageFlags( bit0 ) | bit1;
10699 }
10700
10701 enum class QueryPipelineStatisticFlagBits
10702 {
10703 eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,
10704 eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,
10705 eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,
10706 eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,
10707 eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,
10708 eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,
10709 eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,
10710 eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,
10711 eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,
10712 eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,
10713 eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
10714 };
10715
10716 using QueryPipelineStatisticFlags = Flags<QueryPipelineStatisticFlagBits, VkQueryPipelineStatisticFlags>;
10717
10718 inline QueryPipelineStatisticFlags operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 )
10719 {
10720 return QueryPipelineStatisticFlags( bit0 ) | bit1;
10721 }
10722
10723 struct CommandBufferInheritanceInfo
10724 {
10725 CommandBufferInheritanceInfo( RenderPass renderPass_ = RenderPass(), uint32_t subpass_ = 0, Framebuffer framebuffer_ = Framebuffer(), Bool32 occlusionQueryEnable_ = 0, QueryControlFlags queryFlags_ = QueryControlFlags(), QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10726 : sType( StructureType::eCommandBufferInheritanceInfo )
10727 , pNext( nullptr )
10728 , renderPass( renderPass_ )
10729 , subpass( subpass_ )
10730 , framebuffer( framebuffer_ )
10731 , occlusionQueryEnable( occlusionQueryEnable_ )
10732 , queryFlags( queryFlags_ )
10733 , pipelineStatistics( pipelineStatistics_ )
10734 {
10735 }
10736
10737 CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs )
10738 {
10739 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10740 }
10741
10742 CommandBufferInheritanceInfo& operator=( VkCommandBufferInheritanceInfo const & rhs )
10743 {
10744 memcpy( this, &rhs, sizeof(CommandBufferInheritanceInfo) );
10745 return *this;
10746 }
10747
10748 CommandBufferInheritanceInfo& setSType( StructureType sType_ )
10749 {
10750 sType = sType_;
10751 return *this;
10752 }
10753
10754 CommandBufferInheritanceInfo& setPNext( const void* pNext_ )
10755 {
10756 pNext = pNext_;
10757 return *this;
10758 }
10759
10760 CommandBufferInheritanceInfo& setRenderPass( RenderPass renderPass_ )
10761 {
10762 renderPass = renderPass_;
10763 return *this;
10764 }
10765
10766 CommandBufferInheritanceInfo& setSubpass( uint32_t subpass_ )
10767 {
10768 subpass = subpass_;
10769 return *this;
10770 }
10771
10772 CommandBufferInheritanceInfo& setFramebuffer( Framebuffer framebuffer_ )
10773 {
10774 framebuffer = framebuffer_;
10775 return *this;
10776 }
10777
10778 CommandBufferInheritanceInfo& setOcclusionQueryEnable( Bool32 occlusionQueryEnable_ )
10779 {
10780 occlusionQueryEnable = occlusionQueryEnable_;
10781 return *this;
10782 }
10783
10784 CommandBufferInheritanceInfo& setQueryFlags( QueryControlFlags queryFlags_ )
10785 {
10786 queryFlags = queryFlags_;
10787 return *this;
10788 }
10789
10790 CommandBufferInheritanceInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10791 {
10792 pipelineStatistics = pipelineStatistics_;
10793 return *this;
10794 }
10795
10796 operator const VkCommandBufferInheritanceInfo&() const
10797 {
10798 return *reinterpret_cast<const VkCommandBufferInheritanceInfo*>(this);
10799 }
10800
10801 bool operator==( CommandBufferInheritanceInfo const& rhs ) const
10802 {
10803 return ( sType == rhs.sType )
10804 && ( pNext == rhs.pNext )
10805 && ( renderPass == rhs.renderPass )
10806 && ( subpass == rhs.subpass )
10807 && ( framebuffer == rhs.framebuffer )
10808 && ( occlusionQueryEnable == rhs.occlusionQueryEnable )
10809 && ( queryFlags == rhs.queryFlags )
10810 && ( pipelineStatistics == rhs.pipelineStatistics );
10811 }
10812
10813 bool operator!=( CommandBufferInheritanceInfo const& rhs ) const
10814 {
10815 return !operator==( rhs );
10816 }
10817
10818 private:
10819 StructureType sType;
10820
10821 public:
10822 const void* pNext;
10823 RenderPass renderPass;
10824 uint32_t subpass;
10825 Framebuffer framebuffer;
10826 Bool32 occlusionQueryEnable;
10827 QueryControlFlags queryFlags;
10828 QueryPipelineStatisticFlags pipelineStatistics;
10829 };
10830 static_assert( sizeof( CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ), "struct and wrapper have different size!" );
10831
10832 struct CommandBufferBeginInfo
10833 {
10834 CommandBufferBeginInfo( CommandBufferUsageFlags flags_ = CommandBufferUsageFlags(), const CommandBufferInheritanceInfo* pInheritanceInfo_ = nullptr )
10835 : sType( StructureType::eCommandBufferBeginInfo )
10836 , pNext( nullptr )
10837 , flags( flags_ )
10838 , pInheritanceInfo( pInheritanceInfo_ )
10839 {
10840 }
10841
10842 CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs )
10843 {
10844 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10845 }
10846
10847 CommandBufferBeginInfo& operator=( VkCommandBufferBeginInfo const & rhs )
10848 {
10849 memcpy( this, &rhs, sizeof(CommandBufferBeginInfo) );
10850 return *this;
10851 }
10852
10853 CommandBufferBeginInfo& setSType( StructureType sType_ )
10854 {
10855 sType = sType_;
10856 return *this;
10857 }
10858
10859 CommandBufferBeginInfo& setPNext( const void* pNext_ )
10860 {
10861 pNext = pNext_;
10862 return *this;
10863 }
10864
10865 CommandBufferBeginInfo& setFlags( CommandBufferUsageFlags flags_ )
10866 {
10867 flags = flags_;
10868 return *this;
10869 }
10870
10871 CommandBufferBeginInfo& setPInheritanceInfo( const CommandBufferInheritanceInfo* pInheritanceInfo_ )
10872 {
10873 pInheritanceInfo = pInheritanceInfo_;
10874 return *this;
10875 }
10876
10877 operator const VkCommandBufferBeginInfo&() const
10878 {
10879 return *reinterpret_cast<const VkCommandBufferBeginInfo*>(this);
10880 }
10881
10882 bool operator==( CommandBufferBeginInfo const& rhs ) const
10883 {
10884 return ( sType == rhs.sType )
10885 && ( pNext == rhs.pNext )
10886 && ( flags == rhs.flags )
10887 && ( pInheritanceInfo == rhs.pInheritanceInfo );
10888 }
10889
10890 bool operator!=( CommandBufferBeginInfo const& rhs ) const
10891 {
10892 return !operator==( rhs );
10893 }
10894
10895 private:
10896 StructureType sType;
10897
10898 public:
10899 const void* pNext;
10900 CommandBufferUsageFlags flags;
10901 const CommandBufferInheritanceInfo* pInheritanceInfo;
10902 };
10903 static_assert( sizeof( CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ), "struct and wrapper have different size!" );
10904
10905 struct QueryPoolCreateInfo
10906 {
10907 QueryPoolCreateInfo( QueryPoolCreateFlags flags_ = QueryPoolCreateFlags(), QueryType queryType_ = QueryType::eOcclusion, uint32_t queryCount_ = 0, QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
10908 : sType( StructureType::eQueryPoolCreateInfo )
10909 , pNext( nullptr )
10910 , flags( flags_ )
10911 , queryType( queryType_ )
10912 , queryCount( queryCount_ )
10913 , pipelineStatistics( pipelineStatistics_ )
10914 {
10915 }
10916
10917 QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs )
10918 {
10919 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10920 }
10921
10922 QueryPoolCreateInfo& operator=( VkQueryPoolCreateInfo const & rhs )
10923 {
10924 memcpy( this, &rhs, sizeof(QueryPoolCreateInfo) );
10925 return *this;
10926 }
10927
10928 QueryPoolCreateInfo& setSType( StructureType sType_ )
10929 {
10930 sType = sType_;
10931 return *this;
10932 }
10933
10934 QueryPoolCreateInfo& setPNext( const void* pNext_ )
10935 {
10936 pNext = pNext_;
10937 return *this;
10938 }
10939
10940 QueryPoolCreateInfo& setFlags( QueryPoolCreateFlags flags_ )
10941 {
10942 flags = flags_;
10943 return *this;
10944 }
10945
10946 QueryPoolCreateInfo& setQueryType( QueryType queryType_ )
10947 {
10948 queryType = queryType_;
10949 return *this;
10950 }
10951
10952 QueryPoolCreateInfo& setQueryCount( uint32_t queryCount_ )
10953 {
10954 queryCount = queryCount_;
10955 return *this;
10956 }
10957
10958 QueryPoolCreateInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
10959 {
10960 pipelineStatistics = pipelineStatistics_;
10961 return *this;
10962 }
10963
10964 operator const VkQueryPoolCreateInfo&() const
10965 {
10966 return *reinterpret_cast<const VkQueryPoolCreateInfo*>(this);
10967 }
10968
10969 bool operator==( QueryPoolCreateInfo const& rhs ) const
10970 {
10971 return ( sType == rhs.sType )
10972 && ( pNext == rhs.pNext )
10973 && ( flags == rhs.flags )
10974 && ( queryType == rhs.queryType )
10975 && ( queryCount == rhs.queryCount )
10976 && ( pipelineStatistics == rhs.pipelineStatistics );
10977 }
10978
10979 bool operator!=( QueryPoolCreateInfo const& rhs ) const
10980 {
10981 return !operator==( rhs );
10982 }
10983
10984 private:
10985 StructureType sType;
10986
10987 public:
10988 const void* pNext;
10989 QueryPoolCreateFlags flags;
10990 QueryType queryType;
10991 uint32_t queryCount;
10992 QueryPipelineStatisticFlags pipelineStatistics;
10993 };
10994 static_assert( sizeof( QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ), "struct and wrapper have different size!" );
10995
10996 enum class ImageAspectFlagBits
10997 {
10998 eColor = VK_IMAGE_ASPECT_COLOR_BIT,
10999 eDepth = VK_IMAGE_ASPECT_DEPTH_BIT,
11000 eStencil = VK_IMAGE_ASPECT_STENCIL_BIT,
11001 eMetadata = VK_IMAGE_ASPECT_METADATA_BIT
11002 };
11003
11004 using ImageAspectFlags = Flags<ImageAspectFlagBits, VkImageAspectFlags>;
11005
11006 inline ImageAspectFlags operator|( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 )
11007 {
11008 return ImageAspectFlags( bit0 ) | bit1;
11009 }
11010
11011 struct ImageSubresource
11012 {
11013 ImageSubresource( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t arrayLayer_ = 0 )
11014 : aspectMask( aspectMask_ )
11015 , mipLevel( mipLevel_ )
11016 , arrayLayer( arrayLayer_ )
11017 {
11018 }
11019
11020 ImageSubresource( VkImageSubresource const & rhs )
11021 {
11022 memcpy( this, &rhs, sizeof(ImageSubresource) );
11023 }
11024
11025 ImageSubresource& operator=( VkImageSubresource const & rhs )
11026 {
11027 memcpy( this, &rhs, sizeof(ImageSubresource) );
11028 return *this;
11029 }
11030
11031 ImageSubresource& setAspectMask( ImageAspectFlags aspectMask_ )
11032 {
11033 aspectMask = aspectMask_;
11034 return *this;
11035 }
11036
11037 ImageSubresource& setMipLevel( uint32_t mipLevel_ )
11038 {
11039 mipLevel = mipLevel_;
11040 return *this;
11041 }
11042
11043 ImageSubresource& setArrayLayer( uint32_t arrayLayer_ )
11044 {
11045 arrayLayer = arrayLayer_;
11046 return *this;
11047 }
11048
11049 operator const VkImageSubresource&() const
11050 {
11051 return *reinterpret_cast<const VkImageSubresource*>(this);
11052 }
11053
11054 bool operator==( ImageSubresource const& rhs ) const
11055 {
11056 return ( aspectMask == rhs.aspectMask )
11057 && ( mipLevel == rhs.mipLevel )
11058 && ( arrayLayer == rhs.arrayLayer );
11059 }
11060
11061 bool operator!=( ImageSubresource const& rhs ) const
11062 {
11063 return !operator==( rhs );
11064 }
11065
11066 ImageAspectFlags aspectMask;
11067 uint32_t mipLevel;
11068 uint32_t arrayLayer;
11069 };
11070 static_assert( sizeof( ImageSubresource ) == sizeof( VkImageSubresource ), "struct and wrapper have different size!" );
11071
11072 struct ImageSubresourceLayers
11073 {
11074 ImageSubresourceLayers( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
11075 : aspectMask( aspectMask_ )
11076 , mipLevel( mipLevel_ )
11077 , baseArrayLayer( baseArrayLayer_ )
11078 , layerCount( layerCount_ )
11079 {
11080 }
11081
11082 ImageSubresourceLayers( VkImageSubresourceLayers const & rhs )
11083 {
11084 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
11085 }
11086
11087 ImageSubresourceLayers& operator=( VkImageSubresourceLayers const & rhs )
11088 {
11089 memcpy( this, &rhs, sizeof(ImageSubresourceLayers) );
11090 return *this;
11091 }
11092
11093 ImageSubresourceLayers& setAspectMask( ImageAspectFlags aspectMask_ )
11094 {
11095 aspectMask = aspectMask_;
11096 return *this;
11097 }
11098
11099 ImageSubresourceLayers& setMipLevel( uint32_t mipLevel_ )
11100 {
11101 mipLevel = mipLevel_;
11102 return *this;
11103 }
11104
11105 ImageSubresourceLayers& setBaseArrayLayer( uint32_t baseArrayLayer_ )
11106 {
11107 baseArrayLayer = baseArrayLayer_;
11108 return *this;
11109 }
11110
11111 ImageSubresourceLayers& setLayerCount( uint32_t layerCount_ )
11112 {
11113 layerCount = layerCount_;
11114 return *this;
11115 }
11116
11117 operator const VkImageSubresourceLayers&() const
11118 {
11119 return *reinterpret_cast<const VkImageSubresourceLayers*>(this);
11120 }
11121
11122 bool operator==( ImageSubresourceLayers const& rhs ) const
11123 {
11124 return ( aspectMask == rhs.aspectMask )
11125 && ( mipLevel == rhs.mipLevel )
11126 && ( baseArrayLayer == rhs.baseArrayLayer )
11127 && ( layerCount == rhs.layerCount );
11128 }
11129
11130 bool operator!=( ImageSubresourceLayers const& rhs ) const
11131 {
11132 return !operator==( rhs );
11133 }
11134
11135 ImageAspectFlags aspectMask;
11136 uint32_t mipLevel;
11137 uint32_t baseArrayLayer;
11138 uint32_t layerCount;
11139 };
11140 static_assert( sizeof( ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ), "struct and wrapper have different size!" );
11141
11142 struct ImageSubresourceRange
11143 {
11144 ImageSubresourceRange( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t baseMipLevel_ = 0, uint32_t levelCount_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
11145 : aspectMask( aspectMask_ )
11146 , baseMipLevel( baseMipLevel_ )
11147 , levelCount( levelCount_ )
11148 , baseArrayLayer( baseArrayLayer_ )
11149 , layerCount( layerCount_ )
11150 {
11151 }
11152
11153 ImageSubresourceRange( VkImageSubresourceRange const & rhs )
11154 {
11155 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
11156 }
11157
11158 ImageSubresourceRange& operator=( VkImageSubresourceRange const & rhs )
11159 {
11160 memcpy( this, &rhs, sizeof(ImageSubresourceRange) );
11161 return *this;
11162 }
11163
11164 ImageSubresourceRange& setAspectMask( ImageAspectFlags aspectMask_ )
11165 {
11166 aspectMask = aspectMask_;
11167 return *this;
11168 }
11169
11170 ImageSubresourceRange& setBaseMipLevel( uint32_t baseMipLevel_ )
11171 {
11172 baseMipLevel = baseMipLevel_;
11173 return *this;
11174 }
11175
11176 ImageSubresourceRange& setLevelCount( uint32_t levelCount_ )
11177 {
11178 levelCount = levelCount_;
11179 return *this;
11180 }
11181
11182 ImageSubresourceRange& setBaseArrayLayer( uint32_t baseArrayLayer_ )
11183 {
11184 baseArrayLayer = baseArrayLayer_;
11185 return *this;
11186 }
11187
11188 ImageSubresourceRange& setLayerCount( uint32_t layerCount_ )
11189 {
11190 layerCount = layerCount_;
11191 return *this;
11192 }
11193
11194 operator const VkImageSubresourceRange&() const
11195 {
11196 return *reinterpret_cast<const VkImageSubresourceRange*>(this);
11197 }
11198
11199 bool operator==( ImageSubresourceRange const& rhs ) const
11200 {
11201 return ( aspectMask == rhs.aspectMask )
11202 && ( baseMipLevel == rhs.baseMipLevel )
11203 && ( levelCount == rhs.levelCount )
11204 && ( baseArrayLayer == rhs.baseArrayLayer )
11205 && ( layerCount == rhs.layerCount );
11206 }
11207
11208 bool operator!=( ImageSubresourceRange const& rhs ) const
11209 {
11210 return !operator==( rhs );
11211 }
11212
11213 ImageAspectFlags aspectMask;
11214 uint32_t baseMipLevel;
11215 uint32_t levelCount;
11216 uint32_t baseArrayLayer;
11217 uint32_t layerCount;
11218 };
11219 static_assert( sizeof( ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ), "struct and wrapper have different size!" );
11220
11221 struct ImageMemoryBarrier
11222 {
11223 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() )
11224 : sType( StructureType::eImageMemoryBarrier )
11225 , pNext( nullptr )
11226 , srcAccessMask( srcAccessMask_ )
11227 , dstAccessMask( dstAccessMask_ )
11228 , oldLayout( oldLayout_ )
11229 , newLayout( newLayout_ )
11230 , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
11231 , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
11232 , image( image_ )
11233 , subresourceRange( subresourceRange_ )
11234 {
11235 }
11236
11237 ImageMemoryBarrier( VkImageMemoryBarrier const & rhs )
11238 {
11239 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11240 }
11241
11242 ImageMemoryBarrier& operator=( VkImageMemoryBarrier const & rhs )
11243 {
11244 memcpy( this, &rhs, sizeof(ImageMemoryBarrier) );
11245 return *this;
11246 }
11247
11248 ImageMemoryBarrier& setSType( StructureType sType_ )
11249 {
11250 sType = sType_;
11251 return *this;
11252 }
11253
11254 ImageMemoryBarrier& setPNext( const void* pNext_ )
11255 {
11256 pNext = pNext_;
11257 return *this;
11258 }
11259
11260 ImageMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
11261 {
11262 srcAccessMask = srcAccessMask_;
11263 return *this;
11264 }
11265
11266 ImageMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
11267 {
11268 dstAccessMask = dstAccessMask_;
11269 return *this;
11270 }
11271
11272 ImageMemoryBarrier& setOldLayout( ImageLayout oldLayout_ )
11273 {
11274 oldLayout = oldLayout_;
11275 return *this;
11276 }
11277
11278 ImageMemoryBarrier& setNewLayout( ImageLayout newLayout_ )
11279 {
11280 newLayout = newLayout_;
11281 return *this;
11282 }
11283
11284 ImageMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
11285 {
11286 srcQueueFamilyIndex = srcQueueFamilyIndex_;
11287 return *this;
11288 }
11289
11290 ImageMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
11291 {
11292 dstQueueFamilyIndex = dstQueueFamilyIndex_;
11293 return *this;
11294 }
11295
11296 ImageMemoryBarrier& setImage( Image image_ )
11297 {
11298 image = image_;
11299 return *this;
11300 }
11301
11302 ImageMemoryBarrier& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11303 {
11304 subresourceRange = subresourceRange_;
11305 return *this;
11306 }
11307
11308 operator const VkImageMemoryBarrier&() const
11309 {
11310 return *reinterpret_cast<const VkImageMemoryBarrier*>(this);
11311 }
11312
11313 bool operator==( ImageMemoryBarrier const& rhs ) const
11314 {
11315 return ( sType == rhs.sType )
11316 && ( pNext == rhs.pNext )
11317 && ( srcAccessMask == rhs.srcAccessMask )
11318 && ( dstAccessMask == rhs.dstAccessMask )
11319 && ( oldLayout == rhs.oldLayout )
11320 && ( newLayout == rhs.newLayout )
11321 && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
11322 && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
11323 && ( image == rhs.image )
11324 && ( subresourceRange == rhs.subresourceRange );
11325 }
11326
11327 bool operator!=( ImageMemoryBarrier const& rhs ) const
11328 {
11329 return !operator==( rhs );
11330 }
11331
11332 private:
11333 StructureType sType;
11334
11335 public:
11336 const void* pNext;
11337 AccessFlags srcAccessMask;
11338 AccessFlags dstAccessMask;
11339 ImageLayout oldLayout;
11340 ImageLayout newLayout;
11341 uint32_t srcQueueFamilyIndex;
11342 uint32_t dstQueueFamilyIndex;
11343 Image image;
11344 ImageSubresourceRange subresourceRange;
11345 };
11346 static_assert( sizeof( ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ), "struct and wrapper have different size!" );
11347
11348 struct ImageViewCreateInfo
11349 {
11350 ImageViewCreateInfo( ImageViewCreateFlags flags_ = ImageViewCreateFlags(), Image image_ = Image(), ImageViewType viewType_ = ImageViewType::e1D, Format format_ = Format::eUndefined, ComponentMapping components_ = ComponentMapping(), ImageSubresourceRange subresourceRange_ = ImageSubresourceRange() )
11351 : sType( StructureType::eImageViewCreateInfo )
11352 , pNext( nullptr )
11353 , flags( flags_ )
11354 , image( image_ )
11355 , viewType( viewType_ )
11356 , format( format_ )
11357 , components( components_ )
11358 , subresourceRange( subresourceRange_ )
11359 {
11360 }
11361
11362 ImageViewCreateInfo( VkImageViewCreateInfo const & rhs )
11363 {
11364 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11365 }
11366
11367 ImageViewCreateInfo& operator=( VkImageViewCreateInfo const & rhs )
11368 {
11369 memcpy( this, &rhs, sizeof(ImageViewCreateInfo) );
11370 return *this;
11371 }
11372
11373 ImageViewCreateInfo& setSType( StructureType sType_ )
11374 {
11375 sType = sType_;
11376 return *this;
11377 }
11378
11379 ImageViewCreateInfo& setPNext( const void* pNext_ )
11380 {
11381 pNext = pNext_;
11382 return *this;
11383 }
11384
11385 ImageViewCreateInfo& setFlags( ImageViewCreateFlags flags_ )
11386 {
11387 flags = flags_;
11388 return *this;
11389 }
11390
11391 ImageViewCreateInfo& setImage( Image image_ )
11392 {
11393 image = image_;
11394 return *this;
11395 }
11396
11397 ImageViewCreateInfo& setViewType( ImageViewType viewType_ )
11398 {
11399 viewType = viewType_;
11400 return *this;
11401 }
11402
11403 ImageViewCreateInfo& setFormat( Format format_ )
11404 {
11405 format = format_;
11406 return *this;
11407 }
11408
11409 ImageViewCreateInfo& setComponents( ComponentMapping components_ )
11410 {
11411 components = components_;
11412 return *this;
11413 }
11414
11415 ImageViewCreateInfo& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
11416 {
11417 subresourceRange = subresourceRange_;
11418 return *this;
11419 }
11420
11421 operator const VkImageViewCreateInfo&() const
11422 {
11423 return *reinterpret_cast<const VkImageViewCreateInfo*>(this);
11424 }
11425
11426 bool operator==( ImageViewCreateInfo const& rhs ) const
11427 {
11428 return ( sType == rhs.sType )
11429 && ( pNext == rhs.pNext )
11430 && ( flags == rhs.flags )
11431 && ( image == rhs.image )
11432 && ( viewType == rhs.viewType )
11433 && ( format == rhs.format )
11434 && ( components == rhs.components )
11435 && ( subresourceRange == rhs.subresourceRange );
11436 }
11437
11438 bool operator!=( ImageViewCreateInfo const& rhs ) const
11439 {
11440 return !operator==( rhs );
11441 }
11442
11443 private:
11444 StructureType sType;
11445
11446 public:
11447 const void* pNext;
11448 ImageViewCreateFlags flags;
11449 Image image;
11450 ImageViewType viewType;
11451 Format format;
11452 ComponentMapping components;
11453 ImageSubresourceRange subresourceRange;
11454 };
11455 static_assert( sizeof( ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ), "struct and wrapper have different size!" );
11456
11457 struct ImageCopy
11458 {
11459 ImageCopy( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11460 : srcSubresource( srcSubresource_ )
11461 , srcOffset( srcOffset_ )
11462 , dstSubresource( dstSubresource_ )
11463 , dstOffset( dstOffset_ )
11464 , extent( extent_ )
11465 {
11466 }
11467
11468 ImageCopy( VkImageCopy const & rhs )
11469 {
11470 memcpy( this, &rhs, sizeof(ImageCopy) );
11471 }
11472
11473 ImageCopy& operator=( VkImageCopy const & rhs )
11474 {
11475 memcpy( this, &rhs, sizeof(ImageCopy) );
11476 return *this;
11477 }
11478
11479 ImageCopy& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11480 {
11481 srcSubresource = srcSubresource_;
11482 return *this;
11483 }
11484
11485 ImageCopy& setSrcOffset( Offset3D srcOffset_ )
11486 {
11487 srcOffset = srcOffset_;
11488 return *this;
11489 }
11490
11491 ImageCopy& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11492 {
11493 dstSubresource = dstSubresource_;
11494 return *this;
11495 }
11496
11497 ImageCopy& setDstOffset( Offset3D dstOffset_ )
11498 {
11499 dstOffset = dstOffset_;
11500 return *this;
11501 }
11502
11503 ImageCopy& setExtent( Extent3D extent_ )
11504 {
11505 extent = extent_;
11506 return *this;
11507 }
11508
11509 operator const VkImageCopy&() const
11510 {
11511 return *reinterpret_cast<const VkImageCopy*>(this);
11512 }
11513
11514 bool operator==( ImageCopy const& rhs ) const
11515 {
11516 return ( srcSubresource == rhs.srcSubresource )
11517 && ( srcOffset == rhs.srcOffset )
11518 && ( dstSubresource == rhs.dstSubresource )
11519 && ( dstOffset == rhs.dstOffset )
11520 && ( extent == rhs.extent );
11521 }
11522
11523 bool operator!=( ImageCopy const& rhs ) const
11524 {
11525 return !operator==( rhs );
11526 }
11527
11528 ImageSubresourceLayers srcSubresource;
11529 Offset3D srcOffset;
11530 ImageSubresourceLayers dstSubresource;
11531 Offset3D dstOffset;
11532 Extent3D extent;
11533 };
11534 static_assert( sizeof( ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" );
11535
11536 struct ImageBlit
11537 {
11538 ImageBlit( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& srcOffsets_ = { { Offset3D(), Offset3D() } }, ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& dstOffsets_ = { { Offset3D(), Offset3D() } } )
11539 : srcSubresource( srcSubresource_ )
11540 , dstSubresource( dstSubresource_ )
11541 {
11542 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11543 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11544 }
11545
11546 ImageBlit( VkImageBlit const & rhs )
11547 {
11548 memcpy( this, &rhs, sizeof(ImageBlit) );
11549 }
11550
11551 ImageBlit& operator=( VkImageBlit const & rhs )
11552 {
11553 memcpy( this, &rhs, sizeof(ImageBlit) );
11554 return *this;
11555 }
11556
11557 ImageBlit& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11558 {
11559 srcSubresource = srcSubresource_;
11560 return *this;
11561 }
11562
11563 ImageBlit& setSrcOffsets( std::array<Offset3D,2> srcOffsets_ )
11564 {
11565 memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
11566 return *this;
11567 }
11568
11569 ImageBlit& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11570 {
11571 dstSubresource = dstSubresource_;
11572 return *this;
11573 }
11574
11575 ImageBlit& setDstOffsets( std::array<Offset3D,2> dstOffsets_ )
11576 {
11577 memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
11578 return *this;
11579 }
11580
11581 operator const VkImageBlit&() const
11582 {
11583 return *reinterpret_cast<const VkImageBlit*>(this);
11584 }
11585
11586 bool operator==( ImageBlit const& rhs ) const
11587 {
11588 return ( srcSubresource == rhs.srcSubresource )
11589 && ( memcmp( srcOffsets, rhs.srcOffsets, 2 * sizeof( Offset3D ) ) == 0 )
11590 && ( dstSubresource == rhs.dstSubresource )
11591 && ( memcmp( dstOffsets, rhs.dstOffsets, 2 * sizeof( Offset3D ) ) == 0 );
11592 }
11593
11594 bool operator!=( ImageBlit const& rhs ) const
11595 {
11596 return !operator==( rhs );
11597 }
11598
11599 ImageSubresourceLayers srcSubresource;
11600 Offset3D srcOffsets[2];
11601 ImageSubresourceLayers dstSubresource;
11602 Offset3D dstOffsets[2];
11603 };
11604 static_assert( sizeof( ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" );
11605
11606 struct BufferImageCopy
11607 {
11608 BufferImageCopy( DeviceSize bufferOffset_ = 0, uint32_t bufferRowLength_ = 0, uint32_t bufferImageHeight_ = 0, ImageSubresourceLayers imageSubresource_ = ImageSubresourceLayers(), Offset3D imageOffset_ = Offset3D(), Extent3D imageExtent_ = Extent3D() )
11609 : bufferOffset( bufferOffset_ )
11610 , bufferRowLength( bufferRowLength_ )
11611 , bufferImageHeight( bufferImageHeight_ )
11612 , imageSubresource( imageSubresource_ )
11613 , imageOffset( imageOffset_ )
11614 , imageExtent( imageExtent_ )
11615 {
11616 }
11617
11618 BufferImageCopy( VkBufferImageCopy const & rhs )
11619 {
11620 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11621 }
11622
11623 BufferImageCopy& operator=( VkBufferImageCopy const & rhs )
11624 {
11625 memcpy( this, &rhs, sizeof(BufferImageCopy) );
11626 return *this;
11627 }
11628
11629 BufferImageCopy& setBufferOffset( DeviceSize bufferOffset_ )
11630 {
11631 bufferOffset = bufferOffset_;
11632 return *this;
11633 }
11634
11635 BufferImageCopy& setBufferRowLength( uint32_t bufferRowLength_ )
11636 {
11637 bufferRowLength = bufferRowLength_;
11638 return *this;
11639 }
11640
11641 BufferImageCopy& setBufferImageHeight( uint32_t bufferImageHeight_ )
11642 {
11643 bufferImageHeight = bufferImageHeight_;
11644 return *this;
11645 }
11646
11647 BufferImageCopy& setImageSubresource( ImageSubresourceLayers imageSubresource_ )
11648 {
11649 imageSubresource = imageSubresource_;
11650 return *this;
11651 }
11652
11653 BufferImageCopy& setImageOffset( Offset3D imageOffset_ )
11654 {
11655 imageOffset = imageOffset_;
11656 return *this;
11657 }
11658
11659 BufferImageCopy& setImageExtent( Extent3D imageExtent_ )
11660 {
11661 imageExtent = imageExtent_;
11662 return *this;
11663 }
11664
11665 operator const VkBufferImageCopy&() const
11666 {
11667 return *reinterpret_cast<const VkBufferImageCopy*>(this);
11668 }
11669
11670 bool operator==( BufferImageCopy const& rhs ) const
11671 {
11672 return ( bufferOffset == rhs.bufferOffset )
11673 && ( bufferRowLength == rhs.bufferRowLength )
11674 && ( bufferImageHeight == rhs.bufferImageHeight )
11675 && ( imageSubresource == rhs.imageSubresource )
11676 && ( imageOffset == rhs.imageOffset )
11677 && ( imageExtent == rhs.imageExtent );
11678 }
11679
11680 bool operator!=( BufferImageCopy const& rhs ) const
11681 {
11682 return !operator==( rhs );
11683 }
11684
11685 DeviceSize bufferOffset;
11686 uint32_t bufferRowLength;
11687 uint32_t bufferImageHeight;
11688 ImageSubresourceLayers imageSubresource;
11689 Offset3D imageOffset;
11690 Extent3D imageExtent;
11691 };
11692 static_assert( sizeof( BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" );
11693
11694 struct ImageResolve
11695 {
11696 ImageResolve( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
11697 : srcSubresource( srcSubresource_ )
11698 , srcOffset( srcOffset_ )
11699 , dstSubresource( dstSubresource_ )
11700 , dstOffset( dstOffset_ )
11701 , extent( extent_ )
11702 {
11703 }
11704
11705 ImageResolve( VkImageResolve const & rhs )
11706 {
11707 memcpy( this, &rhs, sizeof(ImageResolve) );
11708 }
11709
11710 ImageResolve& operator=( VkImageResolve const & rhs )
11711 {
11712 memcpy( this, &rhs, sizeof(ImageResolve) );
11713 return *this;
11714 }
11715
11716 ImageResolve& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
11717 {
11718 srcSubresource = srcSubresource_;
11719 return *this;
11720 }
11721
11722 ImageResolve& setSrcOffset( Offset3D srcOffset_ )
11723 {
11724 srcOffset = srcOffset_;
11725 return *this;
11726 }
11727
11728 ImageResolve& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
11729 {
11730 dstSubresource = dstSubresource_;
11731 return *this;
11732 }
11733
11734 ImageResolve& setDstOffset( Offset3D dstOffset_ )
11735 {
11736 dstOffset = dstOffset_;
11737 return *this;
11738 }
11739
11740 ImageResolve& setExtent( Extent3D extent_ )
11741 {
11742 extent = extent_;
11743 return *this;
11744 }
11745
11746 operator const VkImageResolve&() const
11747 {
11748 return *reinterpret_cast<const VkImageResolve*>(this);
11749 }
11750
11751 bool operator==( ImageResolve const& rhs ) const
11752 {
11753 return ( srcSubresource == rhs.srcSubresource )
11754 && ( srcOffset == rhs.srcOffset )
11755 && ( dstSubresource == rhs.dstSubresource )
11756 && ( dstOffset == rhs.dstOffset )
11757 && ( extent == rhs.extent );
11758 }
11759
11760 bool operator!=( ImageResolve const& rhs ) const
11761 {
11762 return !operator==( rhs );
11763 }
11764
11765 ImageSubresourceLayers srcSubresource;
11766 Offset3D srcOffset;
11767 ImageSubresourceLayers dstSubresource;
11768 Offset3D dstOffset;
11769 Extent3D extent;
11770 };
11771 static_assert( sizeof( ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" );
11772
11773 struct ClearAttachment
11774 {
11775 ClearAttachment( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t colorAttachment_ = 0, ClearValue clearValue_ = ClearValue() )
11776 : aspectMask( aspectMask_ )
11777 , colorAttachment( colorAttachment_ )
11778 , clearValue( clearValue_ )
11779 {
11780 }
11781
11782 ClearAttachment( VkClearAttachment const & rhs )
11783 {
11784 memcpy( this, &rhs, sizeof(ClearAttachment) );
11785 }
11786
11787 ClearAttachment& operator=( VkClearAttachment const & rhs )
11788 {
11789 memcpy( this, &rhs, sizeof(ClearAttachment) );
11790 return *this;
11791 }
11792
11793 ClearAttachment& setAspectMask( ImageAspectFlags aspectMask_ )
11794 {
11795 aspectMask = aspectMask_;
11796 return *this;
11797 }
11798
11799 ClearAttachment& setColorAttachment( uint32_t colorAttachment_ )
11800 {
11801 colorAttachment = colorAttachment_;
11802 return *this;
11803 }
11804
11805 ClearAttachment& setClearValue( ClearValue clearValue_ )
11806 {
11807 clearValue = clearValue_;
11808 return *this;
11809 }
11810
11811 operator const VkClearAttachment&() const
11812 {
11813 return *reinterpret_cast<const VkClearAttachment*>(this);
11814 }
11815
11816 ImageAspectFlags aspectMask;
11817 uint32_t colorAttachment;
11818 ClearValue clearValue;
11819 };
11820 static_assert( sizeof( ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" );
11821
11822 enum class SparseImageFormatFlagBits
11823 {
11824 eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,
11825 eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,
11826 eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
11827 };
11828
11829 using SparseImageFormatFlags = Flags<SparseImageFormatFlagBits, VkSparseImageFormatFlags>;
11830
11831 inline SparseImageFormatFlags operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 )
11832 {
11833 return SparseImageFormatFlags( bit0 ) | bit1;
11834 }
11835
11836 struct SparseImageFormatProperties
11837 {
11838 operator const VkSparseImageFormatProperties&() const
11839 {
11840 return *reinterpret_cast<const VkSparseImageFormatProperties*>(this);
11841 }
11842
11843 bool operator==( SparseImageFormatProperties const& rhs ) const
11844 {
11845 return ( aspectMask == rhs.aspectMask )
11846 && ( imageGranularity == rhs.imageGranularity )
11847 && ( flags == rhs.flags );
11848 }
11849
11850 bool operator!=( SparseImageFormatProperties const& rhs ) const
11851 {
11852 return !operator==( rhs );
11853 }
11854
11855 ImageAspectFlags aspectMask;
11856 Extent3D imageGranularity;
11857 SparseImageFormatFlags flags;
11858 };
11859 static_assert( sizeof( SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ), "struct and wrapper have different size!" );
11860
11861 struct SparseImageMemoryRequirements
11862 {
11863 operator const VkSparseImageMemoryRequirements&() const
11864 {
11865 return *reinterpret_cast<const VkSparseImageMemoryRequirements*>(this);
11866 }
11867
11868 bool operator==( SparseImageMemoryRequirements const& rhs ) const
11869 {
11870 return ( formatProperties == rhs.formatProperties )
11871 && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod )
11872 && ( imageMipTailSize == rhs.imageMipTailSize )
11873 && ( imageMipTailOffset == rhs.imageMipTailOffset )
11874 && ( imageMipTailStride == rhs.imageMipTailStride );
11875 }
11876
11877 bool operator!=( SparseImageMemoryRequirements const& rhs ) const
11878 {
11879 return !operator==( rhs );
11880 }
11881
11882 SparseImageFormatProperties formatProperties;
11883 uint32_t imageMipTailFirstLod;
11884 DeviceSize imageMipTailSize;
11885 DeviceSize imageMipTailOffset;
11886 DeviceSize imageMipTailStride;
11887 };
11888 static_assert( sizeof( SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ), "struct and wrapper have different size!" );
11889
11890 enum class SparseMemoryBindFlagBits
11891 {
11892 eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT
11893 };
11894
11895 using SparseMemoryBindFlags = Flags<SparseMemoryBindFlagBits, VkSparseMemoryBindFlags>;
11896
11897 inline SparseMemoryBindFlags operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 )
11898 {
11899 return SparseMemoryBindFlags( bit0 ) | bit1;
11900 }
11901
11902 struct SparseMemoryBind
11903 {
11904 SparseMemoryBind( DeviceSize resourceOffset_ = 0, DeviceSize size_ = 0, DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11905 : resourceOffset( resourceOffset_ )
11906 , size( size_ )
11907 , memory( memory_ )
11908 , memoryOffset( memoryOffset_ )
11909 , flags( flags_ )
11910 {
11911 }
11912
11913 SparseMemoryBind( VkSparseMemoryBind const & rhs )
11914 {
11915 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11916 }
11917
11918 SparseMemoryBind& operator=( VkSparseMemoryBind const & rhs )
11919 {
11920 memcpy( this, &rhs, sizeof(SparseMemoryBind) );
11921 return *this;
11922 }
11923
11924 SparseMemoryBind& setResourceOffset( DeviceSize resourceOffset_ )
11925 {
11926 resourceOffset = resourceOffset_;
11927 return *this;
11928 }
11929
11930 SparseMemoryBind& setSize( DeviceSize size_ )
11931 {
11932 size = size_;
11933 return *this;
11934 }
11935
11936 SparseMemoryBind& setMemory( DeviceMemory memory_ )
11937 {
11938 memory = memory_;
11939 return *this;
11940 }
11941
11942 SparseMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
11943 {
11944 memoryOffset = memoryOffset_;
11945 return *this;
11946 }
11947
11948 SparseMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
11949 {
11950 flags = flags_;
11951 return *this;
11952 }
11953
11954 operator const VkSparseMemoryBind&() const
11955 {
11956 return *reinterpret_cast<const VkSparseMemoryBind*>(this);
11957 }
11958
11959 bool operator==( SparseMemoryBind const& rhs ) const
11960 {
11961 return ( resourceOffset == rhs.resourceOffset )
11962 && ( size == rhs.size )
11963 && ( memory == rhs.memory )
11964 && ( memoryOffset == rhs.memoryOffset )
11965 && ( flags == rhs.flags );
11966 }
11967
11968 bool operator!=( SparseMemoryBind const& rhs ) const
11969 {
11970 return !operator==( rhs );
11971 }
11972
11973 DeviceSize resourceOffset;
11974 DeviceSize size;
11975 DeviceMemory memory;
11976 DeviceSize memoryOffset;
11977 SparseMemoryBindFlags flags;
11978 };
11979 static_assert( sizeof( SparseMemoryBind ) == sizeof( VkSparseMemoryBind ), "struct and wrapper have different size!" );
11980
11981 struct SparseImageMemoryBind
11982 {
11983 SparseImageMemoryBind( ImageSubresource subresource_ = ImageSubresource(), Offset3D offset_ = Offset3D(), Extent3D extent_ = Extent3D(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
11984 : subresource( subresource_ )
11985 , offset( offset_ )
11986 , extent( extent_ )
11987 , memory( memory_ )
11988 , memoryOffset( memoryOffset_ )
11989 , flags( flags_ )
11990 {
11991 }
11992
11993 SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs )
11994 {
11995 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
11996 }
11997
11998 SparseImageMemoryBind& operator=( VkSparseImageMemoryBind const & rhs )
11999 {
12000 memcpy( this, &rhs, sizeof(SparseImageMemoryBind) );
12001 return *this;
12002 }
12003
12004 SparseImageMemoryBind& setSubresource( ImageSubresource subresource_ )
12005 {
12006 subresource = subresource_;
12007 return *this;
12008 }
12009
12010 SparseImageMemoryBind& setOffset( Offset3D offset_ )
12011 {
12012 offset = offset_;
12013 return *this;
12014 }
12015
12016 SparseImageMemoryBind& setExtent( Extent3D extent_ )
12017 {
12018 extent = extent_;
12019 return *this;
12020 }
12021
12022 SparseImageMemoryBind& setMemory( DeviceMemory memory_ )
12023 {
12024 memory = memory_;
12025 return *this;
12026 }
12027
12028 SparseImageMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
12029 {
12030 memoryOffset = memoryOffset_;
12031 return *this;
12032 }
12033
12034 SparseImageMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
12035 {
12036 flags = flags_;
12037 return *this;
12038 }
12039
12040 operator const VkSparseImageMemoryBind&() const
12041 {
12042 return *reinterpret_cast<const VkSparseImageMemoryBind*>(this);
12043 }
12044
12045 bool operator==( SparseImageMemoryBind const& rhs ) const
12046 {
12047 return ( subresource == rhs.subresource )
12048 && ( offset == rhs.offset )
12049 && ( extent == rhs.extent )
12050 && ( memory == rhs.memory )
12051 && ( memoryOffset == rhs.memoryOffset )
12052 && ( flags == rhs.flags );
12053 }
12054
12055 bool operator!=( SparseImageMemoryBind const& rhs ) const
12056 {
12057 return !operator==( rhs );
12058 }
12059
12060 ImageSubresource subresource;
12061 Offset3D offset;
12062 Extent3D extent;
12063 DeviceMemory memory;
12064 DeviceSize memoryOffset;
12065 SparseMemoryBindFlags flags;
12066 };
12067 static_assert( sizeof( SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ), "struct and wrapper have different size!" );
12068
12069 struct SparseBufferMemoryBindInfo
12070 {
12071 SparseBufferMemoryBindInfo( Buffer buffer_ = Buffer(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
12072 : buffer( buffer_ )
12073 , bindCount( bindCount_ )
12074 , pBinds( pBinds_ )
12075 {
12076 }
12077
12078 SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs )
12079 {
12080 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
12081 }
12082
12083 SparseBufferMemoryBindInfo& operator=( VkSparseBufferMemoryBindInfo const & rhs )
12084 {
12085 memcpy( this, &rhs, sizeof(SparseBufferMemoryBindInfo) );
12086 return *this;
12087 }
12088
12089 SparseBufferMemoryBindInfo& setBuffer( Buffer buffer_ )
12090 {
12091 buffer = buffer_;
12092 return *this;
12093 }
12094
12095 SparseBufferMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12096 {
12097 bindCount = bindCount_;
12098 return *this;
12099 }
12100
12101 SparseBufferMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
12102 {
12103 pBinds = pBinds_;
12104 return *this;
12105 }
12106
12107 operator const VkSparseBufferMemoryBindInfo&() const
12108 {
12109 return *reinterpret_cast<const VkSparseBufferMemoryBindInfo*>(this);
12110 }
12111
12112 bool operator==( SparseBufferMemoryBindInfo const& rhs ) const
12113 {
12114 return ( buffer == rhs.buffer )
12115 && ( bindCount == rhs.bindCount )
12116 && ( pBinds == rhs.pBinds );
12117 }
12118
12119 bool operator!=( SparseBufferMemoryBindInfo const& rhs ) const
12120 {
12121 return !operator==( rhs );
12122 }
12123
12124 Buffer buffer;
12125 uint32_t bindCount;
12126 const SparseMemoryBind* pBinds;
12127 };
12128 static_assert( sizeof( SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ), "struct and wrapper have different size!" );
12129
12130 struct SparseImageOpaqueMemoryBindInfo
12131 {
12132 SparseImageOpaqueMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
12133 : image( image_ )
12134 , bindCount( bindCount_ )
12135 , pBinds( pBinds_ )
12136 {
12137 }
12138
12139 SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs )
12140 {
12141 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
12142 }
12143
12144 SparseImageOpaqueMemoryBindInfo& operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs )
12145 {
12146 memcpy( this, &rhs, sizeof(SparseImageOpaqueMemoryBindInfo) );
12147 return *this;
12148 }
12149
12150 SparseImageOpaqueMemoryBindInfo& setImage( Image image_ )
12151 {
12152 image = image_;
12153 return *this;
12154 }
12155
12156 SparseImageOpaqueMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12157 {
12158 bindCount = bindCount_;
12159 return *this;
12160 }
12161
12162 SparseImageOpaqueMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
12163 {
12164 pBinds = pBinds_;
12165 return *this;
12166 }
12167
12168 operator const VkSparseImageOpaqueMemoryBindInfo&() const
12169 {
12170 return *reinterpret_cast<const VkSparseImageOpaqueMemoryBindInfo*>(this);
12171 }
12172
12173 bool operator==( SparseImageOpaqueMemoryBindInfo const& rhs ) const
12174 {
12175 return ( image == rhs.image )
12176 && ( bindCount == rhs.bindCount )
12177 && ( pBinds == rhs.pBinds );
12178 }
12179
12180 bool operator!=( SparseImageOpaqueMemoryBindInfo const& rhs ) const
12181 {
12182 return !operator==( rhs );
12183 }
12184
12185 Image image;
12186 uint32_t bindCount;
12187 const SparseMemoryBind* pBinds;
12188 };
12189 static_assert( sizeof( SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ), "struct and wrapper have different size!" );
12190
12191 struct SparseImageMemoryBindInfo
12192 {
12193 SparseImageMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseImageMemoryBind* pBinds_ = nullptr )
12194 : image( image_ )
12195 , bindCount( bindCount_ )
12196 , pBinds( pBinds_ )
12197 {
12198 }
12199
12200 SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs )
12201 {
12202 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12203 }
12204
12205 SparseImageMemoryBindInfo& operator=( VkSparseImageMemoryBindInfo const & rhs )
12206 {
12207 memcpy( this, &rhs, sizeof(SparseImageMemoryBindInfo) );
12208 return *this;
12209 }
12210
12211 SparseImageMemoryBindInfo& setImage( Image image_ )
12212 {
12213 image = image_;
12214 return *this;
12215 }
12216
12217 SparseImageMemoryBindInfo& setBindCount( uint32_t bindCount_ )
12218 {
12219 bindCount = bindCount_;
12220 return *this;
12221 }
12222
12223 SparseImageMemoryBindInfo& setPBinds( const SparseImageMemoryBind* pBinds_ )
12224 {
12225 pBinds = pBinds_;
12226 return *this;
12227 }
12228
12229 operator const VkSparseImageMemoryBindInfo&() const
12230 {
12231 return *reinterpret_cast<const VkSparseImageMemoryBindInfo*>(this);
12232 }
12233
12234 bool operator==( SparseImageMemoryBindInfo const& rhs ) const
12235 {
12236 return ( image == rhs.image )
12237 && ( bindCount == rhs.bindCount )
12238 && ( pBinds == rhs.pBinds );
12239 }
12240
12241 bool operator!=( SparseImageMemoryBindInfo const& rhs ) const
12242 {
12243 return !operator==( rhs );
12244 }
12245
12246 Image image;
12247 uint32_t bindCount;
12248 const SparseImageMemoryBind* pBinds;
12249 };
12250 static_assert( sizeof( SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ), "struct and wrapper have different size!" );
12251
12252 struct BindSparseInfo
12253 {
12254 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 )
12255 : sType( StructureType::eBindSparseInfo )
12256 , pNext( nullptr )
12257 , waitSemaphoreCount( waitSemaphoreCount_ )
12258 , pWaitSemaphores( pWaitSemaphores_ )
12259 , bufferBindCount( bufferBindCount_ )
12260 , pBufferBinds( pBufferBinds_ )
12261 , imageOpaqueBindCount( imageOpaqueBindCount_ )
12262 , pImageOpaqueBinds( pImageOpaqueBinds_ )
12263 , imageBindCount( imageBindCount_ )
12264 , pImageBinds( pImageBinds_ )
12265 , signalSemaphoreCount( signalSemaphoreCount_ )
12266 , pSignalSemaphores( pSignalSemaphores_ )
12267 {
12268 }
12269
12270 BindSparseInfo( VkBindSparseInfo const & rhs )
12271 {
12272 memcpy( this, &rhs, sizeof(BindSparseInfo) );
12273 }
12274
12275 BindSparseInfo& operator=( VkBindSparseInfo const & rhs )
12276 {
12277 memcpy( this, &rhs, sizeof(BindSparseInfo) );
12278 return *this;
12279 }
12280
12281 BindSparseInfo& setSType( StructureType sType_ )
12282 {
12283 sType = sType_;
12284 return *this;
12285 }
12286
12287 BindSparseInfo& setPNext( const void* pNext_ )
12288 {
12289 pNext = pNext_;
12290 return *this;
12291 }
12292
12293 BindSparseInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
12294 {
12295 waitSemaphoreCount = waitSemaphoreCount_;
12296 return *this;
12297 }
12298
12299 BindSparseInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
12300 {
12301 pWaitSemaphores = pWaitSemaphores_;
12302 return *this;
12303 }
12304
12305 BindSparseInfo& setBufferBindCount( uint32_t bufferBindCount_ )
12306 {
12307 bufferBindCount = bufferBindCount_;
12308 return *this;
12309 }
12310
12311 BindSparseInfo& setPBufferBinds( const SparseBufferMemoryBindInfo* pBufferBinds_ )
12312 {
12313 pBufferBinds = pBufferBinds_;
12314 return *this;
12315 }
12316
12317 BindSparseInfo& setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ )
12318 {
12319 imageOpaqueBindCount = imageOpaqueBindCount_;
12320 return *this;
12321 }
12322
12323 BindSparseInfo& setPImageOpaqueBinds( const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds_ )
12324 {
12325 pImageOpaqueBinds = pImageOpaqueBinds_;
12326 return *this;
12327 }
12328
12329 BindSparseInfo& setImageBindCount( uint32_t imageBindCount_ )
12330 {
12331 imageBindCount = imageBindCount_;
12332 return *this;
12333 }
12334
12335 BindSparseInfo& setPImageBinds( const SparseImageMemoryBindInfo* pImageBinds_ )
12336 {
12337 pImageBinds = pImageBinds_;
12338 return *this;
12339 }
12340
12341 BindSparseInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
12342 {
12343 signalSemaphoreCount = signalSemaphoreCount_;
12344 return *this;
12345 }
12346
12347 BindSparseInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
12348 {
12349 pSignalSemaphores = pSignalSemaphores_;
12350 return *this;
12351 }
12352
12353 operator const VkBindSparseInfo&() const
12354 {
12355 return *reinterpret_cast<const VkBindSparseInfo*>(this);
12356 }
12357
12358 bool operator==( BindSparseInfo const& rhs ) const
12359 {
12360 return ( sType == rhs.sType )
12361 && ( pNext == rhs.pNext )
12362 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
12363 && ( pWaitSemaphores == rhs.pWaitSemaphores )
12364 && ( bufferBindCount == rhs.bufferBindCount )
12365 && ( pBufferBinds == rhs.pBufferBinds )
12366 && ( imageOpaqueBindCount == rhs.imageOpaqueBindCount )
12367 && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds )
12368 && ( imageBindCount == rhs.imageBindCount )
12369 && ( pImageBinds == rhs.pImageBinds )
12370 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
12371 && ( pSignalSemaphores == rhs.pSignalSemaphores );
12372 }
12373
12374 bool operator!=( BindSparseInfo const& rhs ) const
12375 {
12376 return !operator==( rhs );
12377 }
12378
12379 private:
12380 StructureType sType;
12381
12382 public:
12383 const void* pNext;
12384 uint32_t waitSemaphoreCount;
12385 const Semaphore* pWaitSemaphores;
12386 uint32_t bufferBindCount;
12387 const SparseBufferMemoryBindInfo* pBufferBinds;
12388 uint32_t imageOpaqueBindCount;
12389 const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
12390 uint32_t imageBindCount;
12391 const SparseImageMemoryBindInfo* pImageBinds;
12392 uint32_t signalSemaphoreCount;
12393 const Semaphore* pSignalSemaphores;
12394 };
12395 static_assert( sizeof( BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" );
12396
12397 enum class PipelineStageFlagBits
12398 {
12399 eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
12400 eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
12401 eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
12402 eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
12403 eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
12404 eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
12405 eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
12406 eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
12407 eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
12408 eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
12409 eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
12410 eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
12411 eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT,
12412 eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
12413 eHost = VK_PIPELINE_STAGE_HOST_BIT,
12414 eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
12415 eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
12416 };
12417
12418 using PipelineStageFlags = Flags<PipelineStageFlagBits, VkPipelineStageFlags>;
12419
12420 inline PipelineStageFlags operator|( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 )
12421 {
12422 return PipelineStageFlags( bit0 ) | bit1;
12423 }
12424
12425 enum class CommandPoolCreateFlagBits
12426 {
12427 eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,
12428 eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
12429 };
12430
12431 using CommandPoolCreateFlags = Flags<CommandPoolCreateFlagBits, VkCommandPoolCreateFlags>;
12432
12433 inline CommandPoolCreateFlags operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 )
12434 {
12435 return CommandPoolCreateFlags( bit0 ) | bit1;
12436 }
12437
12438 struct CommandPoolCreateInfo
12439 {
12440 CommandPoolCreateInfo( CommandPoolCreateFlags flags_ = CommandPoolCreateFlags(), uint32_t queueFamilyIndex_ = 0 )
12441 : sType( StructureType::eCommandPoolCreateInfo )
12442 , pNext( nullptr )
12443 , flags( flags_ )
12444 , queueFamilyIndex( queueFamilyIndex_ )
12445 {
12446 }
12447
12448 CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs )
12449 {
12450 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12451 }
12452
12453 CommandPoolCreateInfo& operator=( VkCommandPoolCreateInfo const & rhs )
12454 {
12455 memcpy( this, &rhs, sizeof(CommandPoolCreateInfo) );
12456 return *this;
12457 }
12458
12459 CommandPoolCreateInfo& setSType( StructureType sType_ )
12460 {
12461 sType = sType_;
12462 return *this;
12463 }
12464
12465 CommandPoolCreateInfo& setPNext( const void* pNext_ )
12466 {
12467 pNext = pNext_;
12468 return *this;
12469 }
12470
12471 CommandPoolCreateInfo& setFlags( CommandPoolCreateFlags flags_ )
12472 {
12473 flags = flags_;
12474 return *this;
12475 }
12476
12477 CommandPoolCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
12478 {
12479 queueFamilyIndex = queueFamilyIndex_;
12480 return *this;
12481 }
12482
12483 operator const VkCommandPoolCreateInfo&() const
12484 {
12485 return *reinterpret_cast<const VkCommandPoolCreateInfo*>(this);
12486 }
12487
12488 bool operator==( CommandPoolCreateInfo const& rhs ) const
12489 {
12490 return ( sType == rhs.sType )
12491 && ( pNext == rhs.pNext )
12492 && ( flags == rhs.flags )
12493 && ( queueFamilyIndex == rhs.queueFamilyIndex );
12494 }
12495
12496 bool operator!=( CommandPoolCreateInfo const& rhs ) const
12497 {
12498 return !operator==( rhs );
12499 }
12500
12501 private:
12502 StructureType sType;
12503
12504 public:
12505 const void* pNext;
12506 CommandPoolCreateFlags flags;
12507 uint32_t queueFamilyIndex;
12508 };
12509 static_assert( sizeof( CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ), "struct and wrapper have different size!" );
12510
12511 enum class CommandPoolResetFlagBits
12512 {
12513 eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
12514 };
12515
12516 using CommandPoolResetFlags = Flags<CommandPoolResetFlagBits, VkCommandPoolResetFlags>;
12517
12518 inline CommandPoolResetFlags operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 )
12519 {
12520 return CommandPoolResetFlags( bit0 ) | bit1;
12521 }
12522
12523 enum class CommandBufferResetFlagBits
12524 {
12525 eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
12526 };
12527
12528 using CommandBufferResetFlags = Flags<CommandBufferResetFlagBits, VkCommandBufferResetFlags>;
12529
12530 inline CommandBufferResetFlags operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 )
12531 {
12532 return CommandBufferResetFlags( bit0 ) | bit1;
12533 }
12534
12535 enum class SampleCountFlagBits
12536 {
12537 e1 = VK_SAMPLE_COUNT_1_BIT,
12538 e2 = VK_SAMPLE_COUNT_2_BIT,
12539 e4 = VK_SAMPLE_COUNT_4_BIT,
12540 e8 = VK_SAMPLE_COUNT_8_BIT,
12541 e16 = VK_SAMPLE_COUNT_16_BIT,
12542 e32 = VK_SAMPLE_COUNT_32_BIT,
12543 e64 = VK_SAMPLE_COUNT_64_BIT
12544 };
12545
12546 using SampleCountFlags = Flags<SampleCountFlagBits, VkSampleCountFlags>;
12547
12548 inline SampleCountFlags operator|( SampleCountFlagBits bit0, SampleCountFlagBits bit1 )
12549 {
12550 return SampleCountFlags( bit0 ) | bit1;
12551 }
12552
12553 struct ImageFormatProperties
12554 {
12555 operator const VkImageFormatProperties&() const
12556 {
12557 return *reinterpret_cast<const VkImageFormatProperties*>(this);
12558 }
12559
12560 bool operator==( ImageFormatProperties const& rhs ) const
12561 {
12562 return ( maxExtent == rhs.maxExtent )
12563 && ( maxMipLevels == rhs.maxMipLevels )
12564 && ( maxArrayLayers == rhs.maxArrayLayers )
12565 && ( sampleCounts == rhs.sampleCounts )
12566 && ( maxResourceSize == rhs.maxResourceSize );
12567 }
12568
12569 bool operator!=( ImageFormatProperties const& rhs ) const
12570 {
12571 return !operator==( rhs );
12572 }
12573
12574 Extent3D maxExtent;
12575 uint32_t maxMipLevels;
12576 uint32_t maxArrayLayers;
12577 SampleCountFlags sampleCounts;
12578 DeviceSize maxResourceSize;
12579 };
12580 static_assert( sizeof( ImageFormatProperties ) == sizeof( VkImageFormatProperties ), "struct and wrapper have different size!" );
12581
12582 struct ImageCreateInfo
12583 {
12584 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 )
12585 : sType( StructureType::eImageCreateInfo )
12586 , pNext( nullptr )
12587 , flags( flags_ )
12588 , imageType( imageType_ )
12589 , format( format_ )
12590 , extent( extent_ )
12591 , mipLevels( mipLevels_ )
12592 , arrayLayers( arrayLayers_ )
12593 , samples( samples_ )
12594 , tiling( tiling_ )
12595 , usage( usage_ )
12596 , sharingMode( sharingMode_ )
12597 , queueFamilyIndexCount( queueFamilyIndexCount_ )
12598 , pQueueFamilyIndices( pQueueFamilyIndices_ )
12599 , initialLayout( initialLayout_ )
12600 {
12601 }
12602
12603 ImageCreateInfo( VkImageCreateInfo const & rhs )
12604 {
12605 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12606 }
12607
12608 ImageCreateInfo& operator=( VkImageCreateInfo const & rhs )
12609 {
12610 memcpy( this, &rhs, sizeof(ImageCreateInfo) );
12611 return *this;
12612 }
12613
12614 ImageCreateInfo& setSType( StructureType sType_ )
12615 {
12616 sType = sType_;
12617 return *this;
12618 }
12619
12620 ImageCreateInfo& setPNext( const void* pNext_ )
12621 {
12622 pNext = pNext_;
12623 return *this;
12624 }
12625
12626 ImageCreateInfo& setFlags( ImageCreateFlags flags_ )
12627 {
12628 flags = flags_;
12629 return *this;
12630 }
12631
12632 ImageCreateInfo& setImageType( ImageType imageType_ )
12633 {
12634 imageType = imageType_;
12635 return *this;
12636 }
12637
12638 ImageCreateInfo& setFormat( Format format_ )
12639 {
12640 format = format_;
12641 return *this;
12642 }
12643
12644 ImageCreateInfo& setExtent( Extent3D extent_ )
12645 {
12646 extent = extent_;
12647 return *this;
12648 }
12649
12650 ImageCreateInfo& setMipLevels( uint32_t mipLevels_ )
12651 {
12652 mipLevels = mipLevels_;
12653 return *this;
12654 }
12655
12656 ImageCreateInfo& setArrayLayers( uint32_t arrayLayers_ )
12657 {
12658 arrayLayers = arrayLayers_;
12659 return *this;
12660 }
12661
12662 ImageCreateInfo& setSamples( SampleCountFlagBits samples_ )
12663 {
12664 samples = samples_;
12665 return *this;
12666 }
12667
12668 ImageCreateInfo& setTiling( ImageTiling tiling_ )
12669 {
12670 tiling = tiling_;
12671 return *this;
12672 }
12673
12674 ImageCreateInfo& setUsage( ImageUsageFlags usage_ )
12675 {
12676 usage = usage_;
12677 return *this;
12678 }
12679
12680 ImageCreateInfo& setSharingMode( SharingMode sharingMode_ )
12681 {
12682 sharingMode = sharingMode_;
12683 return *this;
12684 }
12685
12686 ImageCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
12687 {
12688 queueFamilyIndexCount = queueFamilyIndexCount_;
12689 return *this;
12690 }
12691
12692 ImageCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
12693 {
12694 pQueueFamilyIndices = pQueueFamilyIndices_;
12695 return *this;
12696 }
12697
12698 ImageCreateInfo& setInitialLayout( ImageLayout initialLayout_ )
12699 {
12700 initialLayout = initialLayout_;
12701 return *this;
12702 }
12703
12704 operator const VkImageCreateInfo&() const
12705 {
12706 return *reinterpret_cast<const VkImageCreateInfo*>(this);
12707 }
12708
12709 bool operator==( ImageCreateInfo const& rhs ) const
12710 {
12711 return ( sType == rhs.sType )
12712 && ( pNext == rhs.pNext )
12713 && ( flags == rhs.flags )
12714 && ( imageType == rhs.imageType )
12715 && ( format == rhs.format )
12716 && ( extent == rhs.extent )
12717 && ( mipLevels == rhs.mipLevels )
12718 && ( arrayLayers == rhs.arrayLayers )
12719 && ( samples == rhs.samples )
12720 && ( tiling == rhs.tiling )
12721 && ( usage == rhs.usage )
12722 && ( sharingMode == rhs.sharingMode )
12723 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
12724 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
12725 && ( initialLayout == rhs.initialLayout );
12726 }
12727
12728 bool operator!=( ImageCreateInfo const& rhs ) const
12729 {
12730 return !operator==( rhs );
12731 }
12732
12733 private:
12734 StructureType sType;
12735
12736 public:
12737 const void* pNext;
12738 ImageCreateFlags flags;
12739 ImageType imageType;
12740 Format format;
12741 Extent3D extent;
12742 uint32_t mipLevels;
12743 uint32_t arrayLayers;
12744 SampleCountFlagBits samples;
12745 ImageTiling tiling;
12746 ImageUsageFlags usage;
12747 SharingMode sharingMode;
12748 uint32_t queueFamilyIndexCount;
12749 const uint32_t* pQueueFamilyIndices;
12750 ImageLayout initialLayout;
12751 };
12752 static_assert( sizeof( ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" );
12753
12754 struct PipelineMultisampleStateCreateInfo
12755 {
12756 PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateFlags flags_ = PipelineMultisampleStateCreateFlags(), SampleCountFlagBits rasterizationSamples_ = SampleCountFlagBits::e1, Bool32 sampleShadingEnable_ = 0, float minSampleShading_ = 0, const SampleMask* pSampleMask_ = nullptr, Bool32 alphaToCoverageEnable_ = 0, Bool32 alphaToOneEnable_ = 0 )
12757 : sType( StructureType::ePipelineMultisampleStateCreateInfo )
12758 , pNext( nullptr )
12759 , flags( flags_ )
12760 , rasterizationSamples( rasterizationSamples_ )
12761 , sampleShadingEnable( sampleShadingEnable_ )
12762 , minSampleShading( minSampleShading_ )
12763 , pSampleMask( pSampleMask_ )
12764 , alphaToCoverageEnable( alphaToCoverageEnable_ )
12765 , alphaToOneEnable( alphaToOneEnable_ )
12766 {
12767 }
12768
12769 PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs )
12770 {
12771 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12772 }
12773
12774 PipelineMultisampleStateCreateInfo& operator=( VkPipelineMultisampleStateCreateInfo const & rhs )
12775 {
12776 memcpy( this, &rhs, sizeof(PipelineMultisampleStateCreateInfo) );
12777 return *this;
12778 }
12779
12780 PipelineMultisampleStateCreateInfo& setSType( StructureType sType_ )
12781 {
12782 sType = sType_;
12783 return *this;
12784 }
12785
12786 PipelineMultisampleStateCreateInfo& setPNext( const void* pNext_ )
12787 {
12788 pNext = pNext_;
12789 return *this;
12790 }
12791
12792 PipelineMultisampleStateCreateInfo& setFlags( PipelineMultisampleStateCreateFlags flags_ )
12793 {
12794 flags = flags_;
12795 return *this;
12796 }
12797
12798 PipelineMultisampleStateCreateInfo& setRasterizationSamples( SampleCountFlagBits rasterizationSamples_ )
12799 {
12800 rasterizationSamples = rasterizationSamples_;
12801 return *this;
12802 }
12803
12804 PipelineMultisampleStateCreateInfo& setSampleShadingEnable( Bool32 sampleShadingEnable_ )
12805 {
12806 sampleShadingEnable = sampleShadingEnable_;
12807 return *this;
12808 }
12809
12810 PipelineMultisampleStateCreateInfo& setMinSampleShading( float minSampleShading_ )
12811 {
12812 minSampleShading = minSampleShading_;
12813 return *this;
12814 }
12815
12816 PipelineMultisampleStateCreateInfo& setPSampleMask( const SampleMask* pSampleMask_ )
12817 {
12818 pSampleMask = pSampleMask_;
12819 return *this;
12820 }
12821
12822 PipelineMultisampleStateCreateInfo& setAlphaToCoverageEnable( Bool32 alphaToCoverageEnable_ )
12823 {
12824 alphaToCoverageEnable = alphaToCoverageEnable_;
12825 return *this;
12826 }
12827
12828 PipelineMultisampleStateCreateInfo& setAlphaToOneEnable( Bool32 alphaToOneEnable_ )
12829 {
12830 alphaToOneEnable = alphaToOneEnable_;
12831 return *this;
12832 }
12833
12834 operator const VkPipelineMultisampleStateCreateInfo&() const
12835 {
12836 return *reinterpret_cast<const VkPipelineMultisampleStateCreateInfo*>(this);
12837 }
12838
12839 bool operator==( PipelineMultisampleStateCreateInfo const& rhs ) const
12840 {
12841 return ( sType == rhs.sType )
12842 && ( pNext == rhs.pNext )
12843 && ( flags == rhs.flags )
12844 && ( rasterizationSamples == rhs.rasterizationSamples )
12845 && ( sampleShadingEnable == rhs.sampleShadingEnable )
12846 && ( minSampleShading == rhs.minSampleShading )
12847 && ( pSampleMask == rhs.pSampleMask )
12848 && ( alphaToCoverageEnable == rhs.alphaToCoverageEnable )
12849 && ( alphaToOneEnable == rhs.alphaToOneEnable );
12850 }
12851
12852 bool operator!=( PipelineMultisampleStateCreateInfo const& rhs ) const
12853 {
12854 return !operator==( rhs );
12855 }
12856
12857 private:
12858 StructureType sType;
12859
12860 public:
12861 const void* pNext;
12862 PipelineMultisampleStateCreateFlags flags;
12863 SampleCountFlagBits rasterizationSamples;
12864 Bool32 sampleShadingEnable;
12865 float minSampleShading;
12866 const SampleMask* pSampleMask;
12867 Bool32 alphaToCoverageEnable;
12868 Bool32 alphaToOneEnable;
12869 };
12870 static_assert( sizeof( PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ), "struct and wrapper have different size!" );
12871
12872 struct GraphicsPipelineCreateInfo
12873 {
12874 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 )
12875 : sType( StructureType::eGraphicsPipelineCreateInfo )
12876 , pNext( nullptr )
12877 , flags( flags_ )
12878 , stageCount( stageCount_ )
12879 , pStages( pStages_ )
12880 , pVertexInputState( pVertexInputState_ )
12881 , pInputAssemblyState( pInputAssemblyState_ )
12882 , pTessellationState( pTessellationState_ )
12883 , pViewportState( pViewportState_ )
12884 , pRasterizationState( pRasterizationState_ )
12885 , pMultisampleState( pMultisampleState_ )
12886 , pDepthStencilState( pDepthStencilState_ )
12887 , pColorBlendState( pColorBlendState_ )
12888 , pDynamicState( pDynamicState_ )
12889 , layout( layout_ )
12890 , renderPass( renderPass_ )
12891 , subpass( subpass_ )
12892 , basePipelineHandle( basePipelineHandle_ )
12893 , basePipelineIndex( basePipelineIndex_ )
12894 {
12895 }
12896
12897 GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs )
12898 {
12899 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12900 }
12901
12902 GraphicsPipelineCreateInfo& operator=( VkGraphicsPipelineCreateInfo const & rhs )
12903 {
12904 memcpy( this, &rhs, sizeof(GraphicsPipelineCreateInfo) );
12905 return *this;
12906 }
12907
12908 GraphicsPipelineCreateInfo& setSType( StructureType sType_ )
12909 {
12910 sType = sType_;
12911 return *this;
12912 }
12913
12914 GraphicsPipelineCreateInfo& setPNext( const void* pNext_ )
12915 {
12916 pNext = pNext_;
12917 return *this;
12918 }
12919
12920 GraphicsPipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
12921 {
12922 flags = flags_;
12923 return *this;
12924 }
12925
12926 GraphicsPipelineCreateInfo& setStageCount( uint32_t stageCount_ )
12927 {
12928 stageCount = stageCount_;
12929 return *this;
12930 }
12931
12932 GraphicsPipelineCreateInfo& setPStages( const PipelineShaderStageCreateInfo* pStages_ )
12933 {
12934 pStages = pStages_;
12935 return *this;
12936 }
12937
12938 GraphicsPipelineCreateInfo& setPVertexInputState( const PipelineVertexInputStateCreateInfo* pVertexInputState_ )
12939 {
12940 pVertexInputState = pVertexInputState_;
12941 return *this;
12942 }
12943
12944 GraphicsPipelineCreateInfo& setPInputAssemblyState( const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState_ )
12945 {
12946 pInputAssemblyState = pInputAssemblyState_;
12947 return *this;
12948 }
12949
12950 GraphicsPipelineCreateInfo& setPTessellationState( const PipelineTessellationStateCreateInfo* pTessellationState_ )
12951 {
12952 pTessellationState = pTessellationState_;
12953 return *this;
12954 }
12955
12956 GraphicsPipelineCreateInfo& setPViewportState( const PipelineViewportStateCreateInfo* pViewportState_ )
12957 {
12958 pViewportState = pViewportState_;
12959 return *this;
12960 }
12961
12962 GraphicsPipelineCreateInfo& setPRasterizationState( const PipelineRasterizationStateCreateInfo* pRasterizationState_ )
12963 {
12964 pRasterizationState = pRasterizationState_;
12965 return *this;
12966 }
12967
12968 GraphicsPipelineCreateInfo& setPMultisampleState( const PipelineMultisampleStateCreateInfo* pMultisampleState_ )
12969 {
12970 pMultisampleState = pMultisampleState_;
12971 return *this;
12972 }
12973
12974 GraphicsPipelineCreateInfo& setPDepthStencilState( const PipelineDepthStencilStateCreateInfo* pDepthStencilState_ )
12975 {
12976 pDepthStencilState = pDepthStencilState_;
12977 return *this;
12978 }
12979
12980 GraphicsPipelineCreateInfo& setPColorBlendState( const PipelineColorBlendStateCreateInfo* pColorBlendState_ )
12981 {
12982 pColorBlendState = pColorBlendState_;
12983 return *this;
12984 }
12985
12986 GraphicsPipelineCreateInfo& setPDynamicState( const PipelineDynamicStateCreateInfo* pDynamicState_ )
12987 {
12988 pDynamicState = pDynamicState_;
12989 return *this;
12990 }
12991
12992 GraphicsPipelineCreateInfo& setLayout( PipelineLayout layout_ )
12993 {
12994 layout = layout_;
12995 return *this;
12996 }
12997
12998 GraphicsPipelineCreateInfo& setRenderPass( RenderPass renderPass_ )
12999 {
13000 renderPass = renderPass_;
13001 return *this;
13002 }
13003
13004 GraphicsPipelineCreateInfo& setSubpass( uint32_t subpass_ )
13005 {
13006 subpass = subpass_;
13007 return *this;
13008 }
13009
13010 GraphicsPipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
13011 {
13012 basePipelineHandle = basePipelineHandle_;
13013 return *this;
13014 }
13015
13016 GraphicsPipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
13017 {
13018 basePipelineIndex = basePipelineIndex_;
13019 return *this;
13020 }
13021
13022 operator const VkGraphicsPipelineCreateInfo&() const
13023 {
13024 return *reinterpret_cast<const VkGraphicsPipelineCreateInfo*>(this);
13025 }
13026
13027 bool operator==( GraphicsPipelineCreateInfo const& rhs ) const
13028 {
13029 return ( sType == rhs.sType )
13030 && ( pNext == rhs.pNext )
13031 && ( flags == rhs.flags )
13032 && ( stageCount == rhs.stageCount )
13033 && ( pStages == rhs.pStages )
13034 && ( pVertexInputState == rhs.pVertexInputState )
13035 && ( pInputAssemblyState == rhs.pInputAssemblyState )
13036 && ( pTessellationState == rhs.pTessellationState )
13037 && ( pViewportState == rhs.pViewportState )
13038 && ( pRasterizationState == rhs.pRasterizationState )
13039 && ( pMultisampleState == rhs.pMultisampleState )
13040 && ( pDepthStencilState == rhs.pDepthStencilState )
13041 && ( pColorBlendState == rhs.pColorBlendState )
13042 && ( pDynamicState == rhs.pDynamicState )
13043 && ( layout == rhs.layout )
13044 && ( renderPass == rhs.renderPass )
13045 && ( subpass == rhs.subpass )
13046 && ( basePipelineHandle == rhs.basePipelineHandle )
13047 && ( basePipelineIndex == rhs.basePipelineIndex );
13048 }
13049
13050 bool operator!=( GraphicsPipelineCreateInfo const& rhs ) const
13051 {
13052 return !operator==( rhs );
13053 }
13054
13055 private:
13056 StructureType sType;
13057
13058 public:
13059 const void* pNext;
13060 PipelineCreateFlags flags;
13061 uint32_t stageCount;
13062 const PipelineShaderStageCreateInfo* pStages;
13063 const PipelineVertexInputStateCreateInfo* pVertexInputState;
13064 const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
13065 const PipelineTessellationStateCreateInfo* pTessellationState;
13066 const PipelineViewportStateCreateInfo* pViewportState;
13067 const PipelineRasterizationStateCreateInfo* pRasterizationState;
13068 const PipelineMultisampleStateCreateInfo* pMultisampleState;
13069 const PipelineDepthStencilStateCreateInfo* pDepthStencilState;
13070 const PipelineColorBlendStateCreateInfo* pColorBlendState;
13071 const PipelineDynamicStateCreateInfo* pDynamicState;
13072 PipelineLayout layout;
13073 RenderPass renderPass;
13074 uint32_t subpass;
13075 Pipeline basePipelineHandle;
13076 int32_t basePipelineIndex;
13077 };
13078 static_assert( sizeof( GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ), "struct and wrapper have different size!" );
13079
13080 struct PhysicalDeviceLimits
13081 {
13082 operator const VkPhysicalDeviceLimits&() const
13083 {
13084 return *reinterpret_cast<const VkPhysicalDeviceLimits*>(this);
13085 }
13086
13087 bool operator==( PhysicalDeviceLimits const& rhs ) const
13088 {
13089 return ( maxImageDimension1D == rhs.maxImageDimension1D )
13090 && ( maxImageDimension2D == rhs.maxImageDimension2D )
13091 && ( maxImageDimension3D == rhs.maxImageDimension3D )
13092 && ( maxImageDimensionCube == rhs.maxImageDimensionCube )
13093 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
13094 && ( maxTexelBufferElements == rhs.maxTexelBufferElements )
13095 && ( maxUniformBufferRange == rhs.maxUniformBufferRange )
13096 && ( maxStorageBufferRange == rhs.maxStorageBufferRange )
13097 && ( maxPushConstantsSize == rhs.maxPushConstantsSize )
13098 && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount )
13099 && ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount )
13100 && ( bufferImageGranularity == rhs.bufferImageGranularity )
13101 && ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize )
13102 && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets )
13103 && ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers )
13104 && ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers )
13105 && ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers )
13106 && ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages )
13107 && ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages )
13108 && ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments )
13109 && ( maxPerStageResources == rhs.maxPerStageResources )
13110 && ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers )
13111 && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers )
13112 && ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic )
13113 && ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers )
13114 && ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic )
13115 && ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages )
13116 && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages )
13117 && ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments )
13118 && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes )
13119 && ( maxVertexInputBindings == rhs.maxVertexInputBindings )
13120 && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset )
13121 && ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride )
13122 && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents )
13123 && ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel )
13124 && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize )
13125 && ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents )
13126 && ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents )
13127 && ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents )
13128 && ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents )
13129 && ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents )
13130 && ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents )
13131 && ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations )
13132 && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents )
13133 && ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents )
13134 && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices )
13135 && ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents )
13136 && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents )
13137 && ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments )
13138 && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments )
13139 && ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources )
13140 && ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize )
13141 && ( memcmp( maxComputeWorkGroupCount, rhs.maxComputeWorkGroupCount, 3 * sizeof( uint32_t ) ) == 0 )
13142 && ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations )
13143 && ( memcmp( maxComputeWorkGroupSize, rhs.maxComputeWorkGroupSize, 3 * sizeof( uint32_t ) ) == 0 )
13144 && ( subPixelPrecisionBits == rhs.subPixelPrecisionBits )
13145 && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits )
13146 && ( mipmapPrecisionBits == rhs.mipmapPrecisionBits )
13147 && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue )
13148 && ( maxDrawIndirectCount == rhs.maxDrawIndirectCount )
13149 && ( maxSamplerLodBias == rhs.maxSamplerLodBias )
13150 && ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy )
13151 && ( maxViewports == rhs.maxViewports )
13152 && ( memcmp( maxViewportDimensions, rhs.maxViewportDimensions, 2 * sizeof( uint32_t ) ) == 0 )
13153 && ( memcmp( viewportBoundsRange, rhs.viewportBoundsRange, 2 * sizeof( float ) ) == 0 )
13154 && ( viewportSubPixelBits == rhs.viewportSubPixelBits )
13155 && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment )
13156 && ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment )
13157 && ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment )
13158 && ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment )
13159 && ( minTexelOffset == rhs.minTexelOffset )
13160 && ( maxTexelOffset == rhs.maxTexelOffset )
13161 && ( minTexelGatherOffset == rhs.minTexelGatherOffset )
13162 && ( maxTexelGatherOffset == rhs.maxTexelGatherOffset )
13163 && ( minInterpolationOffset == rhs.minInterpolationOffset )
13164 && ( maxInterpolationOffset == rhs.maxInterpolationOffset )
13165 && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits )
13166 && ( maxFramebufferWidth == rhs.maxFramebufferWidth )
13167 && ( maxFramebufferHeight == rhs.maxFramebufferHeight )
13168 && ( maxFramebufferLayers == rhs.maxFramebufferLayers )
13169 && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts )
13170 && ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts )
13171 && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts )
13172 && ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts )
13173 && ( maxColorAttachments == rhs.maxColorAttachments )
13174 && ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts )
13175 && ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts )
13176 && ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts )
13177 && ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts )
13178 && ( storageImageSampleCounts == rhs.storageImageSampleCounts )
13179 && ( maxSampleMaskWords == rhs.maxSampleMaskWords )
13180 && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics )
13181 && ( timestampPeriod == rhs.timestampPeriod )
13182 && ( maxClipDistances == rhs.maxClipDistances )
13183 && ( maxCullDistances == rhs.maxCullDistances )
13184 && ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances )
13185 && ( discreteQueuePriorities == rhs.discreteQueuePriorities )
13186 && ( memcmp( pointSizeRange, rhs.pointSizeRange, 2 * sizeof( float ) ) == 0 )
13187 && ( memcmp( lineWidthRange, rhs.lineWidthRange, 2 * sizeof( float ) ) == 0 )
13188 && ( pointSizeGranularity == rhs.pointSizeGranularity )
13189 && ( lineWidthGranularity == rhs.lineWidthGranularity )
13190 && ( strictLines == rhs.strictLines )
13191 && ( standardSampleLocations == rhs.standardSampleLocations )
13192 && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment )
13193 && ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment )
13194 && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize );
13195 }
13196
13197 bool operator!=( PhysicalDeviceLimits const& rhs ) const
13198 {
13199 return !operator==( rhs );
13200 }
13201
13202 uint32_t maxImageDimension1D;
13203 uint32_t maxImageDimension2D;
13204 uint32_t maxImageDimension3D;
13205 uint32_t maxImageDimensionCube;
13206 uint32_t maxImageArrayLayers;
13207 uint32_t maxTexelBufferElements;
13208 uint32_t maxUniformBufferRange;
13209 uint32_t maxStorageBufferRange;
13210 uint32_t maxPushConstantsSize;
13211 uint32_t maxMemoryAllocationCount;
13212 uint32_t maxSamplerAllocationCount;
13213 DeviceSize bufferImageGranularity;
13214 DeviceSize sparseAddressSpaceSize;
13215 uint32_t maxBoundDescriptorSets;
13216 uint32_t maxPerStageDescriptorSamplers;
13217 uint32_t maxPerStageDescriptorUniformBuffers;
13218 uint32_t maxPerStageDescriptorStorageBuffers;
13219 uint32_t maxPerStageDescriptorSampledImages;
13220 uint32_t maxPerStageDescriptorStorageImages;
13221 uint32_t maxPerStageDescriptorInputAttachments;
13222 uint32_t maxPerStageResources;
13223 uint32_t maxDescriptorSetSamplers;
13224 uint32_t maxDescriptorSetUniformBuffers;
13225 uint32_t maxDescriptorSetUniformBuffersDynamic;
13226 uint32_t maxDescriptorSetStorageBuffers;
13227 uint32_t maxDescriptorSetStorageBuffersDynamic;
13228 uint32_t maxDescriptorSetSampledImages;
13229 uint32_t maxDescriptorSetStorageImages;
13230 uint32_t maxDescriptorSetInputAttachments;
13231 uint32_t maxVertexInputAttributes;
13232 uint32_t maxVertexInputBindings;
13233 uint32_t maxVertexInputAttributeOffset;
13234 uint32_t maxVertexInputBindingStride;
13235 uint32_t maxVertexOutputComponents;
13236 uint32_t maxTessellationGenerationLevel;
13237 uint32_t maxTessellationPatchSize;
13238 uint32_t maxTessellationControlPerVertexInputComponents;
13239 uint32_t maxTessellationControlPerVertexOutputComponents;
13240 uint32_t maxTessellationControlPerPatchOutputComponents;
13241 uint32_t maxTessellationControlTotalOutputComponents;
13242 uint32_t maxTessellationEvaluationInputComponents;
13243 uint32_t maxTessellationEvaluationOutputComponents;
13244 uint32_t maxGeometryShaderInvocations;
13245 uint32_t maxGeometryInputComponents;
13246 uint32_t maxGeometryOutputComponents;
13247 uint32_t maxGeometryOutputVertices;
13248 uint32_t maxGeometryTotalOutputComponents;
13249 uint32_t maxFragmentInputComponents;
13250 uint32_t maxFragmentOutputAttachments;
13251 uint32_t maxFragmentDualSrcAttachments;
13252 uint32_t maxFragmentCombinedOutputResources;
13253 uint32_t maxComputeSharedMemorySize;
13254 uint32_t maxComputeWorkGroupCount[3];
13255 uint32_t maxComputeWorkGroupInvocations;
13256 uint32_t maxComputeWorkGroupSize[3];
13257 uint32_t subPixelPrecisionBits;
13258 uint32_t subTexelPrecisionBits;
13259 uint32_t mipmapPrecisionBits;
13260 uint32_t maxDrawIndexedIndexValue;
13261 uint32_t maxDrawIndirectCount;
13262 float maxSamplerLodBias;
13263 float maxSamplerAnisotropy;
13264 uint32_t maxViewports;
13265 uint32_t maxViewportDimensions[2];
13266 float viewportBoundsRange[2];
13267 uint32_t viewportSubPixelBits;
13268 size_t minMemoryMapAlignment;
13269 DeviceSize minTexelBufferOffsetAlignment;
13270 DeviceSize minUniformBufferOffsetAlignment;
13271 DeviceSize minStorageBufferOffsetAlignment;
13272 int32_t minTexelOffset;
13273 uint32_t maxTexelOffset;
13274 int32_t minTexelGatherOffset;
13275 uint32_t maxTexelGatherOffset;
13276 float minInterpolationOffset;
13277 float maxInterpolationOffset;
13278 uint32_t subPixelInterpolationOffsetBits;
13279 uint32_t maxFramebufferWidth;
13280 uint32_t maxFramebufferHeight;
13281 uint32_t maxFramebufferLayers;
13282 SampleCountFlags framebufferColorSampleCounts;
13283 SampleCountFlags framebufferDepthSampleCounts;
13284 SampleCountFlags framebufferStencilSampleCounts;
13285 SampleCountFlags framebufferNoAttachmentsSampleCounts;
13286 uint32_t maxColorAttachments;
13287 SampleCountFlags sampledImageColorSampleCounts;
13288 SampleCountFlags sampledImageIntegerSampleCounts;
13289 SampleCountFlags sampledImageDepthSampleCounts;
13290 SampleCountFlags sampledImageStencilSampleCounts;
13291 SampleCountFlags storageImageSampleCounts;
13292 uint32_t maxSampleMaskWords;
13293 Bool32 timestampComputeAndGraphics;
13294 float timestampPeriod;
13295 uint32_t maxClipDistances;
13296 uint32_t maxCullDistances;
13297 uint32_t maxCombinedClipAndCullDistances;
13298 uint32_t discreteQueuePriorities;
13299 float pointSizeRange[2];
13300 float lineWidthRange[2];
13301 float pointSizeGranularity;
13302 float lineWidthGranularity;
13303 Bool32 strictLines;
13304 Bool32 standardSampleLocations;
13305 DeviceSize optimalBufferCopyOffsetAlignment;
13306 DeviceSize optimalBufferCopyRowPitchAlignment;
13307 DeviceSize nonCoherentAtomSize;
13308 };
13309 static_assert( sizeof( PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ), "struct and wrapper have different size!" );
13310
13311 struct PhysicalDeviceProperties
13312 {
13313 operator const VkPhysicalDeviceProperties&() const
13314 {
13315 return *reinterpret_cast<const VkPhysicalDeviceProperties*>(this);
13316 }
13317
13318 bool operator==( PhysicalDeviceProperties const& rhs ) const
13319 {
13320 return ( apiVersion == rhs.apiVersion )
13321 && ( driverVersion == rhs.driverVersion )
13322 && ( vendorID == rhs.vendorID )
13323 && ( deviceID == rhs.deviceID )
13324 && ( deviceType == rhs.deviceType )
13325 && ( memcmp( deviceName, rhs.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof( char ) ) == 0 )
13326 && ( memcmp( pipelineCacheUUID, rhs.pipelineCacheUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
13327 && ( limits == rhs.limits )
13328 && ( sparseProperties == rhs.sparseProperties );
13329 }
13330
13331 bool operator!=( PhysicalDeviceProperties const& rhs ) const
13332 {
13333 return !operator==( rhs );
13334 }
13335
13336 uint32_t apiVersion;
13337 uint32_t driverVersion;
13338 uint32_t vendorID;
13339 uint32_t deviceID;
13340 PhysicalDeviceType deviceType;
13341 char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
13342 uint8_t pipelineCacheUUID[VK_UUID_SIZE];
13343 PhysicalDeviceLimits limits;
13344 PhysicalDeviceSparseProperties sparseProperties;
13345 };
13346 static_assert( sizeof( PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ), "struct and wrapper have different size!" );
13347
13348 enum class AttachmentDescriptionFlagBits
13349 {
13350 eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
13351 };
13352
13353 using AttachmentDescriptionFlags = Flags<AttachmentDescriptionFlagBits, VkAttachmentDescriptionFlags>;
13354
13355 inline AttachmentDescriptionFlags operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 )
13356 {
13357 return AttachmentDescriptionFlags( bit0 ) | bit1;
13358 }
13359
13360 struct AttachmentDescription
13361 {
13362 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 )
13363 : flags( flags_ )
13364 , format( format_ )
13365 , samples( samples_ )
13366 , loadOp( loadOp_ )
13367 , storeOp( storeOp_ )
13368 , stencilLoadOp( stencilLoadOp_ )
13369 , stencilStoreOp( stencilStoreOp_ )
13370 , initialLayout( initialLayout_ )
13371 , finalLayout( finalLayout_ )
13372 {
13373 }
13374
13375 AttachmentDescription( VkAttachmentDescription const & rhs )
13376 {
13377 memcpy( this, &rhs, sizeof(AttachmentDescription) );
13378 }
13379
13380 AttachmentDescription& operator=( VkAttachmentDescription const & rhs )
13381 {
13382 memcpy( this, &rhs, sizeof(AttachmentDescription) );
13383 return *this;
13384 }
13385
13386 AttachmentDescription& setFlags( AttachmentDescriptionFlags flags_ )
13387 {
13388 flags = flags_;
13389 return *this;
13390 }
13391
13392 AttachmentDescription& setFormat( Format format_ )
13393 {
13394 format = format_;
13395 return *this;
13396 }
13397
13398 AttachmentDescription& setSamples( SampleCountFlagBits samples_ )
13399 {
13400 samples = samples_;
13401 return *this;
13402 }
13403
13404 AttachmentDescription& setLoadOp( AttachmentLoadOp loadOp_ )
13405 {
13406 loadOp = loadOp_;
13407 return *this;
13408 }
13409
13410 AttachmentDescription& setStoreOp( AttachmentStoreOp storeOp_ )
13411 {
13412 storeOp = storeOp_;
13413 return *this;
13414 }
13415
13416 AttachmentDescription& setStencilLoadOp( AttachmentLoadOp stencilLoadOp_ )
13417 {
13418 stencilLoadOp = stencilLoadOp_;
13419 return *this;
13420 }
13421
13422 AttachmentDescription& setStencilStoreOp( AttachmentStoreOp stencilStoreOp_ )
13423 {
13424 stencilStoreOp = stencilStoreOp_;
13425 return *this;
13426 }
13427
13428 AttachmentDescription& setInitialLayout( ImageLayout initialLayout_ )
13429 {
13430 initialLayout = initialLayout_;
13431 return *this;
13432 }
13433
13434 AttachmentDescription& setFinalLayout( ImageLayout finalLayout_ )
13435 {
13436 finalLayout = finalLayout_;
13437 return *this;
13438 }
13439
13440 operator const VkAttachmentDescription&() const
13441 {
13442 return *reinterpret_cast<const VkAttachmentDescription*>(this);
13443 }
13444
13445 bool operator==( AttachmentDescription const& rhs ) const
13446 {
13447 return ( flags == rhs.flags )
13448 && ( format == rhs.format )
13449 && ( samples == rhs.samples )
13450 && ( loadOp == rhs.loadOp )
13451 && ( storeOp == rhs.storeOp )
13452 && ( stencilLoadOp == rhs.stencilLoadOp )
13453 && ( stencilStoreOp == rhs.stencilStoreOp )
13454 && ( initialLayout == rhs.initialLayout )
13455 && ( finalLayout == rhs.finalLayout );
13456 }
13457
13458 bool operator!=( AttachmentDescription const& rhs ) const
13459 {
13460 return !operator==( rhs );
13461 }
13462
13463 AttachmentDescriptionFlags flags;
13464 Format format;
13465 SampleCountFlagBits samples;
13466 AttachmentLoadOp loadOp;
13467 AttachmentStoreOp storeOp;
13468 AttachmentLoadOp stencilLoadOp;
13469 AttachmentStoreOp stencilStoreOp;
13470 ImageLayout initialLayout;
13471 ImageLayout finalLayout;
13472 };
13473 static_assert( sizeof( AttachmentDescription ) == sizeof( VkAttachmentDescription ), "struct and wrapper have different size!" );
13474
13475 enum class StencilFaceFlagBits
13476 {
13477 eFront = VK_STENCIL_FACE_FRONT_BIT,
13478 eBack = VK_STENCIL_FACE_BACK_BIT,
13479 eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK
13480 };
13481
13482 using StencilFaceFlags = Flags<StencilFaceFlagBits, VkStencilFaceFlags>;
13483
13484 inline StencilFaceFlags operator|( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 )
13485 {
13486 return StencilFaceFlags( bit0 ) | bit1;
13487 }
13488
13489 enum class DescriptorPoolCreateFlagBits
13490 {
13491 eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
13492 };
13493
13494 using DescriptorPoolCreateFlags = Flags<DescriptorPoolCreateFlagBits, VkDescriptorPoolCreateFlags>;
13495
13496 inline DescriptorPoolCreateFlags operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 )
13497 {
13498 return DescriptorPoolCreateFlags( bit0 ) | bit1;
13499 }
13500
13501 struct DescriptorPoolCreateInfo
13502 {
13503 DescriptorPoolCreateInfo( DescriptorPoolCreateFlags flags_ = DescriptorPoolCreateFlags(), uint32_t maxSets_ = 0, uint32_t poolSizeCount_ = 0, const DescriptorPoolSize* pPoolSizes_ = nullptr )
13504 : sType( StructureType::eDescriptorPoolCreateInfo )
13505 , pNext( nullptr )
13506 , flags( flags_ )
13507 , maxSets( maxSets_ )
13508 , poolSizeCount( poolSizeCount_ )
13509 , pPoolSizes( pPoolSizes_ )
13510 {
13511 }
13512
13513 DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs )
13514 {
13515 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13516 }
13517
13518 DescriptorPoolCreateInfo& operator=( VkDescriptorPoolCreateInfo const & rhs )
13519 {
13520 memcpy( this, &rhs, sizeof(DescriptorPoolCreateInfo) );
13521 return *this;
13522 }
13523
13524 DescriptorPoolCreateInfo& setSType( StructureType sType_ )
13525 {
13526 sType = sType_;
13527 return *this;
13528 }
13529
13530 DescriptorPoolCreateInfo& setPNext( const void* pNext_ )
13531 {
13532 pNext = pNext_;
13533 return *this;
13534 }
13535
13536 DescriptorPoolCreateInfo& setFlags( DescriptorPoolCreateFlags flags_ )
13537 {
13538 flags = flags_;
13539 return *this;
13540 }
13541
13542 DescriptorPoolCreateInfo& setMaxSets( uint32_t maxSets_ )
13543 {
13544 maxSets = maxSets_;
13545 return *this;
13546 }
13547
13548 DescriptorPoolCreateInfo& setPoolSizeCount( uint32_t poolSizeCount_ )
13549 {
13550 poolSizeCount = poolSizeCount_;
13551 return *this;
13552 }
13553
13554 DescriptorPoolCreateInfo& setPPoolSizes( const DescriptorPoolSize* pPoolSizes_ )
13555 {
13556 pPoolSizes = pPoolSizes_;
13557 return *this;
13558 }
13559
13560 operator const VkDescriptorPoolCreateInfo&() const
13561 {
13562 return *reinterpret_cast<const VkDescriptorPoolCreateInfo*>(this);
13563 }
13564
13565 bool operator==( DescriptorPoolCreateInfo const& rhs ) const
13566 {
13567 return ( sType == rhs.sType )
13568 && ( pNext == rhs.pNext )
13569 && ( flags == rhs.flags )
13570 && ( maxSets == rhs.maxSets )
13571 && ( poolSizeCount == rhs.poolSizeCount )
13572 && ( pPoolSizes == rhs.pPoolSizes );
13573 }
13574
13575 bool operator!=( DescriptorPoolCreateInfo const& rhs ) const
13576 {
13577 return !operator==( rhs );
13578 }
13579
13580 private:
13581 StructureType sType;
13582
13583 public:
13584 const void* pNext;
13585 DescriptorPoolCreateFlags flags;
13586 uint32_t maxSets;
13587 uint32_t poolSizeCount;
13588 const DescriptorPoolSize* pPoolSizes;
13589 };
13590 static_assert( sizeof( DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ), "struct and wrapper have different size!" );
13591
13592 enum class DependencyFlagBits
13593 {
13594 eByRegion = VK_DEPENDENCY_BY_REGION_BIT
13595 };
13596
13597 using DependencyFlags = Flags<DependencyFlagBits, VkDependencyFlags>;
13598
13599 inline DependencyFlags operator|( DependencyFlagBits bit0, DependencyFlagBits bit1 )
13600 {
13601 return DependencyFlags( bit0 ) | bit1;
13602 }
13603
13604 class CommandBuffer
13605 {
13606 public:
13607 CommandBuffer()
13608 : m_commandBuffer(VK_NULL_HANDLE)
13609 {}
13610
13611#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
13612 CommandBuffer(VkCommandBuffer commandBuffer)
13613 : m_commandBuffer(commandBuffer)
13614 {}
13615
13616 CommandBuffer& operator=(VkCommandBuffer commandBuffer)
13617 {
13618 m_commandBuffer = commandBuffer;
13619 return *this;
13620 }
13621#endif
13622
Lenny Komowebf33162016-08-26 14:10:08 -060013623 bool operator==(CommandBuffer const &rhs) const
13624 {
13625 return m_commandBuffer == rhs.m_commandBuffer;
13626 }
13627
13628 bool operator!=(CommandBuffer const &rhs) const
13629 {
13630 return m_commandBuffer != rhs.m_commandBuffer;
13631 }
13632
13633 bool operator<(CommandBuffer const &rhs) const
13634 {
13635 return m_commandBuffer < rhs.m_commandBuffer;
13636 }
13637
Lenny Komowbed9b5c2016-08-11 11:23:15 -060013638 Result begin( const CommandBufferBeginInfo* pBeginInfo ) const
13639 {
13640 return static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( pBeginInfo ) ) );
13641 }
13642
13643#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13644 ResultValueType<void>::type begin( const CommandBufferBeginInfo & beginInfo ) const
13645 {
13646 Result result = static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( &beginInfo ) ) );
13647 return createResultValue( result, "vk::CommandBuffer::begin" );
13648 }
13649#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13650
13651#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13652 Result end( ) const
13653 {
13654 return static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13655 }
13656#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13657
13658#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13659 ResultValueType<void>::type end() const
13660 {
13661 Result result = static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
13662 return createResultValue( result, "vk::CommandBuffer::end" );
13663 }
13664#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13665
13666#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13667 Result reset( CommandBufferResetFlags flags ) const
13668 {
13669 return static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13670 }
13671#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13672
13673#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13674 ResultValueType<void>::type reset( CommandBufferResetFlags flags ) const
13675 {
13676 Result result = static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
13677 return createResultValue( result, "vk::CommandBuffer::reset" );
13678 }
13679#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13680
13681#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13682 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13683 {
13684 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13685 }
13686#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13687
13688#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13689 void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
13690 {
13691 vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
13692 }
13693#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13694
13695 void setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport* pViewports ) const
13696 {
13697 vkCmdSetViewport( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast<const VkViewport*>( pViewports ) );
13698 }
13699
13700#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13701 void setViewport( uint32_t firstViewport, ArrayProxy<const Viewport> viewports ) const
13702 {
13703 vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size() , reinterpret_cast<const VkViewport*>( viewports.data() ) );
13704 }
13705#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13706
13707 void setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D* pScissors ) const
13708 {
13709 vkCmdSetScissor( m_commandBuffer, firstScissor, scissorCount, reinterpret_cast<const VkRect2D*>( pScissors ) );
13710 }
13711
13712#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13713 void setScissor( uint32_t firstScissor, ArrayProxy<const Rect2D> scissors ) const
13714 {
13715 vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size() , reinterpret_cast<const VkRect2D*>( scissors.data() ) );
13716 }
13717#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13718
13719#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13720 void setLineWidth( float lineWidth ) const
13721 {
13722 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13723 }
13724#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13725
13726#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13727 void setLineWidth( float lineWidth ) const
13728 {
13729 vkCmdSetLineWidth( m_commandBuffer, lineWidth );
13730 }
13731#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13732
13733#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13734 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13735 {
13736 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13737 }
13738#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13739
13740#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13741 void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
13742 {
13743 vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
13744 }
13745#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13746
13747#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13748 void setBlendConstants( const float blendConstants[4] ) const
13749 {
13750 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13751 }
13752#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13753
13754#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13755 void setBlendConstants( const float blendConstants[4] ) const
13756 {
13757 vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
13758 }
13759#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13760
13761#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13762 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13763 {
13764 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13765 }
13766#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13767
13768#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13769 void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
13770 {
13771 vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
13772 }
13773#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13774
13775#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13776 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13777 {
13778 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13779 }
13780#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13781
13782#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13783 void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
13784 {
13785 vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
13786 }
13787#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13788
13789#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13790 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13791 {
13792 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13793 }
13794#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13795
13796#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13797 void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
13798 {
13799 vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
13800 }
13801#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13802
13803#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13804 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13805 {
13806 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13807 }
13808#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13809
13810#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13811 void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
13812 {
13813 vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
13814 }
13815#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13816
13817 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets ) const
13818 {
13819 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ), dynamicOffsetCount, pDynamicOffsets );
13820 }
13821
13822#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13823 void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, ArrayProxy<const DescriptorSet> descriptorSets, ArrayProxy<const uint32_t> dynamicOffsets ) const
13824 {
13825 vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ), dynamicOffsets.size() , dynamicOffsets.data() );
13826 }
13827#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13828
13829#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13830 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13831 {
13832 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13833 }
13834#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13835
13836#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13837 void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
13838 {
13839 vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
13840 }
13841#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13842
13843 void bindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const Buffer* pBuffers, const DeviceSize* pOffsets ) const
13844 {
13845 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, bindingCount, reinterpret_cast<const VkBuffer*>( pBuffers ), pOffsets );
13846 }
13847
13848#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13849 void bindVertexBuffers( uint32_t firstBinding, ArrayProxy<const Buffer> buffers, ArrayProxy<const DeviceSize> offsets ) const
13850 {
13851#ifdef VULKAN_HPP_NO_EXCEPTIONS
13852 assert( buffers.size() == offsets.size() );
13853#else
13854 if ( buffers.size() != offsets.size() )
13855 {
13856 throw std::logic_error( "vk::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" );
13857 }
13858#endif // VULKAN_HPP_NO_EXCEPTIONS
13859 vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, buffers.size() , reinterpret_cast<const VkBuffer*>( buffers.data() ), offsets.data() );
13860 }
13861#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13862
13863#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13864 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13865 {
13866 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13867 }
13868#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13869
13870#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13871 void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
13872 {
13873 vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
13874 }
13875#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13876
13877#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13878 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13879 {
13880 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13881 }
13882#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13883
13884#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13885 void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
13886 {
13887 vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
13888 }
13889#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13890
13891#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13892 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13893 {
13894 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13895 }
13896#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13897
13898#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13899 void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13900 {
13901 vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13902 }
13903#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13904
13905#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13906 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13907 {
13908 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13909 }
13910#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13911
13912#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13913 void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
13914 {
13915 vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
13916 }
13917#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13918
13919#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13920 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13921 {
13922 vkCmdDispatch( m_commandBuffer, x, y, z );
13923 }
13924#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13925
13926#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13927 void dispatch( uint32_t x, uint32_t y, uint32_t z ) const
13928 {
13929 vkCmdDispatch( m_commandBuffer, x, y, z );
13930 }
13931#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13932
13933#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
13934 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13935 {
13936 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13937 }
13938#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13939
13940#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13941 void dispatchIndirect( Buffer buffer, DeviceSize offset ) const
13942 {
13943 vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
13944 }
13945#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13946
13947 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy* pRegions ) const
13948 {
13949 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferCopy*>( pRegions ) );
13950 }
13951
13952#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13953 void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy<const BufferCopy> regions ) const
13954 {
13955 vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferCopy*>( regions.data() ) );
13956 }
13957#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13958
13959 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageCopy* pRegions ) const
13960 {
13961 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 ) );
13962 }
13963
13964#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13965 void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageCopy> regions ) const
13966 {
13967 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() ) );
13968 }
13969#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13970
13971 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageBlit* pRegions, Filter filter ) const
13972 {
13973 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 ) );
13974 }
13975
13976#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13977 void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageBlit> regions, Filter filter ) const
13978 {
13979 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 ) );
13980 }
13981#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13982
13983 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13984 {
13985 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13986 }
13987
13988#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
13989 void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const BufferImageCopy> regions ) const
13990 {
13991 vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
13992 }
13993#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
13994
13995 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, uint32_t regionCount, const BufferImageCopy* pRegions ) const
13996 {
13997 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
13998 }
13999
14000#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14001 void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, ArrayProxy<const BufferImageCopy> regions ) const
14002 {
14003 vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
14004 }
14005#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14006
14007 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void* pData ) const
14008 {
14009 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, dataSize, pData );
14010 }
14011
14012#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14013 template <typename T>
14014 void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy<const T> data ) const
14015 {
14016 vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, data.size() * sizeof( T ) , reinterpret_cast<const void*>( data.data() ) );
14017 }
14018#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14019
14020#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14021 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
14022 {
14023 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
14024 }
14025#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14026
14027#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14028 void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
14029 {
14030 vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
14031 }
14032#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14033
14034 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue* pColor, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
14035 {
14036 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( pColor ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
14037 }
14038
14039#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14040 void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ArrayProxy<const ImageSubresourceRange> ranges ) const
14041 {
14042 vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( &color ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
14043 }
14044#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14045
14046 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
14047 {
14048 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( pDepthStencil ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
14049 }
14050
14051#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14052 void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ArrayProxy<const ImageSubresourceRange> ranges ) const
14053 {
14054 vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( &depthStencil ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
14055 }
14056#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14057
14058 void clearAttachments( uint32_t attachmentCount, const ClearAttachment* pAttachments, uint32_t rectCount, const ClearRect* pRects ) const
14059 {
14060 vkCmdClearAttachments( m_commandBuffer, attachmentCount, reinterpret_cast<const VkClearAttachment*>( pAttachments ), rectCount, reinterpret_cast<const VkClearRect*>( pRects ) );
14061 }
14062
14063#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14064 void clearAttachments( ArrayProxy<const ClearAttachment> attachments, ArrayProxy<const ClearRect> rects ) const
14065 {
14066 vkCmdClearAttachments( m_commandBuffer, attachments.size() , reinterpret_cast<const VkClearAttachment*>( attachments.data() ), rects.size() , reinterpret_cast<const VkClearRect*>( rects.data() ) );
14067 }
14068#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14069
14070 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageResolve* pRegions ) const
14071 {
14072 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 ) );
14073 }
14074
14075#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14076 void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageResolve> regions ) const
14077 {
14078 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() ) );
14079 }
14080#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14081
14082#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14083 void setEvent( Event event, PipelineStageFlags stageMask ) const
14084 {
14085 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14086 }
14087#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14088
14089#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14090 void setEvent( Event event, PipelineStageFlags stageMask ) const
14091 {
14092 vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14093 }
14094#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14095
14096#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14097 void resetEvent( Event event, PipelineStageFlags stageMask ) const
14098 {
14099 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14100 }
14101#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14102
14103#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14104 void resetEvent( Event event, PipelineStageFlags stageMask ) const
14105 {
14106 vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
14107 }
14108#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14109
14110 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
14111 {
14112 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 ) );
14113 }
14114
14115#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14116 void waitEvents( ArrayProxy<const Event> events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
14117 {
14118 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() ) );
14119 }
14120#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14121
14122 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
14123 {
14124 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 ) );
14125 }
14126
14127#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14128 void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
14129 {
14130 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() ) );
14131 }
14132#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14133
14134#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14135 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
14136 {
14137 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
14138 }
14139#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14140
14141#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14142 void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
14143 {
14144 vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
14145 }
14146#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14147
14148#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14149 void endQuery( QueryPool queryPool, uint32_t query ) const
14150 {
14151 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
14152 }
14153#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14154
14155#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14156 void endQuery( QueryPool queryPool, uint32_t query ) const
14157 {
14158 vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
14159 }
14160#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14161
14162#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14163 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
14164 {
14165 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
14166 }
14167#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14168
14169#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14170 void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
14171 {
14172 vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
14173 }
14174#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14175
14176#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14177 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
14178 {
14179 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
14180 }
14181#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14182
14183#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14184 void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
14185 {
14186 vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
14187 }
14188#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14189
14190#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14191 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
14192 {
14193 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14194 }
14195#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14196
14197#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14198 void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
14199 {
14200 vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
14201 }
14202#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14203
14204 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues ) const
14205 {
14206 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, size, pValues );
14207 }
14208
14209#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14210 template <typename T>
14211 void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, ArrayProxy<const T> values ) const
14212 {
14213 vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, values.size() * sizeof( T ) , reinterpret_cast<const void*>( values.data() ) );
14214 }
14215#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14216
14217 void beginRenderPass( const RenderPassBeginInfo* pRenderPassBegin, SubpassContents contents ) const
14218 {
14219 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( pRenderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14220 }
14221
14222#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14223 void beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents ) const
14224 {
14225 vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( &renderPassBegin ), static_cast<VkSubpassContents>( contents ) );
14226 }
14227#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14228
14229#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14230 void nextSubpass( SubpassContents contents ) const
14231 {
14232 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14233 }
14234#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14235
14236#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14237 void nextSubpass( SubpassContents contents ) const
14238 {
14239 vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
14240 }
14241#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14242
14243#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14244 void endRenderPass( ) const
14245 {
14246 vkCmdEndRenderPass( m_commandBuffer );
14247 }
14248#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14249
14250#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14251 void endRenderPass() const
14252 {
14253 vkCmdEndRenderPass( m_commandBuffer );
14254 }
14255#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14256
14257 void executeCommands( uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
14258 {
14259 vkCmdExecuteCommands( m_commandBuffer, commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
14260 }
14261
14262#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14263 void executeCommands( ArrayProxy<const CommandBuffer> commandBuffers ) const
14264 {
14265 vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
14266 }
14267#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14268
14269 void debugMarkerBeginEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14270 {
14271 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14272 }
14273
14274#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14275 DebugMarkerMarkerInfoEXT debugMarkerBeginEXT() const
14276 {
14277 DebugMarkerMarkerInfoEXT markerInfo;
14278 vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14279 return markerInfo;
14280 }
14281#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14282
14283#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14284 void debugMarkerEndEXT( ) const
14285 {
14286 vkCmdDebugMarkerEndEXT( m_commandBuffer );
14287 }
14288#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14289
14290#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14291 void debugMarkerEndEXT() const
14292 {
14293 vkCmdDebugMarkerEndEXT( m_commandBuffer );
14294 }
14295#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14296
14297 void debugMarkerInsertEXT( DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
14298 {
14299 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
14300 }
14301
14302#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14303 DebugMarkerMarkerInfoEXT debugMarkerInsertEXT() const
14304 {
14305 DebugMarkerMarkerInfoEXT markerInfo;
14306 vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
14307 return markerInfo;
14308 }
14309#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14310
Lenny Komow6501c122016-08-31 15:03:49 -060014311#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14312 void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14313 {
14314 vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14315 }
14316#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14317
14318#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14319 void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14320 {
14321 vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14322 }
14323#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14324
14325#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14326 void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14327 {
14328 vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14329 }
14330#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14331
14332#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14333 void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
14334 {
14335 vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
14336 }
14337#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14338
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014339#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14340 explicit
14341#endif
14342 operator VkCommandBuffer() const
14343 {
14344 return m_commandBuffer;
14345 }
14346
14347 explicit operator bool() const
14348 {
14349 return m_commandBuffer != VK_NULL_HANDLE;
14350 }
14351
14352 bool operator!() const
14353 {
14354 return m_commandBuffer == VK_NULL_HANDLE;
14355 }
14356
14357 private:
14358 VkCommandBuffer m_commandBuffer;
14359 };
14360 static_assert( sizeof( CommandBuffer ) == sizeof( VkCommandBuffer ), "handle and wrapper have different size!" );
14361
14362 struct SubpassDependency
14363 {
14364 SubpassDependency( uint32_t srcSubpass_ = 0, uint32_t dstSubpass_ = 0, PipelineStageFlags srcStageMask_ = PipelineStageFlags(), PipelineStageFlags dstStageMask_ = PipelineStageFlags(), AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), DependencyFlags dependencyFlags_ = DependencyFlags() )
14365 : srcSubpass( srcSubpass_ )
14366 , dstSubpass( dstSubpass_ )
14367 , srcStageMask( srcStageMask_ )
14368 , dstStageMask( dstStageMask_ )
14369 , srcAccessMask( srcAccessMask_ )
14370 , dstAccessMask( dstAccessMask_ )
14371 , dependencyFlags( dependencyFlags_ )
14372 {
14373 }
14374
14375 SubpassDependency( VkSubpassDependency const & rhs )
14376 {
14377 memcpy( this, &rhs, sizeof(SubpassDependency) );
14378 }
14379
14380 SubpassDependency& operator=( VkSubpassDependency const & rhs )
14381 {
14382 memcpy( this, &rhs, sizeof(SubpassDependency) );
14383 return *this;
14384 }
14385
14386 SubpassDependency& setSrcSubpass( uint32_t srcSubpass_ )
14387 {
14388 srcSubpass = srcSubpass_;
14389 return *this;
14390 }
14391
14392 SubpassDependency& setDstSubpass( uint32_t dstSubpass_ )
14393 {
14394 dstSubpass = dstSubpass_;
14395 return *this;
14396 }
14397
14398 SubpassDependency& setSrcStageMask( PipelineStageFlags srcStageMask_ )
14399 {
14400 srcStageMask = srcStageMask_;
14401 return *this;
14402 }
14403
14404 SubpassDependency& setDstStageMask( PipelineStageFlags dstStageMask_ )
14405 {
14406 dstStageMask = dstStageMask_;
14407 return *this;
14408 }
14409
14410 SubpassDependency& setSrcAccessMask( AccessFlags srcAccessMask_ )
14411 {
14412 srcAccessMask = srcAccessMask_;
14413 return *this;
14414 }
14415
14416 SubpassDependency& setDstAccessMask( AccessFlags dstAccessMask_ )
14417 {
14418 dstAccessMask = dstAccessMask_;
14419 return *this;
14420 }
14421
14422 SubpassDependency& setDependencyFlags( DependencyFlags dependencyFlags_ )
14423 {
14424 dependencyFlags = dependencyFlags_;
14425 return *this;
14426 }
14427
14428 operator const VkSubpassDependency&() const
14429 {
14430 return *reinterpret_cast<const VkSubpassDependency*>(this);
14431 }
14432
14433 bool operator==( SubpassDependency const& rhs ) const
14434 {
14435 return ( srcSubpass == rhs.srcSubpass )
14436 && ( dstSubpass == rhs.dstSubpass )
14437 && ( srcStageMask == rhs.srcStageMask )
14438 && ( dstStageMask == rhs.dstStageMask )
14439 && ( srcAccessMask == rhs.srcAccessMask )
14440 && ( dstAccessMask == rhs.dstAccessMask )
14441 && ( dependencyFlags == rhs.dependencyFlags );
14442 }
14443
14444 bool operator!=( SubpassDependency const& rhs ) const
14445 {
14446 return !operator==( rhs );
14447 }
14448
14449 uint32_t srcSubpass;
14450 uint32_t dstSubpass;
14451 PipelineStageFlags srcStageMask;
14452 PipelineStageFlags dstStageMask;
14453 AccessFlags srcAccessMask;
14454 AccessFlags dstAccessMask;
14455 DependencyFlags dependencyFlags;
14456 };
14457 static_assert( sizeof( SubpassDependency ) == sizeof( VkSubpassDependency ), "struct and wrapper have different size!" );
14458
14459 struct RenderPassCreateInfo
14460 {
14461 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 )
14462 : sType( StructureType::eRenderPassCreateInfo )
14463 , pNext( nullptr )
14464 , flags( flags_ )
14465 , attachmentCount( attachmentCount_ )
14466 , pAttachments( pAttachments_ )
14467 , subpassCount( subpassCount_ )
14468 , pSubpasses( pSubpasses_ )
14469 , dependencyCount( dependencyCount_ )
14470 , pDependencies( pDependencies_ )
14471 {
14472 }
14473
14474 RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs )
14475 {
14476 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14477 }
14478
14479 RenderPassCreateInfo& operator=( VkRenderPassCreateInfo const & rhs )
14480 {
14481 memcpy( this, &rhs, sizeof(RenderPassCreateInfo) );
14482 return *this;
14483 }
14484
14485 RenderPassCreateInfo& setSType( StructureType sType_ )
14486 {
14487 sType = sType_;
14488 return *this;
14489 }
14490
14491 RenderPassCreateInfo& setPNext( const void* pNext_ )
14492 {
14493 pNext = pNext_;
14494 return *this;
14495 }
14496
14497 RenderPassCreateInfo& setFlags( RenderPassCreateFlags flags_ )
14498 {
14499 flags = flags_;
14500 return *this;
14501 }
14502
14503 RenderPassCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
14504 {
14505 attachmentCount = attachmentCount_;
14506 return *this;
14507 }
14508
14509 RenderPassCreateInfo& setPAttachments( const AttachmentDescription* pAttachments_ )
14510 {
14511 pAttachments = pAttachments_;
14512 return *this;
14513 }
14514
14515 RenderPassCreateInfo& setSubpassCount( uint32_t subpassCount_ )
14516 {
14517 subpassCount = subpassCount_;
14518 return *this;
14519 }
14520
14521 RenderPassCreateInfo& setPSubpasses( const SubpassDescription* pSubpasses_ )
14522 {
14523 pSubpasses = pSubpasses_;
14524 return *this;
14525 }
14526
14527 RenderPassCreateInfo& setDependencyCount( uint32_t dependencyCount_ )
14528 {
14529 dependencyCount = dependencyCount_;
14530 return *this;
14531 }
14532
14533 RenderPassCreateInfo& setPDependencies( const SubpassDependency* pDependencies_ )
14534 {
14535 pDependencies = pDependencies_;
14536 return *this;
14537 }
14538
14539 operator const VkRenderPassCreateInfo&() const
14540 {
14541 return *reinterpret_cast<const VkRenderPassCreateInfo*>(this);
14542 }
14543
14544 bool operator==( RenderPassCreateInfo const& rhs ) const
14545 {
14546 return ( sType == rhs.sType )
14547 && ( pNext == rhs.pNext )
14548 && ( flags == rhs.flags )
14549 && ( attachmentCount == rhs.attachmentCount )
14550 && ( pAttachments == rhs.pAttachments )
14551 && ( subpassCount == rhs.subpassCount )
14552 && ( pSubpasses == rhs.pSubpasses )
14553 && ( dependencyCount == rhs.dependencyCount )
14554 && ( pDependencies == rhs.pDependencies );
14555 }
14556
14557 bool operator!=( RenderPassCreateInfo const& rhs ) const
14558 {
14559 return !operator==( rhs );
14560 }
14561
14562 private:
14563 StructureType sType;
14564
14565 public:
14566 const void* pNext;
14567 RenderPassCreateFlags flags;
14568 uint32_t attachmentCount;
14569 const AttachmentDescription* pAttachments;
14570 uint32_t subpassCount;
14571 const SubpassDescription* pSubpasses;
14572 uint32_t dependencyCount;
14573 const SubpassDependency* pDependencies;
14574 };
14575 static_assert( sizeof( RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ), "struct and wrapper have different size!" );
14576
14577 struct SubmitInfo
14578 {
14579 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 )
14580 : sType( StructureType::eSubmitInfo )
14581 , pNext( nullptr )
14582 , waitSemaphoreCount( waitSemaphoreCount_ )
14583 , pWaitSemaphores( pWaitSemaphores_ )
14584 , pWaitDstStageMask( pWaitDstStageMask_ )
14585 , commandBufferCount( commandBufferCount_ )
14586 , pCommandBuffers( pCommandBuffers_ )
14587 , signalSemaphoreCount( signalSemaphoreCount_ )
14588 , pSignalSemaphores( pSignalSemaphores_ )
14589 {
14590 }
14591
14592 SubmitInfo( VkSubmitInfo const & rhs )
14593 {
14594 memcpy( this, &rhs, sizeof(SubmitInfo) );
14595 }
14596
14597 SubmitInfo& operator=( VkSubmitInfo const & rhs )
14598 {
14599 memcpy( this, &rhs, sizeof(SubmitInfo) );
14600 return *this;
14601 }
14602
14603 SubmitInfo& setSType( StructureType sType_ )
14604 {
14605 sType = sType_;
14606 return *this;
14607 }
14608
14609 SubmitInfo& setPNext( const void* pNext_ )
14610 {
14611 pNext = pNext_;
14612 return *this;
14613 }
14614
14615 SubmitInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
14616 {
14617 waitSemaphoreCount = waitSemaphoreCount_;
14618 return *this;
14619 }
14620
14621 SubmitInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
14622 {
14623 pWaitSemaphores = pWaitSemaphores_;
14624 return *this;
14625 }
14626
14627 SubmitInfo& setPWaitDstStageMask( const PipelineStageFlags* pWaitDstStageMask_ )
14628 {
14629 pWaitDstStageMask = pWaitDstStageMask_;
14630 return *this;
14631 }
14632
14633 SubmitInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
14634 {
14635 commandBufferCount = commandBufferCount_;
14636 return *this;
14637 }
14638
14639 SubmitInfo& setPCommandBuffers( const CommandBuffer* pCommandBuffers_ )
14640 {
14641 pCommandBuffers = pCommandBuffers_;
14642 return *this;
14643 }
14644
14645 SubmitInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
14646 {
14647 signalSemaphoreCount = signalSemaphoreCount_;
14648 return *this;
14649 }
14650
14651 SubmitInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
14652 {
14653 pSignalSemaphores = pSignalSemaphores_;
14654 return *this;
14655 }
14656
14657 operator const VkSubmitInfo&() const
14658 {
14659 return *reinterpret_cast<const VkSubmitInfo*>(this);
14660 }
14661
14662 bool operator==( SubmitInfo const& rhs ) const
14663 {
14664 return ( sType == rhs.sType )
14665 && ( pNext == rhs.pNext )
14666 && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
14667 && ( pWaitSemaphores == rhs.pWaitSemaphores )
14668 && ( pWaitDstStageMask == rhs.pWaitDstStageMask )
14669 && ( commandBufferCount == rhs.commandBufferCount )
14670 && ( pCommandBuffers == rhs.pCommandBuffers )
14671 && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
14672 && ( pSignalSemaphores == rhs.pSignalSemaphores );
14673 }
14674
14675 bool operator!=( SubmitInfo const& rhs ) const
14676 {
14677 return !operator==( rhs );
14678 }
14679
14680 private:
14681 StructureType sType;
14682
14683 public:
14684 const void* pNext;
14685 uint32_t waitSemaphoreCount;
14686 const Semaphore* pWaitSemaphores;
14687 const PipelineStageFlags* pWaitDstStageMask;
14688 uint32_t commandBufferCount;
14689 const CommandBuffer* pCommandBuffers;
14690 uint32_t signalSemaphoreCount;
14691 const Semaphore* pSignalSemaphores;
14692 };
14693 static_assert( sizeof( SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" );
14694
14695 class Queue
14696 {
14697 public:
14698 Queue()
14699 : m_queue(VK_NULL_HANDLE)
14700 {}
14701
14702#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14703 Queue(VkQueue queue)
14704 : m_queue(queue)
14705 {}
14706
14707 Queue& operator=(VkQueue queue)
14708 {
14709 m_queue = queue;
14710 return *this;
14711 }
14712#endif
14713
Lenny Komowebf33162016-08-26 14:10:08 -060014714 bool operator==(Queue const &rhs) const
14715 {
14716 return m_queue == rhs.m_queue;
14717 }
14718
14719 bool operator!=(Queue const &rhs) const
14720 {
14721 return m_queue != rhs.m_queue;
14722 }
14723
14724 bool operator<(Queue const &rhs) const
14725 {
14726 return m_queue < rhs.m_queue;
14727 }
14728
Lenny Komowbed9b5c2016-08-11 11:23:15 -060014729 Result submit( uint32_t submitCount, const SubmitInfo* pSubmits, Fence fence ) const
14730 {
14731 return static_cast<Result>( vkQueueSubmit( m_queue, submitCount, reinterpret_cast<const VkSubmitInfo*>( pSubmits ), static_cast<VkFence>( fence ) ) );
14732 }
14733
14734#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14735 ResultValueType<void>::type submit( ArrayProxy<const SubmitInfo> submits, Fence fence ) const
14736 {
14737 Result result = static_cast<Result>( vkQueueSubmit( m_queue, submits.size() , reinterpret_cast<const VkSubmitInfo*>( submits.data() ), static_cast<VkFence>( fence ) ) );
14738 return createResultValue( result, "vk::Queue::submit" );
14739 }
14740#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14741
14742#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
14743 Result waitIdle( ) const
14744 {
14745 return static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14746 }
14747#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14748
14749#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14750 ResultValueType<void>::type waitIdle() const
14751 {
14752 Result result = static_cast<Result>( vkQueueWaitIdle( m_queue ) );
14753 return createResultValue( result, "vk::Queue::waitIdle" );
14754 }
14755#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14756
14757 Result bindSparse( uint32_t bindInfoCount, const BindSparseInfo* pBindInfo, Fence fence ) const
14758 {
14759 return static_cast<Result>( vkQueueBindSparse( m_queue, bindInfoCount, reinterpret_cast<const VkBindSparseInfo*>( pBindInfo ), static_cast<VkFence>( fence ) ) );
14760 }
14761
14762#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14763 ResultValueType<void>::type bindSparse( ArrayProxy<const BindSparseInfo> bindInfo, Fence fence ) const
14764 {
14765 Result result = static_cast<Result>( vkQueueBindSparse( m_queue, bindInfo.size() , reinterpret_cast<const VkBindSparseInfo*>( bindInfo.data() ), static_cast<VkFence>( fence ) ) );
14766 return createResultValue( result, "vk::Queue::bindSparse" );
14767 }
14768#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14769
14770 Result presentKHR( const PresentInfoKHR* pPresentInfo ) const
14771 {
14772 return static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( pPresentInfo ) ) );
14773 }
14774
14775#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
14776 Result presentKHR( const PresentInfoKHR & presentInfo ) const
14777 {
14778 Result result = static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( &presentInfo ) ) );
14779 return createResultValue( result, "vk::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } );
14780 }
14781#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
14782
14783#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
14784 explicit
14785#endif
14786 operator VkQueue() const
14787 {
14788 return m_queue;
14789 }
14790
14791 explicit operator bool() const
14792 {
14793 return m_queue != VK_NULL_HANDLE;
14794 }
14795
14796 bool operator!() const
14797 {
14798 return m_queue == VK_NULL_HANDLE;
14799 }
14800
14801 private:
14802 VkQueue m_queue;
14803 };
14804 static_assert( sizeof( Queue ) == sizeof( VkQueue ), "handle and wrapper have different size!" );
14805
14806 enum class PresentModeKHR
14807 {
14808 eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR,
14809 eMailbox = VK_PRESENT_MODE_MAILBOX_KHR,
14810 eFifo = VK_PRESENT_MODE_FIFO_KHR,
14811 eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR
14812 };
14813
14814 enum class ColorSpaceKHR
14815 {
14816 eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
14817 };
14818
14819 struct SurfaceFormatKHR
14820 {
14821 SurfaceFormatKHR( Format format_ = Format::eUndefined, ColorSpaceKHR colorSpace_ = ColorSpaceKHR::eSrgbNonlinear )
14822 : format( format_ )
14823 , colorSpace( colorSpace_ )
14824 {
14825 }
14826
14827 SurfaceFormatKHR( VkSurfaceFormatKHR const & rhs )
14828 {
14829 memcpy( this, &rhs, sizeof(SurfaceFormatKHR) );
14830 }
14831
14832 SurfaceFormatKHR& operator=( VkSurfaceFormatKHR const & rhs )
14833 {
14834 memcpy( this, &rhs, sizeof(SurfaceFormatKHR) );
14835 return *this;
14836 }
14837
14838 SurfaceFormatKHR& setFormat( Format format_ )
14839 {
14840 format = format_;
14841 return *this;
14842 }
14843
14844 SurfaceFormatKHR& setColorSpace( ColorSpaceKHR colorSpace_ )
14845 {
14846 colorSpace = colorSpace_;
14847 return *this;
14848 }
14849
14850 operator const VkSurfaceFormatKHR&() const
14851 {
14852 return *reinterpret_cast<const VkSurfaceFormatKHR*>(this);
14853 }
14854
14855 bool operator==( SurfaceFormatKHR const& rhs ) const
14856 {
14857 return ( format == rhs.format )
14858 && ( colorSpace == rhs.colorSpace );
14859 }
14860
14861 bool operator!=( SurfaceFormatKHR const& rhs ) const
14862 {
14863 return !operator==( rhs );
14864 }
14865
14866 Format format;
14867 ColorSpaceKHR colorSpace;
14868 };
14869 static_assert( sizeof( SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ), "struct and wrapper have different size!" );
14870
14871 enum class DisplayPlaneAlphaFlagBitsKHR
14872 {
14873 eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,
14874 eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,
14875 ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,
14876 ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
14877 };
14878
14879 using DisplayPlaneAlphaFlagsKHR = Flags<DisplayPlaneAlphaFlagBitsKHR, VkDisplayPlaneAlphaFlagsKHR>;
14880
14881 inline DisplayPlaneAlphaFlagsKHR operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 )
14882 {
14883 return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1;
14884 }
14885
14886 struct DisplayPlaneCapabilitiesKHR
14887 {
14888 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() )
14889 : supportedAlpha( supportedAlpha_ )
14890 , minSrcPosition( minSrcPosition_ )
14891 , maxSrcPosition( maxSrcPosition_ )
14892 , minSrcExtent( minSrcExtent_ )
14893 , maxSrcExtent( maxSrcExtent_ )
14894 , minDstPosition( minDstPosition_ )
14895 , maxDstPosition( maxDstPosition_ )
14896 , minDstExtent( minDstExtent_ )
14897 , maxDstExtent( maxDstExtent_ )
14898 {
14899 }
14900
14901 DisplayPlaneCapabilitiesKHR( VkDisplayPlaneCapabilitiesKHR const & rhs )
14902 {
14903 memcpy( this, &rhs, sizeof(DisplayPlaneCapabilitiesKHR) );
14904 }
14905
14906 DisplayPlaneCapabilitiesKHR& operator=( VkDisplayPlaneCapabilitiesKHR const & rhs )
14907 {
14908 memcpy( this, &rhs, sizeof(DisplayPlaneCapabilitiesKHR) );
14909 return *this;
14910 }
14911
14912 DisplayPlaneCapabilitiesKHR& setSupportedAlpha( DisplayPlaneAlphaFlagsKHR supportedAlpha_ )
14913 {
14914 supportedAlpha = supportedAlpha_;
14915 return *this;
14916 }
14917
14918 DisplayPlaneCapabilitiesKHR& setMinSrcPosition( Offset2D minSrcPosition_ )
14919 {
14920 minSrcPosition = minSrcPosition_;
14921 return *this;
14922 }
14923
14924 DisplayPlaneCapabilitiesKHR& setMaxSrcPosition( Offset2D maxSrcPosition_ )
14925 {
14926 maxSrcPosition = maxSrcPosition_;
14927 return *this;
14928 }
14929
14930 DisplayPlaneCapabilitiesKHR& setMinSrcExtent( Extent2D minSrcExtent_ )
14931 {
14932 minSrcExtent = minSrcExtent_;
14933 return *this;
14934 }
14935
14936 DisplayPlaneCapabilitiesKHR& setMaxSrcExtent( Extent2D maxSrcExtent_ )
14937 {
14938 maxSrcExtent = maxSrcExtent_;
14939 return *this;
14940 }
14941
14942 DisplayPlaneCapabilitiesKHR& setMinDstPosition( Offset2D minDstPosition_ )
14943 {
14944 minDstPosition = minDstPosition_;
14945 return *this;
14946 }
14947
14948 DisplayPlaneCapabilitiesKHR& setMaxDstPosition( Offset2D maxDstPosition_ )
14949 {
14950 maxDstPosition = maxDstPosition_;
14951 return *this;
14952 }
14953
14954 DisplayPlaneCapabilitiesKHR& setMinDstExtent( Extent2D minDstExtent_ )
14955 {
14956 minDstExtent = minDstExtent_;
14957 return *this;
14958 }
14959
14960 DisplayPlaneCapabilitiesKHR& setMaxDstExtent( Extent2D maxDstExtent_ )
14961 {
14962 maxDstExtent = maxDstExtent_;
14963 return *this;
14964 }
14965
14966 operator const VkDisplayPlaneCapabilitiesKHR&() const
14967 {
14968 return *reinterpret_cast<const VkDisplayPlaneCapabilitiesKHR*>(this);
14969 }
14970
14971 bool operator==( DisplayPlaneCapabilitiesKHR const& rhs ) const
14972 {
14973 return ( supportedAlpha == rhs.supportedAlpha )
14974 && ( minSrcPosition == rhs.minSrcPosition )
14975 && ( maxSrcPosition == rhs.maxSrcPosition )
14976 && ( minSrcExtent == rhs.minSrcExtent )
14977 && ( maxSrcExtent == rhs.maxSrcExtent )
14978 && ( minDstPosition == rhs.minDstPosition )
14979 && ( maxDstPosition == rhs.maxDstPosition )
14980 && ( minDstExtent == rhs.minDstExtent )
14981 && ( maxDstExtent == rhs.maxDstExtent );
14982 }
14983
14984 bool operator!=( DisplayPlaneCapabilitiesKHR const& rhs ) const
14985 {
14986 return !operator==( rhs );
14987 }
14988
14989 DisplayPlaneAlphaFlagsKHR supportedAlpha;
14990 Offset2D minSrcPosition;
14991 Offset2D maxSrcPosition;
14992 Extent2D minSrcExtent;
14993 Extent2D maxSrcExtent;
14994 Offset2D minDstPosition;
14995 Offset2D maxDstPosition;
14996 Extent2D minDstExtent;
14997 Extent2D maxDstExtent;
14998 };
14999 static_assert( sizeof( DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ), "struct and wrapper have different size!" );
15000
15001 enum class CompositeAlphaFlagBitsKHR
15002 {
15003 eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
15004 ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
15005 ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
15006 eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
15007 };
15008
15009 using CompositeAlphaFlagsKHR = Flags<CompositeAlphaFlagBitsKHR, VkCompositeAlphaFlagsKHR>;
15010
15011 inline CompositeAlphaFlagsKHR operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 )
15012 {
15013 return CompositeAlphaFlagsKHR( bit0 ) | bit1;
15014 }
15015
15016 enum class SurfaceTransformFlagBitsKHR
15017 {
15018 eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
15019 eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
15020 eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,
15021 eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,
15022 eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,
15023 eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,
15024 eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,
15025 eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,
15026 eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
15027 };
15028
15029 using SurfaceTransformFlagsKHR = Flags<SurfaceTransformFlagBitsKHR, VkSurfaceTransformFlagsKHR>;
15030
15031 inline SurfaceTransformFlagsKHR operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 )
15032 {
15033 return SurfaceTransformFlagsKHR( bit0 ) | bit1;
15034 }
15035
15036 struct DisplayPropertiesKHR
15037 {
15038 DisplayPropertiesKHR( DisplayKHR display_ = DisplayKHR(), const char* displayName_ = nullptr, Extent2D physicalDimensions_ = Extent2D(), Extent2D physicalResolution_ = Extent2D(), SurfaceTransformFlagsKHR supportedTransforms_ = SurfaceTransformFlagsKHR(), Bool32 planeReorderPossible_ = 0, Bool32 persistentContent_ = 0 )
15039 : display( display_ )
15040 , displayName( displayName_ )
15041 , physicalDimensions( physicalDimensions_ )
15042 , physicalResolution( physicalResolution_ )
15043 , supportedTransforms( supportedTransforms_ )
15044 , planeReorderPossible( planeReorderPossible_ )
15045 , persistentContent( persistentContent_ )
15046 {
15047 }
15048
15049 DisplayPropertiesKHR( VkDisplayPropertiesKHR const & rhs )
15050 {
15051 memcpy( this, &rhs, sizeof(DisplayPropertiesKHR) );
15052 }
15053
15054 DisplayPropertiesKHR& operator=( VkDisplayPropertiesKHR const & rhs )
15055 {
15056 memcpy( this, &rhs, sizeof(DisplayPropertiesKHR) );
15057 return *this;
15058 }
15059
15060 DisplayPropertiesKHR& setDisplay( DisplayKHR display_ )
15061 {
15062 display = display_;
15063 return *this;
15064 }
15065
15066 DisplayPropertiesKHR& setDisplayName( const char* displayName_ )
15067 {
15068 displayName = displayName_;
15069 return *this;
15070 }
15071
15072 DisplayPropertiesKHR& setPhysicalDimensions( Extent2D physicalDimensions_ )
15073 {
15074 physicalDimensions = physicalDimensions_;
15075 return *this;
15076 }
15077
15078 DisplayPropertiesKHR& setPhysicalResolution( Extent2D physicalResolution_ )
15079 {
15080 physicalResolution = physicalResolution_;
15081 return *this;
15082 }
15083
15084 DisplayPropertiesKHR& setSupportedTransforms( SurfaceTransformFlagsKHR supportedTransforms_ )
15085 {
15086 supportedTransforms = supportedTransforms_;
15087 return *this;
15088 }
15089
15090 DisplayPropertiesKHR& setPlaneReorderPossible( Bool32 planeReorderPossible_ )
15091 {
15092 planeReorderPossible = planeReorderPossible_;
15093 return *this;
15094 }
15095
15096 DisplayPropertiesKHR& setPersistentContent( Bool32 persistentContent_ )
15097 {
15098 persistentContent = persistentContent_;
15099 return *this;
15100 }
15101
15102 operator const VkDisplayPropertiesKHR&() const
15103 {
15104 return *reinterpret_cast<const VkDisplayPropertiesKHR*>(this);
15105 }
15106
15107 bool operator==( DisplayPropertiesKHR const& rhs ) const
15108 {
15109 return ( display == rhs.display )
15110 && ( displayName == rhs.displayName )
15111 && ( physicalDimensions == rhs.physicalDimensions )
15112 && ( physicalResolution == rhs.physicalResolution )
15113 && ( supportedTransforms == rhs.supportedTransforms )
15114 && ( planeReorderPossible == rhs.planeReorderPossible )
15115 && ( persistentContent == rhs.persistentContent );
15116 }
15117
15118 bool operator!=( DisplayPropertiesKHR const& rhs ) const
15119 {
15120 return !operator==( rhs );
15121 }
15122
15123 DisplayKHR display;
15124 const char* displayName;
15125 Extent2D physicalDimensions;
15126 Extent2D physicalResolution;
15127 SurfaceTransformFlagsKHR supportedTransforms;
15128 Bool32 planeReorderPossible;
15129 Bool32 persistentContent;
15130 };
15131 static_assert( sizeof( DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ), "struct and wrapper have different size!" );
15132
15133 struct DisplaySurfaceCreateInfoKHR
15134 {
15135 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() )
15136 : sType( StructureType::eDisplaySurfaceCreateInfoKHR )
15137 , pNext( nullptr )
15138 , flags( flags_ )
15139 , displayMode( displayMode_ )
15140 , planeIndex( planeIndex_ )
15141 , planeStackIndex( planeStackIndex_ )
15142 , transform( transform_ )
15143 , globalAlpha( globalAlpha_ )
15144 , alphaMode( alphaMode_ )
15145 , imageExtent( imageExtent_ )
15146 {
15147 }
15148
15149 DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs )
15150 {
15151 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
15152 }
15153
15154 DisplaySurfaceCreateInfoKHR& operator=( VkDisplaySurfaceCreateInfoKHR const & rhs )
15155 {
15156 memcpy( this, &rhs, sizeof(DisplaySurfaceCreateInfoKHR) );
15157 return *this;
15158 }
15159
15160 DisplaySurfaceCreateInfoKHR& setSType( StructureType sType_ )
15161 {
15162 sType = sType_;
15163 return *this;
15164 }
15165
15166 DisplaySurfaceCreateInfoKHR& setPNext( const void* pNext_ )
15167 {
15168 pNext = pNext_;
15169 return *this;
15170 }
15171
15172 DisplaySurfaceCreateInfoKHR& setFlags( DisplaySurfaceCreateFlagsKHR flags_ )
15173 {
15174 flags = flags_;
15175 return *this;
15176 }
15177
15178 DisplaySurfaceCreateInfoKHR& setDisplayMode( DisplayModeKHR displayMode_ )
15179 {
15180 displayMode = displayMode_;
15181 return *this;
15182 }
15183
15184 DisplaySurfaceCreateInfoKHR& setPlaneIndex( uint32_t planeIndex_ )
15185 {
15186 planeIndex = planeIndex_;
15187 return *this;
15188 }
15189
15190 DisplaySurfaceCreateInfoKHR& setPlaneStackIndex( uint32_t planeStackIndex_ )
15191 {
15192 planeStackIndex = planeStackIndex_;
15193 return *this;
15194 }
15195
15196 DisplaySurfaceCreateInfoKHR& setTransform( SurfaceTransformFlagBitsKHR transform_ )
15197 {
15198 transform = transform_;
15199 return *this;
15200 }
15201
15202 DisplaySurfaceCreateInfoKHR& setGlobalAlpha( float globalAlpha_ )
15203 {
15204 globalAlpha = globalAlpha_;
15205 return *this;
15206 }
15207
15208 DisplaySurfaceCreateInfoKHR& setAlphaMode( DisplayPlaneAlphaFlagBitsKHR alphaMode_ )
15209 {
15210 alphaMode = alphaMode_;
15211 return *this;
15212 }
15213
15214 DisplaySurfaceCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
15215 {
15216 imageExtent = imageExtent_;
15217 return *this;
15218 }
15219
15220 operator const VkDisplaySurfaceCreateInfoKHR&() const
15221 {
15222 return *reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>(this);
15223 }
15224
15225 bool operator==( DisplaySurfaceCreateInfoKHR const& rhs ) const
15226 {
15227 return ( sType == rhs.sType )
15228 && ( pNext == rhs.pNext )
15229 && ( flags == rhs.flags )
15230 && ( displayMode == rhs.displayMode )
15231 && ( planeIndex == rhs.planeIndex )
15232 && ( planeStackIndex == rhs.planeStackIndex )
15233 && ( transform == rhs.transform )
15234 && ( globalAlpha == rhs.globalAlpha )
15235 && ( alphaMode == rhs.alphaMode )
15236 && ( imageExtent == rhs.imageExtent );
15237 }
15238
15239 bool operator!=( DisplaySurfaceCreateInfoKHR const& rhs ) const
15240 {
15241 return !operator==( rhs );
15242 }
15243
15244 private:
15245 StructureType sType;
15246
15247 public:
15248 const void* pNext;
15249 DisplaySurfaceCreateFlagsKHR flags;
15250 DisplayModeKHR displayMode;
15251 uint32_t planeIndex;
15252 uint32_t planeStackIndex;
15253 SurfaceTransformFlagBitsKHR transform;
15254 float globalAlpha;
15255 DisplayPlaneAlphaFlagBitsKHR alphaMode;
15256 Extent2D imageExtent;
15257 };
15258 static_assert( sizeof( DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
15259
15260 struct SurfaceCapabilitiesKHR
15261 {
15262 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() )
15263 : minImageCount( minImageCount_ )
15264 , maxImageCount( maxImageCount_ )
15265 , currentExtent( currentExtent_ )
15266 , minImageExtent( minImageExtent_ )
15267 , maxImageExtent( maxImageExtent_ )
15268 , maxImageArrayLayers( maxImageArrayLayers_ )
15269 , supportedTransforms( supportedTransforms_ )
15270 , currentTransform( currentTransform_ )
15271 , supportedCompositeAlpha( supportedCompositeAlpha_ )
15272 , supportedUsageFlags( supportedUsageFlags_ )
15273 {
15274 }
15275
15276 SurfaceCapabilitiesKHR( VkSurfaceCapabilitiesKHR const & rhs )
15277 {
15278 memcpy( this, &rhs, sizeof(SurfaceCapabilitiesKHR) );
15279 }
15280
15281 SurfaceCapabilitiesKHR& operator=( VkSurfaceCapabilitiesKHR const & rhs )
15282 {
15283 memcpy( this, &rhs, sizeof(SurfaceCapabilitiesKHR) );
15284 return *this;
15285 }
15286
15287 SurfaceCapabilitiesKHR& setMinImageCount( uint32_t minImageCount_ )
15288 {
15289 minImageCount = minImageCount_;
15290 return *this;
15291 }
15292
15293 SurfaceCapabilitiesKHR& setMaxImageCount( uint32_t maxImageCount_ )
15294 {
15295 maxImageCount = maxImageCount_;
15296 return *this;
15297 }
15298
15299 SurfaceCapabilitiesKHR& setCurrentExtent( Extent2D currentExtent_ )
15300 {
15301 currentExtent = currentExtent_;
15302 return *this;
15303 }
15304
15305 SurfaceCapabilitiesKHR& setMinImageExtent( Extent2D minImageExtent_ )
15306 {
15307 minImageExtent = minImageExtent_;
15308 return *this;
15309 }
15310
15311 SurfaceCapabilitiesKHR& setMaxImageExtent( Extent2D maxImageExtent_ )
15312 {
15313 maxImageExtent = maxImageExtent_;
15314 return *this;
15315 }
15316
15317 SurfaceCapabilitiesKHR& setMaxImageArrayLayers( uint32_t maxImageArrayLayers_ )
15318 {
15319 maxImageArrayLayers = maxImageArrayLayers_;
15320 return *this;
15321 }
15322
15323 SurfaceCapabilitiesKHR& setSupportedTransforms( SurfaceTransformFlagsKHR supportedTransforms_ )
15324 {
15325 supportedTransforms = supportedTransforms_;
15326 return *this;
15327 }
15328
15329 SurfaceCapabilitiesKHR& setCurrentTransform( SurfaceTransformFlagBitsKHR currentTransform_ )
15330 {
15331 currentTransform = currentTransform_;
15332 return *this;
15333 }
15334
15335 SurfaceCapabilitiesKHR& setSupportedCompositeAlpha( CompositeAlphaFlagsKHR supportedCompositeAlpha_ )
15336 {
15337 supportedCompositeAlpha = supportedCompositeAlpha_;
15338 return *this;
15339 }
15340
15341 SurfaceCapabilitiesKHR& setSupportedUsageFlags( ImageUsageFlags supportedUsageFlags_ )
15342 {
15343 supportedUsageFlags = supportedUsageFlags_;
15344 return *this;
15345 }
15346
15347 operator const VkSurfaceCapabilitiesKHR&() const
15348 {
15349 return *reinterpret_cast<const VkSurfaceCapabilitiesKHR*>(this);
15350 }
15351
15352 bool operator==( SurfaceCapabilitiesKHR const& rhs ) const
15353 {
15354 return ( minImageCount == rhs.minImageCount )
15355 && ( maxImageCount == rhs.maxImageCount )
15356 && ( currentExtent == rhs.currentExtent )
15357 && ( minImageExtent == rhs.minImageExtent )
15358 && ( maxImageExtent == rhs.maxImageExtent )
15359 && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
15360 && ( supportedTransforms == rhs.supportedTransforms )
15361 && ( currentTransform == rhs.currentTransform )
15362 && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha )
15363 && ( supportedUsageFlags == rhs.supportedUsageFlags );
15364 }
15365
15366 bool operator!=( SurfaceCapabilitiesKHR const& rhs ) const
15367 {
15368 return !operator==( rhs );
15369 }
15370
15371 uint32_t minImageCount;
15372 uint32_t maxImageCount;
15373 Extent2D currentExtent;
15374 Extent2D minImageExtent;
15375 Extent2D maxImageExtent;
15376 uint32_t maxImageArrayLayers;
15377 SurfaceTransformFlagsKHR supportedTransforms;
15378 SurfaceTransformFlagBitsKHR currentTransform;
15379 CompositeAlphaFlagsKHR supportedCompositeAlpha;
15380 ImageUsageFlags supportedUsageFlags;
15381 };
15382 static_assert( sizeof( SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ), "struct and wrapper have different size!" );
15383
15384 struct SwapchainCreateInfoKHR
15385 {
15386 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() )
15387 : sType( StructureType::eSwapchainCreateInfoKHR )
15388 , pNext( nullptr )
15389 , flags( flags_ )
15390 , surface( surface_ )
15391 , minImageCount( minImageCount_ )
15392 , imageFormat( imageFormat_ )
15393 , imageColorSpace( imageColorSpace_ )
15394 , imageExtent( imageExtent_ )
15395 , imageArrayLayers( imageArrayLayers_ )
15396 , imageUsage( imageUsage_ )
15397 , imageSharingMode( imageSharingMode_ )
15398 , queueFamilyIndexCount( queueFamilyIndexCount_ )
15399 , pQueueFamilyIndices( pQueueFamilyIndices_ )
15400 , preTransform( preTransform_ )
15401 , compositeAlpha( compositeAlpha_ )
15402 , presentMode( presentMode_ )
15403 , clipped( clipped_ )
15404 , oldSwapchain( oldSwapchain_ )
15405 {
15406 }
15407
15408 SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs )
15409 {
15410 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15411 }
15412
15413 SwapchainCreateInfoKHR& operator=( VkSwapchainCreateInfoKHR const & rhs )
15414 {
15415 memcpy( this, &rhs, sizeof(SwapchainCreateInfoKHR) );
15416 return *this;
15417 }
15418
15419 SwapchainCreateInfoKHR& setSType( StructureType sType_ )
15420 {
15421 sType = sType_;
15422 return *this;
15423 }
15424
15425 SwapchainCreateInfoKHR& setPNext( const void* pNext_ )
15426 {
15427 pNext = pNext_;
15428 return *this;
15429 }
15430
15431 SwapchainCreateInfoKHR& setFlags( SwapchainCreateFlagsKHR flags_ )
15432 {
15433 flags = flags_;
15434 return *this;
15435 }
15436
15437 SwapchainCreateInfoKHR& setSurface( SurfaceKHR surface_ )
15438 {
15439 surface = surface_;
15440 return *this;
15441 }
15442
15443 SwapchainCreateInfoKHR& setMinImageCount( uint32_t minImageCount_ )
15444 {
15445 minImageCount = minImageCount_;
15446 return *this;
15447 }
15448
15449 SwapchainCreateInfoKHR& setImageFormat( Format imageFormat_ )
15450 {
15451 imageFormat = imageFormat_;
15452 return *this;
15453 }
15454
15455 SwapchainCreateInfoKHR& setImageColorSpace( ColorSpaceKHR imageColorSpace_ )
15456 {
15457 imageColorSpace = imageColorSpace_;
15458 return *this;
15459 }
15460
15461 SwapchainCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
15462 {
15463 imageExtent = imageExtent_;
15464 return *this;
15465 }
15466
15467 SwapchainCreateInfoKHR& setImageArrayLayers( uint32_t imageArrayLayers_ )
15468 {
15469 imageArrayLayers = imageArrayLayers_;
15470 return *this;
15471 }
15472
15473 SwapchainCreateInfoKHR& setImageUsage( ImageUsageFlags imageUsage_ )
15474 {
15475 imageUsage = imageUsage_;
15476 return *this;
15477 }
15478
15479 SwapchainCreateInfoKHR& setImageSharingMode( SharingMode imageSharingMode_ )
15480 {
15481 imageSharingMode = imageSharingMode_;
15482 return *this;
15483 }
15484
15485 SwapchainCreateInfoKHR& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
15486 {
15487 queueFamilyIndexCount = queueFamilyIndexCount_;
15488 return *this;
15489 }
15490
15491 SwapchainCreateInfoKHR& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
15492 {
15493 pQueueFamilyIndices = pQueueFamilyIndices_;
15494 return *this;
15495 }
15496
15497 SwapchainCreateInfoKHR& setPreTransform( SurfaceTransformFlagBitsKHR preTransform_ )
15498 {
15499 preTransform = preTransform_;
15500 return *this;
15501 }
15502
15503 SwapchainCreateInfoKHR& setCompositeAlpha( CompositeAlphaFlagBitsKHR compositeAlpha_ )
15504 {
15505 compositeAlpha = compositeAlpha_;
15506 return *this;
15507 }
15508
15509 SwapchainCreateInfoKHR& setPresentMode( PresentModeKHR presentMode_ )
15510 {
15511 presentMode = presentMode_;
15512 return *this;
15513 }
15514
15515 SwapchainCreateInfoKHR& setClipped( Bool32 clipped_ )
15516 {
15517 clipped = clipped_;
15518 return *this;
15519 }
15520
15521 SwapchainCreateInfoKHR& setOldSwapchain( SwapchainKHR oldSwapchain_ )
15522 {
15523 oldSwapchain = oldSwapchain_;
15524 return *this;
15525 }
15526
15527 operator const VkSwapchainCreateInfoKHR&() const
15528 {
15529 return *reinterpret_cast<const VkSwapchainCreateInfoKHR*>(this);
15530 }
15531
15532 bool operator==( SwapchainCreateInfoKHR const& rhs ) const
15533 {
15534 return ( sType == rhs.sType )
15535 && ( pNext == rhs.pNext )
15536 && ( flags == rhs.flags )
15537 && ( surface == rhs.surface )
15538 && ( minImageCount == rhs.minImageCount )
15539 && ( imageFormat == rhs.imageFormat )
15540 && ( imageColorSpace == rhs.imageColorSpace )
15541 && ( imageExtent == rhs.imageExtent )
15542 && ( imageArrayLayers == rhs.imageArrayLayers )
15543 && ( imageUsage == rhs.imageUsage )
15544 && ( imageSharingMode == rhs.imageSharingMode )
15545 && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
15546 && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
15547 && ( preTransform == rhs.preTransform )
15548 && ( compositeAlpha == rhs.compositeAlpha )
15549 && ( presentMode == rhs.presentMode )
15550 && ( clipped == rhs.clipped )
15551 && ( oldSwapchain == rhs.oldSwapchain );
15552 }
15553
15554 bool operator!=( SwapchainCreateInfoKHR const& rhs ) const
15555 {
15556 return !operator==( rhs );
15557 }
15558
15559 private:
15560 StructureType sType;
15561
15562 public:
15563 const void* pNext;
15564 SwapchainCreateFlagsKHR flags;
15565 SurfaceKHR surface;
15566 uint32_t minImageCount;
15567 Format imageFormat;
15568 ColorSpaceKHR imageColorSpace;
15569 Extent2D imageExtent;
15570 uint32_t imageArrayLayers;
15571 ImageUsageFlags imageUsage;
15572 SharingMode imageSharingMode;
15573 uint32_t queueFamilyIndexCount;
15574 const uint32_t* pQueueFamilyIndices;
15575 SurfaceTransformFlagBitsKHR preTransform;
15576 CompositeAlphaFlagBitsKHR compositeAlpha;
15577 PresentModeKHR presentMode;
15578 Bool32 clipped;
15579 SwapchainKHR oldSwapchain;
15580 };
15581 static_assert( sizeof( SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ), "struct and wrapper have different size!" );
15582
15583 enum class DebugReportFlagBitsEXT
15584 {
15585 eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT,
15586 eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT,
15587 ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
15588 eError = VK_DEBUG_REPORT_ERROR_BIT_EXT,
15589 eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT
15590 };
15591
15592 using DebugReportFlagsEXT = Flags<DebugReportFlagBitsEXT, VkDebugReportFlagsEXT>;
15593
15594 inline DebugReportFlagsEXT operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 )
15595 {
15596 return DebugReportFlagsEXT( bit0 ) | bit1;
15597 }
15598
15599 struct DebugReportCallbackCreateInfoEXT
15600 {
15601 DebugReportCallbackCreateInfoEXT( DebugReportFlagsEXT flags_ = DebugReportFlagsEXT(), PFN_vkDebugReportCallbackEXT pfnCallback_ = nullptr, void* pUserData_ = nullptr )
15602 : sType( StructureType::eDebugReportCallbackCreateInfoEXT )
15603 , pNext( nullptr )
15604 , flags( flags_ )
15605 , pfnCallback( pfnCallback_ )
15606 , pUserData( pUserData_ )
15607 {
15608 }
15609
15610 DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs )
15611 {
15612 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15613 }
15614
15615 DebugReportCallbackCreateInfoEXT& operator=( VkDebugReportCallbackCreateInfoEXT const & rhs )
15616 {
15617 memcpy( this, &rhs, sizeof(DebugReportCallbackCreateInfoEXT) );
15618 return *this;
15619 }
15620
15621 DebugReportCallbackCreateInfoEXT& setSType( StructureType sType_ )
15622 {
15623 sType = sType_;
15624 return *this;
15625 }
15626
15627 DebugReportCallbackCreateInfoEXT& setPNext( const void* pNext_ )
15628 {
15629 pNext = pNext_;
15630 return *this;
15631 }
15632
15633 DebugReportCallbackCreateInfoEXT& setFlags( DebugReportFlagsEXT flags_ )
15634 {
15635 flags = flags_;
15636 return *this;
15637 }
15638
15639 DebugReportCallbackCreateInfoEXT& setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ )
15640 {
15641 pfnCallback = pfnCallback_;
15642 return *this;
15643 }
15644
15645 DebugReportCallbackCreateInfoEXT& setPUserData( void* pUserData_ )
15646 {
15647 pUserData = pUserData_;
15648 return *this;
15649 }
15650
15651 operator const VkDebugReportCallbackCreateInfoEXT&() const
15652 {
15653 return *reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(this);
15654 }
15655
15656 bool operator==( DebugReportCallbackCreateInfoEXT const& rhs ) const
15657 {
15658 return ( sType == rhs.sType )
15659 && ( pNext == rhs.pNext )
15660 && ( flags == rhs.flags )
15661 && ( pfnCallback == rhs.pfnCallback )
15662 && ( pUserData == rhs.pUserData );
15663 }
15664
15665 bool operator!=( DebugReportCallbackCreateInfoEXT const& rhs ) const
15666 {
15667 return !operator==( rhs );
15668 }
15669
15670 private:
15671 StructureType sType;
15672
15673 public:
15674 const void* pNext;
15675 DebugReportFlagsEXT flags;
15676 PFN_vkDebugReportCallbackEXT pfnCallback;
15677 void* pUserData;
15678 };
15679 static_assert( sizeof( DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ), "struct and wrapper have different size!" );
15680
15681 enum class DebugReportObjectTypeEXT
15682 {
15683 eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
15684 eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
15685 ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
15686 eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
15687 eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
15688 eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
15689 eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
15690 eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
15691 eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
15692 eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
15693 eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
15694 eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
15695 eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
15696 eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
15697 eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
15698 eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
15699 ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
15700 ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
15701 eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
15702 ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
15703 eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
15704 eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
15705 eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
15706 eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
15707 eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
15708 eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
15709 eSurfaceKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
15710 eSwapchainKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
15711 eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT
15712 };
15713
15714 struct DebugMarkerObjectNameInfoEXT
15715 {
15716 DebugMarkerObjectNameInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, const char* pObjectName_ = nullptr )
15717 : sType( StructureType::eDebugMarkerObjectNameInfoEXT )
15718 , pNext( nullptr )
15719 , objectType( objectType_ )
15720 , object( object_ )
15721 , pObjectName( pObjectName_ )
15722 {
15723 }
15724
15725 DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs )
15726 {
15727 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15728 }
15729
15730 DebugMarkerObjectNameInfoEXT& operator=( VkDebugMarkerObjectNameInfoEXT const & rhs )
15731 {
15732 memcpy( this, &rhs, sizeof(DebugMarkerObjectNameInfoEXT) );
15733 return *this;
15734 }
15735
15736 DebugMarkerObjectNameInfoEXT& setSType( StructureType sType_ )
15737 {
15738 sType = sType_;
15739 return *this;
15740 }
15741
15742 DebugMarkerObjectNameInfoEXT& setPNext( const void* pNext_ )
15743 {
15744 pNext = pNext_;
15745 return *this;
15746 }
15747
15748 DebugMarkerObjectNameInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15749 {
15750 objectType = objectType_;
15751 return *this;
15752 }
15753
15754 DebugMarkerObjectNameInfoEXT& setObject( uint64_t object_ )
15755 {
15756 object = object_;
15757 return *this;
15758 }
15759
15760 DebugMarkerObjectNameInfoEXT& setPObjectName( const char* pObjectName_ )
15761 {
15762 pObjectName = pObjectName_;
15763 return *this;
15764 }
15765
15766 operator const VkDebugMarkerObjectNameInfoEXT&() const
15767 {
15768 return *reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>(this);
15769 }
15770
15771 bool operator==( DebugMarkerObjectNameInfoEXT const& rhs ) const
15772 {
15773 return ( sType == rhs.sType )
15774 && ( pNext == rhs.pNext )
15775 && ( objectType == rhs.objectType )
15776 && ( object == rhs.object )
15777 && ( pObjectName == rhs.pObjectName );
15778 }
15779
15780 bool operator!=( DebugMarkerObjectNameInfoEXT const& rhs ) const
15781 {
15782 return !operator==( rhs );
15783 }
15784
15785 private:
15786 StructureType sType;
15787
15788 public:
15789 const void* pNext;
15790 DebugReportObjectTypeEXT objectType;
15791 uint64_t object;
15792 const char* pObjectName;
15793 };
15794 static_assert( sizeof( DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ), "struct and wrapper have different size!" );
15795
15796 struct DebugMarkerObjectTagInfoEXT
15797 {
15798 DebugMarkerObjectTagInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, uint64_t tagName_ = 0, size_t tagSize_ = 0, const void* pTag_ = nullptr )
15799 : sType( StructureType::eDebugMarkerObjectTagInfoEXT )
15800 , pNext( nullptr )
15801 , objectType( objectType_ )
15802 , object( object_ )
15803 , tagName( tagName_ )
15804 , tagSize( tagSize_ )
15805 , pTag( pTag_ )
15806 {
15807 }
15808
15809 DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs )
15810 {
15811 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15812 }
15813
15814 DebugMarkerObjectTagInfoEXT& operator=( VkDebugMarkerObjectTagInfoEXT const & rhs )
15815 {
15816 memcpy( this, &rhs, sizeof(DebugMarkerObjectTagInfoEXT) );
15817 return *this;
15818 }
15819
15820 DebugMarkerObjectTagInfoEXT& setSType( StructureType sType_ )
15821 {
15822 sType = sType_;
15823 return *this;
15824 }
15825
15826 DebugMarkerObjectTagInfoEXT& setPNext( const void* pNext_ )
15827 {
15828 pNext = pNext_;
15829 return *this;
15830 }
15831
15832 DebugMarkerObjectTagInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
15833 {
15834 objectType = objectType_;
15835 return *this;
15836 }
15837
15838 DebugMarkerObjectTagInfoEXT& setObject( uint64_t object_ )
15839 {
15840 object = object_;
15841 return *this;
15842 }
15843
15844 DebugMarkerObjectTagInfoEXT& setTagName( uint64_t tagName_ )
15845 {
15846 tagName = tagName_;
15847 return *this;
15848 }
15849
15850 DebugMarkerObjectTagInfoEXT& setTagSize( size_t tagSize_ )
15851 {
15852 tagSize = tagSize_;
15853 return *this;
15854 }
15855
15856 DebugMarkerObjectTagInfoEXT& setPTag( const void* pTag_ )
15857 {
15858 pTag = pTag_;
15859 return *this;
15860 }
15861
15862 operator const VkDebugMarkerObjectTagInfoEXT&() const
15863 {
15864 return *reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>(this);
15865 }
15866
15867 bool operator==( DebugMarkerObjectTagInfoEXT const& rhs ) const
15868 {
15869 return ( sType == rhs.sType )
15870 && ( pNext == rhs.pNext )
15871 && ( objectType == rhs.objectType )
15872 && ( object == rhs.object )
15873 && ( tagName == rhs.tagName )
15874 && ( tagSize == rhs.tagSize )
15875 && ( pTag == rhs.pTag );
15876 }
15877
15878 bool operator!=( DebugMarkerObjectTagInfoEXT const& rhs ) const
15879 {
15880 return !operator==( rhs );
15881 }
15882
15883 private:
15884 StructureType sType;
15885
15886 public:
15887 const void* pNext;
15888 DebugReportObjectTypeEXT objectType;
15889 uint64_t object;
15890 uint64_t tagName;
15891 size_t tagSize;
15892 const void* pTag;
15893 };
15894 static_assert( sizeof( DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ), "struct and wrapper have different size!" );
15895
Lenny Komow6501c122016-08-31 15:03:49 -060015896 enum class DebugReportErrorEXT
15897 {
15898 eNone = VK_DEBUG_REPORT_ERROR_NONE_EXT,
15899 eCallbackRef = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT
15900 };
15901
15902 enum class RasterizationOrderAMD
15903 {
15904 eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD,
15905 eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD
15906 };
15907
15908 struct PipelineRasterizationStateRasterizationOrderAMD
15909 {
15910 PipelineRasterizationStateRasterizationOrderAMD( RasterizationOrderAMD rasterizationOrder_ = RasterizationOrderAMD::eStrict )
15911 : sType( StructureType::ePipelineRasterizationStateRasterizationOrderAMD )
15912 , pNext( nullptr )
15913 , rasterizationOrder( rasterizationOrder_ )
15914 {
15915 }
15916
15917 PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15918 {
15919 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15920 }
15921
15922 PipelineRasterizationStateRasterizationOrderAMD& operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
15923 {
15924 memcpy( this, &rhs, sizeof(PipelineRasterizationStateRasterizationOrderAMD) );
15925 return *this;
15926 }
15927
15928 PipelineRasterizationStateRasterizationOrderAMD& setSType( StructureType sType_ )
15929 {
15930 sType = sType_;
15931 return *this;
15932 }
15933
15934 PipelineRasterizationStateRasterizationOrderAMD& setPNext( const void* pNext_ )
15935 {
15936 pNext = pNext_;
15937 return *this;
15938 }
15939
15940 PipelineRasterizationStateRasterizationOrderAMD& setRasterizationOrder( RasterizationOrderAMD rasterizationOrder_ )
15941 {
15942 rasterizationOrder = rasterizationOrder_;
15943 return *this;
15944 }
15945
15946 operator const VkPipelineRasterizationStateRasterizationOrderAMD&() const
15947 {
15948 return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(this);
15949 }
15950
15951 bool operator==( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15952 {
15953 return ( sType == rhs.sType )
15954 && ( pNext == rhs.pNext )
15955 && ( rasterizationOrder == rhs.rasterizationOrder );
15956 }
15957
15958 bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
15959 {
15960 return !operator==( rhs );
15961 }
15962
15963 private:
15964 StructureType sType;
15965
15966 public:
15967 const void* pNext;
15968 RasterizationOrderAMD rasterizationOrder;
15969 };
15970 static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) == sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), "struct and wrapper have different size!" );
15971
15972 enum class ExternalMemoryHandleTypeFlagBitsNV
15973 {
15974 eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV,
15975 eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV,
15976 eD3D11Image = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV,
15977 eD3D11ImageKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
15978 };
15979
15980 using ExternalMemoryHandleTypeFlagsNV = Flags<ExternalMemoryHandleTypeFlagBitsNV, VkExternalMemoryHandleTypeFlagsNV>;
15981
15982 inline ExternalMemoryHandleTypeFlagsNV operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 )
15983 {
15984 return ExternalMemoryHandleTypeFlagsNV( bit0 ) | bit1;
15985 }
15986
Lenny Komowbed9b5c2016-08-11 11:23:15 -060015987 class Device
15988 {
15989 public:
15990 Device()
15991 : m_device(VK_NULL_HANDLE)
15992 {}
15993
15994#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
15995 Device(VkDevice device)
15996 : m_device(device)
15997 {}
15998
15999 Device& operator=(VkDevice device)
16000 {
16001 m_device = device;
16002 return *this;
16003 }
16004#endif
16005
Lenny Komowebf33162016-08-26 14:10:08 -060016006 bool operator==(Device const &rhs) const
16007 {
16008 return m_device == rhs.m_device;
16009 }
16010
16011 bool operator!=(Device const &rhs) const
16012 {
16013 return m_device != rhs.m_device;
16014 }
16015
16016 bool operator<(Device const &rhs) const
16017 {
16018 return m_device < rhs.m_device;
16019 }
16020
Lenny Komowbed9b5c2016-08-11 11:23:15 -060016021 PFN_vkVoidFunction getProcAddr( const char* pName ) const
16022 {
16023 return vkGetDeviceProcAddr( m_device, pName );
16024 }
16025
16026#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16027 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
16028 {
16029 return vkGetDeviceProcAddr( m_device, name.c_str() );
16030 }
16031#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16032
16033 void destroy( const AllocationCallbacks* pAllocator ) const
16034 {
16035 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16036 }
16037
16038#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16039 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
16040 {
16041 vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16042 }
16043#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16044
16045 void getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue* pQueue ) const
16046 {
16047 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( pQueue ) );
16048 }
16049
16050#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16051 Queue getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const
16052 {
16053 Queue queue;
16054 vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( &queue ) );
16055 return queue;
16056 }
16057#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16058
16059#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16060 Result waitIdle( ) const
16061 {
16062 return static_cast<Result>( vkDeviceWaitIdle( m_device ) );
16063 }
16064#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16065
16066#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16067 ResultValueType<void>::type waitIdle() const
16068 {
16069 Result result = static_cast<Result>( vkDeviceWaitIdle( m_device ) );
16070 return createResultValue( result, "vk::Device::waitIdle" );
16071 }
16072#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16073
16074 Result allocateMemory( const MemoryAllocateInfo* pAllocateInfo, const AllocationCallbacks* pAllocator, DeviceMemory* pMemory ) const
16075 {
16076 return static_cast<Result>( vkAllocateMemory( m_device, reinterpret_cast<const VkMemoryAllocateInfo*>( pAllocateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDeviceMemory*>( pMemory ) ) );
16077 }
16078
16079#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16080 ResultValueType<DeviceMemory>::type allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16081 {
16082 DeviceMemory memory;
16083 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 ) ) );
16084 return createResultValue( result, memory, "vk::Device::allocateMemory" );
16085 }
16086#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16087
16088 void freeMemory( DeviceMemory memory, const AllocationCallbacks* pAllocator ) const
16089 {
16090 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16091 }
16092
16093#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16094 void freeMemory( DeviceMemory memory, Optional<const AllocationCallbacks> allocator = nullptr ) const
16095 {
16096 vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16097 }
16098#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16099
16100#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16101 Result mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void** ppData ) const
16102 {
16103 return static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), ppData ) );
16104 }
16105#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16106
16107#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16108 ResultValueType<void*>::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags = MemoryMapFlags() ) const
16109 {
16110 void* pData;
16111 Result result = static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), &pData ) );
16112 return createResultValue( result, pData, "vk::Device::mapMemory" );
16113 }
16114#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16115
16116#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16117 void unmapMemory( DeviceMemory memory ) const
16118 {
16119 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
16120 }
16121#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16122
16123#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16124 void unmapMemory( DeviceMemory memory ) const
16125 {
16126 vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
16127 }
16128#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16129
16130 Result flushMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
16131 {
16132 return static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
16133 }
16134
16135#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16136 ResultValueType<void>::type flushMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
16137 {
16138 Result result = static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
16139 return createResultValue( result, "vk::Device::flushMappedMemoryRanges" );
16140 }
16141#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16142
16143 Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
16144 {
16145 return static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
16146 }
16147
16148#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16149 ResultValueType<void>::type invalidateMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
16150 {
16151 Result result = static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
16152 return createResultValue( result, "vk::Device::invalidateMappedMemoryRanges" );
16153 }
16154#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16155
16156 void getMemoryCommitment( DeviceMemory memory, DeviceSize* pCommittedMemoryInBytes ) const
16157 {
16158 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), pCommittedMemoryInBytes );
16159 }
16160
16161#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16162 DeviceSize getMemoryCommitment( DeviceMemory memory ) const
16163 {
16164 DeviceSize committedMemoryInBytes;
16165 vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), &committedMemoryInBytes );
16166 return committedMemoryInBytes;
16167 }
16168#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16169
16170 void getBufferMemoryRequirements( Buffer buffer, MemoryRequirements* pMemoryRequirements ) const
16171 {
16172 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
16173 }
16174
16175#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16176 MemoryRequirements getBufferMemoryRequirements( Buffer buffer ) const
16177 {
16178 MemoryRequirements memoryRequirements;
16179 vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
16180 return memoryRequirements;
16181 }
16182#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16183
16184#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16185 Result bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
16186 {
16187 return static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16188 }
16189#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16190
16191#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16192 ResultValueType<void>::type bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
16193 {
16194 Result result = static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16195 return createResultValue( result, "vk::Device::bindBufferMemory" );
16196 }
16197#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16198
16199 void getImageMemoryRequirements( Image image, MemoryRequirements* pMemoryRequirements ) const
16200 {
16201 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
16202 }
16203
16204#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16205 MemoryRequirements getImageMemoryRequirements( Image image ) const
16206 {
16207 MemoryRequirements memoryRequirements;
16208 vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
16209 return memoryRequirements;
16210 }
16211#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16212
16213#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16214 Result bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
16215 {
16216 return static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16217 }
16218#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16219
16220#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16221 ResultValueType<void>::type bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
16222 {
16223 Result result = static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
16224 return createResultValue( result, "vk::Device::bindImageMemory" );
16225 }
16226#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16227
16228 void getImageSparseMemoryRequirements( Image image, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements* pSparseMemoryRequirements ) const
16229 {
16230 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), pSparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( pSparseMemoryRequirements ) );
16231 }
16232
16233#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16234 template <typename Allocator = std::allocator<SparseImageMemoryRequirements>>
16235 std::vector<SparseImageMemoryRequirements,Allocator> getImageSparseMemoryRequirements( Image image ) const
16236 {
16237 std::vector<SparseImageMemoryRequirements,Allocator> sparseMemoryRequirements;
16238 uint32_t sparseMemoryRequirementCount;
16239 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, nullptr );
16240 sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
16241 vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( sparseMemoryRequirements.data() ) );
16242 return sparseMemoryRequirements;
16243 }
16244#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16245
16246 Result createFence( const FenceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
16247 {
16248 return static_cast<Result>( vkCreateFence( m_device, reinterpret_cast<const VkFenceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
16249 }
16250
16251#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16252 ResultValueType<Fence>::type createFence( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16253 {
16254 Fence fence;
16255 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 ) ) );
16256 return createResultValue( result, fence, "vk::Device::createFence" );
16257 }
16258#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16259
16260 void destroyFence( Fence fence, const AllocationCallbacks* pAllocator ) const
16261 {
16262 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16263 }
16264
16265#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16266 void destroyFence( Fence fence, Optional<const AllocationCallbacks> allocator = nullptr ) const
16267 {
16268 vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16269 }
16270#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16271
16272 Result resetFences( uint32_t fenceCount, const Fence* pFences ) const
16273 {
16274 return static_cast<Result>( vkResetFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ) ) );
16275 }
16276
16277#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16278 ResultValueType<void>::type resetFences( ArrayProxy<const Fence> fences ) const
16279 {
16280 Result result = static_cast<Result>( vkResetFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ) ) );
16281 return createResultValue( result, "vk::Device::resetFences" );
16282 }
16283#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16284
16285#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16286 Result getFenceStatus( Fence fence ) const
16287 {
16288 return static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
16289 }
16290#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16291
16292#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16293 Result getFenceStatus( Fence fence ) const
16294 {
16295 Result result = static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
16296 return createResultValue( result, "vk::Device::getFenceStatus", { Result::eSuccess, Result::eNotReady } );
16297 }
16298#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16299
16300 Result waitForFences( uint32_t fenceCount, const Fence* pFences, Bool32 waitAll, uint64_t timeout ) const
16301 {
16302 return static_cast<Result>( vkWaitForFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ), waitAll, timeout ) );
16303 }
16304
16305#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16306 Result waitForFences( ArrayProxy<const Fence> fences, Bool32 waitAll, uint64_t timeout ) const
16307 {
16308 Result result = static_cast<Result>( vkWaitForFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ), waitAll, timeout ) );
16309 return createResultValue( result, "vk::Device::waitForFences", { Result::eSuccess, Result::eTimeout } );
16310 }
16311#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16312
16313 Result createSemaphore( const SemaphoreCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Semaphore* pSemaphore ) const
16314 {
16315 return static_cast<Result>( vkCreateSemaphore( m_device, reinterpret_cast<const VkSemaphoreCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSemaphore*>( pSemaphore ) ) );
16316 }
16317
16318#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16319 ResultValueType<Semaphore>::type createSemaphore( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16320 {
16321 Semaphore semaphore;
16322 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 ) ) );
16323 return createResultValue( result, semaphore, "vk::Device::createSemaphore" );
16324 }
16325#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16326
16327 void destroySemaphore( Semaphore semaphore, const AllocationCallbacks* pAllocator ) const
16328 {
16329 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16330 }
16331
16332#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16333 void destroySemaphore( Semaphore semaphore, Optional<const AllocationCallbacks> allocator = nullptr ) const
16334 {
16335 vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16336 }
16337#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16338
16339 Result createEvent( const EventCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Event* pEvent ) const
16340 {
16341 return static_cast<Result>( vkCreateEvent( m_device, reinterpret_cast<const VkEventCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkEvent*>( pEvent ) ) );
16342 }
16343
16344#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16345 ResultValueType<Event>::type createEvent( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16346 {
16347 Event event;
16348 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 ) ) );
16349 return createResultValue( result, event, "vk::Device::createEvent" );
16350 }
16351#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16352
16353 void destroyEvent( Event event, const AllocationCallbacks* pAllocator ) const
16354 {
16355 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16356 }
16357
16358#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16359 void destroyEvent( Event event, Optional<const AllocationCallbacks> allocator = nullptr ) const
16360 {
16361 vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16362 }
16363#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16364
16365#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16366 Result getEventStatus( Event event ) const
16367 {
16368 return static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16369 }
16370#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16371
16372#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16373 Result getEventStatus( Event event ) const
16374 {
16375 Result result = static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
16376 return createResultValue( result, "vk::Device::getEventStatus", { Result::eEventSet, Result::eEventReset } );
16377 }
16378#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16379
16380#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16381 Result setEvent( Event event ) const
16382 {
16383 return static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16384 }
16385#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16386
16387#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16388 ResultValueType<void>::type setEvent( Event event ) const
16389 {
16390 Result result = static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
16391 return createResultValue( result, "vk::Device::setEvent" );
16392 }
16393#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16394
16395#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16396 Result resetEvent( Event event ) const
16397 {
16398 return static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16399 }
16400#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16401
16402#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16403 ResultValueType<void>::type resetEvent( Event event ) const
16404 {
16405 Result result = static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
16406 return createResultValue( result, "vk::Device::resetEvent" );
16407 }
16408#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16409
16410 Result createQueryPool( const QueryPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, QueryPool* pQueryPool ) const
16411 {
16412 return static_cast<Result>( vkCreateQueryPool( m_device, reinterpret_cast<const VkQueryPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkQueryPool*>( pQueryPool ) ) );
16413 }
16414
16415#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16416 ResultValueType<QueryPool>::type createQueryPool( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16417 {
16418 QueryPool queryPool;
16419 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 ) ) );
16420 return createResultValue( result, queryPool, "vk::Device::createQueryPool" );
16421 }
16422#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16423
16424 void destroyQueryPool( QueryPool queryPool, const AllocationCallbacks* pAllocator ) const
16425 {
16426 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16427 }
16428
16429#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16430 void destroyQueryPool( QueryPool queryPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16431 {
16432 vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16433 }
16434#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16435
16436 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, DeviceSize stride, QueryResultFlags flags ) const
16437 {
16438 return static_cast<Result>( vkGetQueryPoolResults( m_device, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, dataSize, pData, stride, static_cast<VkQueryResultFlags>( flags ) ) );
16439 }
16440
16441#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16442 template <typename T>
16443 Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, ArrayProxy<T> data, DeviceSize stride, QueryResultFlags flags ) const
16444 {
16445 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 ) ) );
16446 return createResultValue( result, "vk::Device::getQueryPoolResults", { Result::eSuccess, Result::eNotReady } );
16447 }
16448#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16449
16450 Result createBuffer( const BufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Buffer* pBuffer ) const
16451 {
16452 return static_cast<Result>( vkCreateBuffer( m_device, reinterpret_cast<const VkBufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBuffer*>( pBuffer ) ) );
16453 }
16454
16455#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16456 ResultValueType<Buffer>::type createBuffer( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16457 {
16458 Buffer buffer;
16459 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 ) ) );
16460 return createResultValue( result, buffer, "vk::Device::createBuffer" );
16461 }
16462#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16463
16464 void destroyBuffer( Buffer buffer, const AllocationCallbacks* pAllocator ) const
16465 {
16466 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16467 }
16468
16469#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16470 void destroyBuffer( Buffer buffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16471 {
16472 vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16473 }
16474#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16475
16476 Result createBufferView( const BufferViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, BufferView* pView ) const
16477 {
16478 return static_cast<Result>( vkCreateBufferView( m_device, reinterpret_cast<const VkBufferViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBufferView*>( pView ) ) );
16479 }
16480
16481#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16482 ResultValueType<BufferView>::type createBufferView( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16483 {
16484 BufferView view;
16485 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 ) ) );
16486 return createResultValue( result, view, "vk::Device::createBufferView" );
16487 }
16488#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16489
16490 void destroyBufferView( BufferView bufferView, const AllocationCallbacks* pAllocator ) const
16491 {
16492 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16493 }
16494
16495#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16496 void destroyBufferView( BufferView bufferView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16497 {
16498 vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16499 }
16500#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16501
16502 Result createImage( const ImageCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Image* pImage ) const
16503 {
16504 return static_cast<Result>( vkCreateImage( m_device, reinterpret_cast<const VkImageCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImage*>( pImage ) ) );
16505 }
16506
16507#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16508 ResultValueType<Image>::type createImage( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16509 {
16510 Image image;
16511 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 ) ) );
16512 return createResultValue( result, image, "vk::Device::createImage" );
16513 }
16514#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16515
16516 void destroyImage( Image image, const AllocationCallbacks* pAllocator ) const
16517 {
16518 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16519 }
16520
16521#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16522 void destroyImage( Image image, Optional<const AllocationCallbacks> allocator = nullptr ) const
16523 {
16524 vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16525 }
16526#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16527
16528 void getImageSubresourceLayout( Image image, const ImageSubresource* pSubresource, SubresourceLayout* pLayout ) const
16529 {
16530 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( pSubresource ), reinterpret_cast<VkSubresourceLayout*>( pLayout ) );
16531 }
16532
16533#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16534 SubresourceLayout getImageSubresourceLayout( Image image, const ImageSubresource & subresource ) const
16535 {
16536 SubresourceLayout layout;
16537 vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( &subresource ), reinterpret_cast<VkSubresourceLayout*>( &layout ) );
16538 return layout;
16539 }
16540#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16541
16542 Result createImageView( const ImageViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ImageView* pView ) const
16543 {
16544 return static_cast<Result>( vkCreateImageView( m_device, reinterpret_cast<const VkImageViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImageView*>( pView ) ) );
16545 }
16546
16547#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16548 ResultValueType<ImageView>::type createImageView( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16549 {
16550 ImageView view;
16551 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 ) ) );
16552 return createResultValue( result, view, "vk::Device::createImageView" );
16553 }
16554#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16555
16556 void destroyImageView( ImageView imageView, const AllocationCallbacks* pAllocator ) const
16557 {
16558 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16559 }
16560
16561#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16562 void destroyImageView( ImageView imageView, Optional<const AllocationCallbacks> allocator = nullptr ) const
16563 {
16564 vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16565 }
16566#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16567
16568 Result createShaderModule( const ShaderModuleCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ShaderModule* pShaderModule ) const
16569 {
16570 return static_cast<Result>( vkCreateShaderModule( m_device, reinterpret_cast<const VkShaderModuleCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkShaderModule*>( pShaderModule ) ) );
16571 }
16572
16573#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16574 ResultValueType<ShaderModule>::type createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16575 {
16576 ShaderModule shaderModule;
16577 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 ) ) );
16578 return createResultValue( result, shaderModule, "vk::Device::createShaderModule" );
16579 }
16580#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16581
16582 void destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks* pAllocator ) const
16583 {
16584 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16585 }
16586
16587#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16588 void destroyShaderModule( ShaderModule shaderModule, Optional<const AllocationCallbacks> allocator = nullptr ) const
16589 {
16590 vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16591 }
16592#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16593
16594 Result createPipelineCache( const PipelineCacheCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineCache* pPipelineCache ) const
16595 {
16596 return static_cast<Result>( vkCreatePipelineCache( m_device, reinterpret_cast<const VkPipelineCacheCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineCache*>( pPipelineCache ) ) );
16597 }
16598
16599#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16600 ResultValueType<PipelineCache>::type createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16601 {
16602 PipelineCache pipelineCache;
16603 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 ) ) );
16604 return createResultValue( result, pipelineCache, "vk::Device::createPipelineCache" );
16605 }
16606#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16607
16608 void destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks* pAllocator ) const
16609 {
16610 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16611 }
16612
16613#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16614 void destroyPipelineCache( PipelineCache pipelineCache, Optional<const AllocationCallbacks> allocator = nullptr ) const
16615 {
16616 vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16617 }
16618#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16619
16620 Result getPipelineCacheData( PipelineCache pipelineCache, size_t* pDataSize, void* pData ) const
16621 {
16622 return static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), pDataSize, pData ) );
16623 }
16624
16625#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16626 template <typename Allocator = std::allocator<uint8_t>>
16627 typename ResultValueType<std::vector<uint8_t,Allocator>>::type getPipelineCacheData( PipelineCache pipelineCache ) const
16628 {
16629 std::vector<uint8_t,Allocator> data;
16630 size_t dataSize;
16631 Result result;
16632 do
16633 {
16634 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, nullptr ) );
16635 if ( ( result == Result::eSuccess ) && dataSize )
16636 {
16637 data.resize( dataSize );
16638 result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, reinterpret_cast<void*>( data.data() ) ) );
16639 }
16640 } while ( result == Result::eIncomplete );
16641 assert( dataSize <= data.size() );
16642 data.resize( dataSize );
16643 return createResultValue( result, data, "vk::Device::getPipelineCacheData" );
16644 }
16645#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16646
16647 Result mergePipelineCaches( PipelineCache dstCache, uint32_t srcCacheCount, const PipelineCache* pSrcCaches ) const
16648 {
16649 return static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCacheCount, reinterpret_cast<const VkPipelineCache*>( pSrcCaches ) ) );
16650 }
16651
16652#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16653 ResultValueType<void>::type mergePipelineCaches( PipelineCache dstCache, ArrayProxy<const PipelineCache> srcCaches ) const
16654 {
16655 Result result = static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCaches.size() , reinterpret_cast<const VkPipelineCache*>( srcCaches.data() ) ) );
16656 return createResultValue( result, "vk::Device::mergePipelineCaches" );
16657 }
16658#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16659
16660 Result createGraphicsPipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const GraphicsPipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16661 {
16662 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 ) ) );
16663 }
16664
16665#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16666 template <typename Allocator = std::allocator<Pipeline>>
16667 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createGraphicsPipelines( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16668 {
16669 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16670 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() ) ) );
16671 return createResultValue( result, pipelines, "vk::Device::createGraphicsPipelines" );
16672 }
16673
16674 ResultValueType<Pipeline>::type createGraphicsPipeline( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16675 {
16676 Pipeline pipeline;
16677 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 ) ) );
16678 return createResultValue( result, pipeline, "vk::Device::createGraphicsPipeline" );
16679 }
16680#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16681
16682 Result createComputePipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const ComputePipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
16683 {
16684 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 ) ) );
16685 }
16686
16687#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16688 template <typename Allocator = std::allocator<Pipeline>>
16689 typename ResultValueType<std::vector<Pipeline,Allocator>>::type createComputePipelines( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
16690 {
16691 std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
16692 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() ) ) );
16693 return createResultValue( result, pipelines, "vk::Device::createComputePipelines" );
16694 }
16695
16696 ResultValueType<Pipeline>::type createComputePipeline( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16697 {
16698 Pipeline pipeline;
16699 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 ) ) );
16700 return createResultValue( result, pipeline, "vk::Device::createComputePipeline" );
16701 }
16702#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16703
16704 void destroyPipeline( Pipeline pipeline, const AllocationCallbacks* pAllocator ) const
16705 {
16706 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16707 }
16708
16709#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16710 void destroyPipeline( Pipeline pipeline, Optional<const AllocationCallbacks> allocator = nullptr ) const
16711 {
16712 vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16713 }
16714#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16715
16716 Result createPipelineLayout( const PipelineLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineLayout* pPipelineLayout ) const
16717 {
16718 return static_cast<Result>( vkCreatePipelineLayout( m_device, reinterpret_cast<const VkPipelineLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineLayout*>( pPipelineLayout ) ) );
16719 }
16720
16721#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16722 ResultValueType<PipelineLayout>::type createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16723 {
16724 PipelineLayout pipelineLayout;
16725 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 ) ) );
16726 return createResultValue( result, pipelineLayout, "vk::Device::createPipelineLayout" );
16727 }
16728#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16729
16730 void destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks* pAllocator ) const
16731 {
16732 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16733 }
16734
16735#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16736 void destroyPipelineLayout( PipelineLayout pipelineLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16737 {
16738 vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16739 }
16740#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16741
16742 Result createSampler( const SamplerCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Sampler* pSampler ) const
16743 {
16744 return static_cast<Result>( vkCreateSampler( m_device, reinterpret_cast<const VkSamplerCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSampler*>( pSampler ) ) );
16745 }
16746
16747#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16748 ResultValueType<Sampler>::type createSampler( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16749 {
16750 Sampler sampler;
16751 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 ) ) );
16752 return createResultValue( result, sampler, "vk::Device::createSampler" );
16753 }
16754#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16755
16756 void destroySampler( Sampler sampler, const AllocationCallbacks* pAllocator ) const
16757 {
16758 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16759 }
16760
16761#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16762 void destroySampler( Sampler sampler, Optional<const AllocationCallbacks> allocator = nullptr ) const
16763 {
16764 vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16765 }
16766#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16767
16768 Result createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorSetLayout* pSetLayout ) const
16769 {
16770 return static_cast<Result>( vkCreateDescriptorSetLayout( m_device, reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorSetLayout*>( pSetLayout ) ) );
16771 }
16772
16773#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16774 ResultValueType<DescriptorSetLayout>::type createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16775 {
16776 DescriptorSetLayout setLayout;
16777 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 ) ) );
16778 return createResultValue( result, setLayout, "vk::Device::createDescriptorSetLayout" );
16779 }
16780#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16781
16782 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks* pAllocator ) const
16783 {
16784 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16785 }
16786
16787#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16788 void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const
16789 {
16790 vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16791 }
16792#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16793
16794 Result createDescriptorPool( const DescriptorPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorPool* pDescriptorPool ) const
16795 {
16796 return static_cast<Result>( vkCreateDescriptorPool( m_device, reinterpret_cast<const VkDescriptorPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorPool*>( pDescriptorPool ) ) );
16797 }
16798
16799#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16800 ResultValueType<DescriptorPool>::type createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16801 {
16802 DescriptorPool descriptorPool;
16803 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 ) ) );
16804 return createResultValue( result, descriptorPool, "vk::Device::createDescriptorPool" );
16805 }
16806#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16807
16808 void destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks* pAllocator ) const
16809 {
16810 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16811 }
16812
16813#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16814 void destroyDescriptorPool( DescriptorPool descriptorPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16815 {
16816 vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16817 }
16818#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16819
16820#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16821 Result resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const
16822 {
16823 return static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16824 }
16825#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16826
16827#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16828 ResultValueType<void>::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags = DescriptorPoolResetFlags() ) const
16829 {
16830 Result result = static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
16831 return createResultValue( result, "vk::Device::resetDescriptorPool" );
16832 }
16833#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16834
16835 Result allocateDescriptorSets( const DescriptorSetAllocateInfo* pAllocateInfo, DescriptorSet* pDescriptorSets ) const
16836 {
16837 return static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkDescriptorSet*>( pDescriptorSets ) ) );
16838 }
16839
16840#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16841 template <typename Allocator = std::allocator<DescriptorSet>>
16842 typename ResultValueType<std::vector<DescriptorSet,Allocator>>::type allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo ) const
16843 {
16844 std::vector<DescriptorSet,Allocator> descriptorSets( allocateInfo.descriptorSetCount );
16845 Result result = static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkDescriptorSet*>( descriptorSets.data() ) ) );
16846 return createResultValue( result, descriptorSets, "vk::Device::allocateDescriptorSets" );
16847 }
16848#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16849
16850 Result freeDescriptorSets( DescriptorPool descriptorPool, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets ) const
16851 {
16852 return static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ) ) );
16853 }
16854
16855#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16856 ResultValueType<void>::type freeDescriptorSets( DescriptorPool descriptorPool, ArrayProxy<const DescriptorSet> descriptorSets ) const
16857 {
16858 Result result = static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ) ) );
16859 return createResultValue( result, "vk::Device::freeDescriptorSets" );
16860 }
16861#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16862
16863 void updateDescriptorSets( uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const CopyDescriptorSet* pDescriptorCopies ) const
16864 {
16865 vkUpdateDescriptorSets( m_device, descriptorWriteCount, reinterpret_cast<const VkWriteDescriptorSet*>( pDescriptorWrites ), descriptorCopyCount, reinterpret_cast<const VkCopyDescriptorSet*>( pDescriptorCopies ) );
16866 }
16867
16868#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16869 void updateDescriptorSets( ArrayProxy<const WriteDescriptorSet> descriptorWrites, ArrayProxy<const CopyDescriptorSet> descriptorCopies ) const
16870 {
16871 vkUpdateDescriptorSets( m_device, descriptorWrites.size() , reinterpret_cast<const VkWriteDescriptorSet*>( descriptorWrites.data() ), descriptorCopies.size() , reinterpret_cast<const VkCopyDescriptorSet*>( descriptorCopies.data() ) );
16872 }
16873#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16874
16875 Result createFramebuffer( const FramebufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Framebuffer* pFramebuffer ) const
16876 {
16877 return static_cast<Result>( vkCreateFramebuffer( m_device, reinterpret_cast<const VkFramebufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFramebuffer*>( pFramebuffer ) ) );
16878 }
16879
16880#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16881 ResultValueType<Framebuffer>::type createFramebuffer( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16882 {
16883 Framebuffer framebuffer;
16884 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 ) ) );
16885 return createResultValue( result, framebuffer, "vk::Device::createFramebuffer" );
16886 }
16887#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16888
16889 void destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks* pAllocator ) const
16890 {
16891 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16892 }
16893
16894#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16895 void destroyFramebuffer( Framebuffer framebuffer, Optional<const AllocationCallbacks> allocator = nullptr ) const
16896 {
16897 vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16898 }
16899#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16900
16901 Result createRenderPass( const RenderPassCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, RenderPass* pRenderPass ) const
16902 {
16903 return static_cast<Result>( vkCreateRenderPass( m_device, reinterpret_cast<const VkRenderPassCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkRenderPass*>( pRenderPass ) ) );
16904 }
16905
16906#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16907 ResultValueType<RenderPass>::type createRenderPass( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16908 {
16909 RenderPass renderPass;
16910 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 ) ) );
16911 return createResultValue( result, renderPass, "vk::Device::createRenderPass" );
16912 }
16913#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16914
16915 void destroyRenderPass( RenderPass renderPass, const AllocationCallbacks* pAllocator ) const
16916 {
16917 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16918 }
16919
16920#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16921 void destroyRenderPass( RenderPass renderPass, Optional<const AllocationCallbacks> allocator = nullptr ) const
16922 {
16923 vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16924 }
16925#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16926
16927 void getRenderAreaGranularity( RenderPass renderPass, Extent2D* pGranularity ) const
16928 {
16929 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( pGranularity ) );
16930 }
16931
16932#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16933 Extent2D getRenderAreaGranularity( RenderPass renderPass ) const
16934 {
16935 Extent2D granularity;
16936 vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( &granularity ) );
16937 return granularity;
16938 }
16939#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16940
16941 Result createCommandPool( const CommandPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, CommandPool* pCommandPool ) const
16942 {
16943 return static_cast<Result>( vkCreateCommandPool( m_device, reinterpret_cast<const VkCommandPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkCommandPool*>( pCommandPool ) ) );
16944 }
16945
16946#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16947 ResultValueType<CommandPool>::type createCommandPool( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
16948 {
16949 CommandPool commandPool;
16950 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 ) ) );
16951 return createResultValue( result, commandPool, "vk::Device::createCommandPool" );
16952 }
16953#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16954
16955 void destroyCommandPool( CommandPool commandPool, const AllocationCallbacks* pAllocator ) const
16956 {
16957 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
16958 }
16959
16960#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16961 void destroyCommandPool( CommandPool commandPool, Optional<const AllocationCallbacks> allocator = nullptr ) const
16962 {
16963 vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
16964 }
16965#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16966
16967#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
16968 Result resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16969 {
16970 return static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16971 }
16972#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16973
16974#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16975 ResultValueType<void>::type resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
16976 {
16977 Result result = static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
16978 return createResultValue( result, "vk::Device::resetCommandPool" );
16979 }
16980#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16981
16982 Result allocateCommandBuffers( const CommandBufferAllocateInfo* pAllocateInfo, CommandBuffer* pCommandBuffers ) const
16983 {
16984 return static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkCommandBuffer*>( pCommandBuffers ) ) );
16985 }
16986
16987#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
16988 template <typename Allocator = std::allocator<CommandBuffer>>
16989 typename ResultValueType<std::vector<CommandBuffer,Allocator>>::type allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo ) const
16990 {
16991 std::vector<CommandBuffer,Allocator> commandBuffers( allocateInfo.commandBufferCount );
16992 Result result = static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkCommandBuffer*>( commandBuffers.data() ) ) );
16993 return createResultValue( result, commandBuffers, "vk::Device::allocateCommandBuffers" );
16994 }
16995#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
16996
16997 void freeCommandBuffers( CommandPool commandPool, uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
16998 {
16999 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
17000 }
17001
17002#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17003 void freeCommandBuffers( CommandPool commandPool, ArrayProxy<const CommandBuffer> commandBuffers ) const
17004 {
17005 vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
17006 }
17007#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17008
17009 Result createSharedSwapchainsKHR( uint32_t swapchainCount, const SwapchainCreateInfoKHR* pCreateInfos, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchains ) const
17010 {
17011 return static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, swapchainCount, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchains ) ) );
17012 }
17013
17014#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17015 template <typename Allocator = std::allocator<SwapchainKHR>>
17016 typename ResultValueType<std::vector<SwapchainKHR,Allocator>>::type createSharedSwapchainsKHR( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const
17017 {
17018 std::vector<SwapchainKHR,Allocator> swapchains( createInfos.size() );
17019 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() ) ) );
17020 return createResultValue( result, swapchains, "vk::Device::createSharedSwapchainsKHR" );
17021 }
17022
17023 ResultValueType<SwapchainKHR>::type createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17024 {
17025 SwapchainKHR swapchain;
17026 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 ) ) );
17027 return createResultValue( result, swapchain, "vk::Device::createSharedSwapchainKHR" );
17028 }
17029#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17030
17031 Result createSwapchainKHR( const SwapchainCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchain ) const
17032 {
17033 return static_cast<Result>( vkCreateSwapchainKHR( m_device, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchain ) ) );
17034 }
17035
17036#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17037 ResultValueType<SwapchainKHR>::type createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17038 {
17039 SwapchainKHR swapchain;
17040 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 ) ) );
17041 return createResultValue( result, swapchain, "vk::Device::createSwapchainKHR" );
17042 }
17043#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17044
17045 void destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks* pAllocator ) const
17046 {
17047 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
17048 }
17049
17050#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17051 void destroySwapchainKHR( SwapchainKHR swapchain, Optional<const AllocationCallbacks> allocator = nullptr ) const
17052 {
17053 vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
17054 }
17055#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17056
17057 Result getSwapchainImagesKHR( SwapchainKHR swapchain, uint32_t* pSwapchainImageCount, Image* pSwapchainImages ) const
17058 {
17059 return static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), pSwapchainImageCount, reinterpret_cast<VkImage*>( pSwapchainImages ) ) );
17060 }
17061
17062#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17063 template <typename Allocator = std::allocator<Image>>
17064 typename ResultValueType<std::vector<Image,Allocator>>::type getSwapchainImagesKHR( SwapchainKHR swapchain ) const
17065 {
17066 std::vector<Image,Allocator> swapchainImages;
17067 uint32_t swapchainImageCount;
17068 Result result;
17069 do
17070 {
17071 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, nullptr ) );
17072 if ( ( result == Result::eSuccess ) && swapchainImageCount )
17073 {
17074 swapchainImages.resize( swapchainImageCount );
17075 result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, reinterpret_cast<VkImage*>( swapchainImages.data() ) ) );
17076 }
17077 } while ( result == Result::eIncomplete );
17078 assert( swapchainImageCount <= swapchainImages.size() );
17079 swapchainImages.resize( swapchainImageCount );
17080 return createResultValue( result, swapchainImages, "vk::Device::getSwapchainImagesKHR" );
17081 }
17082#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17083
17084 Result acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t* pImageIndex ) const
17085 {
17086 return static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), pImageIndex ) );
17087 }
17088
17089#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17090 ResultValue<uint32_t> acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence ) const
17091 {
17092 uint32_t imageIndex;
17093 Result result = static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), &imageIndex ) );
17094 return createResultValue( result, imageIndex, "vk::Device::acquireNextImageKHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } );
17095 }
17096#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17097
17098 Result debugMarkerSetObjectNameEXT( DebugMarkerObjectNameInfoEXT* pNameInfo ) const
17099 {
17100 return static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( pNameInfo ) ) );
17101 }
17102
17103#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17104 ResultValueType<DebugMarkerObjectNameInfoEXT>::type debugMarkerSetObjectNameEXT() const
17105 {
17106 DebugMarkerObjectNameInfoEXT nameInfo;
17107 Result result = static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT*>( &nameInfo ) ) );
17108 return createResultValue( result, nameInfo, "vk::Device::debugMarkerSetObjectNameEXT" );
17109 }
17110#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17111
17112 Result debugMarkerSetObjectTagEXT( DebugMarkerObjectTagInfoEXT* pTagInfo ) const
17113 {
17114 return static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( pTagInfo ) ) );
17115 }
17116
17117#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17118 ResultValueType<DebugMarkerObjectTagInfoEXT>::type debugMarkerSetObjectTagEXT() const
17119 {
17120 DebugMarkerObjectTagInfoEXT tagInfo;
17121 Result result = static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<VkDebugMarkerObjectTagInfoEXT*>( &tagInfo ) ) );
17122 return createResultValue( result, tagInfo, "vk::Device::debugMarkerSetObjectTagEXT" );
17123 }
17124#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17125
Lenny Komow6501c122016-08-31 15:03:49 -060017126#ifdef VK_USE_PLATFORM_WIN32_KHR
17127 Result getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle ) const
17128 {
17129 return static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), pHandle ) );
17130 }
17131#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17132
17133#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17134#ifdef VK_USE_PLATFORM_WIN32_KHR
17135 ResultValueType<HANDLE>::type getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType ) const
17136 {
17137 HANDLE handle;
17138 Result result = static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), &handle ) );
17139 return createResultValue( result, handle, "vk::Device::getMemoryWin32HandleNV" );
17140 }
17141#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17142#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17143
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017144#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17145 explicit
17146#endif
17147 operator VkDevice() const
17148 {
17149 return m_device;
17150 }
17151
17152 explicit operator bool() const
17153 {
17154 return m_device != VK_NULL_HANDLE;
17155 }
17156
17157 bool operator!() const
17158 {
17159 return m_device == VK_NULL_HANDLE;
17160 }
17161
17162 private:
17163 VkDevice m_device;
17164 };
17165 static_assert( sizeof( Device ) == sizeof( VkDevice ), "handle and wrapper have different size!" );
17166
Lenny Komow6501c122016-08-31 15:03:49 -060017167 struct ExternalMemoryImageCreateInfoNV
17168 {
17169 ExternalMemoryImageCreateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17170 : sType( StructureType::eExternalMemoryImageCreateInfoNV )
17171 , pNext( nullptr )
17172 , handleTypes( handleTypes_ )
17173 {
17174 }
17175
17176 ExternalMemoryImageCreateInfoNV( VkExternalMemoryImageCreateInfoNV const & rhs )
17177 {
17178 memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
17179 }
17180
17181 ExternalMemoryImageCreateInfoNV& operator=( VkExternalMemoryImageCreateInfoNV const & rhs )
17182 {
17183 memcpy( this, &rhs, sizeof(ExternalMemoryImageCreateInfoNV) );
17184 return *this;
17185 }
17186
17187 ExternalMemoryImageCreateInfoNV& setSType( StructureType sType_ )
17188 {
17189 sType = sType_;
17190 return *this;
17191 }
17192
17193 ExternalMemoryImageCreateInfoNV& setPNext( const void* pNext_ )
17194 {
17195 pNext = pNext_;
17196 return *this;
17197 }
17198
17199 ExternalMemoryImageCreateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
17200 {
17201 handleTypes = handleTypes_;
17202 return *this;
17203 }
17204
17205 operator const VkExternalMemoryImageCreateInfoNV&() const
17206 {
17207 return *reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(this);
17208 }
17209
17210 bool operator==( ExternalMemoryImageCreateInfoNV const& rhs ) const
17211 {
17212 return ( sType == rhs.sType )
17213 && ( pNext == rhs.pNext )
17214 && ( handleTypes == rhs.handleTypes );
17215 }
17216
17217 bool operator!=( ExternalMemoryImageCreateInfoNV const& rhs ) const
17218 {
17219 return !operator==( rhs );
17220 }
17221
17222 private:
17223 StructureType sType;
17224
17225 public:
17226 const void* pNext;
17227 ExternalMemoryHandleTypeFlagsNV handleTypes;
17228 };
17229 static_assert( sizeof( ExternalMemoryImageCreateInfoNV ) == sizeof( VkExternalMemoryImageCreateInfoNV ), "struct and wrapper have different size!" );
17230
17231 struct ExportMemoryAllocateInfoNV
17232 {
17233 ExportMemoryAllocateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17234 : sType( StructureType::eExportMemoryAllocateInfoNV )
17235 , pNext( nullptr )
17236 , handleTypes( handleTypes_ )
17237 {
17238 }
17239
17240 ExportMemoryAllocateInfoNV( VkExportMemoryAllocateInfoNV const & rhs )
17241 {
17242 memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
17243 }
17244
17245 ExportMemoryAllocateInfoNV& operator=( VkExportMemoryAllocateInfoNV const & rhs )
17246 {
17247 memcpy( this, &rhs, sizeof(ExportMemoryAllocateInfoNV) );
17248 return *this;
17249 }
17250
17251 ExportMemoryAllocateInfoNV& setSType( StructureType sType_ )
17252 {
17253 sType = sType_;
17254 return *this;
17255 }
17256
17257 ExportMemoryAllocateInfoNV& setPNext( const void* pNext_ )
17258 {
17259 pNext = pNext_;
17260 return *this;
17261 }
17262
17263 ExportMemoryAllocateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
17264 {
17265 handleTypes = handleTypes_;
17266 return *this;
17267 }
17268
17269 operator const VkExportMemoryAllocateInfoNV&() const
17270 {
17271 return *reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(this);
17272 }
17273
17274 bool operator==( ExportMemoryAllocateInfoNV const& rhs ) const
17275 {
17276 return ( sType == rhs.sType )
17277 && ( pNext == rhs.pNext )
17278 && ( handleTypes == rhs.handleTypes );
17279 }
17280
17281 bool operator!=( ExportMemoryAllocateInfoNV const& rhs ) const
17282 {
17283 return !operator==( rhs );
17284 }
17285
17286 private:
17287 StructureType sType;
17288
17289 public:
17290 const void* pNext;
17291 ExternalMemoryHandleTypeFlagsNV handleTypes;
17292 };
17293 static_assert( sizeof( ExportMemoryAllocateInfoNV ) == sizeof( VkExportMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
17294
17295#ifdef VK_USE_PLATFORM_WIN32_KHR
17296 struct ImportMemoryWin32HandleInfoNV
17297 {
17298 ImportMemoryWin32HandleInfoNV( ExternalMemoryHandleTypeFlagsNV handleType_ = ExternalMemoryHandleTypeFlagsNV(), HANDLE handle_ = 0 )
17299 : sType( StructureType::eImportMemoryWin32HandleInfoNV )
17300 , pNext( nullptr )
17301 , handleType( handleType_ )
17302 , handle( handle_ )
17303 {
17304 }
17305
17306 ImportMemoryWin32HandleInfoNV( VkImportMemoryWin32HandleInfoNV const & rhs )
17307 {
17308 memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
17309 }
17310
17311 ImportMemoryWin32HandleInfoNV& operator=( VkImportMemoryWin32HandleInfoNV const & rhs )
17312 {
17313 memcpy( this, &rhs, sizeof(ImportMemoryWin32HandleInfoNV) );
17314 return *this;
17315 }
17316
17317 ImportMemoryWin32HandleInfoNV& setSType( StructureType sType_ )
17318 {
17319 sType = sType_;
17320 return *this;
17321 }
17322
17323 ImportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
17324 {
17325 pNext = pNext_;
17326 return *this;
17327 }
17328
17329 ImportMemoryWin32HandleInfoNV& setHandleType( ExternalMemoryHandleTypeFlagsNV handleType_ )
17330 {
17331 handleType = handleType_;
17332 return *this;
17333 }
17334
17335 ImportMemoryWin32HandleInfoNV& setHandle( HANDLE handle_ )
17336 {
17337 handle = handle_;
17338 return *this;
17339 }
17340
17341 operator const VkImportMemoryWin32HandleInfoNV&() const
17342 {
17343 return *reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(this);
17344 }
17345
17346 bool operator==( ImportMemoryWin32HandleInfoNV const& rhs ) const
17347 {
17348 return ( sType == rhs.sType )
17349 && ( pNext == rhs.pNext )
17350 && ( handleType == rhs.handleType )
17351 && ( handle == rhs.handle );
17352 }
17353
17354 bool operator!=( ImportMemoryWin32HandleInfoNV const& rhs ) const
17355 {
17356 return !operator==( rhs );
17357 }
17358
17359 private:
17360 StructureType sType;
17361
17362 public:
17363 const void* pNext;
17364 ExternalMemoryHandleTypeFlagsNV handleType;
17365 HANDLE handle;
17366 };
17367 static_assert( sizeof( ImportMemoryWin32HandleInfoNV ) == sizeof( VkImportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
17368#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17369
17370 enum class ExternalMemoryFeatureFlagBitsNV
17371 {
17372 eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV,
17373 eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV,
17374 eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
17375 };
17376
17377 using ExternalMemoryFeatureFlagsNV = Flags<ExternalMemoryFeatureFlagBitsNV, VkExternalMemoryFeatureFlagsNV>;
17378
17379 inline ExternalMemoryFeatureFlagsNV operator|( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 )
17380 {
17381 return ExternalMemoryFeatureFlagsNV( bit0 ) | bit1;
17382 }
17383
17384 struct ExternalImageFormatPropertiesNV
17385 {
17386 ExternalImageFormatPropertiesNV( ImageFormatProperties imageFormatProperties_ = ImageFormatProperties(), ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ = ExternalMemoryFeatureFlagsNV(), ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ = ExternalMemoryHandleTypeFlagsNV(), ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
17387 : imageFormatProperties( imageFormatProperties_ )
17388 , externalMemoryFeatures( externalMemoryFeatures_ )
17389 , exportFromImportedHandleTypes( exportFromImportedHandleTypes_ )
17390 , compatibleHandleTypes( compatibleHandleTypes_ )
17391 {
17392 }
17393
17394 ExternalImageFormatPropertiesNV( VkExternalImageFormatPropertiesNV const & rhs )
17395 {
17396 memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17397 }
17398
17399 ExternalImageFormatPropertiesNV& operator=( VkExternalImageFormatPropertiesNV const & rhs )
17400 {
17401 memcpy( this, &rhs, sizeof(ExternalImageFormatPropertiesNV) );
17402 return *this;
17403 }
17404
17405 ExternalImageFormatPropertiesNV& setImageFormatProperties( ImageFormatProperties imageFormatProperties_ )
17406 {
17407 imageFormatProperties = imageFormatProperties_;
17408 return *this;
17409 }
17410
17411 ExternalImageFormatPropertiesNV& setExternalMemoryFeatures( ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ )
17412 {
17413 externalMemoryFeatures = externalMemoryFeatures_;
17414 return *this;
17415 }
17416
17417 ExternalImageFormatPropertiesNV& setExportFromImportedHandleTypes( ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ )
17418 {
17419 exportFromImportedHandleTypes = exportFromImportedHandleTypes_;
17420 return *this;
17421 }
17422
17423 ExternalImageFormatPropertiesNV& setCompatibleHandleTypes( ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ )
17424 {
17425 compatibleHandleTypes = compatibleHandleTypes_;
17426 return *this;
17427 }
17428
17429 operator const VkExternalImageFormatPropertiesNV&() const
17430 {
17431 return *reinterpret_cast<const VkExternalImageFormatPropertiesNV*>(this);
17432 }
17433
17434 bool operator==( ExternalImageFormatPropertiesNV const& rhs ) const
17435 {
17436 return ( imageFormatProperties == rhs.imageFormatProperties )
17437 && ( externalMemoryFeatures == rhs.externalMemoryFeatures )
17438 && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
17439 && ( compatibleHandleTypes == rhs.compatibleHandleTypes );
17440 }
17441
17442 bool operator!=( ExternalImageFormatPropertiesNV const& rhs ) const
17443 {
17444 return !operator==( rhs );
17445 }
17446
17447 ImageFormatProperties imageFormatProperties;
17448 ExternalMemoryFeatureFlagsNV externalMemoryFeatures;
17449 ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
17450 ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
17451 };
17452 static_assert( sizeof( ExternalImageFormatPropertiesNV ) == sizeof( VkExternalImageFormatPropertiesNV ), "struct and wrapper have different size!" );
17453
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017454 class PhysicalDevice
17455 {
17456 public:
17457 PhysicalDevice()
17458 : m_physicalDevice(VK_NULL_HANDLE)
17459 {}
17460
17461#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17462 PhysicalDevice(VkPhysicalDevice physicalDevice)
17463 : m_physicalDevice(physicalDevice)
17464 {}
17465
17466 PhysicalDevice& operator=(VkPhysicalDevice physicalDevice)
17467 {
17468 m_physicalDevice = physicalDevice;
17469 return *this;
17470 }
17471#endif
17472
Lenny Komowebf33162016-08-26 14:10:08 -060017473 bool operator==(PhysicalDevice const &rhs) const
17474 {
17475 return m_physicalDevice == rhs.m_physicalDevice;
17476 }
17477
17478 bool operator!=(PhysicalDevice const &rhs) const
17479 {
17480 return m_physicalDevice != rhs.m_physicalDevice;
17481 }
17482
17483 bool operator<(PhysicalDevice const &rhs) const
17484 {
17485 return m_physicalDevice < rhs.m_physicalDevice;
17486 }
17487
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017488 void getProperties( PhysicalDeviceProperties* pProperties ) const
17489 {
17490 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( pProperties ) );
17491 }
17492
17493#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17494 PhysicalDeviceProperties getProperties() const
17495 {
17496 PhysicalDeviceProperties properties;
17497 vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( &properties ) );
17498 return properties;
17499 }
17500#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17501
17502 void getQueueFamilyProperties( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties* pQueueFamilyProperties ) const
17503 {
17504 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( pQueueFamilyProperties ) );
17505 }
17506
17507#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17508 template <typename Allocator = std::allocator<QueueFamilyProperties>>
17509 std::vector<QueueFamilyProperties,Allocator> getQueueFamilyProperties() const
17510 {
17511 std::vector<QueueFamilyProperties,Allocator> queueFamilyProperties;
17512 uint32_t queueFamilyPropertyCount;
17513 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr );
17514 queueFamilyProperties.resize( queueFamilyPropertyCount );
17515 vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( queueFamilyProperties.data() ) );
17516 return queueFamilyProperties;
17517 }
17518#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17519
17520 void getMemoryProperties( PhysicalDeviceMemoryProperties* pMemoryProperties ) const
17521 {
17522 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( pMemoryProperties ) );
17523 }
17524
17525#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17526 PhysicalDeviceMemoryProperties getMemoryProperties() const
17527 {
17528 PhysicalDeviceMemoryProperties memoryProperties;
17529 vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( &memoryProperties ) );
17530 return memoryProperties;
17531 }
17532#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17533
17534 void getFeatures( PhysicalDeviceFeatures* pFeatures ) const
17535 {
17536 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( pFeatures ) );
17537 }
17538
17539#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17540 PhysicalDeviceFeatures getFeatures() const
17541 {
17542 PhysicalDeviceFeatures features;
17543 vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( &features ) );
17544 return features;
17545 }
17546#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17547
17548 void getFormatProperties( Format format, FormatProperties* pFormatProperties ) const
17549 {
17550 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( pFormatProperties ) );
17551 }
17552
17553#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17554 FormatProperties getFormatProperties( Format format ) const
17555 {
17556 FormatProperties formatProperties;
17557 vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( &formatProperties ) );
17558 return formatProperties;
17559 }
17560#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17561
17562 Result getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ImageFormatProperties* pImageFormatProperties ) const
17563 {
17564 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 ) ) );
17565 }
17566
17567#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17568 ResultValueType<ImageFormatProperties>::type getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags ) const
17569 {
17570 ImageFormatProperties imageFormatProperties;
17571 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 ) ) );
17572 return createResultValue( result, imageFormatProperties, "vk::PhysicalDevice::getImageFormatProperties" );
17573 }
17574#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17575
17576 Result createDevice( const DeviceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Device* pDevice ) const
17577 {
17578 return static_cast<Result>( vkCreateDevice( m_physicalDevice, reinterpret_cast<const VkDeviceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDevice*>( pDevice ) ) );
17579 }
17580
17581#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17582 ResultValueType<Device>::type createDevice( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17583 {
17584 Device device;
17585 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 ) ) );
17586 return createResultValue( result, device, "vk::PhysicalDevice::createDevice" );
17587 }
17588#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17589
17590 Result enumerateDeviceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties ) const
17591 {
17592 return static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
17593 }
17594
17595#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17596 template <typename Allocator = std::allocator<LayerProperties>>
17597 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateDeviceLayerProperties() const
17598 {
17599 std::vector<LayerProperties,Allocator> properties;
17600 uint32_t propertyCount;
17601 Result result;
17602 do
17603 {
17604 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) );
17605 if ( ( result == Result::eSuccess ) && propertyCount )
17606 {
17607 properties.resize( propertyCount );
17608 result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
17609 }
17610 } while ( result == Result::eIncomplete );
17611 assert( propertyCount <= properties.size() );
17612 properties.resize( propertyCount );
17613 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceLayerProperties" );
17614 }
17615#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17616
17617 Result enumerateDeviceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties ) const
17618 {
17619 return static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
17620 }
17621
17622#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17623 template <typename Allocator = std::allocator<ExtensionProperties>>
17624 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateDeviceExtensionProperties( Optional<const std::string> layerName = nullptr ) const
17625 {
17626 std::vector<ExtensionProperties,Allocator> properties;
17627 uint32_t propertyCount;
17628 Result result;
17629 do
17630 {
17631 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
17632 if ( ( result == Result::eSuccess ) && propertyCount )
17633 {
17634 properties.resize( propertyCount );
17635 result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
17636 }
17637 } while ( result == Result::eIncomplete );
17638 assert( propertyCount <= properties.size() );
17639 properties.resize( propertyCount );
17640 return createResultValue( result, properties, "vk::PhysicalDevice::enumerateDeviceExtensionProperties" );
17641 }
17642#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17643
17644 void getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, uint32_t* pPropertyCount, SparseImageFormatProperties* pProperties ) const
17645 {
17646 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 ) );
17647 }
17648
17649#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17650 template <typename Allocator = std::allocator<SparseImageFormatProperties>>
17651 std::vector<SparseImageFormatProperties,Allocator> getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling ) const
17652 {
17653 std::vector<SparseImageFormatProperties,Allocator> properties;
17654 uint32_t propertyCount;
17655 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 );
17656 properties.resize( propertyCount );
17657 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() ) );
17658 return properties;
17659 }
17660#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17661
17662 Result getDisplayPropertiesKHR( uint32_t* pPropertyCount, DisplayPropertiesKHR* pProperties ) const
17663 {
17664 return static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( pProperties ) ) );
17665 }
17666
17667#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17668 template <typename Allocator = std::allocator<DisplayPropertiesKHR>>
17669 typename ResultValueType<std::vector<DisplayPropertiesKHR,Allocator>>::type getDisplayPropertiesKHR() const
17670 {
17671 std::vector<DisplayPropertiesKHR,Allocator> properties;
17672 uint32_t propertyCount;
17673 Result result;
17674 do
17675 {
17676 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17677 if ( ( result == Result::eSuccess ) && propertyCount )
17678 {
17679 properties.resize( propertyCount );
17680 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( properties.data() ) ) );
17681 }
17682 } while ( result == Result::eIncomplete );
17683 assert( propertyCount <= properties.size() );
17684 properties.resize( propertyCount );
17685 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPropertiesKHR" );
17686 }
17687#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17688
17689 Result getDisplayPlanePropertiesKHR( uint32_t* pPropertyCount, DisplayPlanePropertiesKHR* pProperties ) const
17690 {
17691 return static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( pProperties ) ) );
17692 }
17693
17694#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17695 template <typename Allocator = std::allocator<DisplayPlanePropertiesKHR>>
17696 typename ResultValueType<std::vector<DisplayPlanePropertiesKHR,Allocator>>::type getDisplayPlanePropertiesKHR() const
17697 {
17698 std::vector<DisplayPlanePropertiesKHR,Allocator> properties;
17699 uint32_t propertyCount;
17700 Result result;
17701 do
17702 {
17703 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
17704 if ( ( result == Result::eSuccess ) && propertyCount )
17705 {
17706 properties.resize( propertyCount );
17707 result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( properties.data() ) ) );
17708 }
17709 } while ( result == Result::eIncomplete );
17710 assert( propertyCount <= properties.size() );
17711 properties.resize( propertyCount );
17712 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayPlanePropertiesKHR" );
17713 }
17714#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17715
17716 Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, uint32_t* pDisplayCount, DisplayKHR* pDisplays ) const
17717 {
17718 return static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, pDisplayCount, reinterpret_cast<VkDisplayKHR*>( pDisplays ) ) );
17719 }
17720
17721#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17722 template <typename Allocator = std::allocator<DisplayKHR>>
17723 typename ResultValueType<std::vector<DisplayKHR,Allocator>>::type getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const
17724 {
17725 std::vector<DisplayKHR,Allocator> displays;
17726 uint32_t displayCount;
17727 Result result;
17728 do
17729 {
17730 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) );
17731 if ( ( result == Result::eSuccess ) && displayCount )
17732 {
17733 displays.resize( displayCount );
17734 result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR*>( displays.data() ) ) );
17735 }
17736 } while ( result == Result::eIncomplete );
17737 assert( displayCount <= displays.size() );
17738 displays.resize( displayCount );
17739 return createResultValue( result, displays, "vk::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
17740 }
17741#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17742
17743 Result getDisplayModePropertiesKHR( DisplayKHR display, uint32_t* pPropertyCount, DisplayModePropertiesKHR* pProperties ) const
17744 {
17745 return static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), pPropertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( pProperties ) ) );
17746 }
17747
17748#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17749 template <typename Allocator = std::allocator<DisplayModePropertiesKHR>>
17750 typename ResultValueType<std::vector<DisplayModePropertiesKHR,Allocator>>::type getDisplayModePropertiesKHR( DisplayKHR display ) const
17751 {
17752 std::vector<DisplayModePropertiesKHR,Allocator> properties;
17753 uint32_t propertyCount;
17754 Result result;
17755 do
17756 {
17757 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, nullptr ) );
17758 if ( ( result == Result::eSuccess ) && propertyCount )
17759 {
17760 properties.resize( propertyCount );
17761 result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( properties.data() ) ) );
17762 }
17763 } while ( result == Result::eIncomplete );
17764 assert( propertyCount <= properties.size() );
17765 properties.resize( propertyCount );
17766 return createResultValue( result, properties, "vk::PhysicalDevice::getDisplayModePropertiesKHR" );
17767 }
17768#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17769
17770 Result createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DisplayModeKHR* pMode ) const
17771 {
17772 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 ) ) );
17773 }
17774
17775#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17776 ResultValueType<DisplayModeKHR>::type createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
17777 {
17778 DisplayModeKHR mode;
17779 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 ) ) );
17780 return createResultValue( result, mode, "vk::PhysicalDevice::createDisplayModeKHR" );
17781 }
17782#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17783
17784 Result getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, DisplayPlaneCapabilitiesKHR* pCapabilities ) const
17785 {
17786 return static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( pCapabilities ) ) );
17787 }
17788
17789#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17790 ResultValueType<DisplayPlaneCapabilitiesKHR>::type getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex ) const
17791 {
17792 DisplayPlaneCapabilitiesKHR capabilities;
17793 Result result = static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( &capabilities ) ) );
17794 return createResultValue( result, capabilities, "vk::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" );
17795 }
17796#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17797
17798#ifdef VK_USE_PLATFORM_MIR_KHR
17799 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection* connection ) const
17800 {
17801 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection );
17802 }
17803#endif /*VK_USE_PLATFORM_MIR_KHR*/
17804
17805#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17806#ifdef VK_USE_PLATFORM_MIR_KHR
17807 Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection & connection ) const
17808 {
17809 return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection );
17810 }
17811#endif /*VK_USE_PLATFORM_MIR_KHR*/
17812#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17813
17814 Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32* pSupported ) const
17815 {
17816 return static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), pSupported ) );
17817 }
17818
17819#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17820 ResultValueType<Bool32>::type getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface ) const
17821 {
17822 Bool32 supported;
17823 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), &supported ) );
17824 return createResultValue( result, supported, "vk::PhysicalDevice::getSurfaceSupportKHR" );
17825 }
17826#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17827
17828 Result getSurfaceCapabilitiesKHR( SurfaceKHR surface, SurfaceCapabilitiesKHR* pSurfaceCapabilities ) const
17829 {
17830 return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( pSurfaceCapabilities ) ) );
17831 }
17832
17833#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17834 ResultValueType<SurfaceCapabilitiesKHR>::type getSurfaceCapabilitiesKHR( SurfaceKHR surface ) const
17835 {
17836 SurfaceCapabilitiesKHR surfaceCapabilities;
17837 Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( &surfaceCapabilities ) ) );
17838 return createResultValue( result, surfaceCapabilities, "vk::PhysicalDevice::getSurfaceCapabilitiesKHR" );
17839 }
17840#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17841
17842 Result getSurfaceFormatsKHR( SurfaceKHR surface, uint32_t* pSurfaceFormatCount, SurfaceFormatKHR* pSurfaceFormats ) const
17843 {
17844 return static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pSurfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( pSurfaceFormats ) ) );
17845 }
17846
17847#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17848 template <typename Allocator = std::allocator<SurfaceFormatKHR>>
17849 typename ResultValueType<std::vector<SurfaceFormatKHR,Allocator>>::type getSurfaceFormatsKHR( SurfaceKHR surface ) const
17850 {
17851 std::vector<SurfaceFormatKHR,Allocator> surfaceFormats;
17852 uint32_t surfaceFormatCount;
17853 Result result;
17854 do
17855 {
17856 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, nullptr ) );
17857 if ( ( result == Result::eSuccess ) && surfaceFormatCount )
17858 {
17859 surfaceFormats.resize( surfaceFormatCount );
17860 result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( surfaceFormats.data() ) ) );
17861 }
17862 } while ( result == Result::eIncomplete );
17863 assert( surfaceFormatCount <= surfaceFormats.size() );
17864 surfaceFormats.resize( surfaceFormatCount );
17865 return createResultValue( result, surfaceFormats, "vk::PhysicalDevice::getSurfaceFormatsKHR" );
17866 }
17867#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17868
17869 Result getSurfacePresentModesKHR( SurfaceKHR surface, uint32_t* pPresentModeCount, PresentModeKHR* pPresentModes ) const
17870 {
17871 return static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pPresentModeCount, reinterpret_cast<VkPresentModeKHR*>( pPresentModes ) ) );
17872 }
17873
17874#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17875 template <typename Allocator = std::allocator<PresentModeKHR>>
17876 typename ResultValueType<std::vector<PresentModeKHR,Allocator>>::type getSurfacePresentModesKHR( SurfaceKHR surface ) const
17877 {
17878 std::vector<PresentModeKHR,Allocator> presentModes;
17879 uint32_t presentModeCount;
17880 Result result;
17881 do
17882 {
17883 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, nullptr ) );
17884 if ( ( result == Result::eSuccess ) && presentModeCount )
17885 {
17886 presentModes.resize( presentModeCount );
17887 result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, reinterpret_cast<VkPresentModeKHR*>( presentModes.data() ) ) );
17888 }
17889 } while ( result == Result::eIncomplete );
17890 assert( presentModeCount <= presentModes.size() );
17891 presentModes.resize( presentModeCount );
17892 return createResultValue( result, presentModes, "vk::PhysicalDevice::getSurfacePresentModesKHR" );
17893 }
17894#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17895
17896#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17897 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display* display ) const
17898 {
17899 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, display );
17900 }
17901#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17902
17903#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17904#ifdef VK_USE_PLATFORM_WAYLAND_KHR
17905 Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const
17906 {
17907 return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display );
17908 }
17909#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
17910#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17911
17912#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
17913#ifdef VK_USE_PLATFORM_WIN32_KHR
17914 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
17915 {
17916 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
17917 }
17918#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17919#endif /*!VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17920
17921#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17922#ifdef VK_USE_PLATFORM_WIN32_KHR
17923 Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
17924 {
17925 return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
17926 }
17927#endif /*VK_USE_PLATFORM_WIN32_KHR*/
17928#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17929
17930#ifdef VK_USE_PLATFORM_XLIB_KHR
17931 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID ) const
17932 {
17933 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, dpy, visualID );
17934 }
17935#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17936
17937#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17938#ifdef VK_USE_PLATFORM_XLIB_KHR
17939 Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const
17940 {
17941 return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID );
17942 }
17943#endif /*VK_USE_PLATFORM_XLIB_KHR*/
17944#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17945
17946#ifdef VK_USE_PLATFORM_XCB_KHR
17947 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id ) const
17948 {
17949 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection, visual_id );
17950 }
17951#endif /*VK_USE_PLATFORM_XCB_KHR*/
17952
17953#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17954#ifdef VK_USE_PLATFORM_XCB_KHR
17955 Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const
17956 {
17957 return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id );
17958 }
17959#endif /*VK_USE_PLATFORM_XCB_KHR*/
17960#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17961
Lenny Komow6501c122016-08-31 15:03:49 -060017962 Result getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType, ExternalImageFormatPropertiesNV* pExternalImageFormatProperties ) const
17963 {
17964 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 ) ) );
17965 }
17966
17967#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
17968 ResultValueType<ExternalImageFormatPropertiesNV>::type getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType ) const
17969 {
17970 ExternalImageFormatPropertiesNV externalImageFormatProperties;
17971 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 ) ) );
17972 return createResultValue( result, externalImageFormatProperties, "vk::PhysicalDevice::getExternalImageFormatPropertiesNV" );
17973 }
17974#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
17975
Lenny Komowbed9b5c2016-08-11 11:23:15 -060017976#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
17977 explicit
17978#endif
17979 operator VkPhysicalDevice() const
17980 {
17981 return m_physicalDevice;
17982 }
17983
17984 explicit operator bool() const
17985 {
17986 return m_physicalDevice != VK_NULL_HANDLE;
17987 }
17988
17989 bool operator!() const
17990 {
17991 return m_physicalDevice == VK_NULL_HANDLE;
17992 }
17993
17994 private:
17995 VkPhysicalDevice m_physicalDevice;
17996 };
17997 static_assert( sizeof( PhysicalDevice ) == sizeof( VkPhysicalDevice ), "handle and wrapper have different size!" );
17998
17999 class Instance
18000 {
18001 public:
18002 Instance()
18003 : m_instance(VK_NULL_HANDLE)
18004 {}
18005
18006#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
18007 Instance(VkInstance instance)
18008 : m_instance(instance)
18009 {}
18010
18011 Instance& operator=(VkInstance instance)
18012 {
18013 m_instance = instance;
18014 return *this;
18015 }
18016#endif
18017
Lenny Komowebf33162016-08-26 14:10:08 -060018018 bool operator==(Instance const &rhs) const
18019 {
18020 return m_instance == rhs.m_instance;
18021 }
18022
18023 bool operator!=(Instance const &rhs) const
18024 {
18025 return m_instance != rhs.m_instance;
18026 }
18027
18028 bool operator<(Instance const &rhs) const
18029 {
18030 return m_instance < rhs.m_instance;
18031 }
18032
Lenny Komowbed9b5c2016-08-11 11:23:15 -060018033 void destroy( const AllocationCallbacks* pAllocator ) const
18034 {
18035 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18036 }
18037
18038#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18039 void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const
18040 {
18041 vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18042 }
18043#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18044
18045 Result enumeratePhysicalDevices( uint32_t* pPhysicalDeviceCount, PhysicalDevice* pPhysicalDevices ) const
18046 {
18047 return static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, pPhysicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( pPhysicalDevices ) ) );
18048 }
18049
18050#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18051 template <typename Allocator = std::allocator<PhysicalDevice>>
18052 typename ResultValueType<std::vector<PhysicalDevice,Allocator>>::type enumeratePhysicalDevices() const
18053 {
18054 std::vector<PhysicalDevice,Allocator> physicalDevices;
18055 uint32_t physicalDeviceCount;
18056 Result result;
18057 do
18058 {
18059 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) );
18060 if ( ( result == Result::eSuccess ) && physicalDeviceCount )
18061 {
18062 physicalDevices.resize( physicalDeviceCount );
18063 result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( physicalDevices.data() ) ) );
18064 }
18065 } while ( result == Result::eIncomplete );
18066 assert( physicalDeviceCount <= physicalDevices.size() );
18067 physicalDevices.resize( physicalDeviceCount );
18068 return createResultValue( result, physicalDevices, "vk::Instance::enumeratePhysicalDevices" );
18069 }
18070#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18071
18072 PFN_vkVoidFunction getProcAddr( const char* pName ) const
18073 {
18074 return vkGetInstanceProcAddr( m_instance, pName );
18075 }
18076
18077#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18078 PFN_vkVoidFunction getProcAddr( const std::string & name ) const
18079 {
18080 return vkGetInstanceProcAddr( m_instance, name.c_str() );
18081 }
18082#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18083
18084#ifdef VK_USE_PLATFORM_ANDROID_KHR
18085 Result createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18086 {
18087 return static_cast<Result>( vkCreateAndroidSurfaceKHR( m_instance, reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18088 }
18089#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18090
18091#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18092#ifdef VK_USE_PLATFORM_ANDROID_KHR
18093 ResultValueType<SurfaceKHR>::type createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18094 {
18095 SurfaceKHR surface;
18096 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 ) ) );
18097 return createResultValue( result, surface, "vk::Instance::createAndroidSurfaceKHR" );
18098 }
18099#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18100#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18101
18102 Result createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18103 {
18104 return static_cast<Result>( vkCreateDisplayPlaneSurfaceKHR( m_instance, reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18105 }
18106
18107#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18108 ResultValueType<SurfaceKHR>::type createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18109 {
18110 SurfaceKHR surface;
18111 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 ) ) );
18112 return createResultValue( result, surface, "vk::Instance::createDisplayPlaneSurfaceKHR" );
18113 }
18114#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18115
18116#ifdef VK_USE_PLATFORM_MIR_KHR
18117 Result createMirSurfaceKHR( const MirSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18118 {
18119 return static_cast<Result>( vkCreateMirSurfaceKHR( m_instance, reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18120 }
18121#endif /*VK_USE_PLATFORM_MIR_KHR*/
18122
18123#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18124#ifdef VK_USE_PLATFORM_MIR_KHR
18125 ResultValueType<SurfaceKHR>::type createMirSurfaceKHR( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18126 {
18127 SurfaceKHR surface;
18128 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 ) ) );
18129 return createResultValue( result, surface, "vk::Instance::createMirSurfaceKHR" );
18130 }
18131#endif /*VK_USE_PLATFORM_MIR_KHR*/
18132#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18133
18134 void destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks* pAllocator ) const
18135 {
18136 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18137 }
18138
18139#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18140 void destroySurfaceKHR( SurfaceKHR surface, Optional<const AllocationCallbacks> allocator = nullptr ) const
18141 {
18142 vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18143 }
18144#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18145
18146#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18147 Result createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18148 {
18149 return static_cast<Result>( vkCreateWaylandSurfaceKHR( m_instance, reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18150 }
18151#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18152
18153#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18154#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18155 ResultValueType<SurfaceKHR>::type createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18156 {
18157 SurfaceKHR surface;
18158 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 ) ) );
18159 return createResultValue( result, surface, "vk::Instance::createWaylandSurfaceKHR" );
18160 }
18161#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18162#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18163
18164#ifdef VK_USE_PLATFORM_WIN32_KHR
18165 Result createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18166 {
18167 return static_cast<Result>( vkCreateWin32SurfaceKHR( m_instance, reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18168 }
18169#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18170
18171#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18172#ifdef VK_USE_PLATFORM_WIN32_KHR
18173 ResultValueType<SurfaceKHR>::type createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18174 {
18175 SurfaceKHR surface;
18176 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 ) ) );
18177 return createResultValue( result, surface, "vk::Instance::createWin32SurfaceKHR" );
18178 }
18179#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18180#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18181
18182#ifdef VK_USE_PLATFORM_XLIB_KHR
18183 Result createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18184 {
18185 return static_cast<Result>( vkCreateXlibSurfaceKHR( m_instance, reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18186 }
18187#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18188
18189#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18190#ifdef VK_USE_PLATFORM_XLIB_KHR
18191 ResultValueType<SurfaceKHR>::type createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18192 {
18193 SurfaceKHR surface;
18194 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 ) ) );
18195 return createResultValue( result, surface, "vk::Instance::createXlibSurfaceKHR" );
18196 }
18197#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18198#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18199
18200#ifdef VK_USE_PLATFORM_XCB_KHR
18201 Result createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
18202 {
18203 return static_cast<Result>( vkCreateXcbSurfaceKHR( m_instance, reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
18204 }
18205#endif /*VK_USE_PLATFORM_XCB_KHR*/
18206
18207#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18208#ifdef VK_USE_PLATFORM_XCB_KHR
18209 ResultValueType<SurfaceKHR>::type createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18210 {
18211 SurfaceKHR surface;
18212 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 ) ) );
18213 return createResultValue( result, surface, "vk::Instance::createXcbSurfaceKHR" );
18214 }
18215#endif /*VK_USE_PLATFORM_XCB_KHR*/
18216#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18217
18218 Result createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, DebugReportCallbackEXT* pCallback ) const
18219 {
18220 return static_cast<Result>( vkCreateDebugReportCallbackEXT( m_instance, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDebugReportCallbackEXT*>( pCallback ) ) );
18221 }
18222
18223#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18224 ResultValueType<DebugReportCallbackEXT>::type createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const
18225 {
18226 DebugReportCallbackEXT callback;
18227 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 ) ) );
18228 return createResultValue( result, callback, "vk::Instance::createDebugReportCallbackEXT" );
18229 }
18230#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18231
18232 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, const AllocationCallbacks* pAllocator ) const
18233 {
18234 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
18235 }
18236
18237#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18238 void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, Optional<const AllocationCallbacks> allocator = nullptr ) const
18239 {
18240 vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)) );
18241 }
18242#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18243
18244 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage ) const
18245 {
18246 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, pLayerPrefix, pMessage );
18247 }
18248
18249#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18250 void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const std::string & layerPrefix, const std::string & message ) const
18251 {
18252 vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, layerPrefix.c_str(), message.c_str() );
18253 }
18254#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18255
18256#if !defined(VULKAN_HPP_TYPESAFE_CONVERSION)
18257 explicit
18258#endif
18259 operator VkInstance() const
18260 {
18261 return m_instance;
18262 }
18263
18264 explicit operator bool() const
18265 {
18266 return m_instance != VK_NULL_HANDLE;
18267 }
18268
18269 bool operator!() const
18270 {
18271 return m_instance == VK_NULL_HANDLE;
18272 }
18273
18274 private:
18275 VkInstance m_instance;
18276 };
18277 static_assert( sizeof( Instance ) == sizeof( VkInstance ), "handle and wrapper have different size!" );
18278
Lenny Komow68432d72016-09-29 14:16:59 -060018279 enum class ValidationCheckEXT
18280 {
18281 eAll = VK_VALIDATION_CHECK_ALL_EXT
18282 };
18283
18284 struct ValidationFlagsEXT
18285 {
18286 ValidationFlagsEXT( uint32_t disabledValidationCheckCount_ = 0, ValidationCheckEXT* pDisabledValidationChecks_ = nullptr )
18287 : sType( StructureType::eValidationFlagsEXT )
18288 , pNext( nullptr )
18289 , disabledValidationCheckCount( disabledValidationCheckCount_ )
18290 , pDisabledValidationChecks( pDisabledValidationChecks_ )
18291 {
18292 }
18293
18294 ValidationFlagsEXT( VkValidationFlagsEXT const & rhs )
18295 {
18296 memcpy( this, &rhs, sizeof(ValidationFlagsEXT) );
18297 }
18298
18299 ValidationFlagsEXT& operator=( VkValidationFlagsEXT const & rhs )
18300 {
18301 memcpy( this, &rhs, sizeof(ValidationFlagsEXT) );
18302 return *this;
18303 }
18304
18305 ValidationFlagsEXT& setSType( StructureType sType_ )
18306 {
18307 sType = sType_;
18308 return *this;
18309 }
18310
18311 ValidationFlagsEXT& setPNext( const void* pNext_ )
18312 {
18313 pNext = pNext_;
18314 return *this;
18315 }
18316
18317 ValidationFlagsEXT& setDisabledValidationCheckCount( uint32_t disabledValidationCheckCount_ )
18318 {
18319 disabledValidationCheckCount = disabledValidationCheckCount_;
18320 return *this;
18321 }
18322
18323 ValidationFlagsEXT& setPDisabledValidationChecks( ValidationCheckEXT* pDisabledValidationChecks_ )
18324 {
18325 pDisabledValidationChecks = pDisabledValidationChecks_;
18326 return *this;
18327 }
18328
18329 operator const VkValidationFlagsEXT&() const
18330 {
18331 return *reinterpret_cast<const VkValidationFlagsEXT*>(this);
18332 }
18333
18334 bool operator==( ValidationFlagsEXT const& rhs ) const
18335 {
18336 return ( sType == rhs.sType )
18337 && ( pNext == rhs.pNext )
18338 && ( disabledValidationCheckCount == rhs.disabledValidationCheckCount )
18339 && ( pDisabledValidationChecks == rhs.pDisabledValidationChecks );
18340 }
18341
18342 bool operator!=( ValidationFlagsEXT const& rhs ) const
18343 {
18344 return !operator==( rhs );
18345 }
18346
18347 private:
18348 StructureType sType;
18349
18350 public:
18351 const void* pNext;
18352 uint32_t disabledValidationCheckCount;
18353 ValidationCheckEXT* pDisabledValidationChecks;
18354 };
18355 static_assert( sizeof( ValidationFlagsEXT ) == sizeof( VkValidationFlagsEXT ), "struct and wrapper have different size!" );
18356
Lenny Komowbed9b5c2016-08-11 11:23:15 -060018357 inline Result createInstance( const InstanceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Instance* pInstance )
18358 {
18359 return static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkInstance*>( pInstance ) ) );
18360 }
18361
18362#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18363 inline ResultValueType<Instance>::type createInstance( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr )
18364 {
18365 Instance instance;
18366 Result result = static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator)), reinterpret_cast<VkInstance*>( &instance ) ) );
18367 return createResultValue( result, instance, "vk::createInstance" );
18368 }
18369#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18370
18371 inline Result enumerateInstanceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties )
18372 {
18373 return static_cast<Result>( vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
18374 }
18375
18376#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18377 template <typename Allocator = std::allocator<LayerProperties>>
18378 typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties()
18379 {
18380 std::vector<LayerProperties,Allocator> properties;
18381 uint32_t propertyCount;
18382 Result result;
18383 do
18384 {
18385 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) );
18386 if ( ( result == Result::eSuccess ) && propertyCount )
18387 {
18388 properties.resize( propertyCount );
18389 result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
18390 }
18391 } while ( result == Result::eIncomplete );
18392 assert( propertyCount <= properties.size() );
18393 properties.resize( propertyCount );
18394 return createResultValue( result, properties, "vk::enumerateInstanceLayerProperties" );
18395 }
18396#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18397
18398 inline Result enumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties )
18399 {
18400 return static_cast<Result>( vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
18401 }
18402
18403#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
18404 template <typename Allocator = std::allocator<ExtensionProperties>>
18405 typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateInstanceExtensionProperties( Optional<const std::string> layerName = nullptr )
18406 {
18407 std::vector<ExtensionProperties,Allocator> properties;
18408 uint32_t propertyCount;
18409 Result result;
18410 do
18411 {
18412 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
18413 if ( ( result == Result::eSuccess ) && propertyCount )
18414 {
18415 properties.resize( propertyCount );
18416 result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
18417 }
18418 } while ( result == Result::eIncomplete );
18419 assert( propertyCount <= properties.size() );
18420 properties.resize( propertyCount );
18421 return createResultValue( result, properties, "vk::enumerateInstanceExtensionProperties" );
18422 }
18423#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
18424
18425 inline std::string to_string(FramebufferCreateFlagBits)
18426 {
18427 return "(void)";
18428 }
18429
18430 inline std::string to_string(FramebufferCreateFlags)
18431 {
18432 return "{}";
18433 }
18434
18435 inline std::string to_string(QueryPoolCreateFlagBits)
18436 {
18437 return "(void)";
18438 }
18439
18440 inline std::string to_string(QueryPoolCreateFlags)
18441 {
18442 return "{}";
18443 }
18444
18445 inline std::string to_string(RenderPassCreateFlagBits)
18446 {
18447 return "(void)";
18448 }
18449
18450 inline std::string to_string(RenderPassCreateFlags)
18451 {
18452 return "{}";
18453 }
18454
18455 inline std::string to_string(SamplerCreateFlagBits)
18456 {
18457 return "(void)";
18458 }
18459
18460 inline std::string to_string(SamplerCreateFlags)
18461 {
18462 return "{}";
18463 }
18464
18465 inline std::string to_string(PipelineLayoutCreateFlagBits)
18466 {
18467 return "(void)";
18468 }
18469
18470 inline std::string to_string(PipelineLayoutCreateFlags)
18471 {
18472 return "{}";
18473 }
18474
18475 inline std::string to_string(PipelineCacheCreateFlagBits)
18476 {
18477 return "(void)";
18478 }
18479
18480 inline std::string to_string(PipelineCacheCreateFlags)
18481 {
18482 return "{}";
18483 }
18484
18485 inline std::string to_string(PipelineDepthStencilStateCreateFlagBits)
18486 {
18487 return "(void)";
18488 }
18489
18490 inline std::string to_string(PipelineDepthStencilStateCreateFlags)
18491 {
18492 return "{}";
18493 }
18494
18495 inline std::string to_string(PipelineDynamicStateCreateFlagBits)
18496 {
18497 return "(void)";
18498 }
18499
18500 inline std::string to_string(PipelineDynamicStateCreateFlags)
18501 {
18502 return "{}";
18503 }
18504
18505 inline std::string to_string(PipelineColorBlendStateCreateFlagBits)
18506 {
18507 return "(void)";
18508 }
18509
18510 inline std::string to_string(PipelineColorBlendStateCreateFlags)
18511 {
18512 return "{}";
18513 }
18514
18515 inline std::string to_string(PipelineMultisampleStateCreateFlagBits)
18516 {
18517 return "(void)";
18518 }
18519
18520 inline std::string to_string(PipelineMultisampleStateCreateFlags)
18521 {
18522 return "{}";
18523 }
18524
18525 inline std::string to_string(PipelineRasterizationStateCreateFlagBits)
18526 {
18527 return "(void)";
18528 }
18529
18530 inline std::string to_string(PipelineRasterizationStateCreateFlags)
18531 {
18532 return "{}";
18533 }
18534
18535 inline std::string to_string(PipelineViewportStateCreateFlagBits)
18536 {
18537 return "(void)";
18538 }
18539
18540 inline std::string to_string(PipelineViewportStateCreateFlags)
18541 {
18542 return "{}";
18543 }
18544
18545 inline std::string to_string(PipelineTessellationStateCreateFlagBits)
18546 {
18547 return "(void)";
18548 }
18549
18550 inline std::string to_string(PipelineTessellationStateCreateFlags)
18551 {
18552 return "{}";
18553 }
18554
18555 inline std::string to_string(PipelineInputAssemblyStateCreateFlagBits)
18556 {
18557 return "(void)";
18558 }
18559
18560 inline std::string to_string(PipelineInputAssemblyStateCreateFlags)
18561 {
18562 return "{}";
18563 }
18564
18565 inline std::string to_string(PipelineVertexInputStateCreateFlagBits)
18566 {
18567 return "(void)";
18568 }
18569
18570 inline std::string to_string(PipelineVertexInputStateCreateFlags)
18571 {
18572 return "{}";
18573 }
18574
18575 inline std::string to_string(PipelineShaderStageCreateFlagBits)
18576 {
18577 return "(void)";
18578 }
18579
18580 inline std::string to_string(PipelineShaderStageCreateFlags)
18581 {
18582 return "{}";
18583 }
18584
18585 inline std::string to_string(DescriptorSetLayoutCreateFlagBits)
18586 {
18587 return "(void)";
18588 }
18589
18590 inline std::string to_string(DescriptorSetLayoutCreateFlags)
18591 {
18592 return "{}";
18593 }
18594
18595 inline std::string to_string(BufferViewCreateFlagBits)
18596 {
18597 return "(void)";
18598 }
18599
18600 inline std::string to_string(BufferViewCreateFlags)
18601 {
18602 return "{}";
18603 }
18604
18605 inline std::string to_string(InstanceCreateFlagBits)
18606 {
18607 return "(void)";
18608 }
18609
18610 inline std::string to_string(InstanceCreateFlags)
18611 {
18612 return "{}";
18613 }
18614
18615 inline std::string to_string(DeviceCreateFlagBits)
18616 {
18617 return "(void)";
18618 }
18619
18620 inline std::string to_string(DeviceCreateFlags)
18621 {
18622 return "{}";
18623 }
18624
18625 inline std::string to_string(DeviceQueueCreateFlagBits)
18626 {
18627 return "(void)";
18628 }
18629
18630 inline std::string to_string(DeviceQueueCreateFlags)
18631 {
18632 return "{}";
18633 }
18634
18635 inline std::string to_string(ImageViewCreateFlagBits)
18636 {
18637 return "(void)";
18638 }
18639
18640 inline std::string to_string(ImageViewCreateFlags)
18641 {
18642 return "{}";
18643 }
18644
18645 inline std::string to_string(SemaphoreCreateFlagBits)
18646 {
18647 return "(void)";
18648 }
18649
18650 inline std::string to_string(SemaphoreCreateFlags)
18651 {
18652 return "{}";
18653 }
18654
18655 inline std::string to_string(ShaderModuleCreateFlagBits)
18656 {
18657 return "(void)";
18658 }
18659
18660 inline std::string to_string(ShaderModuleCreateFlags)
18661 {
18662 return "{}";
18663 }
18664
18665 inline std::string to_string(EventCreateFlagBits)
18666 {
18667 return "(void)";
18668 }
18669
18670 inline std::string to_string(EventCreateFlags)
18671 {
18672 return "{}";
18673 }
18674
18675 inline std::string to_string(MemoryMapFlagBits)
18676 {
18677 return "(void)";
18678 }
18679
18680 inline std::string to_string(MemoryMapFlags)
18681 {
18682 return "{}";
18683 }
18684
18685 inline std::string to_string(SubpassDescriptionFlagBits)
18686 {
18687 return "(void)";
18688 }
18689
18690 inline std::string to_string(SubpassDescriptionFlags)
18691 {
18692 return "{}";
18693 }
18694
18695 inline std::string to_string(DescriptorPoolResetFlagBits)
18696 {
18697 return "(void)";
18698 }
18699
18700 inline std::string to_string(DescriptorPoolResetFlags)
18701 {
18702 return "{}";
18703 }
18704
18705 inline std::string to_string(SwapchainCreateFlagBitsKHR)
18706 {
18707 return "(void)";
18708 }
18709
18710 inline std::string to_string(SwapchainCreateFlagsKHR)
18711 {
18712 return "{}";
18713 }
18714
18715 inline std::string to_string(DisplayModeCreateFlagBitsKHR)
18716 {
18717 return "(void)";
18718 }
18719
18720 inline std::string to_string(DisplayModeCreateFlagsKHR)
18721 {
18722 return "{}";
18723 }
18724
18725 inline std::string to_string(DisplaySurfaceCreateFlagBitsKHR)
18726 {
18727 return "(void)";
18728 }
18729
18730 inline std::string to_string(DisplaySurfaceCreateFlagsKHR)
18731 {
18732 return "{}";
18733 }
18734
18735#ifdef VK_USE_PLATFORM_ANDROID_KHR
18736 inline std::string to_string(AndroidSurfaceCreateFlagBitsKHR)
18737 {
18738 return "(void)";
18739 }
18740#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18741
18742#ifdef VK_USE_PLATFORM_ANDROID_KHR
18743 inline std::string to_string(AndroidSurfaceCreateFlagsKHR)
18744 {
18745 return "{}";
18746 }
18747#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
18748
18749#ifdef VK_USE_PLATFORM_MIR_KHR
18750 inline std::string to_string(MirSurfaceCreateFlagBitsKHR)
18751 {
18752 return "(void)";
18753 }
18754#endif /*VK_USE_PLATFORM_MIR_KHR*/
18755
18756#ifdef VK_USE_PLATFORM_MIR_KHR
18757 inline std::string to_string(MirSurfaceCreateFlagsKHR)
18758 {
18759 return "{}";
18760 }
18761#endif /*VK_USE_PLATFORM_MIR_KHR*/
18762
18763#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18764 inline std::string to_string(WaylandSurfaceCreateFlagBitsKHR)
18765 {
18766 return "(void)";
18767 }
18768#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18769
18770#ifdef VK_USE_PLATFORM_WAYLAND_KHR
18771 inline std::string to_string(WaylandSurfaceCreateFlagsKHR)
18772 {
18773 return "{}";
18774 }
18775#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
18776
18777#ifdef VK_USE_PLATFORM_WIN32_KHR
18778 inline std::string to_string(Win32SurfaceCreateFlagBitsKHR)
18779 {
18780 return "(void)";
18781 }
18782#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18783
18784#ifdef VK_USE_PLATFORM_WIN32_KHR
18785 inline std::string to_string(Win32SurfaceCreateFlagsKHR)
18786 {
18787 return "{}";
18788 }
18789#endif /*VK_USE_PLATFORM_WIN32_KHR*/
18790
18791#ifdef VK_USE_PLATFORM_XLIB_KHR
18792 inline std::string to_string(XlibSurfaceCreateFlagBitsKHR)
18793 {
18794 return "(void)";
18795 }
18796#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18797
18798#ifdef VK_USE_PLATFORM_XLIB_KHR
18799 inline std::string to_string(XlibSurfaceCreateFlagsKHR)
18800 {
18801 return "{}";
18802 }
18803#endif /*VK_USE_PLATFORM_XLIB_KHR*/
18804
18805#ifdef VK_USE_PLATFORM_XCB_KHR
18806 inline std::string to_string(XcbSurfaceCreateFlagBitsKHR)
18807 {
18808 return "(void)";
18809 }
18810#endif /*VK_USE_PLATFORM_XCB_KHR*/
18811
18812#ifdef VK_USE_PLATFORM_XCB_KHR
18813 inline std::string to_string(XcbSurfaceCreateFlagsKHR)
18814 {
18815 return "{}";
18816 }
18817#endif /*VK_USE_PLATFORM_XCB_KHR*/
18818
18819 inline std::string to_string(ImageLayout value)
18820 {
18821 switch (value)
18822 {
18823 case ImageLayout::eUndefined: return "Undefined";
18824 case ImageLayout::eGeneral: return "General";
18825 case ImageLayout::eColorAttachmentOptimal: return "ColorAttachmentOptimal";
18826 case ImageLayout::eDepthStencilAttachmentOptimal: return "DepthStencilAttachmentOptimal";
18827 case ImageLayout::eDepthStencilReadOnlyOptimal: return "DepthStencilReadOnlyOptimal";
18828 case ImageLayout::eShaderReadOnlyOptimal: return "ShaderReadOnlyOptimal";
18829 case ImageLayout::eTransferSrcOptimal: return "TransferSrcOptimal";
18830 case ImageLayout::eTransferDstOptimal: return "TransferDstOptimal";
18831 case ImageLayout::ePreinitialized: return "Preinitialized";
18832 case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR";
18833 default: return "invalid";
18834 }
18835 }
18836
18837 inline std::string to_string(AttachmentLoadOp value)
18838 {
18839 switch (value)
18840 {
18841 case AttachmentLoadOp::eLoad: return "Load";
18842 case AttachmentLoadOp::eClear: return "Clear";
18843 case AttachmentLoadOp::eDontCare: return "DontCare";
18844 default: return "invalid";
18845 }
18846 }
18847
18848 inline std::string to_string(AttachmentStoreOp value)
18849 {
18850 switch (value)
18851 {
18852 case AttachmentStoreOp::eStore: return "Store";
18853 case AttachmentStoreOp::eDontCare: return "DontCare";
18854 default: return "invalid";
18855 }
18856 }
18857
18858 inline std::string to_string(ImageType value)
18859 {
18860 switch (value)
18861 {
18862 case ImageType::e1D: return "1D";
18863 case ImageType::e2D: return "2D";
18864 case ImageType::e3D: return "3D";
18865 default: return "invalid";
18866 }
18867 }
18868
18869 inline std::string to_string(ImageTiling value)
18870 {
18871 switch (value)
18872 {
18873 case ImageTiling::eOptimal: return "Optimal";
18874 case ImageTiling::eLinear: return "Linear";
18875 default: return "invalid";
18876 }
18877 }
18878
18879 inline std::string to_string(ImageViewType value)
18880 {
18881 switch (value)
18882 {
18883 case ImageViewType::e1D: return "1D";
18884 case ImageViewType::e2D: return "2D";
18885 case ImageViewType::e3D: return "3D";
18886 case ImageViewType::eCube: return "Cube";
18887 case ImageViewType::e1DArray: return "1DArray";
18888 case ImageViewType::e2DArray: return "2DArray";
18889 case ImageViewType::eCubeArray: return "CubeArray";
18890 default: return "invalid";
18891 }
18892 }
18893
18894 inline std::string to_string(CommandBufferLevel value)
18895 {
18896 switch (value)
18897 {
18898 case CommandBufferLevel::ePrimary: return "Primary";
18899 case CommandBufferLevel::eSecondary: return "Secondary";
18900 default: return "invalid";
18901 }
18902 }
18903
18904 inline std::string to_string(ComponentSwizzle value)
18905 {
18906 switch (value)
18907 {
18908 case ComponentSwizzle::eIdentity: return "Identity";
18909 case ComponentSwizzle::eZero: return "Zero";
18910 case ComponentSwizzle::eOne: return "One";
18911 case ComponentSwizzle::eR: return "R";
18912 case ComponentSwizzle::eG: return "G";
18913 case ComponentSwizzle::eB: return "B";
18914 case ComponentSwizzle::eA: return "A";
18915 default: return "invalid";
18916 }
18917 }
18918
18919 inline std::string to_string(DescriptorType value)
18920 {
18921 switch (value)
18922 {
18923 case DescriptorType::eSampler: return "Sampler";
18924 case DescriptorType::eCombinedImageSampler: return "CombinedImageSampler";
18925 case DescriptorType::eSampledImage: return "SampledImage";
18926 case DescriptorType::eStorageImage: return "StorageImage";
18927 case DescriptorType::eUniformTexelBuffer: return "UniformTexelBuffer";
18928 case DescriptorType::eStorageTexelBuffer: return "StorageTexelBuffer";
18929 case DescriptorType::eUniformBuffer: return "UniformBuffer";
18930 case DescriptorType::eStorageBuffer: return "StorageBuffer";
18931 case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic";
18932 case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic";
18933 case DescriptorType::eInputAttachment: return "InputAttachment";
18934 default: return "invalid";
18935 }
18936 }
18937
18938 inline std::string to_string(QueryType value)
18939 {
18940 switch (value)
18941 {
18942 case QueryType::eOcclusion: return "Occlusion";
18943 case QueryType::ePipelineStatistics: return "PipelineStatistics";
18944 case QueryType::eTimestamp: return "Timestamp";
18945 default: return "invalid";
18946 }
18947 }
18948
18949 inline std::string to_string(BorderColor value)
18950 {
18951 switch (value)
18952 {
18953 case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack";
18954 case BorderColor::eIntTransparentBlack: return "IntTransparentBlack";
18955 case BorderColor::eFloatOpaqueBlack: return "FloatOpaqueBlack";
18956 case BorderColor::eIntOpaqueBlack: return "IntOpaqueBlack";
18957 case BorderColor::eFloatOpaqueWhite: return "FloatOpaqueWhite";
18958 case BorderColor::eIntOpaqueWhite: return "IntOpaqueWhite";
18959 default: return "invalid";
18960 }
18961 }
18962
18963 inline std::string to_string(PipelineBindPoint value)
18964 {
18965 switch (value)
18966 {
18967 case PipelineBindPoint::eGraphics: return "Graphics";
18968 case PipelineBindPoint::eCompute: return "Compute";
18969 default: return "invalid";
18970 }
18971 }
18972
18973 inline std::string to_string(PipelineCacheHeaderVersion value)
18974 {
18975 switch (value)
18976 {
18977 case PipelineCacheHeaderVersion::eOne: return "One";
18978 default: return "invalid";
18979 }
18980 }
18981
18982 inline std::string to_string(PrimitiveTopology value)
18983 {
18984 switch (value)
18985 {
18986 case PrimitiveTopology::ePointList: return "PointList";
18987 case PrimitiveTopology::eLineList: return "LineList";
18988 case PrimitiveTopology::eLineStrip: return "LineStrip";
18989 case PrimitiveTopology::eTriangleList: return "TriangleList";
18990 case PrimitiveTopology::eTriangleStrip: return "TriangleStrip";
18991 case PrimitiveTopology::eTriangleFan: return "TriangleFan";
18992 case PrimitiveTopology::eLineListWithAdjacency: return "LineListWithAdjacency";
18993 case PrimitiveTopology::eLineStripWithAdjacency: return "LineStripWithAdjacency";
18994 case PrimitiveTopology::eTriangleListWithAdjacency: return "TriangleListWithAdjacency";
18995 case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency";
18996 case PrimitiveTopology::ePatchList: return "PatchList";
18997 default: return "invalid";
18998 }
18999 }
19000
19001 inline std::string to_string(SharingMode value)
19002 {
19003 switch (value)
19004 {
19005 case SharingMode::eExclusive: return "Exclusive";
19006 case SharingMode::eConcurrent: return "Concurrent";
19007 default: return "invalid";
19008 }
19009 }
19010
19011 inline std::string to_string(IndexType value)
19012 {
19013 switch (value)
19014 {
19015 case IndexType::eUint16: return "Uint16";
19016 case IndexType::eUint32: return "Uint32";
19017 default: return "invalid";
19018 }
19019 }
19020
19021 inline std::string to_string(Filter value)
19022 {
19023 switch (value)
19024 {
19025 case Filter::eNearest: return "Nearest";
19026 case Filter::eLinear: return "Linear";
19027 case Filter::eCubicIMG: return "CubicIMG";
19028 default: return "invalid";
19029 }
19030 }
19031
19032 inline std::string to_string(SamplerMipmapMode value)
19033 {
19034 switch (value)
19035 {
19036 case SamplerMipmapMode::eNearest: return "Nearest";
19037 case SamplerMipmapMode::eLinear: return "Linear";
19038 default: return "invalid";
19039 }
19040 }
19041
19042 inline std::string to_string(SamplerAddressMode value)
19043 {
19044 switch (value)
19045 {
19046 case SamplerAddressMode::eRepeat: return "Repeat";
19047 case SamplerAddressMode::eMirroredRepeat: return "MirroredRepeat";
19048 case SamplerAddressMode::eClampToEdge: return "ClampToEdge";
19049 case SamplerAddressMode::eClampToBorder: return "ClampToBorder";
19050 case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge";
19051 default: return "invalid";
19052 }
19053 }
19054
19055 inline std::string to_string(CompareOp value)
19056 {
19057 switch (value)
19058 {
19059 case CompareOp::eNever: return "Never";
19060 case CompareOp::eLess: return "Less";
19061 case CompareOp::eEqual: return "Equal";
19062 case CompareOp::eLessOrEqual: return "LessOrEqual";
19063 case CompareOp::eGreater: return "Greater";
19064 case CompareOp::eNotEqual: return "NotEqual";
19065 case CompareOp::eGreaterOrEqual: return "GreaterOrEqual";
19066 case CompareOp::eAlways: return "Always";
19067 default: return "invalid";
19068 }
19069 }
19070
19071 inline std::string to_string(PolygonMode value)
19072 {
19073 switch (value)
19074 {
19075 case PolygonMode::eFill: return "Fill";
19076 case PolygonMode::eLine: return "Line";
19077 case PolygonMode::ePoint: return "Point";
19078 default: return "invalid";
19079 }
19080 }
19081
19082 inline std::string to_string(CullModeFlagBits value)
19083 {
19084 switch (value)
19085 {
19086 case CullModeFlagBits::eNone: return "None";
19087 case CullModeFlagBits::eFront: return "Front";
19088 case CullModeFlagBits::eBack: return "Back";
19089 case CullModeFlagBits::eFrontAndBack: return "FrontAndBack";
19090 default: return "invalid";
19091 }
19092 }
19093
19094 inline std::string to_string(CullModeFlags value)
19095 {
19096 if (!value) return "{}";
19097 std::string result;
19098 if (value & CullModeFlagBits::eNone) result += "None | ";
19099 if (value & CullModeFlagBits::eFront) result += "Front | ";
19100 if (value & CullModeFlagBits::eBack) result += "Back | ";
19101 if (value & CullModeFlagBits::eFrontAndBack) result += "FrontAndBack | ";
19102 return "{" + result.substr(0, result.size() - 3) + "}";
19103 }
19104
19105 inline std::string to_string(FrontFace value)
19106 {
19107 switch (value)
19108 {
19109 case FrontFace::eCounterClockwise: return "CounterClockwise";
19110 case FrontFace::eClockwise: return "Clockwise";
19111 default: return "invalid";
19112 }
19113 }
19114
19115 inline std::string to_string(BlendFactor value)
19116 {
19117 switch (value)
19118 {
19119 case BlendFactor::eZero: return "Zero";
19120 case BlendFactor::eOne: return "One";
19121 case BlendFactor::eSrcColor: return "SrcColor";
19122 case BlendFactor::eOneMinusSrcColor: return "OneMinusSrcColor";
19123 case BlendFactor::eDstColor: return "DstColor";
19124 case BlendFactor::eOneMinusDstColor: return "OneMinusDstColor";
19125 case BlendFactor::eSrcAlpha: return "SrcAlpha";
19126 case BlendFactor::eOneMinusSrcAlpha: return "OneMinusSrcAlpha";
19127 case BlendFactor::eDstAlpha: return "DstAlpha";
19128 case BlendFactor::eOneMinusDstAlpha: return "OneMinusDstAlpha";
19129 case BlendFactor::eConstantColor: return "ConstantColor";
19130 case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor";
19131 case BlendFactor::eConstantAlpha: return "ConstantAlpha";
19132 case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha";
19133 case BlendFactor::eSrcAlphaSaturate: return "SrcAlphaSaturate";
19134 case BlendFactor::eSrc1Color: return "Src1Color";
19135 case BlendFactor::eOneMinusSrc1Color: return "OneMinusSrc1Color";
19136 case BlendFactor::eSrc1Alpha: return "Src1Alpha";
19137 case BlendFactor::eOneMinusSrc1Alpha: return "OneMinusSrc1Alpha";
19138 default: return "invalid";
19139 }
19140 }
19141
19142 inline std::string to_string(BlendOp value)
19143 {
19144 switch (value)
19145 {
19146 case BlendOp::eAdd: return "Add";
19147 case BlendOp::eSubtract: return "Subtract";
19148 case BlendOp::eReverseSubtract: return "ReverseSubtract";
19149 case BlendOp::eMin: return "Min";
19150 case BlendOp::eMax: return "Max";
19151 default: return "invalid";
19152 }
19153 }
19154
19155 inline std::string to_string(StencilOp value)
19156 {
19157 switch (value)
19158 {
19159 case StencilOp::eKeep: return "Keep";
19160 case StencilOp::eZero: return "Zero";
19161 case StencilOp::eReplace: return "Replace";
19162 case StencilOp::eIncrementAndClamp: return "IncrementAndClamp";
19163 case StencilOp::eDecrementAndClamp: return "DecrementAndClamp";
19164 case StencilOp::eInvert: return "Invert";
19165 case StencilOp::eIncrementAndWrap: return "IncrementAndWrap";
19166 case StencilOp::eDecrementAndWrap: return "DecrementAndWrap";
19167 default: return "invalid";
19168 }
19169 }
19170
19171 inline std::string to_string(LogicOp value)
19172 {
19173 switch (value)
19174 {
19175 case LogicOp::eClear: return "Clear";
19176 case LogicOp::eAnd: return "And";
19177 case LogicOp::eAndReverse: return "AndReverse";
19178 case LogicOp::eCopy: return "Copy";
19179 case LogicOp::eAndInverted: return "AndInverted";
19180 case LogicOp::eNoOp: return "NoOp";
19181 case LogicOp::eXor: return "Xor";
19182 case LogicOp::eOr: return "Or";
19183 case LogicOp::eNor: return "Nor";
19184 case LogicOp::eEquivalent: return "Equivalent";
19185 case LogicOp::eInvert: return "Invert";
19186 case LogicOp::eOrReverse: return "OrReverse";
19187 case LogicOp::eCopyInverted: return "CopyInverted";
19188 case LogicOp::eOrInverted: return "OrInverted";
19189 case LogicOp::eNand: return "Nand";
19190 case LogicOp::eSet: return "Set";
19191 default: return "invalid";
19192 }
19193 }
19194
19195 inline std::string to_string(InternalAllocationType value)
19196 {
19197 switch (value)
19198 {
19199 case InternalAllocationType::eExecutable: return "Executable";
19200 default: return "invalid";
19201 }
19202 }
19203
19204 inline std::string to_string(SystemAllocationScope value)
19205 {
19206 switch (value)
19207 {
19208 case SystemAllocationScope::eCommand: return "Command";
19209 case SystemAllocationScope::eObject: return "Object";
19210 case SystemAllocationScope::eCache: return "Cache";
19211 case SystemAllocationScope::eDevice: return "Device";
19212 case SystemAllocationScope::eInstance: return "Instance";
19213 default: return "invalid";
19214 }
19215 }
19216
19217 inline std::string to_string(PhysicalDeviceType value)
19218 {
19219 switch (value)
19220 {
19221 case PhysicalDeviceType::eOther: return "Other";
19222 case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu";
19223 case PhysicalDeviceType::eDiscreteGpu: return "DiscreteGpu";
19224 case PhysicalDeviceType::eVirtualGpu: return "VirtualGpu";
19225 case PhysicalDeviceType::eCpu: return "Cpu";
19226 default: return "invalid";
19227 }
19228 }
19229
19230 inline std::string to_string(VertexInputRate value)
19231 {
19232 switch (value)
19233 {
19234 case VertexInputRate::eVertex: return "Vertex";
19235 case VertexInputRate::eInstance: return "Instance";
19236 default: return "invalid";
19237 }
19238 }
19239
19240 inline std::string to_string(Format value)
19241 {
19242 switch (value)
19243 {
19244 case Format::eUndefined: return "Undefined";
19245 case Format::eR4G4UnormPack8: return "R4G4UnormPack8";
19246 case Format::eR4G4B4A4UnormPack16: return "R4G4B4A4UnormPack16";
19247 case Format::eB4G4R4A4UnormPack16: return "B4G4R4A4UnormPack16";
19248 case Format::eR5G6B5UnormPack16: return "R5G6B5UnormPack16";
19249 case Format::eB5G6R5UnormPack16: return "B5G6R5UnormPack16";
19250 case Format::eR5G5B5A1UnormPack16: return "R5G5B5A1UnormPack16";
19251 case Format::eB5G5R5A1UnormPack16: return "B5G5R5A1UnormPack16";
19252 case Format::eA1R5G5B5UnormPack16: return "A1R5G5B5UnormPack16";
19253 case Format::eR8Unorm: return "R8Unorm";
19254 case Format::eR8Snorm: return "R8Snorm";
19255 case Format::eR8Uscaled: return "R8Uscaled";
19256 case Format::eR8Sscaled: return "R8Sscaled";
19257 case Format::eR8Uint: return "R8Uint";
19258 case Format::eR8Sint: return "R8Sint";
19259 case Format::eR8Srgb: return "R8Srgb";
19260 case Format::eR8G8Unorm: return "R8G8Unorm";
19261 case Format::eR8G8Snorm: return "R8G8Snorm";
19262 case Format::eR8G8Uscaled: return "R8G8Uscaled";
19263 case Format::eR8G8Sscaled: return "R8G8Sscaled";
19264 case Format::eR8G8Uint: return "R8G8Uint";
19265 case Format::eR8G8Sint: return "R8G8Sint";
19266 case Format::eR8G8Srgb: return "R8G8Srgb";
19267 case Format::eR8G8B8Unorm: return "R8G8B8Unorm";
19268 case Format::eR8G8B8Snorm: return "R8G8B8Snorm";
19269 case Format::eR8G8B8Uscaled: return "R8G8B8Uscaled";
19270 case Format::eR8G8B8Sscaled: return "R8G8B8Sscaled";
19271 case Format::eR8G8B8Uint: return "R8G8B8Uint";
19272 case Format::eR8G8B8Sint: return "R8G8B8Sint";
19273 case Format::eR8G8B8Srgb: return "R8G8B8Srgb";
19274 case Format::eB8G8R8Unorm: return "B8G8R8Unorm";
19275 case Format::eB8G8R8Snorm: return "B8G8R8Snorm";
19276 case Format::eB8G8R8Uscaled: return "B8G8R8Uscaled";
19277 case Format::eB8G8R8Sscaled: return "B8G8R8Sscaled";
19278 case Format::eB8G8R8Uint: return "B8G8R8Uint";
19279 case Format::eB8G8R8Sint: return "B8G8R8Sint";
19280 case Format::eB8G8R8Srgb: return "B8G8R8Srgb";
19281 case Format::eR8G8B8A8Unorm: return "R8G8B8A8Unorm";
19282 case Format::eR8G8B8A8Snorm: return "R8G8B8A8Snorm";
19283 case Format::eR8G8B8A8Uscaled: return "R8G8B8A8Uscaled";
19284 case Format::eR8G8B8A8Sscaled: return "R8G8B8A8Sscaled";
19285 case Format::eR8G8B8A8Uint: return "R8G8B8A8Uint";
19286 case Format::eR8G8B8A8Sint: return "R8G8B8A8Sint";
19287 case Format::eR8G8B8A8Srgb: return "R8G8B8A8Srgb";
19288 case Format::eB8G8R8A8Unorm: return "B8G8R8A8Unorm";
19289 case Format::eB8G8R8A8Snorm: return "B8G8R8A8Snorm";
19290 case Format::eB8G8R8A8Uscaled: return "B8G8R8A8Uscaled";
19291 case Format::eB8G8R8A8Sscaled: return "B8G8R8A8Sscaled";
19292 case Format::eB8G8R8A8Uint: return "B8G8R8A8Uint";
19293 case Format::eB8G8R8A8Sint: return "B8G8R8A8Sint";
19294 case Format::eB8G8R8A8Srgb: return "B8G8R8A8Srgb";
19295 case Format::eA8B8G8R8UnormPack32: return "A8B8G8R8UnormPack32";
19296 case Format::eA8B8G8R8SnormPack32: return "A8B8G8R8SnormPack32";
19297 case Format::eA8B8G8R8UscaledPack32: return "A8B8G8R8UscaledPack32";
19298 case Format::eA8B8G8R8SscaledPack32: return "A8B8G8R8SscaledPack32";
19299 case Format::eA8B8G8R8UintPack32: return "A8B8G8R8UintPack32";
19300 case Format::eA8B8G8R8SintPack32: return "A8B8G8R8SintPack32";
19301 case Format::eA8B8G8R8SrgbPack32: return "A8B8G8R8SrgbPack32";
19302 case Format::eA2R10G10B10UnormPack32: return "A2R10G10B10UnormPack32";
19303 case Format::eA2R10G10B10SnormPack32: return "A2R10G10B10SnormPack32";
19304 case Format::eA2R10G10B10UscaledPack32: return "A2R10G10B10UscaledPack32";
19305 case Format::eA2R10G10B10SscaledPack32: return "A2R10G10B10SscaledPack32";
19306 case Format::eA2R10G10B10UintPack32: return "A2R10G10B10UintPack32";
19307 case Format::eA2R10G10B10SintPack32: return "A2R10G10B10SintPack32";
19308 case Format::eA2B10G10R10UnormPack32: return "A2B10G10R10UnormPack32";
19309 case Format::eA2B10G10R10SnormPack32: return "A2B10G10R10SnormPack32";
19310 case Format::eA2B10G10R10UscaledPack32: return "A2B10G10R10UscaledPack32";
19311 case Format::eA2B10G10R10SscaledPack32: return "A2B10G10R10SscaledPack32";
19312 case Format::eA2B10G10R10UintPack32: return "A2B10G10R10UintPack32";
19313 case Format::eA2B10G10R10SintPack32: return "A2B10G10R10SintPack32";
19314 case Format::eR16Unorm: return "R16Unorm";
19315 case Format::eR16Snorm: return "R16Snorm";
19316 case Format::eR16Uscaled: return "R16Uscaled";
19317 case Format::eR16Sscaled: return "R16Sscaled";
19318 case Format::eR16Uint: return "R16Uint";
19319 case Format::eR16Sint: return "R16Sint";
19320 case Format::eR16Sfloat: return "R16Sfloat";
19321 case Format::eR16G16Unorm: return "R16G16Unorm";
19322 case Format::eR16G16Snorm: return "R16G16Snorm";
19323 case Format::eR16G16Uscaled: return "R16G16Uscaled";
19324 case Format::eR16G16Sscaled: return "R16G16Sscaled";
19325 case Format::eR16G16Uint: return "R16G16Uint";
19326 case Format::eR16G16Sint: return "R16G16Sint";
19327 case Format::eR16G16Sfloat: return "R16G16Sfloat";
19328 case Format::eR16G16B16Unorm: return "R16G16B16Unorm";
19329 case Format::eR16G16B16Snorm: return "R16G16B16Snorm";
19330 case Format::eR16G16B16Uscaled: return "R16G16B16Uscaled";
19331 case Format::eR16G16B16Sscaled: return "R16G16B16Sscaled";
19332 case Format::eR16G16B16Uint: return "R16G16B16Uint";
19333 case Format::eR16G16B16Sint: return "R16G16B16Sint";
19334 case Format::eR16G16B16Sfloat: return "R16G16B16Sfloat";
19335 case Format::eR16G16B16A16Unorm: return "R16G16B16A16Unorm";
19336 case Format::eR16G16B16A16Snorm: return "R16G16B16A16Snorm";
19337 case Format::eR16G16B16A16Uscaled: return "R16G16B16A16Uscaled";
19338 case Format::eR16G16B16A16Sscaled: return "R16G16B16A16Sscaled";
19339 case Format::eR16G16B16A16Uint: return "R16G16B16A16Uint";
19340 case Format::eR16G16B16A16Sint: return "R16G16B16A16Sint";
19341 case Format::eR16G16B16A16Sfloat: return "R16G16B16A16Sfloat";
19342 case Format::eR32Uint: return "R32Uint";
19343 case Format::eR32Sint: return "R32Sint";
19344 case Format::eR32Sfloat: return "R32Sfloat";
19345 case Format::eR32G32Uint: return "R32G32Uint";
19346 case Format::eR32G32Sint: return "R32G32Sint";
19347 case Format::eR32G32Sfloat: return "R32G32Sfloat";
19348 case Format::eR32G32B32Uint: return "R32G32B32Uint";
19349 case Format::eR32G32B32Sint: return "R32G32B32Sint";
19350 case Format::eR32G32B32Sfloat: return "R32G32B32Sfloat";
19351 case Format::eR32G32B32A32Uint: return "R32G32B32A32Uint";
19352 case Format::eR32G32B32A32Sint: return "R32G32B32A32Sint";
19353 case Format::eR32G32B32A32Sfloat: return "R32G32B32A32Sfloat";
19354 case Format::eR64Uint: return "R64Uint";
19355 case Format::eR64Sint: return "R64Sint";
19356 case Format::eR64Sfloat: return "R64Sfloat";
19357 case Format::eR64G64Uint: return "R64G64Uint";
19358 case Format::eR64G64Sint: return "R64G64Sint";
19359 case Format::eR64G64Sfloat: return "R64G64Sfloat";
19360 case Format::eR64G64B64Uint: return "R64G64B64Uint";
19361 case Format::eR64G64B64Sint: return "R64G64B64Sint";
19362 case Format::eR64G64B64Sfloat: return "R64G64B64Sfloat";
19363 case Format::eR64G64B64A64Uint: return "R64G64B64A64Uint";
19364 case Format::eR64G64B64A64Sint: return "R64G64B64A64Sint";
19365 case Format::eR64G64B64A64Sfloat: return "R64G64B64A64Sfloat";
19366 case Format::eB10G11R11UfloatPack32: return "B10G11R11UfloatPack32";
19367 case Format::eE5B9G9R9UfloatPack32: return "E5B9G9R9UfloatPack32";
19368 case Format::eD16Unorm: return "D16Unorm";
19369 case Format::eX8D24UnormPack32: return "X8D24UnormPack32";
19370 case Format::eD32Sfloat: return "D32Sfloat";
19371 case Format::eS8Uint: return "S8Uint";
19372 case Format::eD16UnormS8Uint: return "D16UnormS8Uint";
19373 case Format::eD24UnormS8Uint: return "D24UnormS8Uint";
19374 case Format::eD32SfloatS8Uint: return "D32SfloatS8Uint";
19375 case Format::eBc1RgbUnormBlock: return "Bc1RgbUnormBlock";
19376 case Format::eBc1RgbSrgbBlock: return "Bc1RgbSrgbBlock";
19377 case Format::eBc1RgbaUnormBlock: return "Bc1RgbaUnormBlock";
19378 case Format::eBc1RgbaSrgbBlock: return "Bc1RgbaSrgbBlock";
19379 case Format::eBc2UnormBlock: return "Bc2UnormBlock";
19380 case Format::eBc2SrgbBlock: return "Bc2SrgbBlock";
19381 case Format::eBc3UnormBlock: return "Bc3UnormBlock";
19382 case Format::eBc3SrgbBlock: return "Bc3SrgbBlock";
19383 case Format::eBc4UnormBlock: return "Bc4UnormBlock";
19384 case Format::eBc4SnormBlock: return "Bc4SnormBlock";
19385 case Format::eBc5UnormBlock: return "Bc5UnormBlock";
19386 case Format::eBc5SnormBlock: return "Bc5SnormBlock";
19387 case Format::eBc6HUfloatBlock: return "Bc6HUfloatBlock";
19388 case Format::eBc6HSfloatBlock: return "Bc6HSfloatBlock";
19389 case Format::eBc7UnormBlock: return "Bc7UnormBlock";
19390 case Format::eBc7SrgbBlock: return "Bc7SrgbBlock";
19391 case Format::eEtc2R8G8B8UnormBlock: return "Etc2R8G8B8UnormBlock";
19392 case Format::eEtc2R8G8B8SrgbBlock: return "Etc2R8G8B8SrgbBlock";
19393 case Format::eEtc2R8G8B8A1UnormBlock: return "Etc2R8G8B8A1UnormBlock";
19394 case Format::eEtc2R8G8B8A1SrgbBlock: return "Etc2R8G8B8A1SrgbBlock";
19395 case Format::eEtc2R8G8B8A8UnormBlock: return "Etc2R8G8B8A8UnormBlock";
19396 case Format::eEtc2R8G8B8A8SrgbBlock: return "Etc2R8G8B8A8SrgbBlock";
19397 case Format::eEacR11UnormBlock: return "EacR11UnormBlock";
19398 case Format::eEacR11SnormBlock: return "EacR11SnormBlock";
19399 case Format::eEacR11G11UnormBlock: return "EacR11G11UnormBlock";
19400 case Format::eEacR11G11SnormBlock: return "EacR11G11SnormBlock";
19401 case Format::eAstc4x4UnormBlock: return "Astc4x4UnormBlock";
19402 case Format::eAstc4x4SrgbBlock: return "Astc4x4SrgbBlock";
19403 case Format::eAstc5x4UnormBlock: return "Astc5x4UnormBlock";
19404 case Format::eAstc5x4SrgbBlock: return "Astc5x4SrgbBlock";
19405 case Format::eAstc5x5UnormBlock: return "Astc5x5UnormBlock";
19406 case Format::eAstc5x5SrgbBlock: return "Astc5x5SrgbBlock";
19407 case Format::eAstc6x5UnormBlock: return "Astc6x5UnormBlock";
19408 case Format::eAstc6x5SrgbBlock: return "Astc6x5SrgbBlock";
19409 case Format::eAstc6x6UnormBlock: return "Astc6x6UnormBlock";
19410 case Format::eAstc6x6SrgbBlock: return "Astc6x6SrgbBlock";
19411 case Format::eAstc8x5UnormBlock: return "Astc8x5UnormBlock";
19412 case Format::eAstc8x5SrgbBlock: return "Astc8x5SrgbBlock";
19413 case Format::eAstc8x6UnormBlock: return "Astc8x6UnormBlock";
19414 case Format::eAstc8x6SrgbBlock: return "Astc8x6SrgbBlock";
19415 case Format::eAstc8x8UnormBlock: return "Astc8x8UnormBlock";
19416 case Format::eAstc8x8SrgbBlock: return "Astc8x8SrgbBlock";
19417 case Format::eAstc10x5UnormBlock: return "Astc10x5UnormBlock";
19418 case Format::eAstc10x5SrgbBlock: return "Astc10x5SrgbBlock";
19419 case Format::eAstc10x6UnormBlock: return "Astc10x6UnormBlock";
19420 case Format::eAstc10x6SrgbBlock: return "Astc10x6SrgbBlock";
19421 case Format::eAstc10x8UnormBlock: return "Astc10x8UnormBlock";
19422 case Format::eAstc10x8SrgbBlock: return "Astc10x8SrgbBlock";
19423 case Format::eAstc10x10UnormBlock: return "Astc10x10UnormBlock";
19424 case Format::eAstc10x10SrgbBlock: return "Astc10x10SrgbBlock";
19425 case Format::eAstc12x10UnormBlock: return "Astc12x10UnormBlock";
19426 case Format::eAstc12x10SrgbBlock: return "Astc12x10SrgbBlock";
19427 case Format::eAstc12x12UnormBlock: return "Astc12x12UnormBlock";
19428 case Format::eAstc12x12SrgbBlock: return "Astc12x12SrgbBlock";
Lenny Komowebf33162016-08-26 14:10:08 -060019429 case Format::ePvrtc12BppUnormBlockIMG: return "Pvrtc12BppUnormBlockIMG";
19430 case Format::ePvrtc14BppUnormBlockIMG: return "Pvrtc14BppUnormBlockIMG";
19431 case Format::ePvrtc22BppUnormBlockIMG: return "Pvrtc22BppUnormBlockIMG";
19432 case Format::ePvrtc24BppUnormBlockIMG: return "Pvrtc24BppUnormBlockIMG";
19433 case Format::ePvrtc12BppSrgbBlockIMG: return "Pvrtc12BppSrgbBlockIMG";
19434 case Format::ePvrtc14BppSrgbBlockIMG: return "Pvrtc14BppSrgbBlockIMG";
19435 case Format::ePvrtc22BppSrgbBlockIMG: return "Pvrtc22BppSrgbBlockIMG";
19436 case Format::ePvrtc24BppSrgbBlockIMG: return "Pvrtc24BppSrgbBlockIMG";
Lenny Komowbed9b5c2016-08-11 11:23:15 -060019437 default: return "invalid";
19438 }
19439 }
19440
19441 inline std::string to_string(StructureType value)
19442 {
19443 switch (value)
19444 {
19445 case StructureType::eApplicationInfo: return "ApplicationInfo";
19446 case StructureType::eInstanceCreateInfo: return "InstanceCreateInfo";
19447 case StructureType::eDeviceQueueCreateInfo: return "DeviceQueueCreateInfo";
19448 case StructureType::eDeviceCreateInfo: return "DeviceCreateInfo";
19449 case StructureType::eSubmitInfo: return "SubmitInfo";
19450 case StructureType::eMemoryAllocateInfo: return "MemoryAllocateInfo";
19451 case StructureType::eMappedMemoryRange: return "MappedMemoryRange";
19452 case StructureType::eBindSparseInfo: return "BindSparseInfo";
19453 case StructureType::eFenceCreateInfo: return "FenceCreateInfo";
19454 case StructureType::eSemaphoreCreateInfo: return "SemaphoreCreateInfo";
19455 case StructureType::eEventCreateInfo: return "EventCreateInfo";
19456 case StructureType::eQueryPoolCreateInfo: return "QueryPoolCreateInfo";
19457 case StructureType::eBufferCreateInfo: return "BufferCreateInfo";
19458 case StructureType::eBufferViewCreateInfo: return "BufferViewCreateInfo";
19459 case StructureType::eImageCreateInfo: return "ImageCreateInfo";
19460 case StructureType::eImageViewCreateInfo: return "ImageViewCreateInfo";
19461 case StructureType::eShaderModuleCreateInfo: return "ShaderModuleCreateInfo";
19462 case StructureType::ePipelineCacheCreateInfo: return "PipelineCacheCreateInfo";
19463 case StructureType::ePipelineShaderStageCreateInfo: return "PipelineShaderStageCreateInfo";
19464 case StructureType::ePipelineVertexInputStateCreateInfo: return "PipelineVertexInputStateCreateInfo";
19465 case StructureType::ePipelineInputAssemblyStateCreateInfo: return "PipelineInputAssemblyStateCreateInfo";
19466 case StructureType::ePipelineTessellationStateCreateInfo: return "PipelineTessellationStateCreateInfo";
19467 case StructureType::ePipelineViewportStateCreateInfo: return "PipelineViewportStateCreateInfo";
19468 case StructureType::ePipelineRasterizationStateCreateInfo: return "PipelineRasterizationStateCreateInfo";
19469 case StructureType::ePipelineMultisampleStateCreateInfo: return "PipelineMultisampleStateCreateInfo";
19470 case StructureType::ePipelineDepthStencilStateCreateInfo: return "PipelineDepthStencilStateCreateInfo";
19471 case StructureType::ePipelineColorBlendStateCreateInfo: return "PipelineColorBlendStateCreateInfo";
19472 case StructureType::ePipelineDynamicStateCreateInfo: return "PipelineDynamicStateCreateInfo";
19473 case StructureType::eGraphicsPipelineCreateInfo: return "GraphicsPipelineCreateInfo";
19474 case StructureType::eComputePipelineCreateInfo: return "ComputePipelineCreateInfo";
19475 case StructureType::ePipelineLayoutCreateInfo: return "PipelineLayoutCreateInfo";
19476 case StructureType::eSamplerCreateInfo: return "SamplerCreateInfo";
19477 case StructureType::eDescriptorSetLayoutCreateInfo: return "DescriptorSetLayoutCreateInfo";
19478 case StructureType::eDescriptorPoolCreateInfo: return "DescriptorPoolCreateInfo";
19479 case StructureType::eDescriptorSetAllocateInfo: return "DescriptorSetAllocateInfo";
19480 case StructureType::eWriteDescriptorSet: return "WriteDescriptorSet";
19481 case StructureType::eCopyDescriptorSet: return "CopyDescriptorSet";
19482 case StructureType::eFramebufferCreateInfo: return "FramebufferCreateInfo";
19483 case StructureType::eRenderPassCreateInfo: return "RenderPassCreateInfo";
19484 case StructureType::eCommandPoolCreateInfo: return "CommandPoolCreateInfo";
19485 case StructureType::eCommandBufferAllocateInfo: return "CommandBufferAllocateInfo";
19486 case StructureType::eCommandBufferInheritanceInfo: return "CommandBufferInheritanceInfo";
19487 case StructureType::eCommandBufferBeginInfo: return "CommandBufferBeginInfo";
19488 case StructureType::eRenderPassBeginInfo: return "RenderPassBeginInfo";
19489 case StructureType::eBufferMemoryBarrier: return "BufferMemoryBarrier";
19490 case StructureType::eImageMemoryBarrier: return "ImageMemoryBarrier";
19491 case StructureType::eMemoryBarrier: return "MemoryBarrier";
19492 case StructureType::eLoaderInstanceCreateInfo: return "LoaderInstanceCreateInfo";
19493 case StructureType::eLoaderDeviceCreateInfo: return "LoaderDeviceCreateInfo";
19494 case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR";
19495 case StructureType::ePresentInfoKHR: return "PresentInfoKHR";
19496 case StructureType::eDisplayModeCreateInfoKHR: return "DisplayModeCreateInfoKHR";
19497 case StructureType::eDisplaySurfaceCreateInfoKHR: return "DisplaySurfaceCreateInfoKHR";
19498 case StructureType::eDisplayPresentInfoKHR: return "DisplayPresentInfoKHR";
19499 case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR";
19500 case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR";
19501 case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR";
19502 case StructureType::eMirSurfaceCreateInfoKHR: return "MirSurfaceCreateInfoKHR";
19503 case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR";
19504 case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR";
19505 case StructureType::eDebugReportCallbackCreateInfoEXT: return "DebugReportCallbackCreateInfoEXT";
19506 case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD";
19507 case StructureType::eDebugMarkerObjectNameInfoEXT: return "DebugMarkerObjectNameInfoEXT";
19508 case StructureType::eDebugMarkerObjectTagInfoEXT: return "DebugMarkerObjectTagInfoEXT";
19509 case StructureType::eDebugMarkerMarkerInfoEXT: return "DebugMarkerMarkerInfoEXT";
19510 case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV";
19511 case StructureType::eDedicatedAllocationBufferCreateInfoNV: return "DedicatedAllocationBufferCreateInfoNV";
19512 case StructureType::eDedicatedAllocationMemoryAllocateInfoNV: return "DedicatedAllocationMemoryAllocateInfoNV";
Lenny Komow6501c122016-08-31 15:03:49 -060019513 case StructureType::eExternalMemoryImageCreateInfoNV: return "ExternalMemoryImageCreateInfoNV";
19514 case StructureType::eExportMemoryAllocateInfoNV: return "ExportMemoryAllocateInfoNV";
19515 case StructureType::eImportMemoryWin32HandleInfoNV: return "ImportMemoryWin32HandleInfoNV";
19516 case StructureType::eExportMemoryWin32HandleInfoNV: return "ExportMemoryWin32HandleInfoNV";
19517 case StructureType::eWin32KeyedMutexAcquireReleaseInfoNV: return "Win32KeyedMutexAcquireReleaseInfoNV";
Lenny Komow68432d72016-09-29 14:16:59 -060019518 case StructureType::eValidationFlagsEXT: return "ValidationFlagsEXT";
Lenny Komowbed9b5c2016-08-11 11:23:15 -060019519 default: return "invalid";
19520 }
19521 }
19522
19523 inline std::string to_string(SubpassContents value)
19524 {
19525 switch (value)
19526 {
19527 case SubpassContents::eInline: return "Inline";
19528 case SubpassContents::eSecondaryCommandBuffers: return "SecondaryCommandBuffers";
19529 default: return "invalid";
19530 }
19531 }
19532
19533 inline std::string to_string(DynamicState value)
19534 {
19535 switch (value)
19536 {
19537 case DynamicState::eViewport: return "Viewport";
19538 case DynamicState::eScissor: return "Scissor";
19539 case DynamicState::eLineWidth: return "LineWidth";
19540 case DynamicState::eDepthBias: return "DepthBias";
19541 case DynamicState::eBlendConstants: return "BlendConstants";
19542 case DynamicState::eDepthBounds: return "DepthBounds";
19543 case DynamicState::eStencilCompareMask: return "StencilCompareMask";
19544 case DynamicState::eStencilWriteMask: return "StencilWriteMask";
19545 case DynamicState::eStencilReference: return "StencilReference";
19546 default: return "invalid";
19547 }
19548 }
19549
19550 inline std::string to_string(QueueFlagBits value)
19551 {
19552 switch (value)
19553 {
19554 case QueueFlagBits::eGraphics: return "Graphics";
19555 case QueueFlagBits::eCompute: return "Compute";
19556 case QueueFlagBits::eTransfer: return "Transfer";
19557 case QueueFlagBits::eSparseBinding: return "SparseBinding";
19558 default: return "invalid";
19559 }
19560 }
19561
19562 inline std::string to_string(QueueFlags value)
19563 {
19564 if (!value) return "{}";
19565 std::string result;
19566 if (value & QueueFlagBits::eGraphics) result += "Graphics | ";
19567 if (value & QueueFlagBits::eCompute) result += "Compute | ";
19568 if (value & QueueFlagBits::eTransfer) result += "Transfer | ";
19569 if (value & QueueFlagBits::eSparseBinding) result += "SparseBinding | ";
19570 return "{" + result.substr(0, result.size() - 3) + "}";
19571 }
19572
19573 inline std::string to_string(MemoryPropertyFlagBits value)
19574 {
19575 switch (value)
19576 {
19577 case MemoryPropertyFlagBits::eDeviceLocal: return "DeviceLocal";
19578 case MemoryPropertyFlagBits::eHostVisible: return "HostVisible";
19579 case MemoryPropertyFlagBits::eHostCoherent: return "HostCoherent";
19580 case MemoryPropertyFlagBits::eHostCached: return "HostCached";
19581 case MemoryPropertyFlagBits::eLazilyAllocated: return "LazilyAllocated";
19582 default: return "invalid";
19583 }
19584 }
19585
19586 inline std::string to_string(MemoryPropertyFlags value)
19587 {
19588 if (!value) return "{}";
19589 std::string result;
19590 if (value & MemoryPropertyFlagBits::eDeviceLocal) result += "DeviceLocal | ";
19591 if (value & MemoryPropertyFlagBits::eHostVisible) result += "HostVisible | ";
19592 if (value & MemoryPropertyFlagBits::eHostCoherent) result += "HostCoherent | ";
19593 if (value & MemoryPropertyFlagBits::eHostCached) result += "HostCached | ";
19594 if (value & MemoryPropertyFlagBits::eLazilyAllocated) result += "LazilyAllocated | ";
19595 return "{" + result.substr(0, result.size() - 3) + "}";
19596 }
19597
19598 inline std::string to_string(MemoryHeapFlagBits value)
19599 {
19600 switch (value)
19601 {
19602 case MemoryHeapFlagBits::eDeviceLocal: return "DeviceLocal";
19603 default: return "invalid";
19604 }
19605 }
19606
19607 inline std::string to_string(MemoryHeapFlags value)
19608 {
19609 if (!value) return "{}";
19610 std::string result;
19611 if (value & MemoryHeapFlagBits::eDeviceLocal) result += "DeviceLocal | ";
19612 return "{" + result.substr(0, result.size() - 3) + "}";
19613 }
19614
19615 inline std::string to_string(AccessFlagBits value)
19616 {
19617 switch (value)
19618 {
19619 case AccessFlagBits::eIndirectCommandRead: return "IndirectCommandRead";
19620 case AccessFlagBits::eIndexRead: return "IndexRead";
19621 case AccessFlagBits::eVertexAttributeRead: return "VertexAttributeRead";
19622 case AccessFlagBits::eUniformRead: return "UniformRead";
19623 case AccessFlagBits::eInputAttachmentRead: return "InputAttachmentRead";
19624 case AccessFlagBits::eShaderRead: return "ShaderRead";
19625 case AccessFlagBits::eShaderWrite: return "ShaderWrite";
19626 case AccessFlagBits::eColorAttachmentRead: return "ColorAttachmentRead";
19627 case AccessFlagBits::eColorAttachmentWrite: return "ColorAttachmentWrite";
19628 case AccessFlagBits::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
19629 case AccessFlagBits::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
19630 case AccessFlagBits::eTransferRead: return "TransferRead";
19631 case AccessFlagBits::eTransferWrite: return "TransferWrite";
19632 case AccessFlagBits::eHostRead: return "HostRead";
19633 case AccessFlagBits::eHostWrite: return "HostWrite";
19634 case AccessFlagBits::eMemoryRead: return "MemoryRead";
19635 case AccessFlagBits::eMemoryWrite: return "MemoryWrite";
19636 default: return "invalid";
19637 }
19638 }
19639
19640 inline std::string to_string(AccessFlags value)
19641 {
19642 if (!value) return "{}";
19643 std::string result;
19644 if (value & AccessFlagBits::eIndirectCommandRead) result += "IndirectCommandRead | ";
19645 if (value & AccessFlagBits::eIndexRead) result += "IndexRead | ";
19646 if (value & AccessFlagBits::eVertexAttributeRead) result += "VertexAttributeRead | ";
19647 if (value & AccessFlagBits::eUniformRead) result += "UniformRead | ";
19648 if (value & AccessFlagBits::eInputAttachmentRead) result += "InputAttachmentRead | ";
19649 if (value & AccessFlagBits::eShaderRead) result += "ShaderRead | ";
19650 if (value & AccessFlagBits::eShaderWrite) result += "ShaderWrite | ";
19651 if (value & AccessFlagBits::eColorAttachmentRead) result += "ColorAttachmentRead | ";
19652 if (value & AccessFlagBits::eColorAttachmentWrite) result += "ColorAttachmentWrite | ";
19653 if (value & AccessFlagBits::eDepthStencilAttachmentRead) result += "DepthStencilAttachmentRead | ";
19654 if (value & AccessFlagBits::eDepthStencilAttachmentWrite) result += "DepthStencilAttachmentWrite | ";
19655 if (value & AccessFlagBits::eTransferRead) result += "TransferRead | ";
19656 if (value & AccessFlagBits::eTransferWrite) result += "TransferWrite | ";
19657 if (value & AccessFlagBits::eHostRead) result += "HostRead | ";
19658 if (value & AccessFlagBits::eHostWrite) result += "HostWrite | ";
19659 if (value & AccessFlagBits::eMemoryRead) result += "MemoryRead | ";
19660 if (value & AccessFlagBits::eMemoryWrite) result += "MemoryWrite | ";
19661 return "{" + result.substr(0, result.size() - 3) + "}";
19662 }
19663
19664 inline std::string to_string(BufferUsageFlagBits value)
19665 {
19666 switch (value)
19667 {
19668 case BufferUsageFlagBits::eTransferSrc: return "TransferSrc";
19669 case BufferUsageFlagBits::eTransferDst: return "TransferDst";
19670 case BufferUsageFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19671 case BufferUsageFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19672 case BufferUsageFlagBits::eUniformBuffer: return "UniformBuffer";
19673 case BufferUsageFlagBits::eStorageBuffer: return "StorageBuffer";
19674 case BufferUsageFlagBits::eIndexBuffer: return "IndexBuffer";
19675 case BufferUsageFlagBits::eVertexBuffer: return "VertexBuffer";
19676 case BufferUsageFlagBits::eIndirectBuffer: return "IndirectBuffer";
19677 default: return "invalid";
19678 }
19679 }
19680
19681 inline std::string to_string(BufferUsageFlags value)
19682 {
19683 if (!value) return "{}";
19684 std::string result;
19685 if (value & BufferUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19686 if (value & BufferUsageFlagBits::eTransferDst) result += "TransferDst | ";
19687 if (value & BufferUsageFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19688 if (value & BufferUsageFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19689 if (value & BufferUsageFlagBits::eUniformBuffer) result += "UniformBuffer | ";
19690 if (value & BufferUsageFlagBits::eStorageBuffer) result += "StorageBuffer | ";
19691 if (value & BufferUsageFlagBits::eIndexBuffer) result += "IndexBuffer | ";
19692 if (value & BufferUsageFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19693 if (value & BufferUsageFlagBits::eIndirectBuffer) result += "IndirectBuffer | ";
19694 return "{" + result.substr(0, result.size() - 3) + "}";
19695 }
19696
19697 inline std::string to_string(BufferCreateFlagBits value)
19698 {
19699 switch (value)
19700 {
19701 case BufferCreateFlagBits::eSparseBinding: return "SparseBinding";
19702 case BufferCreateFlagBits::eSparseResidency: return "SparseResidency";
19703 case BufferCreateFlagBits::eSparseAliased: return "SparseAliased";
19704 default: return "invalid";
19705 }
19706 }
19707
19708 inline std::string to_string(BufferCreateFlags value)
19709 {
19710 if (!value) return "{}";
19711 std::string result;
19712 if (value & BufferCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19713 if (value & BufferCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19714 if (value & BufferCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19715 return "{" + result.substr(0, result.size() - 3) + "}";
19716 }
19717
19718 inline std::string to_string(ShaderStageFlagBits value)
19719 {
19720 switch (value)
19721 {
19722 case ShaderStageFlagBits::eVertex: return "Vertex";
19723 case ShaderStageFlagBits::eTessellationControl: return "TessellationControl";
19724 case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation";
19725 case ShaderStageFlagBits::eGeometry: return "Geometry";
19726 case ShaderStageFlagBits::eFragment: return "Fragment";
19727 case ShaderStageFlagBits::eCompute: return "Compute";
19728 case ShaderStageFlagBits::eAllGraphics: return "AllGraphics";
19729 case ShaderStageFlagBits::eAll: return "All";
19730 default: return "invalid";
19731 }
19732 }
19733
19734 inline std::string to_string(ShaderStageFlags value)
19735 {
19736 if (!value) return "{}";
19737 std::string result;
19738 if (value & ShaderStageFlagBits::eVertex) result += "Vertex | ";
19739 if (value & ShaderStageFlagBits::eTessellationControl) result += "TessellationControl | ";
19740 if (value & ShaderStageFlagBits::eTessellationEvaluation) result += "TessellationEvaluation | ";
19741 if (value & ShaderStageFlagBits::eGeometry) result += "Geometry | ";
19742 if (value & ShaderStageFlagBits::eFragment) result += "Fragment | ";
19743 if (value & ShaderStageFlagBits::eCompute) result += "Compute | ";
19744 if (value & ShaderStageFlagBits::eAllGraphics) result += "AllGraphics | ";
19745 if (value & ShaderStageFlagBits::eAll) result += "All | ";
19746 return "{" + result.substr(0, result.size() - 3) + "}";
19747 }
19748
19749 inline std::string to_string(ImageUsageFlagBits value)
19750 {
19751 switch (value)
19752 {
19753 case ImageUsageFlagBits::eTransferSrc: return "TransferSrc";
19754 case ImageUsageFlagBits::eTransferDst: return "TransferDst";
19755 case ImageUsageFlagBits::eSampled: return "Sampled";
19756 case ImageUsageFlagBits::eStorage: return "Storage";
19757 case ImageUsageFlagBits::eColorAttachment: return "ColorAttachment";
19758 case ImageUsageFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
19759 case ImageUsageFlagBits::eTransientAttachment: return "TransientAttachment";
19760 case ImageUsageFlagBits::eInputAttachment: return "InputAttachment";
19761 default: return "invalid";
19762 }
19763 }
19764
19765 inline std::string to_string(ImageUsageFlags value)
19766 {
19767 if (!value) return "{}";
19768 std::string result;
19769 if (value & ImageUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
19770 if (value & ImageUsageFlagBits::eTransferDst) result += "TransferDst | ";
19771 if (value & ImageUsageFlagBits::eSampled) result += "Sampled | ";
19772 if (value & ImageUsageFlagBits::eStorage) result += "Storage | ";
19773 if (value & ImageUsageFlagBits::eColorAttachment) result += "ColorAttachment | ";
19774 if (value & ImageUsageFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
19775 if (value & ImageUsageFlagBits::eTransientAttachment) result += "TransientAttachment | ";
19776 if (value & ImageUsageFlagBits::eInputAttachment) result += "InputAttachment | ";
19777 return "{" + result.substr(0, result.size() - 3) + "}";
19778 }
19779
19780 inline std::string to_string(ImageCreateFlagBits value)
19781 {
19782 switch (value)
19783 {
19784 case ImageCreateFlagBits::eSparseBinding: return "SparseBinding";
19785 case ImageCreateFlagBits::eSparseResidency: return "SparseResidency";
19786 case ImageCreateFlagBits::eSparseAliased: return "SparseAliased";
19787 case ImageCreateFlagBits::eMutableFormat: return "MutableFormat";
19788 case ImageCreateFlagBits::eCubeCompatible: return "CubeCompatible";
19789 default: return "invalid";
19790 }
19791 }
19792
19793 inline std::string to_string(ImageCreateFlags value)
19794 {
19795 if (!value) return "{}";
19796 std::string result;
19797 if (value & ImageCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
19798 if (value & ImageCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
19799 if (value & ImageCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
19800 if (value & ImageCreateFlagBits::eMutableFormat) result += "MutableFormat | ";
19801 if (value & ImageCreateFlagBits::eCubeCompatible) result += "CubeCompatible | ";
19802 return "{" + result.substr(0, result.size() - 3) + "}";
19803 }
19804
19805 inline std::string to_string(PipelineCreateFlagBits value)
19806 {
19807 switch (value)
19808 {
19809 case PipelineCreateFlagBits::eDisableOptimization: return "DisableOptimization";
19810 case PipelineCreateFlagBits::eAllowDerivatives: return "AllowDerivatives";
19811 case PipelineCreateFlagBits::eDerivative: return "Derivative";
19812 default: return "invalid";
19813 }
19814 }
19815
19816 inline std::string to_string(PipelineCreateFlags value)
19817 {
19818 if (!value) return "{}";
19819 std::string result;
19820 if (value & PipelineCreateFlagBits::eDisableOptimization) result += "DisableOptimization | ";
19821 if (value & PipelineCreateFlagBits::eAllowDerivatives) result += "AllowDerivatives | ";
19822 if (value & PipelineCreateFlagBits::eDerivative) result += "Derivative | ";
19823 return "{" + result.substr(0, result.size() - 3) + "}";
19824 }
19825
19826 inline std::string to_string(ColorComponentFlagBits value)
19827 {
19828 switch (value)
19829 {
19830 case ColorComponentFlagBits::eR: return "R";
19831 case ColorComponentFlagBits::eG: return "G";
19832 case ColorComponentFlagBits::eB: return "B";
19833 case ColorComponentFlagBits::eA: return "A";
19834 default: return "invalid";
19835 }
19836 }
19837
19838 inline std::string to_string(ColorComponentFlags value)
19839 {
19840 if (!value) return "{}";
19841 std::string result;
19842 if (value & ColorComponentFlagBits::eR) result += "R | ";
19843 if (value & ColorComponentFlagBits::eG) result += "G | ";
19844 if (value & ColorComponentFlagBits::eB) result += "B | ";
19845 if (value & ColorComponentFlagBits::eA) result += "A | ";
19846 return "{" + result.substr(0, result.size() - 3) + "}";
19847 }
19848
19849 inline std::string to_string(FenceCreateFlagBits value)
19850 {
19851 switch (value)
19852 {
19853 case FenceCreateFlagBits::eSignaled: return "Signaled";
19854 default: return "invalid";
19855 }
19856 }
19857
19858 inline std::string to_string(FenceCreateFlags value)
19859 {
19860 if (!value) return "{}";
19861 std::string result;
19862 if (value & FenceCreateFlagBits::eSignaled) result += "Signaled | ";
19863 return "{" + result.substr(0, result.size() - 3) + "}";
19864 }
19865
19866 inline std::string to_string(FormatFeatureFlagBits value)
19867 {
19868 switch (value)
19869 {
19870 case FormatFeatureFlagBits::eSampledImage: return "SampledImage";
19871 case FormatFeatureFlagBits::eStorageImage: return "StorageImage";
19872 case FormatFeatureFlagBits::eStorageImageAtomic: return "StorageImageAtomic";
19873 case FormatFeatureFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
19874 case FormatFeatureFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
19875 case FormatFeatureFlagBits::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic";
19876 case FormatFeatureFlagBits::eVertexBuffer: return "VertexBuffer";
19877 case FormatFeatureFlagBits::eColorAttachment: return "ColorAttachment";
19878 case FormatFeatureFlagBits::eColorAttachmentBlend: return "ColorAttachmentBlend";
19879 case FormatFeatureFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
19880 case FormatFeatureFlagBits::eBlitSrc: return "BlitSrc";
19881 case FormatFeatureFlagBits::eBlitDst: return "BlitDst";
19882 case FormatFeatureFlagBits::eSampledImageFilterLinear: return "SampledImageFilterLinear";
19883 case FormatFeatureFlagBits::eSampledImageFilterCubicIMG: return "SampledImageFilterCubicIMG";
19884 default: return "invalid";
19885 }
19886 }
19887
19888 inline std::string to_string(FormatFeatureFlags value)
19889 {
19890 if (!value) return "{}";
19891 std::string result;
19892 if (value & FormatFeatureFlagBits::eSampledImage) result += "SampledImage | ";
19893 if (value & FormatFeatureFlagBits::eStorageImage) result += "StorageImage | ";
19894 if (value & FormatFeatureFlagBits::eStorageImageAtomic) result += "StorageImageAtomic | ";
19895 if (value & FormatFeatureFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
19896 if (value & FormatFeatureFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
19897 if (value & FormatFeatureFlagBits::eStorageTexelBufferAtomic) result += "StorageTexelBufferAtomic | ";
19898 if (value & FormatFeatureFlagBits::eVertexBuffer) result += "VertexBuffer | ";
19899 if (value & FormatFeatureFlagBits::eColorAttachment) result += "ColorAttachment | ";
19900 if (value & FormatFeatureFlagBits::eColorAttachmentBlend) result += "ColorAttachmentBlend | ";
19901 if (value & FormatFeatureFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
19902 if (value & FormatFeatureFlagBits::eBlitSrc) result += "BlitSrc | ";
19903 if (value & FormatFeatureFlagBits::eBlitDst) result += "BlitDst | ";
19904 if (value & FormatFeatureFlagBits::eSampledImageFilterLinear) result += "SampledImageFilterLinear | ";
19905 if (value & FormatFeatureFlagBits::eSampledImageFilterCubicIMG) result += "SampledImageFilterCubicIMG | ";
19906 return "{" + result.substr(0, result.size() - 3) + "}";
19907 }
19908
19909 inline std::string to_string(QueryControlFlagBits value)
19910 {
19911 switch (value)
19912 {
19913 case QueryControlFlagBits::ePrecise: return "Precise";
19914 default: return "invalid";
19915 }
19916 }
19917
19918 inline std::string to_string(QueryControlFlags value)
19919 {
19920 if (!value) return "{}";
19921 std::string result;
19922 if (value & QueryControlFlagBits::ePrecise) result += "Precise | ";
19923 return "{" + result.substr(0, result.size() - 3) + "}";
19924 }
19925
19926 inline std::string to_string(QueryResultFlagBits value)
19927 {
19928 switch (value)
19929 {
19930 case QueryResultFlagBits::e64: return "64";
19931 case QueryResultFlagBits::eWait: return "Wait";
19932 case QueryResultFlagBits::eWithAvailability: return "WithAvailability";
19933 case QueryResultFlagBits::ePartial: return "Partial";
19934 default: return "invalid";
19935 }
19936 }
19937
19938 inline std::string to_string(QueryResultFlags value)
19939 {
19940 if (!value) return "{}";
19941 std::string result;
19942 if (value & QueryResultFlagBits::e64) result += "64 | ";
19943 if (value & QueryResultFlagBits::eWait) result += "Wait | ";
19944 if (value & QueryResultFlagBits::eWithAvailability) result += "WithAvailability | ";
19945 if (value & QueryResultFlagBits::ePartial) result += "Partial | ";
19946 return "{" + result.substr(0, result.size() - 3) + "}";
19947 }
19948
19949 inline std::string to_string(CommandBufferUsageFlagBits value)
19950 {
19951 switch (value)
19952 {
19953 case CommandBufferUsageFlagBits::eOneTimeSubmit: return "OneTimeSubmit";
19954 case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue";
19955 case CommandBufferUsageFlagBits::eSimultaneousUse: return "SimultaneousUse";
19956 default: return "invalid";
19957 }
19958 }
19959
19960 inline std::string to_string(CommandBufferUsageFlags value)
19961 {
19962 if (!value) return "{}";
19963 std::string result;
19964 if (value & CommandBufferUsageFlagBits::eOneTimeSubmit) result += "OneTimeSubmit | ";
19965 if (value & CommandBufferUsageFlagBits::eRenderPassContinue) result += "RenderPassContinue | ";
19966 if (value & CommandBufferUsageFlagBits::eSimultaneousUse) result += "SimultaneousUse | ";
19967 return "{" + result.substr(0, result.size() - 3) + "}";
19968 }
19969
19970 inline std::string to_string(QueryPipelineStatisticFlagBits value)
19971 {
19972 switch (value)
19973 {
19974 case QueryPipelineStatisticFlagBits::eInputAssemblyVertices: return "InputAssemblyVertices";
19975 case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives: return "InputAssemblyPrimitives";
19976 case QueryPipelineStatisticFlagBits::eVertexShaderInvocations: return "VertexShaderInvocations";
19977 case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations: return "GeometryShaderInvocations";
19978 case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives: return "GeometryShaderPrimitives";
19979 case QueryPipelineStatisticFlagBits::eClippingInvocations: return "ClippingInvocations";
19980 case QueryPipelineStatisticFlagBits::eClippingPrimitives: return "ClippingPrimitives";
19981 case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations: return "FragmentShaderInvocations";
19982 case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches: return "TessellationControlShaderPatches";
19983 case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations";
19984 case QueryPipelineStatisticFlagBits::eComputeShaderInvocations: return "ComputeShaderInvocations";
19985 default: return "invalid";
19986 }
19987 }
19988
19989 inline std::string to_string(QueryPipelineStatisticFlags value)
19990 {
19991 if (!value) return "{}";
19992 std::string result;
19993 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices) result += "InputAssemblyVertices | ";
19994 if (value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives) result += "InputAssemblyPrimitives | ";
19995 if (value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations) result += "VertexShaderInvocations | ";
19996 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations) result += "GeometryShaderInvocations | ";
19997 if (value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives) result += "GeometryShaderPrimitives | ";
19998 if (value & QueryPipelineStatisticFlagBits::eClippingInvocations) result += "ClippingInvocations | ";
19999 if (value & QueryPipelineStatisticFlagBits::eClippingPrimitives) result += "ClippingPrimitives | ";
20000 if (value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations) result += "FragmentShaderInvocations | ";
20001 if (value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches) result += "TessellationControlShaderPatches | ";
20002 if (value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations) result += "TessellationEvaluationShaderInvocations | ";
20003 if (value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations) result += "ComputeShaderInvocations | ";
20004 return "{" + result.substr(0, result.size() - 3) + "}";
20005 }
20006
20007 inline std::string to_string(ImageAspectFlagBits value)
20008 {
20009 switch (value)
20010 {
20011 case ImageAspectFlagBits::eColor: return "Color";
20012 case ImageAspectFlagBits::eDepth: return "Depth";
20013 case ImageAspectFlagBits::eStencil: return "Stencil";
20014 case ImageAspectFlagBits::eMetadata: return "Metadata";
20015 default: return "invalid";
20016 }
20017 }
20018
20019 inline std::string to_string(ImageAspectFlags value)
20020 {
20021 if (!value) return "{}";
20022 std::string result;
20023 if (value & ImageAspectFlagBits::eColor) result += "Color | ";
20024 if (value & ImageAspectFlagBits::eDepth) result += "Depth | ";
20025 if (value & ImageAspectFlagBits::eStencil) result += "Stencil | ";
20026 if (value & ImageAspectFlagBits::eMetadata) result += "Metadata | ";
20027 return "{" + result.substr(0, result.size() - 3) + "}";
20028 }
20029
20030 inline std::string to_string(SparseImageFormatFlagBits value)
20031 {
20032 switch (value)
20033 {
20034 case SparseImageFormatFlagBits::eSingleMiptail: return "SingleMiptail";
20035 case SparseImageFormatFlagBits::eAlignedMipSize: return "AlignedMipSize";
20036 case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize";
20037 default: return "invalid";
20038 }
20039 }
20040
20041 inline std::string to_string(SparseImageFormatFlags value)
20042 {
20043 if (!value) return "{}";
20044 std::string result;
20045 if (value & SparseImageFormatFlagBits::eSingleMiptail) result += "SingleMiptail | ";
20046 if (value & SparseImageFormatFlagBits::eAlignedMipSize) result += "AlignedMipSize | ";
20047 if (value & SparseImageFormatFlagBits::eNonstandardBlockSize) result += "NonstandardBlockSize | ";
20048 return "{" + result.substr(0, result.size() - 3) + "}";
20049 }
20050
20051 inline std::string to_string(SparseMemoryBindFlagBits value)
20052 {
20053 switch (value)
20054 {
20055 case SparseMemoryBindFlagBits::eMetadata: return "Metadata";
20056 default: return "invalid";
20057 }
20058 }
20059
20060 inline std::string to_string(SparseMemoryBindFlags value)
20061 {
20062 if (!value) return "{}";
20063 std::string result;
20064 if (value & SparseMemoryBindFlagBits::eMetadata) result += "Metadata | ";
20065 return "{" + result.substr(0, result.size() - 3) + "}";
20066 }
20067
20068 inline std::string to_string(PipelineStageFlagBits value)
20069 {
20070 switch (value)
20071 {
20072 case PipelineStageFlagBits::eTopOfPipe: return "TopOfPipe";
20073 case PipelineStageFlagBits::eDrawIndirect: return "DrawIndirect";
20074 case PipelineStageFlagBits::eVertexInput: return "VertexInput";
20075 case PipelineStageFlagBits::eVertexShader: return "VertexShader";
20076 case PipelineStageFlagBits::eTessellationControlShader: return "TessellationControlShader";
20077 case PipelineStageFlagBits::eTessellationEvaluationShader: return "TessellationEvaluationShader";
20078 case PipelineStageFlagBits::eGeometryShader: return "GeometryShader";
20079 case PipelineStageFlagBits::eFragmentShader: return "FragmentShader";
20080 case PipelineStageFlagBits::eEarlyFragmentTests: return "EarlyFragmentTests";
20081 case PipelineStageFlagBits::eLateFragmentTests: return "LateFragmentTests";
20082 case PipelineStageFlagBits::eColorAttachmentOutput: return "ColorAttachmentOutput";
20083 case PipelineStageFlagBits::eComputeShader: return "ComputeShader";
20084 case PipelineStageFlagBits::eTransfer: return "Transfer";
20085 case PipelineStageFlagBits::eBottomOfPipe: return "BottomOfPipe";
20086 case PipelineStageFlagBits::eHost: return "Host";
20087 case PipelineStageFlagBits::eAllGraphics: return "AllGraphics";
20088 case PipelineStageFlagBits::eAllCommands: return "AllCommands";
20089 default: return "invalid";
20090 }
20091 }
20092
20093 inline std::string to_string(PipelineStageFlags value)
20094 {
20095 if (!value) return "{}";
20096 std::string result;
20097 if (value & PipelineStageFlagBits::eTopOfPipe) result += "TopOfPipe | ";
20098 if (value & PipelineStageFlagBits::eDrawIndirect) result += "DrawIndirect | ";
20099 if (value & PipelineStageFlagBits::eVertexInput) result += "VertexInput | ";
20100 if (value & PipelineStageFlagBits::eVertexShader) result += "VertexShader | ";
20101 if (value & PipelineStageFlagBits::eTessellationControlShader) result += "TessellationControlShader | ";
20102 if (value & PipelineStageFlagBits::eTessellationEvaluationShader) result += "TessellationEvaluationShader | ";
20103 if (value & PipelineStageFlagBits::eGeometryShader) result += "GeometryShader | ";
20104 if (value & PipelineStageFlagBits::eFragmentShader) result += "FragmentShader | ";
20105 if (value & PipelineStageFlagBits::eEarlyFragmentTests) result += "EarlyFragmentTests | ";
20106 if (value & PipelineStageFlagBits::eLateFragmentTests) result += "LateFragmentTests | ";
20107 if (value & PipelineStageFlagBits::eColorAttachmentOutput) result += "ColorAttachmentOutput | ";
20108 if (value & PipelineStageFlagBits::eComputeShader) result += "ComputeShader | ";
20109 if (value & PipelineStageFlagBits::eTransfer) result += "Transfer | ";
20110 if (value & PipelineStageFlagBits::eBottomOfPipe) result += "BottomOfPipe | ";
20111 if (value & PipelineStageFlagBits::eHost) result += "Host | ";
20112 if (value & PipelineStageFlagBits::eAllGraphics) result += "AllGraphics | ";
20113 if (value & PipelineStageFlagBits::eAllCommands) result += "AllCommands | ";
20114 return "{" + result.substr(0, result.size() - 3) + "}";
20115 }
20116
20117 inline std::string to_string(CommandPoolCreateFlagBits value)
20118 {
20119 switch (value)
20120 {
20121 case CommandPoolCreateFlagBits::eTransient: return "Transient";
20122 case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer";
20123 default: return "invalid";
20124 }
20125 }
20126
20127 inline std::string to_string(CommandPoolCreateFlags value)
20128 {
20129 if (!value) return "{}";
20130 std::string result;
20131 if (value & CommandPoolCreateFlagBits::eTransient) result += "Transient | ";
20132 if (value & CommandPoolCreateFlagBits::eResetCommandBuffer) result += "ResetCommandBuffer | ";
20133 return "{" + result.substr(0, result.size() - 3) + "}";
20134 }
20135
20136 inline std::string to_string(CommandPoolResetFlagBits value)
20137 {
20138 switch (value)
20139 {
20140 case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources";
20141 default: return "invalid";
20142 }
20143 }
20144
20145 inline std::string to_string(CommandPoolResetFlags value)
20146 {
20147 if (!value) return "{}";
20148 std::string result;
20149 if (value & CommandPoolResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
20150 return "{" + result.substr(0, result.size() - 3) + "}";
20151 }
20152
20153 inline std::string to_string(CommandBufferResetFlagBits value)
20154 {
20155 switch (value)
20156 {
20157 case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources";
20158 default: return "invalid";
20159 }
20160 }
20161
20162 inline std::string to_string(CommandBufferResetFlags value)
20163 {
20164 if (!value) return "{}";
20165 std::string result;
20166 if (value & CommandBufferResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
20167 return "{" + result.substr(0, result.size() - 3) + "}";
20168 }
20169
20170 inline std::string to_string(SampleCountFlagBits value)
20171 {
20172 switch (value)
20173 {
20174 case SampleCountFlagBits::e1: return "1";
20175 case SampleCountFlagBits::e2: return "2";
20176 case SampleCountFlagBits::e4: return "4";
20177 case SampleCountFlagBits::e8: return "8";
20178 case SampleCountFlagBits::e16: return "16";
20179 case SampleCountFlagBits::e32: return "32";
20180 case SampleCountFlagBits::e64: return "64";
20181 default: return "invalid";
20182 }
20183 }
20184
20185 inline std::string to_string(SampleCountFlags value)
20186 {
20187 if (!value) return "{}";
20188 std::string result;
20189 if (value & SampleCountFlagBits::e1) result += "1 | ";
20190 if (value & SampleCountFlagBits::e2) result += "2 | ";
20191 if (value & SampleCountFlagBits::e4) result += "4 | ";
20192 if (value & SampleCountFlagBits::e8) result += "8 | ";
20193 if (value & SampleCountFlagBits::e16) result += "16 | ";
20194 if (value & SampleCountFlagBits::e32) result += "32 | ";
20195 if (value & SampleCountFlagBits::e64) result += "64 | ";
20196 return "{" + result.substr(0, result.size() - 3) + "}";
20197 }
20198
20199 inline std::string to_string(AttachmentDescriptionFlagBits value)
20200 {
20201 switch (value)
20202 {
20203 case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias";
20204 default: return "invalid";
20205 }
20206 }
20207
20208 inline std::string to_string(AttachmentDescriptionFlags value)
20209 {
20210 if (!value) return "{}";
20211 std::string result;
20212 if (value & AttachmentDescriptionFlagBits::eMayAlias) result += "MayAlias | ";
20213 return "{" + result.substr(0, result.size() - 3) + "}";
20214 }
20215
20216 inline std::string to_string(StencilFaceFlagBits value)
20217 {
20218 switch (value)
20219 {
20220 case StencilFaceFlagBits::eFront: return "Front";
20221 case StencilFaceFlagBits::eBack: return "Back";
20222 case StencilFaceFlagBits::eVkStencilFrontAndBack: return "VkStencilFrontAndBack";
20223 default: return "invalid";
20224 }
20225 }
20226
20227 inline std::string to_string(StencilFaceFlags value)
20228 {
20229 if (!value) return "{}";
20230 std::string result;
20231 if (value & StencilFaceFlagBits::eFront) result += "Front | ";
20232 if (value & StencilFaceFlagBits::eBack) result += "Back | ";
20233 if (value & StencilFaceFlagBits::eVkStencilFrontAndBack) result += "VkStencilFrontAndBack | ";
20234 return "{" + result.substr(0, result.size() - 3) + "}";
20235 }
20236
20237 inline std::string to_string(DescriptorPoolCreateFlagBits value)
20238 {
20239 switch (value)
20240 {
20241 case DescriptorPoolCreateFlagBits::eFreeDescriptorSet: return "FreeDescriptorSet";
20242 default: return "invalid";
20243 }
20244 }
20245
20246 inline std::string to_string(DescriptorPoolCreateFlags value)
20247 {
20248 if (!value) return "{}";
20249 std::string result;
20250 if (value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet) result += "FreeDescriptorSet | ";
20251 return "{" + result.substr(0, result.size() - 3) + "}";
20252 }
20253
20254 inline std::string to_string(DependencyFlagBits value)
20255 {
20256 switch (value)
20257 {
20258 case DependencyFlagBits::eByRegion: return "ByRegion";
20259 default: return "invalid";
20260 }
20261 }
20262
20263 inline std::string to_string(DependencyFlags value)
20264 {
20265 if (!value) return "{}";
20266 std::string result;
20267 if (value & DependencyFlagBits::eByRegion) result += "ByRegion | ";
20268 return "{" + result.substr(0, result.size() - 3) + "}";
20269 }
20270
20271 inline std::string to_string(PresentModeKHR value)
20272 {
20273 switch (value)
20274 {
20275 case PresentModeKHR::eImmediate: return "Immediate";
20276 case PresentModeKHR::eMailbox: return "Mailbox";
20277 case PresentModeKHR::eFifo: return "Fifo";
20278 case PresentModeKHR::eFifoRelaxed: return "FifoRelaxed";
20279 default: return "invalid";
20280 }
20281 }
20282
20283 inline std::string to_string(ColorSpaceKHR value)
20284 {
20285 switch (value)
20286 {
20287 case ColorSpaceKHR::eSrgbNonlinear: return "SrgbNonlinear";
20288 default: return "invalid";
20289 }
20290 }
20291
20292 inline std::string to_string(DisplayPlaneAlphaFlagBitsKHR value)
20293 {
20294 switch (value)
20295 {
20296 case DisplayPlaneAlphaFlagBitsKHR::eOpaque: return "Opaque";
20297 case DisplayPlaneAlphaFlagBitsKHR::eGlobal: return "Global";
20298 case DisplayPlaneAlphaFlagBitsKHR::ePerPixel: return "PerPixel";
20299 case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied";
20300 default: return "invalid";
20301 }
20302 }
20303
20304 inline std::string to_string(DisplayPlaneAlphaFlagsKHR value)
20305 {
20306 if (!value) return "{}";
20307 std::string result;
20308 if (value & DisplayPlaneAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
20309 if (value & DisplayPlaneAlphaFlagBitsKHR::eGlobal) result += "Global | ";
20310 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel) result += "PerPixel | ";
20311 if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied) result += "PerPixelPremultiplied | ";
20312 return "{" + result.substr(0, result.size() - 3) + "}";
20313 }
20314
20315 inline std::string to_string(CompositeAlphaFlagBitsKHR value)
20316 {
20317 switch (value)
20318 {
20319 case CompositeAlphaFlagBitsKHR::eOpaque: return "Opaque";
20320 case CompositeAlphaFlagBitsKHR::ePreMultiplied: return "PreMultiplied";
20321 case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied";
20322 case CompositeAlphaFlagBitsKHR::eInherit: return "Inherit";
20323 default: return "invalid";
20324 }
20325 }
20326
20327 inline std::string to_string(CompositeAlphaFlagsKHR value)
20328 {
20329 if (!value) return "{}";
20330 std::string result;
20331 if (value & CompositeAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
20332 if (value & CompositeAlphaFlagBitsKHR::ePreMultiplied) result += "PreMultiplied | ";
20333 if (value & CompositeAlphaFlagBitsKHR::ePostMultiplied) result += "PostMultiplied | ";
20334 if (value & CompositeAlphaFlagBitsKHR::eInherit) result += "Inherit | ";
20335 return "{" + result.substr(0, result.size() - 3) + "}";
20336 }
20337
20338 inline std::string to_string(SurfaceTransformFlagBitsKHR value)
20339 {
20340 switch (value)
20341 {
20342 case SurfaceTransformFlagBitsKHR::eIdentity: return "Identity";
20343 case SurfaceTransformFlagBitsKHR::eRotate90: return "Rotate90";
20344 case SurfaceTransformFlagBitsKHR::eRotate180: return "Rotate180";
20345 case SurfaceTransformFlagBitsKHR::eRotate270: return "Rotate270";
20346 case SurfaceTransformFlagBitsKHR::eHorizontalMirror: return "HorizontalMirror";
20347 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90: return "HorizontalMirrorRotate90";
20348 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180";
20349 case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270";
20350 case SurfaceTransformFlagBitsKHR::eInherit: return "Inherit";
20351 default: return "invalid";
20352 }
20353 }
20354
20355 inline std::string to_string(SurfaceTransformFlagsKHR value)
20356 {
20357 if (!value) return "{}";
20358 std::string result;
20359 if (value & SurfaceTransformFlagBitsKHR::eIdentity) result += "Identity | ";
20360 if (value & SurfaceTransformFlagBitsKHR::eRotate90) result += "Rotate90 | ";
20361 if (value & SurfaceTransformFlagBitsKHR::eRotate180) result += "Rotate180 | ";
20362 if (value & SurfaceTransformFlagBitsKHR::eRotate270) result += "Rotate270 | ";
20363 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirror) result += "HorizontalMirror | ";
20364 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90) result += "HorizontalMirrorRotate90 | ";
20365 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180) result += "HorizontalMirrorRotate180 | ";
20366 if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270) result += "HorizontalMirrorRotate270 | ";
20367 if (value & SurfaceTransformFlagBitsKHR::eInherit) result += "Inherit | ";
20368 return "{" + result.substr(0, result.size() - 3) + "}";
20369 }
20370
20371 inline std::string to_string(DebugReportFlagBitsEXT value)
20372 {
20373 switch (value)
20374 {
20375 case DebugReportFlagBitsEXT::eInformation: return "Information";
20376 case DebugReportFlagBitsEXT::eWarning: return "Warning";
20377 case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning";
20378 case DebugReportFlagBitsEXT::eError: return "Error";
20379 case DebugReportFlagBitsEXT::eDebug: return "Debug";
20380 default: return "invalid";
20381 }
20382 }
20383
20384 inline std::string to_string(DebugReportFlagsEXT value)
20385 {
20386 if (!value) return "{}";
20387 std::string result;
20388 if (value & DebugReportFlagBitsEXT::eInformation) result += "Information | ";
20389 if (value & DebugReportFlagBitsEXT::eWarning) result += "Warning | ";
20390 if (value & DebugReportFlagBitsEXT::ePerformanceWarning) result += "PerformanceWarning | ";
20391 if (value & DebugReportFlagBitsEXT::eError) result += "Error | ";
20392 if (value & DebugReportFlagBitsEXT::eDebug) result += "Debug | ";
20393 return "{" + result.substr(0, result.size() - 3) + "}";
20394 }
20395
20396 inline std::string to_string(DebugReportObjectTypeEXT value)
20397 {
20398 switch (value)
20399 {
20400 case DebugReportObjectTypeEXT::eUnknown: return "Unknown";
20401 case DebugReportObjectTypeEXT::eInstance: return "Instance";
20402 case DebugReportObjectTypeEXT::ePhysicalDevice: return "PhysicalDevice";
20403 case DebugReportObjectTypeEXT::eDevice: return "Device";
20404 case DebugReportObjectTypeEXT::eQueue: return "Queue";
20405 case DebugReportObjectTypeEXT::eSemaphore: return "Semaphore";
20406 case DebugReportObjectTypeEXT::eCommandBuffer: return "CommandBuffer";
20407 case DebugReportObjectTypeEXT::eFence: return "Fence";
20408 case DebugReportObjectTypeEXT::eDeviceMemory: return "DeviceMemory";
20409 case DebugReportObjectTypeEXT::eBuffer: return "Buffer";
20410 case DebugReportObjectTypeEXT::eImage: return "Image";
20411 case DebugReportObjectTypeEXT::eEvent: return "Event";
20412 case DebugReportObjectTypeEXT::eQueryPool: return "QueryPool";
20413 case DebugReportObjectTypeEXT::eBufferView: return "BufferView";
20414 case DebugReportObjectTypeEXT::eImageView: return "ImageView";
20415 case DebugReportObjectTypeEXT::eShaderModule: return "ShaderModule";
20416 case DebugReportObjectTypeEXT::ePipelineCache: return "PipelineCache";
20417 case DebugReportObjectTypeEXT::ePipelineLayout: return "PipelineLayout";
20418 case DebugReportObjectTypeEXT::eRenderPass: return "RenderPass";
20419 case DebugReportObjectTypeEXT::ePipeline: return "Pipeline";
20420 case DebugReportObjectTypeEXT::eDescriptorSetLayout: return "DescriptorSetLayout";
20421 case DebugReportObjectTypeEXT::eSampler: return "Sampler";
20422 case DebugReportObjectTypeEXT::eDescriptorPool: return "DescriptorPool";
20423 case DebugReportObjectTypeEXT::eDescriptorSet: return "DescriptorSet";
20424 case DebugReportObjectTypeEXT::eFramebuffer: return "Framebuffer";
20425 case DebugReportObjectTypeEXT::eCommandPool: return "CommandPool";
20426 case DebugReportObjectTypeEXT::eSurfaceKhr: return "SurfaceKhr";
20427 case DebugReportObjectTypeEXT::eSwapchainKhr: return "SwapchainKhr";
20428 case DebugReportObjectTypeEXT::eDebugReport: return "DebugReport";
20429 default: return "invalid";
20430 }
20431 }
20432
20433 inline std::string to_string(DebugReportErrorEXT value)
20434 {
20435 switch (value)
20436 {
20437 case DebugReportErrorEXT::eNone: return "None";
20438 case DebugReportErrorEXT::eCallbackRef: return "CallbackRef";
20439 default: return "invalid";
20440 }
20441 }
20442
20443 inline std::string to_string(RasterizationOrderAMD value)
20444 {
20445 switch (value)
20446 {
20447 case RasterizationOrderAMD::eStrict: return "Strict";
20448 case RasterizationOrderAMD::eRelaxed: return "Relaxed";
20449 default: return "invalid";
20450 }
20451 }
20452
Lenny Komow6501c122016-08-31 15:03:49 -060020453 inline std::string to_string(ExternalMemoryHandleTypeFlagBitsNV value)
20454 {
20455 switch (value)
20456 {
20457 case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32: return "OpaqueWin32";
20458 case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt: return "OpaqueWin32Kmt";
20459 case ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image: return "D3D11Image";
20460 case ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt: return "D3D11ImageKmt";
20461 default: return "invalid";
20462 }
20463 }
20464
20465 inline std::string to_string(ExternalMemoryHandleTypeFlagsNV value)
20466 {
20467 if (!value) return "{}";
20468 std::string result;
20469 if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32) result += "OpaqueWin32 | ";
20470 if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt) result += "OpaqueWin32Kmt | ";
20471 if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image) result += "D3D11Image | ";
20472 if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt) result += "D3D11ImageKmt | ";
20473 return "{" + result.substr(0, result.size() - 3) + "}";
20474 }
20475
20476 inline std::string to_string(ExternalMemoryFeatureFlagBitsNV value)
20477 {
20478 switch (value)
20479 {
20480 case ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly: return "DedicatedOnly";
20481 case ExternalMemoryFeatureFlagBitsNV::eExportable: return "Exportable";
20482 case ExternalMemoryFeatureFlagBitsNV::eImportable: return "Importable";
20483 default: return "invalid";
20484 }
20485 }
20486
20487 inline std::string to_string(ExternalMemoryFeatureFlagsNV value)
20488 {
20489 if (!value) return "{}";
20490 std::string result;
20491 if (value & ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly) result += "DedicatedOnly | ";
20492 if (value & ExternalMemoryFeatureFlagBitsNV::eExportable) result += "Exportable | ";
20493 if (value & ExternalMemoryFeatureFlagBitsNV::eImportable) result += "Importable | ";
20494 return "{" + result.substr(0, result.size() - 3) + "}";
20495 }
20496
Lenny Komow68432d72016-09-29 14:16:59 -060020497 inline std::string to_string(ValidationCheckEXT value)
20498 {
20499 switch (value)
20500 {
20501 case ValidationCheckEXT::eAll: return "All";
20502 default: return "invalid";
20503 }
20504 }
20505
Lenny Komowbed9b5c2016-08-11 11:23:15 -060020506} // namespace vk
20507
20508#endif