Home | History | Annotate | Download | only in vulkan
      1 // Copyright (c) 2015-2018 The Khronos Group Inc.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 // This header is generated from the Khronos Vulkan XML API Registry.
     16 
     17 #ifndef VULKAN_HPP
     18 #define VULKAN_HPP
     19 
     20 #include <algorithm>
     21 #include <array>
     22 #include <cassert>
     23 #include <cstddef>
     24 #include <cstdint>
     25 #include <cstring>
     26 #include <initializer_list>
     27 #include <string>
     28 #include <system_error>
     29 #include <tuple>
     30 #include <type_traits>
     31 #include <vulkan/vulkan.h>
     32 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
     33 # include <memory>
     34 # include <vector>
     35 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
     36 static_assert( VK_HEADER_VERSION ==  68 , "Wrong VK_HEADER_VERSION!" );
     37 
     38 // 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
     39 // To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
     40 #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
     41 # if !defined( VULKAN_HPP_TYPESAFE_CONVERSION )
     42 #  define VULKAN_HPP_TYPESAFE_CONVERSION
     43 # endif
     44 #endif
     45 
     46 #if !defined(VULKAN_HPP_HAS_UNRESTRICTED_UNIONS)
     47 # if defined(__clang__)
     48 #  if __has_feature(cxx_unrestricted_unions)
     49 #   define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
     50 #  endif
     51 # elif defined(__GNUC__)
     52 #  define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
     53 #  if 40600 <= GCC_VERSION
     54 #   define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
     55 #  endif
     56 # elif defined(_MSC_VER)
     57 #  if 1900 <= _MSC_VER
     58 #   define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
     59 #  endif
     60 # endif
     61 #endif
     62 
     63 #if !defined(VULKAN_HPP_INLINE)
     64 # if defined(__clang___)
     65 #  if __has_attribute(always_inline)
     66 #   define VULKAN_HPP_INLINE __attribute__((always_inline)) __inline__
     67 #  else
     68 #    define VULKAN_HPP_INLINE inline
     69 #  endif
     70 # elif defined(__GNUC__)
     71 #  define VULKAN_HPP_INLINE __attribute__((always_inline)) __inline__
     72 # elif defined(_MSC_VER)
     73 #  define VULKAN_HPP_INLINE __forceinline
     74 # else
     75 #  define VULKAN_HPP_INLINE inline
     76 # endif
     77 #endif
     78 
     79 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
     80 # define VULKAN_HPP_TYPESAFE_EXPLICIT
     81 #else
     82 # define VULKAN_HPP_TYPESAFE_EXPLICIT explicit
     83 #endif
     84 
     85 
     86 #if !defined(VULKAN_HPP_NAMESPACE)
     87 #define VULKAN_HPP_NAMESPACE vk
     88 #endif
     89 
     90 namespace VULKAN_HPP_NAMESPACE
     91 {
     92 
     93   template <typename FlagBitsType> struct FlagTraits
     94   {
     95     enum { allFlags = 0 };
     96   };
     97 
     98   template <typename BitType, typename MaskType = VkFlags>
     99   class Flags
    100   {
    101   public:
    102     Flags()
    103       : m_mask(0)
    104     {
    105     }
    106 
    107     Flags(BitType bit)
    108       : m_mask(static_cast<MaskType>(bit))
    109     {
    110     }
    111 
    112     Flags(Flags<BitType> const& rhs)
    113       : m_mask(rhs.m_mask)
    114     {
    115     }
    116 
    117     explicit Flags(MaskType flags)
    118       : m_mask(flags)
    119     {
    120     }
    121 
    122     Flags<BitType> & operator=(Flags<BitType> const& rhs)
    123     {
    124       m_mask = rhs.m_mask;
    125       return *this;
    126     }
    127 
    128     Flags<BitType> & operator|=(Flags<BitType> const& rhs)
    129     {
    130       m_mask |= rhs.m_mask;
    131       return *this;
    132     }
    133 
    134     Flags<BitType> & operator&=(Flags<BitType> const& rhs)
    135     {
    136       m_mask &= rhs.m_mask;
    137       return *this;
    138     }
    139 
    140     Flags<BitType> & operator^=(Flags<BitType> const& rhs)
    141     {
    142       m_mask ^= rhs.m_mask;
    143       return *this;
    144     }
    145 
    146     Flags<BitType> operator|(Flags<BitType> const& rhs) const
    147     {
    148       Flags<BitType> result(*this);
    149       result |= rhs;
    150       return result;
    151     }
    152 
    153     Flags<BitType> operator&(Flags<BitType> const& rhs) const
    154     {
    155       Flags<BitType> result(*this);
    156       result &= rhs;
    157       return result;
    158     }
    159 
    160     Flags<BitType> operator^(Flags<BitType> const& rhs) const
    161     {
    162       Flags<BitType> result(*this);
    163       result ^= rhs;
    164       return result;
    165     }
    166 
    167     bool operator!() const
    168     {
    169       return !m_mask;
    170     }
    171 
    172     Flags<BitType> operator~() const
    173     {
    174       Flags<BitType> result(*this);
    175       result.m_mask ^= FlagTraits<BitType>::allFlags;
    176       return result;
    177     }
    178 
    179     bool operator==(Flags<BitType> const& rhs) const
    180     {
    181       return m_mask == rhs.m_mask;
    182     }
    183 
    184     bool operator!=(Flags<BitType> const& rhs) const
    185     {
    186       return m_mask != rhs.m_mask;
    187     }
    188 
    189     explicit operator bool() const
    190     {
    191       return !!m_mask;
    192     }
    193 
    194     explicit operator MaskType() const
    195     {
    196         return m_mask;
    197     }
    198 
    199   private:
    200     MaskType  m_mask;
    201   };
    202 
    203   template <typename BitType>
    204   Flags<BitType> operator|(BitType bit, Flags<BitType> const& flags)
    205   {
    206     return flags | bit;
    207   }
    208 
    209   template <typename BitType>
    210   Flags<BitType> operator&(BitType bit, Flags<BitType> const& flags)
    211   {
    212     return flags & bit;
    213   }
    214 
    215   template <typename BitType>
    216   Flags<BitType> operator^(BitType bit, Flags<BitType> const& flags)
    217   {
    218     return flags ^ bit;
    219   }
    220 
    221 
    222   template <typename RefType>
    223   class Optional
    224   {
    225   public:
    226     Optional(RefType & reference) { m_ptr = &reference; }
    227     Optional(RefType * ptr) { m_ptr = ptr; }
    228     Optional(std::nullptr_t) { m_ptr = nullptr; }
    229 
    230     operator RefType*() const { return m_ptr; }
    231     RefType const* operator->() const { return m_ptr; }
    232     explicit operator bool() const { return !!m_ptr; }
    233 
    234   private:
    235     RefType *m_ptr;
    236   };
    237 
    238 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
    239   template <typename T>
    240   class ArrayProxy
    241   {
    242   public:
    243     ArrayProxy(std::nullptr_t)
    244       : m_count(0)
    245       , m_ptr(nullptr)
    246     {}
    247 
    248     ArrayProxy(T & ptr)
    249       : m_count(1)
    250       , m_ptr(&ptr)
    251     {}
    252 
    253     ArrayProxy(uint32_t count, T * ptr)
    254       : m_count(count)
    255       , m_ptr(ptr)
    256     {}
    257 
    258     template <size_t N>
    259     ArrayProxy(std::array<typename std::remove_const<T>::type, N> & data)
    260       : m_count(N)
    261       , m_ptr(data.data())
    262     {}
    263 
    264     template <size_t N>
    265     ArrayProxy(std::array<typename std::remove_const<T>::type, N> const& data)
    266       : m_count(N)
    267       , m_ptr(data.data())
    268     {}
    269 
    270     template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
    271     ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> & data)
    272       : m_count(static_cast<uint32_t>(data.size()))
    273       , m_ptr(data.data())
    274     {}
    275 
    276     template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
    277     ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> const& data)
    278       : m_count(static_cast<uint32_t>(data.size()))
    279       , m_ptr(data.data())
    280     {}
    281 
    282     ArrayProxy(std::initializer_list<T> const& data)
    283       : m_count(static_cast<uint32_t>(data.end() - data.begin()))
    284       , m_ptr(data.begin())
    285     {}
    286 
    287     const T * begin() const
    288     {
    289       return m_ptr;
    290     }
    291 
    292     const T * end() const
    293     {
    294       return m_ptr + m_count;
    295     }
    296 
    297     const T & front() const
    298     {
    299       assert(m_count && m_ptr);
    300       return *m_ptr;
    301     }
    302 
    303     const T & back() const
    304     {
    305       assert(m_count && m_ptr);
    306       return *(m_ptr + m_count - 1);
    307     }
    308 
    309     bool empty() const
    310     {
    311       return (m_count == 0);
    312     }
    313 
    314     uint32_t size() const
    315     {
    316       return m_count;
    317     }
    318 
    319     T * data() const
    320     {
    321       return m_ptr;
    322     }
    323 
    324   private:
    325     uint32_t  m_count;
    326     T *       m_ptr;
    327   };
    328 #endif
    329 
    330 #ifndef VULKAN_HPP_NO_SMART_HANDLE
    331 
    332   template <typename Type> class UniqueHandleTraits;
    333 
    334   template <typename Type>
    335   class UniqueHandle : public UniqueHandleTraits<Type>::deleter
    336   {
    337   private:
    338     using Deleter = typename UniqueHandleTraits<Type>::deleter;
    339   public:
    340     explicit UniqueHandle( Type const& value = Type(), Deleter const& deleter = Deleter() )
    341       : Deleter( deleter)
    342       , m_value( value )
    343     {}
    344 
    345     UniqueHandle( UniqueHandle const& ) = delete;
    346 
    347     UniqueHandle( UniqueHandle && other )
    348       : Deleter( std::move( static_cast<Deleter&>( other ) ) )
    349       , m_value( other.release() )
    350     {}
    351 
    352     ~UniqueHandle()
    353     {
    354       if ( m_value ) this->destroy( m_value );
    355     }
    356 
    357     UniqueHandle & operator=( UniqueHandle const& ) = delete;
    358 
    359     UniqueHandle & operator=( UniqueHandle && other )
    360     {
    361       reset( other.release() );
    362       *static_cast<Deleter*>(this) = std::move( static_cast<Deleter&>(other) );
    363       return *this;
    364     }
    365 
    366     explicit operator bool() const
    367     {
    368       return m_value.operator bool();
    369     }
    370 
    371     Type const* operator->() const
    372     {
    373       return &m_value;
    374     }
    375 
    376     Type * operator->()
    377     {
    378       return &m_value;
    379     }
    380 
    381     Type const& operator*() const
    382     {
    383       return m_value;
    384     }
    385 
    386     Type & operator*()
    387     {
    388       return m_value;
    389     }
    390 
    391     const Type & get() const
    392     {
    393       return m_value;
    394     }
    395 
    396     Type & get()
    397     {
    398       return m_value;
    399     }
    400 
    401     void reset( Type const& value = Type() )
    402     {
    403       if ( m_value != value )
    404       {
    405         if ( m_value ) this->destroy( m_value );
    406         m_value = value;
    407       }
    408     }
    409 
    410     Type release()
    411     {
    412       Type value = m_value;
    413       m_value = nullptr;
    414       return value;
    415     }
    416 
    417     void swap( UniqueHandle<Type> & rhs )
    418     {
    419       std::swap(m_value, rhs.m_value);
    420       std::swap(static_cast<Deleter&>(*this), static_cast<Deleter&>(rhs));
    421     }
    422 
    423   private:
    424     Type    m_value;
    425   };
    426 
    427   template <typename Type>
    428   VULKAN_HPP_INLINE void swap( UniqueHandle<Type> & lhs, UniqueHandle<Type> & rhs )
    429   {
    430     lhs.swap( rhs );
    431   }
    432 #endif
    433 
    434 
    435   template <typename X, typename Y> struct isStructureChainValid { enum { value = false }; };
    436 
    437   template <class Element>
    438   class StructureChainElement
    439   {
    440   public:
    441     explicit operator Element&() { return value; }
    442     explicit operator const Element&() const { return value; }
    443   private:
    444     Element value;
    445   };
    446 
    447   template<typename ...StructureElements>
    448   class StructureChain : private StructureChainElement<StructureElements>...
    449   {
    450   public:
    451     StructureChain()
    452     {
    453       link<StructureElements...>();
    454     }
    455 
    456     StructureChain(StructureChain const &rhs)
    457     {
    458       linkAndCopy<StructureElements...>(rhs);
    459     }
    460 
    461     StructureChain& operator=(StructureChain const &rhs)
    462     {
    463       linkAndCopy<StructureElements...>(rhs);
    464       return *this;
    465     }
    466 
    467     template<typename ClassType> ClassType& get() { return static_cast<ClassType&>(*this);}
    468 
    469   private:
    470     template<typename X>
    471     void link()
    472     {
    473     }
    474 
    475     template<typename X, typename Y, typename ...Z>
    476     void link()
    477     {
    478       static_assert(isStructureChainValid<X,Y>::value, "The structure chain is not valid!");
    479       X& x = static_cast<X&>(*this);
    480       Y& y = static_cast<Y&>(*this);
    481       x.pNext = &y;
    482       link<Y, Z...>();
    483     }
    484 
    485     template<typename X>
    486     void linkAndCopy(StructureChain const &rhs)
    487     {
    488       static_cast<X&>(*this) = static_cast<X const &>(rhs);
    489     }
    490 
    491     template<typename X, typename Y, typename ...Z>
    492     void linkAndCopy(StructureChain const &rhs)
    493     {
    494       static_assert(isStructureChainValid<X,Y>::value, "The structure chain is not valid!");
    495       X& x = static_cast<X&>(*this);
    496       Y& y = static_cast<Y&>(*this);
    497       x = static_cast<X const &>(rhs);
    498       x.pNext = &y;
    499       linkAndCopy<Y, Z...>(rhs);
    500     }
    501 
    502 };
    503   enum class Result
    504   {
    505     eSuccess = VK_SUCCESS,
    506     eNotReady = VK_NOT_READY,
    507     eTimeout = VK_TIMEOUT,
    508     eEventSet = VK_EVENT_SET,
    509     eEventReset = VK_EVENT_RESET,
    510     eIncomplete = VK_INCOMPLETE,
    511     eErrorOutOfHostMemory = VK_ERROR_OUT_OF_HOST_MEMORY,
    512     eErrorOutOfDeviceMemory = VK_ERROR_OUT_OF_DEVICE_MEMORY,
    513     eErrorInitializationFailed = VK_ERROR_INITIALIZATION_FAILED,
    514     eErrorDeviceLost = VK_ERROR_DEVICE_LOST,
    515     eErrorMemoryMapFailed = VK_ERROR_MEMORY_MAP_FAILED,
    516     eErrorLayerNotPresent = VK_ERROR_LAYER_NOT_PRESENT,
    517     eErrorExtensionNotPresent = VK_ERROR_EXTENSION_NOT_PRESENT,
    518     eErrorFeatureNotPresent = VK_ERROR_FEATURE_NOT_PRESENT,
    519     eErrorIncompatibleDriver = VK_ERROR_INCOMPATIBLE_DRIVER,
    520     eErrorTooManyObjects = VK_ERROR_TOO_MANY_OBJECTS,
    521     eErrorFormatNotSupported = VK_ERROR_FORMAT_NOT_SUPPORTED,
    522     eErrorFragmentedPool = VK_ERROR_FRAGMENTED_POOL,
    523     eErrorSurfaceLostKHR = VK_ERROR_SURFACE_LOST_KHR,
    524     eErrorNativeWindowInUseKHR = VK_ERROR_NATIVE_WINDOW_IN_USE_KHR,
    525     eSuboptimalKHR = VK_SUBOPTIMAL_KHR,
    526     eErrorOutOfDateKHR = VK_ERROR_OUT_OF_DATE_KHR,
    527     eErrorIncompatibleDisplayKHR = VK_ERROR_INCOMPATIBLE_DISPLAY_KHR,
    528     eErrorValidationFailedEXT = VK_ERROR_VALIDATION_FAILED_EXT,
    529     eErrorInvalidShaderNV = VK_ERROR_INVALID_SHADER_NV,
    530     eErrorOutOfPoolMemoryKHR = VK_ERROR_OUT_OF_POOL_MEMORY_KHR,
    531     eErrorInvalidExternalHandleKHR = VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR,
    532     eErrorNotPermittedEXT = VK_ERROR_NOT_PERMITTED_EXT
    533   };
    534 
    535   VULKAN_HPP_INLINE std::string to_string(Result value)
    536   {
    537     switch (value)
    538     {
    539     case Result::eSuccess: return "Success";
    540     case Result::eNotReady: return "NotReady";
    541     case Result::eTimeout: return "Timeout";
    542     case Result::eEventSet: return "EventSet";
    543     case Result::eEventReset: return "EventReset";
    544     case Result::eIncomplete: return "Incomplete";
    545     case Result::eErrorOutOfHostMemory: return "ErrorOutOfHostMemory";
    546     case Result::eErrorOutOfDeviceMemory: return "ErrorOutOfDeviceMemory";
    547     case Result::eErrorInitializationFailed: return "ErrorInitializationFailed";
    548     case Result::eErrorDeviceLost: return "ErrorDeviceLost";
    549     case Result::eErrorMemoryMapFailed: return "ErrorMemoryMapFailed";
    550     case Result::eErrorLayerNotPresent: return "ErrorLayerNotPresent";
    551     case Result::eErrorExtensionNotPresent: return "ErrorExtensionNotPresent";
    552     case Result::eErrorFeatureNotPresent: return "ErrorFeatureNotPresent";
    553     case Result::eErrorIncompatibleDriver: return "ErrorIncompatibleDriver";
    554     case Result::eErrorTooManyObjects: return "ErrorTooManyObjects";
    555     case Result::eErrorFormatNotSupported: return "ErrorFormatNotSupported";
    556     case Result::eErrorFragmentedPool: return "ErrorFragmentedPool";
    557     case Result::eErrorSurfaceLostKHR: return "ErrorSurfaceLostKHR";
    558     case Result::eErrorNativeWindowInUseKHR: return "ErrorNativeWindowInUseKHR";
    559     case Result::eSuboptimalKHR: return "SuboptimalKHR";
    560     case Result::eErrorOutOfDateKHR: return "ErrorOutOfDateKHR";
    561     case Result::eErrorIncompatibleDisplayKHR: return "ErrorIncompatibleDisplayKHR";
    562     case Result::eErrorValidationFailedEXT: return "ErrorValidationFailedEXT";
    563     case Result::eErrorInvalidShaderNV: return "ErrorInvalidShaderNV";
    564     case Result::eErrorOutOfPoolMemoryKHR: return "ErrorOutOfPoolMemoryKHR";
    565     case Result::eErrorInvalidExternalHandleKHR: return "ErrorInvalidExternalHandleKHR";
    566     case Result::eErrorNotPermittedEXT: return "ErrorNotPermittedEXT";
    567     default: return "invalid";
    568     }
    569   }
    570 
    571 #ifndef VULKAN_HPP_NO_EXCEPTIONS
    572 #if defined(_MSC_VER) && (_MSC_VER == 1800)
    573 # define noexcept _NOEXCEPT
    574 #endif
    575 
    576   class ErrorCategoryImpl : public std::error_category
    577   {
    578     public:
    579     virtual const char* name() const noexcept override { return "VULKAN_HPP_NAMESPACE::Result"; }
    580     virtual std::string message(int ev) const override { return to_string(static_cast<Result>(ev)); }
    581   };
    582 
    583 #if defined(_MSC_VER) && (_MSC_VER == 1800)
    584 # undef noexcept
    585 #endif
    586 
    587   VULKAN_HPP_INLINE const std::error_category& errorCategory()
    588   {
    589     static ErrorCategoryImpl instance;
    590     return instance;
    591   }
    592 
    593   VULKAN_HPP_INLINE std::error_code make_error_code(Result e)
    594   {
    595     return std::error_code(static_cast<int>(e), errorCategory());
    596   }
    597 
    598   VULKAN_HPP_INLINE std::error_condition make_error_condition(Result e)
    599   {
    600     return std::error_condition(static_cast<int>(e), errorCategory());
    601   }
    602 
    603 #if defined(_MSC_VER) && (_MSC_VER == 1800)
    604 # define noexcept _NOEXCEPT
    605 #endif
    606 
    607   class Error
    608   {
    609     public:
    610     virtual ~Error() = default;
    611 
    612     virtual const char* what() const noexcept = 0;
    613   };
    614 
    615   class LogicError : public Error, public std::logic_error
    616   {
    617     public:
    618     explicit LogicError( const std::string& what )
    619       : Error(), std::logic_error(what) {}
    620     explicit LogicError( char const * what )
    621       : Error(), std::logic_error(what) {}
    622     virtual ~LogicError() = default;
    623 
    624     virtual const char* what() const noexcept { return std::logic_error::what(); }
    625   };
    626 
    627   class SystemError : public Error, public std::system_error
    628   {
    629     public:
    630     SystemError( std::error_code ec )
    631       : Error(), std::system_error(ec) {}
    632     SystemError( std::error_code ec, std::string const& what )
    633       : Error(), std::system_error(ec, what) {}
    634     SystemError( std::error_code ec, char const * what )
    635       : Error(), std::system_error(ec, what) {}
    636     SystemError( int ev, std::error_category const& ecat )
    637       : Error(), std::system_error(ev, ecat) {}
    638     SystemError( int ev, std::error_category const& ecat, std::string const& what)
    639       : Error(), std::system_error(ev, ecat, what) {}
    640     SystemError( int ev, std::error_category const& ecat, char const * what)
    641       : Error(), std::system_error(ev, ecat, what) {}
    642     virtual ~SystemError() = default;
    643 
    644     virtual const char* what() const noexcept { return std::system_error::what(); }
    645   };
    646 
    647 #if defined(_MSC_VER) && (_MSC_VER == 1800)
    648 # undef noexcept
    649 #endif
    650 
    651   class OutOfHostMemoryError : public SystemError
    652   {
    653   public:
    654     OutOfHostMemoryError( std::string const& message )
    655       : SystemError( make_error_code( Result::eErrorOutOfHostMemory ), message ) {}
    656     OutOfHostMemoryError( char const * message )
    657       : SystemError( make_error_code( Result::eErrorOutOfHostMemory ), message ) {}
    658   };
    659   class OutOfDeviceMemoryError : public SystemError
    660   {
    661   public:
    662     OutOfDeviceMemoryError( std::string const& message )
    663       : SystemError( make_error_code( Result::eErrorOutOfDeviceMemory ), message ) {}
    664     OutOfDeviceMemoryError( char const * message )
    665       : SystemError( make_error_code( Result::eErrorOutOfDeviceMemory ), message ) {}
    666   };
    667   class InitializationFailedError : public SystemError
    668   {
    669   public:
    670     InitializationFailedError( std::string const& message )
    671       : SystemError( make_error_code( Result::eErrorInitializationFailed ), message ) {}
    672     InitializationFailedError( char const * message )
    673       : SystemError( make_error_code( Result::eErrorInitializationFailed ), message ) {}
    674   };
    675   class DeviceLostError : public SystemError
    676   {
    677   public:
    678     DeviceLostError( std::string const& message )
    679       : SystemError( make_error_code( Result::eErrorDeviceLost ), message ) {}
    680     DeviceLostError( char const * message )
    681       : SystemError( make_error_code( Result::eErrorDeviceLost ), message ) {}
    682   };
    683   class MemoryMapFailedError : public SystemError
    684   {
    685   public:
    686     MemoryMapFailedError( std::string const& message )
    687       : SystemError( make_error_code( Result::eErrorMemoryMapFailed ), message ) {}
    688     MemoryMapFailedError( char const * message )
    689       : SystemError( make_error_code( Result::eErrorMemoryMapFailed ), message ) {}
    690   };
    691   class LayerNotPresentError : public SystemError
    692   {
    693   public:
    694     LayerNotPresentError( std::string const& message )
    695       : SystemError( make_error_code( Result::eErrorLayerNotPresent ), message ) {}
    696     LayerNotPresentError( char const * message )
    697       : SystemError( make_error_code( Result::eErrorLayerNotPresent ), message ) {}
    698   };
    699   class ExtensionNotPresentError : public SystemError
    700   {
    701   public:
    702     ExtensionNotPresentError( std::string const& message )
    703       : SystemError( make_error_code( Result::eErrorExtensionNotPresent ), message ) {}
    704     ExtensionNotPresentError( char const * message )
    705       : SystemError( make_error_code( Result::eErrorExtensionNotPresent ), message ) {}
    706   };
    707   class FeatureNotPresentError : public SystemError
    708   {
    709   public:
    710     FeatureNotPresentError( std::string const& message )
    711       : SystemError( make_error_code( Result::eErrorFeatureNotPresent ), message ) {}
    712     FeatureNotPresentError( char const * message )
    713       : SystemError( make_error_code( Result::eErrorFeatureNotPresent ), message ) {}
    714   };
    715   class IncompatibleDriverError : public SystemError
    716   {
    717   public:
    718     IncompatibleDriverError( std::string const& message )
    719       : SystemError( make_error_code( Result::eErrorIncompatibleDriver ), message ) {}
    720     IncompatibleDriverError( char const * message )
    721       : SystemError( make_error_code( Result::eErrorIncompatibleDriver ), message ) {}
    722   };
    723   class TooManyObjectsError : public SystemError
    724   {
    725   public:
    726     TooManyObjectsError( std::string const& message )
    727       : SystemError( make_error_code( Result::eErrorTooManyObjects ), message ) {}
    728     TooManyObjectsError( char const * message )
    729       : SystemError( make_error_code( Result::eErrorTooManyObjects ), message ) {}
    730   };
    731   class FormatNotSupportedError : public SystemError
    732   {
    733   public:
    734     FormatNotSupportedError( std::string const& message )
    735       : SystemError( make_error_code( Result::eErrorFormatNotSupported ), message ) {}
    736     FormatNotSupportedError( char const * message )
    737       : SystemError( make_error_code( Result::eErrorFormatNotSupported ), message ) {}
    738   };
    739   class FragmentedPoolError : public SystemError
    740   {
    741   public:
    742     FragmentedPoolError( std::string const& message )
    743       : SystemError( make_error_code( Result::eErrorFragmentedPool ), message ) {}
    744     FragmentedPoolError( char const * message )
    745       : SystemError( make_error_code( Result::eErrorFragmentedPool ), message ) {}
    746   };
    747   class SurfaceLostKHRError : public SystemError
    748   {
    749   public:
    750     SurfaceLostKHRError( std::string const& message )
    751       : SystemError( make_error_code( Result::eErrorSurfaceLostKHR ), message ) {}
    752     SurfaceLostKHRError( char const * message )
    753       : SystemError( make_error_code( Result::eErrorSurfaceLostKHR ), message ) {}
    754   };
    755   class NativeWindowInUseKHRError : public SystemError
    756   {
    757   public:
    758     NativeWindowInUseKHRError( std::string const& message )
    759       : SystemError( make_error_code( Result::eErrorNativeWindowInUseKHR ), message ) {}
    760     NativeWindowInUseKHRError( char const * message )
    761       : SystemError( make_error_code( Result::eErrorNativeWindowInUseKHR ), message ) {}
    762   };
    763   class OutOfDateKHRError : public SystemError
    764   {
    765   public:
    766     OutOfDateKHRError( std::string const& message )
    767       : SystemError( make_error_code( Result::eErrorOutOfDateKHR ), message ) {}
    768     OutOfDateKHRError( char const * message )
    769       : SystemError( make_error_code( Result::eErrorOutOfDateKHR ), message ) {}
    770   };
    771   class IncompatibleDisplayKHRError : public SystemError
    772   {
    773   public:
    774     IncompatibleDisplayKHRError( std::string const& message )
    775       : SystemError( make_error_code( Result::eErrorIncompatibleDisplayKHR ), message ) {}
    776     IncompatibleDisplayKHRError( char const * message )
    777       : SystemError( make_error_code( Result::eErrorIncompatibleDisplayKHR ), message ) {}
    778   };
    779   class ValidationFailedEXTError : public SystemError
    780   {
    781   public:
    782     ValidationFailedEXTError( std::string const& message )
    783       : SystemError( make_error_code( Result::eErrorValidationFailedEXT ), message ) {}
    784     ValidationFailedEXTError( char const * message )
    785       : SystemError( make_error_code( Result::eErrorValidationFailedEXT ), message ) {}
    786   };
    787   class InvalidShaderNVError : public SystemError
    788   {
    789   public:
    790     InvalidShaderNVError( std::string const& message )
    791       : SystemError( make_error_code( Result::eErrorInvalidShaderNV ), message ) {}
    792     InvalidShaderNVError( char const * message )
    793       : SystemError( make_error_code( Result::eErrorInvalidShaderNV ), message ) {}
    794   };
    795   class OutOfPoolMemoryKHRError : public SystemError
    796   {
    797   public:
    798     OutOfPoolMemoryKHRError( std::string const& message )
    799       : SystemError( make_error_code( Result::eErrorOutOfPoolMemoryKHR ), message ) {}
    800     OutOfPoolMemoryKHRError( char const * message )
    801       : SystemError( make_error_code( Result::eErrorOutOfPoolMemoryKHR ), message ) {}
    802   };
    803   class InvalidExternalHandleKHRError : public SystemError
    804   {
    805   public:
    806     InvalidExternalHandleKHRError( std::string const& message )
    807       : SystemError( make_error_code( Result::eErrorInvalidExternalHandleKHR ), message ) {}
    808     InvalidExternalHandleKHRError( char const * message )
    809       : SystemError( make_error_code( Result::eErrorInvalidExternalHandleKHR ), message ) {}
    810   };
    811   class NotPermittedEXTError : public SystemError
    812   {
    813   public:
    814     NotPermittedEXTError( std::string const& message )
    815       : SystemError( make_error_code( Result::eErrorNotPermittedEXT ), message ) {}
    816     NotPermittedEXTError( char const * message )
    817       : SystemError( make_error_code( Result::eErrorNotPermittedEXT ), message ) {}
    818   };
    819 
    820   VULKAN_HPP_INLINE void throwResultException( Result result, char const * message )
    821   {
    822     switch ( result )
    823     {
    824     case Result::eErrorOutOfHostMemory: throw OutOfHostMemoryError ( message );
    825     case Result::eErrorOutOfDeviceMemory: throw OutOfDeviceMemoryError ( message );
    826     case Result::eErrorInitializationFailed: throw InitializationFailedError ( message );
    827     case Result::eErrorDeviceLost: throw DeviceLostError ( message );
    828     case Result::eErrorMemoryMapFailed: throw MemoryMapFailedError ( message );
    829     case Result::eErrorLayerNotPresent: throw LayerNotPresentError ( message );
    830     case Result::eErrorExtensionNotPresent: throw ExtensionNotPresentError ( message );
    831     case Result::eErrorFeatureNotPresent: throw FeatureNotPresentError ( message );
    832     case Result::eErrorIncompatibleDriver: throw IncompatibleDriverError ( message );
    833     case Result::eErrorTooManyObjects: throw TooManyObjectsError ( message );
    834     case Result::eErrorFormatNotSupported: throw FormatNotSupportedError ( message );
    835     case Result::eErrorFragmentedPool: throw FragmentedPoolError ( message );
    836     case Result::eErrorSurfaceLostKHR: throw SurfaceLostKHRError ( message );
    837     case Result::eErrorNativeWindowInUseKHR: throw NativeWindowInUseKHRError ( message );
    838     case Result::eErrorOutOfDateKHR: throw OutOfDateKHRError ( message );
    839     case Result::eErrorIncompatibleDisplayKHR: throw IncompatibleDisplayKHRError ( message );
    840     case Result::eErrorValidationFailedEXT: throw ValidationFailedEXTError ( message );
    841     case Result::eErrorInvalidShaderNV: throw InvalidShaderNVError ( message );
    842     case Result::eErrorOutOfPoolMemoryKHR: throw OutOfPoolMemoryKHRError ( message );
    843     case Result::eErrorInvalidExternalHandleKHR: throw InvalidExternalHandleKHRError ( message );
    844     case Result::eErrorNotPermittedEXT: throw NotPermittedEXTError ( message );
    845     default: throw SystemError( make_error_code( result ) );
    846     }
    847   }
    848 #endif
    849 } // namespace VULKAN_HPP_NAMESPACE
    850 
    851 namespace std
    852 {
    853   template <>
    854   struct is_error_code_enum<VULKAN_HPP_NAMESPACE::Result> : public true_type
    855   {};
    856 }
    857 
    858 namespace VULKAN_HPP_NAMESPACE
    859 {
    860 
    861   template <typename T>
    862   struct ResultValue
    863   {
    864     ResultValue( Result r, T & v )
    865       : result( r )
    866       , value( v )
    867     {}
    868 
    869     ResultValue( Result r, T && v )
    870       : result( r )
    871       , value( std::move( v ) )
    872     {}
    873 
    874     Result  result;
    875     T       value;
    876 
    877     operator std::tuple<Result&, T&>() { return std::tuple<Result&, T&>(result, value); }
    878   };
    879 
    880   template <typename T>
    881   struct ResultValueType
    882   {
    883 #ifdef VULKAN_HPP_NO_EXCEPTIONS
    884     typedef ResultValue<T>  type;
    885 #else
    886     typedef T               type;
    887 #endif
    888   };
    889 
    890   template <>
    891   struct ResultValueType<void>
    892   {
    893 #ifdef VULKAN_HPP_NO_EXCEPTIONS
    894     typedef Result type;
    895 #else
    896     typedef void   type;
    897 #endif
    898   };
    899 
    900   VULKAN_HPP_INLINE ResultValueType<void>::type createResultValue( Result result, char const * message )
    901   {
    902 #ifdef VULKAN_HPP_NO_EXCEPTIONS
    903     assert( result == Result::eSuccess );
    904     return result;
    905 #else
    906     if ( result != Result::eSuccess )
    907     {
    908       throwResultException( result, message );
    909     }
    910 #endif
    911   }
    912 
    913   template <typename T>
    914   VULKAN_HPP_INLINE typename ResultValueType<T>::type createResultValue( Result result, T & data, char const * message )
    915   {
    916 #ifdef VULKAN_HPP_NO_EXCEPTIONS
    917     assert( result == Result::eSuccess );
    918     return ResultValue<T>( result, data );
    919 #else
    920     if ( result != Result::eSuccess )
    921     {
    922       throwResultException( result, message );
    923     }
    924     return data;
    925 #endif
    926   }
    927 
    928   VULKAN_HPP_INLINE Result createResultValue( Result result, char const * message, std::initializer_list<Result> successCodes )
    929   {
    930 #ifdef VULKAN_HPP_NO_EXCEPTIONS
    931     assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
    932 #else
    933     if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
    934     {
    935       throwResultException( result, message );
    936     }
    937 #endif
    938     return result;
    939   }
    940 
    941   template <typename T>
    942   VULKAN_HPP_INLINE ResultValue<T> createResultValue( Result result, T & data, char const * message, std::initializer_list<Result> successCodes )
    943   {
    944 #ifdef VULKAN_HPP_NO_EXCEPTIONS
    945     assert( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() );
    946 #else
    947     if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() )
    948     {
    949       throwResultException( result, message );
    950     }
    951 #endif
    952     return ResultValue<T>( result, data );
    953   }
    954 
    955 #ifndef VULKAN_HPP_NO_SMART_HANDLE
    956   template <typename T>
    957   VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<T>>::type createResultValue( Result result, T & data, char const * message, typename UniqueHandleTraits<T>::deleter const& deleter )
    958   {
    959 #ifdef VULKAN_HPP_NO_EXCEPTIONS
    960     assert( result == Result::eSuccess );
    961     return ResultValue<UniqueHandle<T>>( result, UniqueHandle<T>(data, deleter) );
    962 #else
    963     if ( result != Result::eSuccess )
    964     {
    965       throwResultException( result, message );
    966     }
    967     return UniqueHandle<T>(data, deleter);
    968 #endif
    969   }
    970 #endif
    971 
    972   using SampleMask = uint32_t;
    973 
    974   using Bool32 = uint32_t;
    975 
    976   using DeviceSize = uint64_t;
    977 
    978   enum class FramebufferCreateFlagBits
    979   {
    980   };
    981 
    982   using FramebufferCreateFlags = Flags<FramebufferCreateFlagBits, VkFramebufferCreateFlags>;
    983 
    984   enum class QueryPoolCreateFlagBits
    985   {
    986   };
    987 
    988   using QueryPoolCreateFlags = Flags<QueryPoolCreateFlagBits, VkQueryPoolCreateFlags>;
    989 
    990   enum class RenderPassCreateFlagBits
    991   {
    992   };
    993 
    994   using RenderPassCreateFlags = Flags<RenderPassCreateFlagBits, VkRenderPassCreateFlags>;
    995 
    996   enum class SamplerCreateFlagBits
    997   {
    998   };
    999 
   1000   using SamplerCreateFlags = Flags<SamplerCreateFlagBits, VkSamplerCreateFlags>;
   1001 
   1002   enum class PipelineLayoutCreateFlagBits
   1003   {
   1004   };
   1005 
   1006   using PipelineLayoutCreateFlags = Flags<PipelineLayoutCreateFlagBits, VkPipelineLayoutCreateFlags>;
   1007 
   1008   enum class PipelineCacheCreateFlagBits
   1009   {
   1010   };
   1011 
   1012   using PipelineCacheCreateFlags = Flags<PipelineCacheCreateFlagBits, VkPipelineCacheCreateFlags>;
   1013 
   1014   enum class PipelineDepthStencilStateCreateFlagBits
   1015   {
   1016   };
   1017 
   1018   using PipelineDepthStencilStateCreateFlags = Flags<PipelineDepthStencilStateCreateFlagBits, VkPipelineDepthStencilStateCreateFlags>;
   1019 
   1020   enum class PipelineDynamicStateCreateFlagBits
   1021   {
   1022   };
   1023 
   1024   using PipelineDynamicStateCreateFlags = Flags<PipelineDynamicStateCreateFlagBits, VkPipelineDynamicStateCreateFlags>;
   1025 
   1026   enum class PipelineColorBlendStateCreateFlagBits
   1027   {
   1028   };
   1029 
   1030   using PipelineColorBlendStateCreateFlags = Flags<PipelineColorBlendStateCreateFlagBits, VkPipelineColorBlendStateCreateFlags>;
   1031 
   1032   enum class PipelineMultisampleStateCreateFlagBits
   1033   {
   1034   };
   1035 
   1036   using PipelineMultisampleStateCreateFlags = Flags<PipelineMultisampleStateCreateFlagBits, VkPipelineMultisampleStateCreateFlags>;
   1037 
   1038   enum class PipelineRasterizationStateCreateFlagBits
   1039   {
   1040   };
   1041 
   1042   using PipelineRasterizationStateCreateFlags = Flags<PipelineRasterizationStateCreateFlagBits, VkPipelineRasterizationStateCreateFlags>;
   1043 
   1044   enum class PipelineViewportStateCreateFlagBits
   1045   {
   1046   };
   1047 
   1048   using PipelineViewportStateCreateFlags = Flags<PipelineViewportStateCreateFlagBits, VkPipelineViewportStateCreateFlags>;
   1049 
   1050   enum class PipelineTessellationStateCreateFlagBits
   1051   {
   1052   };
   1053 
   1054   using PipelineTessellationStateCreateFlags = Flags<PipelineTessellationStateCreateFlagBits, VkPipelineTessellationStateCreateFlags>;
   1055 
   1056   enum class PipelineInputAssemblyStateCreateFlagBits
   1057   {
   1058   };
   1059 
   1060   using PipelineInputAssemblyStateCreateFlags = Flags<PipelineInputAssemblyStateCreateFlagBits, VkPipelineInputAssemblyStateCreateFlags>;
   1061 
   1062   enum class PipelineVertexInputStateCreateFlagBits
   1063   {
   1064   };
   1065 
   1066   using PipelineVertexInputStateCreateFlags = Flags<PipelineVertexInputStateCreateFlagBits, VkPipelineVertexInputStateCreateFlags>;
   1067 
   1068   enum class PipelineShaderStageCreateFlagBits
   1069   {
   1070   };
   1071 
   1072   using PipelineShaderStageCreateFlags = Flags<PipelineShaderStageCreateFlagBits, VkPipelineShaderStageCreateFlags>;
   1073 
   1074   enum class BufferViewCreateFlagBits
   1075   {
   1076   };
   1077 
   1078   using BufferViewCreateFlags = Flags<BufferViewCreateFlagBits, VkBufferViewCreateFlags>;
   1079 
   1080   enum class InstanceCreateFlagBits
   1081   {
   1082   };
   1083 
   1084   using InstanceCreateFlags = Flags<InstanceCreateFlagBits, VkInstanceCreateFlags>;
   1085 
   1086   enum class DeviceCreateFlagBits
   1087   {
   1088   };
   1089 
   1090   using DeviceCreateFlags = Flags<DeviceCreateFlagBits, VkDeviceCreateFlags>;
   1091 
   1092   enum class DeviceQueueCreateFlagBits
   1093   {
   1094   };
   1095 
   1096   using DeviceQueueCreateFlags = Flags<DeviceQueueCreateFlagBits, VkDeviceQueueCreateFlags>;
   1097 
   1098   enum class ImageViewCreateFlagBits
   1099   {
   1100   };
   1101 
   1102   using ImageViewCreateFlags = Flags<ImageViewCreateFlagBits, VkImageViewCreateFlags>;
   1103 
   1104   enum class SemaphoreCreateFlagBits
   1105   {
   1106   };
   1107 
   1108   using SemaphoreCreateFlags = Flags<SemaphoreCreateFlagBits, VkSemaphoreCreateFlags>;
   1109 
   1110   enum class ShaderModuleCreateFlagBits
   1111   {
   1112   };
   1113 
   1114   using ShaderModuleCreateFlags = Flags<ShaderModuleCreateFlagBits, VkShaderModuleCreateFlags>;
   1115 
   1116   enum class EventCreateFlagBits
   1117   {
   1118   };
   1119 
   1120   using EventCreateFlags = Flags<EventCreateFlagBits, VkEventCreateFlags>;
   1121 
   1122   enum class MemoryMapFlagBits
   1123   {
   1124   };
   1125 
   1126   using MemoryMapFlags = Flags<MemoryMapFlagBits, VkMemoryMapFlags>;
   1127 
   1128   enum class DescriptorPoolResetFlagBits
   1129   {
   1130   };
   1131 
   1132   using DescriptorPoolResetFlags = Flags<DescriptorPoolResetFlagBits, VkDescriptorPoolResetFlags>;
   1133 
   1134   enum class DescriptorUpdateTemplateCreateFlagBitsKHR
   1135   {
   1136   };
   1137 
   1138   using DescriptorUpdateTemplateCreateFlagsKHR = Flags<DescriptorUpdateTemplateCreateFlagBitsKHR, VkDescriptorUpdateTemplateCreateFlagsKHR>;
   1139 
   1140   enum class DisplayModeCreateFlagBitsKHR
   1141   {
   1142   };
   1143 
   1144   using DisplayModeCreateFlagsKHR = Flags<DisplayModeCreateFlagBitsKHR, VkDisplayModeCreateFlagsKHR>;
   1145 
   1146   enum class DisplaySurfaceCreateFlagBitsKHR
   1147   {
   1148   };
   1149 
   1150   using DisplaySurfaceCreateFlagsKHR = Flags<DisplaySurfaceCreateFlagBitsKHR, VkDisplaySurfaceCreateFlagsKHR>;
   1151 
   1152 #ifdef VK_USE_PLATFORM_ANDROID_KHR
   1153   enum class AndroidSurfaceCreateFlagBitsKHR
   1154   {
   1155   };
   1156 #endif /*VK_USE_PLATFORM_ANDROID_KHR*/
   1157 
   1158 #ifdef VK_USE_PLATFORM_ANDROID_KHR
   1159   using AndroidSurfaceCreateFlagsKHR = Flags<AndroidSurfaceCreateFlagBitsKHR, VkAndroidSurfaceCreateFlagsKHR>;
   1160 #endif /*VK_USE_PLATFORM_ANDROID_KHR*/
   1161 
   1162 #ifdef VK_USE_PLATFORM_MIR_KHR
   1163   enum class MirSurfaceCreateFlagBitsKHR
   1164   {
   1165   };
   1166 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   1167 
   1168 #ifdef VK_USE_PLATFORM_MIR_KHR
   1169   using MirSurfaceCreateFlagsKHR = Flags<MirSurfaceCreateFlagBitsKHR, VkMirSurfaceCreateFlagsKHR>;
   1170 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   1171 
   1172 #ifdef VK_USE_PLATFORM_VI_NN
   1173   enum class ViSurfaceCreateFlagBitsNN
   1174   {
   1175   };
   1176 #endif /*VK_USE_PLATFORM_VI_NN*/
   1177 
   1178 #ifdef VK_USE_PLATFORM_VI_NN
   1179   using ViSurfaceCreateFlagsNN = Flags<ViSurfaceCreateFlagBitsNN, VkViSurfaceCreateFlagsNN>;
   1180 #endif /*VK_USE_PLATFORM_VI_NN*/
   1181 
   1182 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   1183   enum class WaylandSurfaceCreateFlagBitsKHR
   1184   {
   1185   };
   1186 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   1187 
   1188 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   1189   using WaylandSurfaceCreateFlagsKHR = Flags<WaylandSurfaceCreateFlagBitsKHR, VkWaylandSurfaceCreateFlagsKHR>;
   1190 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   1191 
   1192 #ifdef VK_USE_PLATFORM_WIN32_KHR
   1193   enum class Win32SurfaceCreateFlagBitsKHR
   1194   {
   1195   };
   1196 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   1197 
   1198 #ifdef VK_USE_PLATFORM_WIN32_KHR
   1199   using Win32SurfaceCreateFlagsKHR = Flags<Win32SurfaceCreateFlagBitsKHR, VkWin32SurfaceCreateFlagsKHR>;
   1200 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   1201 
   1202 #ifdef VK_USE_PLATFORM_XLIB_KHR
   1203   enum class XlibSurfaceCreateFlagBitsKHR
   1204   {
   1205   };
   1206 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   1207 
   1208 #ifdef VK_USE_PLATFORM_XLIB_KHR
   1209   using XlibSurfaceCreateFlagsKHR = Flags<XlibSurfaceCreateFlagBitsKHR, VkXlibSurfaceCreateFlagsKHR>;
   1210 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   1211 
   1212 #ifdef VK_USE_PLATFORM_XCB_KHR
   1213   enum class XcbSurfaceCreateFlagBitsKHR
   1214   {
   1215   };
   1216 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   1217 
   1218 #ifdef VK_USE_PLATFORM_XCB_KHR
   1219   using XcbSurfaceCreateFlagsKHR = Flags<XcbSurfaceCreateFlagBitsKHR, VkXcbSurfaceCreateFlagsKHR>;
   1220 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   1221 
   1222 #ifdef VK_USE_PLATFORM_IOS_MVK
   1223   enum class IOSSurfaceCreateFlagBitsMVK
   1224   {
   1225   };
   1226 #endif /*VK_USE_PLATFORM_IOS_MVK*/
   1227 
   1228 #ifdef VK_USE_PLATFORM_IOS_MVK
   1229   using IOSSurfaceCreateFlagsMVK = Flags<IOSSurfaceCreateFlagBitsMVK, VkIOSSurfaceCreateFlagsMVK>;
   1230 #endif /*VK_USE_PLATFORM_IOS_MVK*/
   1231 
   1232 #ifdef VK_USE_PLATFORM_MACOS_MVK
   1233   enum class MacOSSurfaceCreateFlagBitsMVK
   1234   {
   1235   };
   1236 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
   1237 
   1238 #ifdef VK_USE_PLATFORM_MACOS_MVK
   1239   using MacOSSurfaceCreateFlagsMVK = Flags<MacOSSurfaceCreateFlagBitsMVK, VkMacOSSurfaceCreateFlagsMVK>;
   1240 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
   1241 
   1242   enum class CommandPoolTrimFlagBitsKHR
   1243   {
   1244   };
   1245 
   1246   using CommandPoolTrimFlagsKHR = Flags<CommandPoolTrimFlagBitsKHR, VkCommandPoolTrimFlagsKHR>;
   1247 
   1248   enum class PipelineViewportSwizzleStateCreateFlagBitsNV
   1249   {
   1250   };
   1251 
   1252   using PipelineViewportSwizzleStateCreateFlagsNV = Flags<PipelineViewportSwizzleStateCreateFlagBitsNV, VkPipelineViewportSwizzleStateCreateFlagsNV>;
   1253 
   1254   enum class PipelineDiscardRectangleStateCreateFlagBitsEXT
   1255   {
   1256   };
   1257 
   1258   using PipelineDiscardRectangleStateCreateFlagsEXT = Flags<PipelineDiscardRectangleStateCreateFlagBitsEXT, VkPipelineDiscardRectangleStateCreateFlagsEXT>;
   1259 
   1260   enum class PipelineCoverageToColorStateCreateFlagBitsNV
   1261   {
   1262   };
   1263 
   1264   using PipelineCoverageToColorStateCreateFlagsNV = Flags<PipelineCoverageToColorStateCreateFlagBitsNV, VkPipelineCoverageToColorStateCreateFlagsNV>;
   1265 
   1266   enum class PipelineCoverageModulationStateCreateFlagBitsNV
   1267   {
   1268   };
   1269 
   1270   using PipelineCoverageModulationStateCreateFlagsNV = Flags<PipelineCoverageModulationStateCreateFlagBitsNV, VkPipelineCoverageModulationStateCreateFlagsNV>;
   1271 
   1272   enum class ValidationCacheCreateFlagBitsEXT
   1273   {
   1274   };
   1275 
   1276   using ValidationCacheCreateFlagsEXT = Flags<ValidationCacheCreateFlagBitsEXT, VkValidationCacheCreateFlagsEXT>;
   1277 
   1278   enum class PipelineRasterizationConservativeStateCreateFlagBitsEXT
   1279   {
   1280   };
   1281 
   1282   using PipelineRasterizationConservativeStateCreateFlagsEXT = Flags<PipelineRasterizationConservativeStateCreateFlagBitsEXT, VkPipelineRasterizationConservativeStateCreateFlagsEXT>;
   1283 
   1284   class DeviceMemory
   1285   {
   1286   public:
   1287     DeviceMemory()
   1288       : m_deviceMemory(VK_NULL_HANDLE)
   1289     {}
   1290 
   1291     DeviceMemory( std::nullptr_t )
   1292       : m_deviceMemory(VK_NULL_HANDLE)
   1293     {}
   1294 
   1295     VULKAN_HPP_TYPESAFE_EXPLICIT DeviceMemory( VkDeviceMemory deviceMemory )
   1296       : m_deviceMemory( deviceMemory )
   1297     {}
   1298 
   1299 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1300     DeviceMemory & operator=(VkDeviceMemory deviceMemory)
   1301     {
   1302       m_deviceMemory = deviceMemory;
   1303       return *this;
   1304     }
   1305 #endif
   1306 
   1307     DeviceMemory & operator=( std::nullptr_t )
   1308     {
   1309       m_deviceMemory = VK_NULL_HANDLE;
   1310       return *this;
   1311     }
   1312 
   1313     bool operator==( DeviceMemory const & rhs ) const
   1314     {
   1315       return m_deviceMemory == rhs.m_deviceMemory;
   1316     }
   1317 
   1318     bool operator!=(DeviceMemory const & rhs ) const
   1319     {
   1320       return m_deviceMemory != rhs.m_deviceMemory;
   1321     }
   1322 
   1323     bool operator<(DeviceMemory const & rhs ) const
   1324     {
   1325       return m_deviceMemory < rhs.m_deviceMemory;
   1326     }
   1327 
   1328 
   1329 
   1330     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDeviceMemory() const
   1331     {
   1332       return m_deviceMemory;
   1333     }
   1334 
   1335     explicit operator bool() const
   1336     {
   1337       return m_deviceMemory != VK_NULL_HANDLE;
   1338     }
   1339 
   1340     bool operator!() const
   1341     {
   1342       return m_deviceMemory == VK_NULL_HANDLE;
   1343     }
   1344 
   1345   private:
   1346     VkDeviceMemory m_deviceMemory;
   1347   };
   1348 
   1349   static_assert( sizeof( DeviceMemory ) == sizeof( VkDeviceMemory ), "handle and wrapper have different size!" );
   1350 
   1351   class CommandPool
   1352   {
   1353   public:
   1354     CommandPool()
   1355       : m_commandPool(VK_NULL_HANDLE)
   1356     {}
   1357 
   1358     CommandPool( std::nullptr_t )
   1359       : m_commandPool(VK_NULL_HANDLE)
   1360     {}
   1361 
   1362     VULKAN_HPP_TYPESAFE_EXPLICIT CommandPool( VkCommandPool commandPool )
   1363       : m_commandPool( commandPool )
   1364     {}
   1365 
   1366 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1367     CommandPool & operator=(VkCommandPool commandPool)
   1368     {
   1369       m_commandPool = commandPool;
   1370       return *this;
   1371     }
   1372 #endif
   1373 
   1374     CommandPool & operator=( std::nullptr_t )
   1375     {
   1376       m_commandPool = VK_NULL_HANDLE;
   1377       return *this;
   1378     }
   1379 
   1380     bool operator==( CommandPool const & rhs ) const
   1381     {
   1382       return m_commandPool == rhs.m_commandPool;
   1383     }
   1384 
   1385     bool operator!=(CommandPool const & rhs ) const
   1386     {
   1387       return m_commandPool != rhs.m_commandPool;
   1388     }
   1389 
   1390     bool operator<(CommandPool const & rhs ) const
   1391     {
   1392       return m_commandPool < rhs.m_commandPool;
   1393     }
   1394 
   1395 
   1396 
   1397     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCommandPool() const
   1398     {
   1399       return m_commandPool;
   1400     }
   1401 
   1402     explicit operator bool() const
   1403     {
   1404       return m_commandPool != VK_NULL_HANDLE;
   1405     }
   1406 
   1407     bool operator!() const
   1408     {
   1409       return m_commandPool == VK_NULL_HANDLE;
   1410     }
   1411 
   1412   private:
   1413     VkCommandPool m_commandPool;
   1414   };
   1415 
   1416   static_assert( sizeof( CommandPool ) == sizeof( VkCommandPool ), "handle and wrapper have different size!" );
   1417 
   1418   class Buffer
   1419   {
   1420   public:
   1421     Buffer()
   1422       : m_buffer(VK_NULL_HANDLE)
   1423     {}
   1424 
   1425     Buffer( std::nullptr_t )
   1426       : m_buffer(VK_NULL_HANDLE)
   1427     {}
   1428 
   1429     VULKAN_HPP_TYPESAFE_EXPLICIT Buffer( VkBuffer buffer )
   1430       : m_buffer( buffer )
   1431     {}
   1432 
   1433 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1434     Buffer & operator=(VkBuffer buffer)
   1435     {
   1436       m_buffer = buffer;
   1437       return *this;
   1438     }
   1439 #endif
   1440 
   1441     Buffer & operator=( std::nullptr_t )
   1442     {
   1443       m_buffer = VK_NULL_HANDLE;
   1444       return *this;
   1445     }
   1446 
   1447     bool operator==( Buffer const & rhs ) const
   1448     {
   1449       return m_buffer == rhs.m_buffer;
   1450     }
   1451 
   1452     bool operator!=(Buffer const & rhs ) const
   1453     {
   1454       return m_buffer != rhs.m_buffer;
   1455     }
   1456 
   1457     bool operator<(Buffer const & rhs ) const
   1458     {
   1459       return m_buffer < rhs.m_buffer;
   1460     }
   1461 
   1462 
   1463 
   1464     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBuffer() const
   1465     {
   1466       return m_buffer;
   1467     }
   1468 
   1469     explicit operator bool() const
   1470     {
   1471       return m_buffer != VK_NULL_HANDLE;
   1472     }
   1473 
   1474     bool operator!() const
   1475     {
   1476       return m_buffer == VK_NULL_HANDLE;
   1477     }
   1478 
   1479   private:
   1480     VkBuffer m_buffer;
   1481   };
   1482 
   1483   static_assert( sizeof( Buffer ) == sizeof( VkBuffer ), "handle and wrapper have different size!" );
   1484 
   1485   class BufferView
   1486   {
   1487   public:
   1488     BufferView()
   1489       : m_bufferView(VK_NULL_HANDLE)
   1490     {}
   1491 
   1492     BufferView( std::nullptr_t )
   1493       : m_bufferView(VK_NULL_HANDLE)
   1494     {}
   1495 
   1496     VULKAN_HPP_TYPESAFE_EXPLICIT BufferView( VkBufferView bufferView )
   1497       : m_bufferView( bufferView )
   1498     {}
   1499 
   1500 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1501     BufferView & operator=(VkBufferView bufferView)
   1502     {
   1503       m_bufferView = bufferView;
   1504       return *this;
   1505     }
   1506 #endif
   1507 
   1508     BufferView & operator=( std::nullptr_t )
   1509     {
   1510       m_bufferView = VK_NULL_HANDLE;
   1511       return *this;
   1512     }
   1513 
   1514     bool operator==( BufferView const & rhs ) const
   1515     {
   1516       return m_bufferView == rhs.m_bufferView;
   1517     }
   1518 
   1519     bool operator!=(BufferView const & rhs ) const
   1520     {
   1521       return m_bufferView != rhs.m_bufferView;
   1522     }
   1523 
   1524     bool operator<(BufferView const & rhs ) const
   1525     {
   1526       return m_bufferView < rhs.m_bufferView;
   1527     }
   1528 
   1529 
   1530 
   1531     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBufferView() const
   1532     {
   1533       return m_bufferView;
   1534     }
   1535 
   1536     explicit operator bool() const
   1537     {
   1538       return m_bufferView != VK_NULL_HANDLE;
   1539     }
   1540 
   1541     bool operator!() const
   1542     {
   1543       return m_bufferView == VK_NULL_HANDLE;
   1544     }
   1545 
   1546   private:
   1547     VkBufferView m_bufferView;
   1548   };
   1549 
   1550   static_assert( sizeof( BufferView ) == sizeof( VkBufferView ), "handle and wrapper have different size!" );
   1551 
   1552   class Image
   1553   {
   1554   public:
   1555     Image()
   1556       : m_image(VK_NULL_HANDLE)
   1557     {}
   1558 
   1559     Image( std::nullptr_t )
   1560       : m_image(VK_NULL_HANDLE)
   1561     {}
   1562 
   1563     VULKAN_HPP_TYPESAFE_EXPLICIT Image( VkImage image )
   1564       : m_image( image )
   1565     {}
   1566 
   1567 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1568     Image & operator=(VkImage image)
   1569     {
   1570       m_image = image;
   1571       return *this;
   1572     }
   1573 #endif
   1574 
   1575     Image & operator=( std::nullptr_t )
   1576     {
   1577       m_image = VK_NULL_HANDLE;
   1578       return *this;
   1579     }
   1580 
   1581     bool operator==( Image const & rhs ) const
   1582     {
   1583       return m_image == rhs.m_image;
   1584     }
   1585 
   1586     bool operator!=(Image const & rhs ) const
   1587     {
   1588       return m_image != rhs.m_image;
   1589     }
   1590 
   1591     bool operator<(Image const & rhs ) const
   1592     {
   1593       return m_image < rhs.m_image;
   1594     }
   1595 
   1596 
   1597 
   1598     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkImage() const
   1599     {
   1600       return m_image;
   1601     }
   1602 
   1603     explicit operator bool() const
   1604     {
   1605       return m_image != VK_NULL_HANDLE;
   1606     }
   1607 
   1608     bool operator!() const
   1609     {
   1610       return m_image == VK_NULL_HANDLE;
   1611     }
   1612 
   1613   private:
   1614     VkImage m_image;
   1615   };
   1616 
   1617   static_assert( sizeof( Image ) == sizeof( VkImage ), "handle and wrapper have different size!" );
   1618 
   1619   class ImageView
   1620   {
   1621   public:
   1622     ImageView()
   1623       : m_imageView(VK_NULL_HANDLE)
   1624     {}
   1625 
   1626     ImageView( std::nullptr_t )
   1627       : m_imageView(VK_NULL_HANDLE)
   1628     {}
   1629 
   1630     VULKAN_HPP_TYPESAFE_EXPLICIT ImageView( VkImageView imageView )
   1631       : m_imageView( imageView )
   1632     {}
   1633 
   1634 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1635     ImageView & operator=(VkImageView imageView)
   1636     {
   1637       m_imageView = imageView;
   1638       return *this;
   1639     }
   1640 #endif
   1641 
   1642     ImageView & operator=( std::nullptr_t )
   1643     {
   1644       m_imageView = VK_NULL_HANDLE;
   1645       return *this;
   1646     }
   1647 
   1648     bool operator==( ImageView const & rhs ) const
   1649     {
   1650       return m_imageView == rhs.m_imageView;
   1651     }
   1652 
   1653     bool operator!=(ImageView const & rhs ) const
   1654     {
   1655       return m_imageView != rhs.m_imageView;
   1656     }
   1657 
   1658     bool operator<(ImageView const & rhs ) const
   1659     {
   1660       return m_imageView < rhs.m_imageView;
   1661     }
   1662 
   1663 
   1664 
   1665     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkImageView() const
   1666     {
   1667       return m_imageView;
   1668     }
   1669 
   1670     explicit operator bool() const
   1671     {
   1672       return m_imageView != VK_NULL_HANDLE;
   1673     }
   1674 
   1675     bool operator!() const
   1676     {
   1677       return m_imageView == VK_NULL_HANDLE;
   1678     }
   1679 
   1680   private:
   1681     VkImageView m_imageView;
   1682   };
   1683 
   1684   static_assert( sizeof( ImageView ) == sizeof( VkImageView ), "handle and wrapper have different size!" );
   1685 
   1686   class ShaderModule
   1687   {
   1688   public:
   1689     ShaderModule()
   1690       : m_shaderModule(VK_NULL_HANDLE)
   1691     {}
   1692 
   1693     ShaderModule( std::nullptr_t )
   1694       : m_shaderModule(VK_NULL_HANDLE)
   1695     {}
   1696 
   1697     VULKAN_HPP_TYPESAFE_EXPLICIT ShaderModule( VkShaderModule shaderModule )
   1698       : m_shaderModule( shaderModule )
   1699     {}
   1700 
   1701 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1702     ShaderModule & operator=(VkShaderModule shaderModule)
   1703     {
   1704       m_shaderModule = shaderModule;
   1705       return *this;
   1706     }
   1707 #endif
   1708 
   1709     ShaderModule & operator=( std::nullptr_t )
   1710     {
   1711       m_shaderModule = VK_NULL_HANDLE;
   1712       return *this;
   1713     }
   1714 
   1715     bool operator==( ShaderModule const & rhs ) const
   1716     {
   1717       return m_shaderModule == rhs.m_shaderModule;
   1718     }
   1719 
   1720     bool operator!=(ShaderModule const & rhs ) const
   1721     {
   1722       return m_shaderModule != rhs.m_shaderModule;
   1723     }
   1724 
   1725     bool operator<(ShaderModule const & rhs ) const
   1726     {
   1727       return m_shaderModule < rhs.m_shaderModule;
   1728     }
   1729 
   1730 
   1731 
   1732     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkShaderModule() const
   1733     {
   1734       return m_shaderModule;
   1735     }
   1736 
   1737     explicit operator bool() const
   1738     {
   1739       return m_shaderModule != VK_NULL_HANDLE;
   1740     }
   1741 
   1742     bool operator!() const
   1743     {
   1744       return m_shaderModule == VK_NULL_HANDLE;
   1745     }
   1746 
   1747   private:
   1748     VkShaderModule m_shaderModule;
   1749   };
   1750 
   1751   static_assert( sizeof( ShaderModule ) == sizeof( VkShaderModule ), "handle and wrapper have different size!" );
   1752 
   1753   class Pipeline
   1754   {
   1755   public:
   1756     Pipeline()
   1757       : m_pipeline(VK_NULL_HANDLE)
   1758     {}
   1759 
   1760     Pipeline( std::nullptr_t )
   1761       : m_pipeline(VK_NULL_HANDLE)
   1762     {}
   1763 
   1764     VULKAN_HPP_TYPESAFE_EXPLICIT Pipeline( VkPipeline pipeline )
   1765       : m_pipeline( pipeline )
   1766     {}
   1767 
   1768 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1769     Pipeline & operator=(VkPipeline pipeline)
   1770     {
   1771       m_pipeline = pipeline;
   1772       return *this;
   1773     }
   1774 #endif
   1775 
   1776     Pipeline & operator=( std::nullptr_t )
   1777     {
   1778       m_pipeline = VK_NULL_HANDLE;
   1779       return *this;
   1780     }
   1781 
   1782     bool operator==( Pipeline const & rhs ) const
   1783     {
   1784       return m_pipeline == rhs.m_pipeline;
   1785     }
   1786 
   1787     bool operator!=(Pipeline const & rhs ) const
   1788     {
   1789       return m_pipeline != rhs.m_pipeline;
   1790     }
   1791 
   1792     bool operator<(Pipeline const & rhs ) const
   1793     {
   1794       return m_pipeline < rhs.m_pipeline;
   1795     }
   1796 
   1797 
   1798 
   1799     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipeline() const
   1800     {
   1801       return m_pipeline;
   1802     }
   1803 
   1804     explicit operator bool() const
   1805     {
   1806       return m_pipeline != VK_NULL_HANDLE;
   1807     }
   1808 
   1809     bool operator!() const
   1810     {
   1811       return m_pipeline == VK_NULL_HANDLE;
   1812     }
   1813 
   1814   private:
   1815     VkPipeline m_pipeline;
   1816   };
   1817 
   1818   static_assert( sizeof( Pipeline ) == sizeof( VkPipeline ), "handle and wrapper have different size!" );
   1819 
   1820   class PipelineLayout
   1821   {
   1822   public:
   1823     PipelineLayout()
   1824       : m_pipelineLayout(VK_NULL_HANDLE)
   1825     {}
   1826 
   1827     PipelineLayout( std::nullptr_t )
   1828       : m_pipelineLayout(VK_NULL_HANDLE)
   1829     {}
   1830 
   1831     VULKAN_HPP_TYPESAFE_EXPLICIT PipelineLayout( VkPipelineLayout pipelineLayout )
   1832       : m_pipelineLayout( pipelineLayout )
   1833     {}
   1834 
   1835 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1836     PipelineLayout & operator=(VkPipelineLayout pipelineLayout)
   1837     {
   1838       m_pipelineLayout = pipelineLayout;
   1839       return *this;
   1840     }
   1841 #endif
   1842 
   1843     PipelineLayout & operator=( std::nullptr_t )
   1844     {
   1845       m_pipelineLayout = VK_NULL_HANDLE;
   1846       return *this;
   1847     }
   1848 
   1849     bool operator==( PipelineLayout const & rhs ) const
   1850     {
   1851       return m_pipelineLayout == rhs.m_pipelineLayout;
   1852     }
   1853 
   1854     bool operator!=(PipelineLayout const & rhs ) const
   1855     {
   1856       return m_pipelineLayout != rhs.m_pipelineLayout;
   1857     }
   1858 
   1859     bool operator<(PipelineLayout const & rhs ) const
   1860     {
   1861       return m_pipelineLayout < rhs.m_pipelineLayout;
   1862     }
   1863 
   1864 
   1865 
   1866     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipelineLayout() const
   1867     {
   1868       return m_pipelineLayout;
   1869     }
   1870 
   1871     explicit operator bool() const
   1872     {
   1873       return m_pipelineLayout != VK_NULL_HANDLE;
   1874     }
   1875 
   1876     bool operator!() const
   1877     {
   1878       return m_pipelineLayout == VK_NULL_HANDLE;
   1879     }
   1880 
   1881   private:
   1882     VkPipelineLayout m_pipelineLayout;
   1883   };
   1884 
   1885   static_assert( sizeof( PipelineLayout ) == sizeof( VkPipelineLayout ), "handle and wrapper have different size!" );
   1886 
   1887   class Sampler
   1888   {
   1889   public:
   1890     Sampler()
   1891       : m_sampler(VK_NULL_HANDLE)
   1892     {}
   1893 
   1894     Sampler( std::nullptr_t )
   1895       : m_sampler(VK_NULL_HANDLE)
   1896     {}
   1897 
   1898     VULKAN_HPP_TYPESAFE_EXPLICIT Sampler( VkSampler sampler )
   1899       : m_sampler( sampler )
   1900     {}
   1901 
   1902 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1903     Sampler & operator=(VkSampler sampler)
   1904     {
   1905       m_sampler = sampler;
   1906       return *this;
   1907     }
   1908 #endif
   1909 
   1910     Sampler & operator=( std::nullptr_t )
   1911     {
   1912       m_sampler = VK_NULL_HANDLE;
   1913       return *this;
   1914     }
   1915 
   1916     bool operator==( Sampler const & rhs ) const
   1917     {
   1918       return m_sampler == rhs.m_sampler;
   1919     }
   1920 
   1921     bool operator!=(Sampler const & rhs ) const
   1922     {
   1923       return m_sampler != rhs.m_sampler;
   1924     }
   1925 
   1926     bool operator<(Sampler const & rhs ) const
   1927     {
   1928       return m_sampler < rhs.m_sampler;
   1929     }
   1930 
   1931 
   1932 
   1933     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSampler() const
   1934     {
   1935       return m_sampler;
   1936     }
   1937 
   1938     explicit operator bool() const
   1939     {
   1940       return m_sampler != VK_NULL_HANDLE;
   1941     }
   1942 
   1943     bool operator!() const
   1944     {
   1945       return m_sampler == VK_NULL_HANDLE;
   1946     }
   1947 
   1948   private:
   1949     VkSampler m_sampler;
   1950   };
   1951 
   1952   static_assert( sizeof( Sampler ) == sizeof( VkSampler ), "handle and wrapper have different size!" );
   1953 
   1954   class DescriptorSet
   1955   {
   1956   public:
   1957     DescriptorSet()
   1958       : m_descriptorSet(VK_NULL_HANDLE)
   1959     {}
   1960 
   1961     DescriptorSet( std::nullptr_t )
   1962       : m_descriptorSet(VK_NULL_HANDLE)
   1963     {}
   1964 
   1965     VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorSet( VkDescriptorSet descriptorSet )
   1966       : m_descriptorSet( descriptorSet )
   1967     {}
   1968 
   1969 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   1970     DescriptorSet & operator=(VkDescriptorSet descriptorSet)
   1971     {
   1972       m_descriptorSet = descriptorSet;
   1973       return *this;
   1974     }
   1975 #endif
   1976 
   1977     DescriptorSet & operator=( std::nullptr_t )
   1978     {
   1979       m_descriptorSet = VK_NULL_HANDLE;
   1980       return *this;
   1981     }
   1982 
   1983     bool operator==( DescriptorSet const & rhs ) const
   1984     {
   1985       return m_descriptorSet == rhs.m_descriptorSet;
   1986     }
   1987 
   1988     bool operator!=(DescriptorSet const & rhs ) const
   1989     {
   1990       return m_descriptorSet != rhs.m_descriptorSet;
   1991     }
   1992 
   1993     bool operator<(DescriptorSet const & rhs ) const
   1994     {
   1995       return m_descriptorSet < rhs.m_descriptorSet;
   1996     }
   1997 
   1998 
   1999 
   2000     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorSet() const
   2001     {
   2002       return m_descriptorSet;
   2003     }
   2004 
   2005     explicit operator bool() const
   2006     {
   2007       return m_descriptorSet != VK_NULL_HANDLE;
   2008     }
   2009 
   2010     bool operator!() const
   2011     {
   2012       return m_descriptorSet == VK_NULL_HANDLE;
   2013     }
   2014 
   2015   private:
   2016     VkDescriptorSet m_descriptorSet;
   2017   };
   2018 
   2019   static_assert( sizeof( DescriptorSet ) == sizeof( VkDescriptorSet ), "handle and wrapper have different size!" );
   2020 
   2021   class DescriptorSetLayout
   2022   {
   2023   public:
   2024     DescriptorSetLayout()
   2025       : m_descriptorSetLayout(VK_NULL_HANDLE)
   2026     {}
   2027 
   2028     DescriptorSetLayout( std::nullptr_t )
   2029       : m_descriptorSetLayout(VK_NULL_HANDLE)
   2030     {}
   2031 
   2032     VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorSetLayout( VkDescriptorSetLayout descriptorSetLayout )
   2033       : m_descriptorSetLayout( descriptorSetLayout )
   2034     {}
   2035 
   2036 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2037     DescriptorSetLayout & operator=(VkDescriptorSetLayout descriptorSetLayout)
   2038     {
   2039       m_descriptorSetLayout = descriptorSetLayout;
   2040       return *this;
   2041     }
   2042 #endif
   2043 
   2044     DescriptorSetLayout & operator=( std::nullptr_t )
   2045     {
   2046       m_descriptorSetLayout = VK_NULL_HANDLE;
   2047       return *this;
   2048     }
   2049 
   2050     bool operator==( DescriptorSetLayout const & rhs ) const
   2051     {
   2052       return m_descriptorSetLayout == rhs.m_descriptorSetLayout;
   2053     }
   2054 
   2055     bool operator!=(DescriptorSetLayout const & rhs ) const
   2056     {
   2057       return m_descriptorSetLayout != rhs.m_descriptorSetLayout;
   2058     }
   2059 
   2060     bool operator<(DescriptorSetLayout const & rhs ) const
   2061     {
   2062       return m_descriptorSetLayout < rhs.m_descriptorSetLayout;
   2063     }
   2064 
   2065 
   2066 
   2067     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorSetLayout() const
   2068     {
   2069       return m_descriptorSetLayout;
   2070     }
   2071 
   2072     explicit operator bool() const
   2073     {
   2074       return m_descriptorSetLayout != VK_NULL_HANDLE;
   2075     }
   2076 
   2077     bool operator!() const
   2078     {
   2079       return m_descriptorSetLayout == VK_NULL_HANDLE;
   2080     }
   2081 
   2082   private:
   2083     VkDescriptorSetLayout m_descriptorSetLayout;
   2084   };
   2085 
   2086   static_assert( sizeof( DescriptorSetLayout ) == sizeof( VkDescriptorSetLayout ), "handle and wrapper have different size!" );
   2087 
   2088   class DescriptorPool
   2089   {
   2090   public:
   2091     DescriptorPool()
   2092       : m_descriptorPool(VK_NULL_HANDLE)
   2093     {}
   2094 
   2095     DescriptorPool( std::nullptr_t )
   2096       : m_descriptorPool(VK_NULL_HANDLE)
   2097     {}
   2098 
   2099     VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorPool( VkDescriptorPool descriptorPool )
   2100       : m_descriptorPool( descriptorPool )
   2101     {}
   2102 
   2103 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2104     DescriptorPool & operator=(VkDescriptorPool descriptorPool)
   2105     {
   2106       m_descriptorPool = descriptorPool;
   2107       return *this;
   2108     }
   2109 #endif
   2110 
   2111     DescriptorPool & operator=( std::nullptr_t )
   2112     {
   2113       m_descriptorPool = VK_NULL_HANDLE;
   2114       return *this;
   2115     }
   2116 
   2117     bool operator==( DescriptorPool const & rhs ) const
   2118     {
   2119       return m_descriptorPool == rhs.m_descriptorPool;
   2120     }
   2121 
   2122     bool operator!=(DescriptorPool const & rhs ) const
   2123     {
   2124       return m_descriptorPool != rhs.m_descriptorPool;
   2125     }
   2126 
   2127     bool operator<(DescriptorPool const & rhs ) const
   2128     {
   2129       return m_descriptorPool < rhs.m_descriptorPool;
   2130     }
   2131 
   2132 
   2133 
   2134     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorPool() const
   2135     {
   2136       return m_descriptorPool;
   2137     }
   2138 
   2139     explicit operator bool() const
   2140     {
   2141       return m_descriptorPool != VK_NULL_HANDLE;
   2142     }
   2143 
   2144     bool operator!() const
   2145     {
   2146       return m_descriptorPool == VK_NULL_HANDLE;
   2147     }
   2148 
   2149   private:
   2150     VkDescriptorPool m_descriptorPool;
   2151   };
   2152 
   2153   static_assert( sizeof( DescriptorPool ) == sizeof( VkDescriptorPool ), "handle and wrapper have different size!" );
   2154 
   2155   class Fence
   2156   {
   2157   public:
   2158     Fence()
   2159       : m_fence(VK_NULL_HANDLE)
   2160     {}
   2161 
   2162     Fence( std::nullptr_t )
   2163       : m_fence(VK_NULL_HANDLE)
   2164     {}
   2165 
   2166     VULKAN_HPP_TYPESAFE_EXPLICIT Fence( VkFence fence )
   2167       : m_fence( fence )
   2168     {}
   2169 
   2170 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2171     Fence & operator=(VkFence fence)
   2172     {
   2173       m_fence = fence;
   2174       return *this;
   2175     }
   2176 #endif
   2177 
   2178     Fence & operator=( std::nullptr_t )
   2179     {
   2180       m_fence = VK_NULL_HANDLE;
   2181       return *this;
   2182     }
   2183 
   2184     bool operator==( Fence const & rhs ) const
   2185     {
   2186       return m_fence == rhs.m_fence;
   2187     }
   2188 
   2189     bool operator!=(Fence const & rhs ) const
   2190     {
   2191       return m_fence != rhs.m_fence;
   2192     }
   2193 
   2194     bool operator<(Fence const & rhs ) const
   2195     {
   2196       return m_fence < rhs.m_fence;
   2197     }
   2198 
   2199 
   2200 
   2201     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkFence() const
   2202     {
   2203       return m_fence;
   2204     }
   2205 
   2206     explicit operator bool() const
   2207     {
   2208       return m_fence != VK_NULL_HANDLE;
   2209     }
   2210 
   2211     bool operator!() const
   2212     {
   2213       return m_fence == VK_NULL_HANDLE;
   2214     }
   2215 
   2216   private:
   2217     VkFence m_fence;
   2218   };
   2219 
   2220   static_assert( sizeof( Fence ) == sizeof( VkFence ), "handle and wrapper have different size!" );
   2221 
   2222   class Semaphore
   2223   {
   2224   public:
   2225     Semaphore()
   2226       : m_semaphore(VK_NULL_HANDLE)
   2227     {}
   2228 
   2229     Semaphore( std::nullptr_t )
   2230       : m_semaphore(VK_NULL_HANDLE)
   2231     {}
   2232 
   2233     VULKAN_HPP_TYPESAFE_EXPLICIT Semaphore( VkSemaphore semaphore )
   2234       : m_semaphore( semaphore )
   2235     {}
   2236 
   2237 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2238     Semaphore & operator=(VkSemaphore semaphore)
   2239     {
   2240       m_semaphore = semaphore;
   2241       return *this;
   2242     }
   2243 #endif
   2244 
   2245     Semaphore & operator=( std::nullptr_t )
   2246     {
   2247       m_semaphore = VK_NULL_HANDLE;
   2248       return *this;
   2249     }
   2250 
   2251     bool operator==( Semaphore const & rhs ) const
   2252     {
   2253       return m_semaphore == rhs.m_semaphore;
   2254     }
   2255 
   2256     bool operator!=(Semaphore const & rhs ) const
   2257     {
   2258       return m_semaphore != rhs.m_semaphore;
   2259     }
   2260 
   2261     bool operator<(Semaphore const & rhs ) const
   2262     {
   2263       return m_semaphore < rhs.m_semaphore;
   2264     }
   2265 
   2266 
   2267 
   2268     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSemaphore() const
   2269     {
   2270       return m_semaphore;
   2271     }
   2272 
   2273     explicit operator bool() const
   2274     {
   2275       return m_semaphore != VK_NULL_HANDLE;
   2276     }
   2277 
   2278     bool operator!() const
   2279     {
   2280       return m_semaphore == VK_NULL_HANDLE;
   2281     }
   2282 
   2283   private:
   2284     VkSemaphore m_semaphore;
   2285   };
   2286 
   2287   static_assert( sizeof( Semaphore ) == sizeof( VkSemaphore ), "handle and wrapper have different size!" );
   2288 
   2289   class Event
   2290   {
   2291   public:
   2292     Event()
   2293       : m_event(VK_NULL_HANDLE)
   2294     {}
   2295 
   2296     Event( std::nullptr_t )
   2297       : m_event(VK_NULL_HANDLE)
   2298     {}
   2299 
   2300     VULKAN_HPP_TYPESAFE_EXPLICIT Event( VkEvent event )
   2301       : m_event( event )
   2302     {}
   2303 
   2304 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2305     Event & operator=(VkEvent event)
   2306     {
   2307       m_event = event;
   2308       return *this;
   2309     }
   2310 #endif
   2311 
   2312     Event & operator=( std::nullptr_t )
   2313     {
   2314       m_event = VK_NULL_HANDLE;
   2315       return *this;
   2316     }
   2317 
   2318     bool operator==( Event const & rhs ) const
   2319     {
   2320       return m_event == rhs.m_event;
   2321     }
   2322 
   2323     bool operator!=(Event const & rhs ) const
   2324     {
   2325       return m_event != rhs.m_event;
   2326     }
   2327 
   2328     bool operator<(Event const & rhs ) const
   2329     {
   2330       return m_event < rhs.m_event;
   2331     }
   2332 
   2333 
   2334 
   2335     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkEvent() const
   2336     {
   2337       return m_event;
   2338     }
   2339 
   2340     explicit operator bool() const
   2341     {
   2342       return m_event != VK_NULL_HANDLE;
   2343     }
   2344 
   2345     bool operator!() const
   2346     {
   2347       return m_event == VK_NULL_HANDLE;
   2348     }
   2349 
   2350   private:
   2351     VkEvent m_event;
   2352   };
   2353 
   2354   static_assert( sizeof( Event ) == sizeof( VkEvent ), "handle and wrapper have different size!" );
   2355 
   2356   class QueryPool
   2357   {
   2358   public:
   2359     QueryPool()
   2360       : m_queryPool(VK_NULL_HANDLE)
   2361     {}
   2362 
   2363     QueryPool( std::nullptr_t )
   2364       : m_queryPool(VK_NULL_HANDLE)
   2365     {}
   2366 
   2367     VULKAN_HPP_TYPESAFE_EXPLICIT QueryPool( VkQueryPool queryPool )
   2368       : m_queryPool( queryPool )
   2369     {}
   2370 
   2371 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2372     QueryPool & operator=(VkQueryPool queryPool)
   2373     {
   2374       m_queryPool = queryPool;
   2375       return *this;
   2376     }
   2377 #endif
   2378 
   2379     QueryPool & operator=( std::nullptr_t )
   2380     {
   2381       m_queryPool = VK_NULL_HANDLE;
   2382       return *this;
   2383     }
   2384 
   2385     bool operator==( QueryPool const & rhs ) const
   2386     {
   2387       return m_queryPool == rhs.m_queryPool;
   2388     }
   2389 
   2390     bool operator!=(QueryPool const & rhs ) const
   2391     {
   2392       return m_queryPool != rhs.m_queryPool;
   2393     }
   2394 
   2395     bool operator<(QueryPool const & rhs ) const
   2396     {
   2397       return m_queryPool < rhs.m_queryPool;
   2398     }
   2399 
   2400 
   2401 
   2402     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkQueryPool() const
   2403     {
   2404       return m_queryPool;
   2405     }
   2406 
   2407     explicit operator bool() const
   2408     {
   2409       return m_queryPool != VK_NULL_HANDLE;
   2410     }
   2411 
   2412     bool operator!() const
   2413     {
   2414       return m_queryPool == VK_NULL_HANDLE;
   2415     }
   2416 
   2417   private:
   2418     VkQueryPool m_queryPool;
   2419   };
   2420 
   2421   static_assert( sizeof( QueryPool ) == sizeof( VkQueryPool ), "handle and wrapper have different size!" );
   2422 
   2423   class Framebuffer
   2424   {
   2425   public:
   2426     Framebuffer()
   2427       : m_framebuffer(VK_NULL_HANDLE)
   2428     {}
   2429 
   2430     Framebuffer( std::nullptr_t )
   2431       : m_framebuffer(VK_NULL_HANDLE)
   2432     {}
   2433 
   2434     VULKAN_HPP_TYPESAFE_EXPLICIT Framebuffer( VkFramebuffer framebuffer )
   2435       : m_framebuffer( framebuffer )
   2436     {}
   2437 
   2438 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2439     Framebuffer & operator=(VkFramebuffer framebuffer)
   2440     {
   2441       m_framebuffer = framebuffer;
   2442       return *this;
   2443     }
   2444 #endif
   2445 
   2446     Framebuffer & operator=( std::nullptr_t )
   2447     {
   2448       m_framebuffer = VK_NULL_HANDLE;
   2449       return *this;
   2450     }
   2451 
   2452     bool operator==( Framebuffer const & rhs ) const
   2453     {
   2454       return m_framebuffer == rhs.m_framebuffer;
   2455     }
   2456 
   2457     bool operator!=(Framebuffer const & rhs ) const
   2458     {
   2459       return m_framebuffer != rhs.m_framebuffer;
   2460     }
   2461 
   2462     bool operator<(Framebuffer const & rhs ) const
   2463     {
   2464       return m_framebuffer < rhs.m_framebuffer;
   2465     }
   2466 
   2467 
   2468 
   2469     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkFramebuffer() const
   2470     {
   2471       return m_framebuffer;
   2472     }
   2473 
   2474     explicit operator bool() const
   2475     {
   2476       return m_framebuffer != VK_NULL_HANDLE;
   2477     }
   2478 
   2479     bool operator!() const
   2480     {
   2481       return m_framebuffer == VK_NULL_HANDLE;
   2482     }
   2483 
   2484   private:
   2485     VkFramebuffer m_framebuffer;
   2486   };
   2487 
   2488   static_assert( sizeof( Framebuffer ) == sizeof( VkFramebuffer ), "handle and wrapper have different size!" );
   2489 
   2490   class RenderPass
   2491   {
   2492   public:
   2493     RenderPass()
   2494       : m_renderPass(VK_NULL_HANDLE)
   2495     {}
   2496 
   2497     RenderPass( std::nullptr_t )
   2498       : m_renderPass(VK_NULL_HANDLE)
   2499     {}
   2500 
   2501     VULKAN_HPP_TYPESAFE_EXPLICIT RenderPass( VkRenderPass renderPass )
   2502       : m_renderPass( renderPass )
   2503     {}
   2504 
   2505 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2506     RenderPass & operator=(VkRenderPass renderPass)
   2507     {
   2508       m_renderPass = renderPass;
   2509       return *this;
   2510     }
   2511 #endif
   2512 
   2513     RenderPass & operator=( std::nullptr_t )
   2514     {
   2515       m_renderPass = VK_NULL_HANDLE;
   2516       return *this;
   2517     }
   2518 
   2519     bool operator==( RenderPass const & rhs ) const
   2520     {
   2521       return m_renderPass == rhs.m_renderPass;
   2522     }
   2523 
   2524     bool operator!=(RenderPass const & rhs ) const
   2525     {
   2526       return m_renderPass != rhs.m_renderPass;
   2527     }
   2528 
   2529     bool operator<(RenderPass const & rhs ) const
   2530     {
   2531       return m_renderPass < rhs.m_renderPass;
   2532     }
   2533 
   2534 
   2535 
   2536     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkRenderPass() const
   2537     {
   2538       return m_renderPass;
   2539     }
   2540 
   2541     explicit operator bool() const
   2542     {
   2543       return m_renderPass != VK_NULL_HANDLE;
   2544     }
   2545 
   2546     bool operator!() const
   2547     {
   2548       return m_renderPass == VK_NULL_HANDLE;
   2549     }
   2550 
   2551   private:
   2552     VkRenderPass m_renderPass;
   2553   };
   2554 
   2555   static_assert( sizeof( RenderPass ) == sizeof( VkRenderPass ), "handle and wrapper have different size!" );
   2556 
   2557   class PipelineCache
   2558   {
   2559   public:
   2560     PipelineCache()
   2561       : m_pipelineCache(VK_NULL_HANDLE)
   2562     {}
   2563 
   2564     PipelineCache( std::nullptr_t )
   2565       : m_pipelineCache(VK_NULL_HANDLE)
   2566     {}
   2567 
   2568     VULKAN_HPP_TYPESAFE_EXPLICIT PipelineCache( VkPipelineCache pipelineCache )
   2569       : m_pipelineCache( pipelineCache )
   2570     {}
   2571 
   2572 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2573     PipelineCache & operator=(VkPipelineCache pipelineCache)
   2574     {
   2575       m_pipelineCache = pipelineCache;
   2576       return *this;
   2577     }
   2578 #endif
   2579 
   2580     PipelineCache & operator=( std::nullptr_t )
   2581     {
   2582       m_pipelineCache = VK_NULL_HANDLE;
   2583       return *this;
   2584     }
   2585 
   2586     bool operator==( PipelineCache const & rhs ) const
   2587     {
   2588       return m_pipelineCache == rhs.m_pipelineCache;
   2589     }
   2590 
   2591     bool operator!=(PipelineCache const & rhs ) const
   2592     {
   2593       return m_pipelineCache != rhs.m_pipelineCache;
   2594     }
   2595 
   2596     bool operator<(PipelineCache const & rhs ) const
   2597     {
   2598       return m_pipelineCache < rhs.m_pipelineCache;
   2599     }
   2600 
   2601 
   2602 
   2603     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipelineCache() const
   2604     {
   2605       return m_pipelineCache;
   2606     }
   2607 
   2608     explicit operator bool() const
   2609     {
   2610       return m_pipelineCache != VK_NULL_HANDLE;
   2611     }
   2612 
   2613     bool operator!() const
   2614     {
   2615       return m_pipelineCache == VK_NULL_HANDLE;
   2616     }
   2617 
   2618   private:
   2619     VkPipelineCache m_pipelineCache;
   2620   };
   2621 
   2622   static_assert( sizeof( PipelineCache ) == sizeof( VkPipelineCache ), "handle and wrapper have different size!" );
   2623 
   2624   class ObjectTableNVX
   2625   {
   2626   public:
   2627     ObjectTableNVX()
   2628       : m_objectTableNVX(VK_NULL_HANDLE)
   2629     {}
   2630 
   2631     ObjectTableNVX( std::nullptr_t )
   2632       : m_objectTableNVX(VK_NULL_HANDLE)
   2633     {}
   2634 
   2635     VULKAN_HPP_TYPESAFE_EXPLICIT ObjectTableNVX( VkObjectTableNVX objectTableNVX )
   2636       : m_objectTableNVX( objectTableNVX )
   2637     {}
   2638 
   2639 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2640     ObjectTableNVX & operator=(VkObjectTableNVX objectTableNVX)
   2641     {
   2642       m_objectTableNVX = objectTableNVX;
   2643       return *this;
   2644     }
   2645 #endif
   2646 
   2647     ObjectTableNVX & operator=( std::nullptr_t )
   2648     {
   2649       m_objectTableNVX = VK_NULL_HANDLE;
   2650       return *this;
   2651     }
   2652 
   2653     bool operator==( ObjectTableNVX const & rhs ) const
   2654     {
   2655       return m_objectTableNVX == rhs.m_objectTableNVX;
   2656     }
   2657 
   2658     bool operator!=(ObjectTableNVX const & rhs ) const
   2659     {
   2660       return m_objectTableNVX != rhs.m_objectTableNVX;
   2661     }
   2662 
   2663     bool operator<(ObjectTableNVX const & rhs ) const
   2664     {
   2665       return m_objectTableNVX < rhs.m_objectTableNVX;
   2666     }
   2667 
   2668 
   2669 
   2670     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkObjectTableNVX() const
   2671     {
   2672       return m_objectTableNVX;
   2673     }
   2674 
   2675     explicit operator bool() const
   2676     {
   2677       return m_objectTableNVX != VK_NULL_HANDLE;
   2678     }
   2679 
   2680     bool operator!() const
   2681     {
   2682       return m_objectTableNVX == VK_NULL_HANDLE;
   2683     }
   2684 
   2685   private:
   2686     VkObjectTableNVX m_objectTableNVX;
   2687   };
   2688 
   2689   static_assert( sizeof( ObjectTableNVX ) == sizeof( VkObjectTableNVX ), "handle and wrapper have different size!" );
   2690 
   2691   class IndirectCommandsLayoutNVX
   2692   {
   2693   public:
   2694     IndirectCommandsLayoutNVX()
   2695       : m_indirectCommandsLayoutNVX(VK_NULL_HANDLE)
   2696     {}
   2697 
   2698     IndirectCommandsLayoutNVX( std::nullptr_t )
   2699       : m_indirectCommandsLayoutNVX(VK_NULL_HANDLE)
   2700     {}
   2701 
   2702     VULKAN_HPP_TYPESAFE_EXPLICIT IndirectCommandsLayoutNVX( VkIndirectCommandsLayoutNVX indirectCommandsLayoutNVX )
   2703       : m_indirectCommandsLayoutNVX( indirectCommandsLayoutNVX )
   2704     {}
   2705 
   2706 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2707     IndirectCommandsLayoutNVX & operator=(VkIndirectCommandsLayoutNVX indirectCommandsLayoutNVX)
   2708     {
   2709       m_indirectCommandsLayoutNVX = indirectCommandsLayoutNVX;
   2710       return *this;
   2711     }
   2712 #endif
   2713 
   2714     IndirectCommandsLayoutNVX & operator=( std::nullptr_t )
   2715     {
   2716       m_indirectCommandsLayoutNVX = VK_NULL_HANDLE;
   2717       return *this;
   2718     }
   2719 
   2720     bool operator==( IndirectCommandsLayoutNVX const & rhs ) const
   2721     {
   2722       return m_indirectCommandsLayoutNVX == rhs.m_indirectCommandsLayoutNVX;
   2723     }
   2724 
   2725     bool operator!=(IndirectCommandsLayoutNVX const & rhs ) const
   2726     {
   2727       return m_indirectCommandsLayoutNVX != rhs.m_indirectCommandsLayoutNVX;
   2728     }
   2729 
   2730     bool operator<(IndirectCommandsLayoutNVX const & rhs ) const
   2731     {
   2732       return m_indirectCommandsLayoutNVX < rhs.m_indirectCommandsLayoutNVX;
   2733     }
   2734 
   2735 
   2736 
   2737     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkIndirectCommandsLayoutNVX() const
   2738     {
   2739       return m_indirectCommandsLayoutNVX;
   2740     }
   2741 
   2742     explicit operator bool() const
   2743     {
   2744       return m_indirectCommandsLayoutNVX != VK_NULL_HANDLE;
   2745     }
   2746 
   2747     bool operator!() const
   2748     {
   2749       return m_indirectCommandsLayoutNVX == VK_NULL_HANDLE;
   2750     }
   2751 
   2752   private:
   2753     VkIndirectCommandsLayoutNVX m_indirectCommandsLayoutNVX;
   2754   };
   2755 
   2756   static_assert( sizeof( IndirectCommandsLayoutNVX ) == sizeof( VkIndirectCommandsLayoutNVX ), "handle and wrapper have different size!" );
   2757 
   2758   class DescriptorUpdateTemplateKHR
   2759   {
   2760   public:
   2761     DescriptorUpdateTemplateKHR()
   2762       : m_descriptorUpdateTemplateKHR(VK_NULL_HANDLE)
   2763     {}
   2764 
   2765     DescriptorUpdateTemplateKHR( std::nullptr_t )
   2766       : m_descriptorUpdateTemplateKHR(VK_NULL_HANDLE)
   2767     {}
   2768 
   2769     VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorUpdateTemplateKHR( VkDescriptorUpdateTemplateKHR descriptorUpdateTemplateKHR )
   2770       : m_descriptorUpdateTemplateKHR( descriptorUpdateTemplateKHR )
   2771     {}
   2772 
   2773 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2774     DescriptorUpdateTemplateKHR & operator=(VkDescriptorUpdateTemplateKHR descriptorUpdateTemplateKHR)
   2775     {
   2776       m_descriptorUpdateTemplateKHR = descriptorUpdateTemplateKHR;
   2777       return *this;
   2778     }
   2779 #endif
   2780 
   2781     DescriptorUpdateTemplateKHR & operator=( std::nullptr_t )
   2782     {
   2783       m_descriptorUpdateTemplateKHR = VK_NULL_HANDLE;
   2784       return *this;
   2785     }
   2786 
   2787     bool operator==( DescriptorUpdateTemplateKHR const & rhs ) const
   2788     {
   2789       return m_descriptorUpdateTemplateKHR == rhs.m_descriptorUpdateTemplateKHR;
   2790     }
   2791 
   2792     bool operator!=(DescriptorUpdateTemplateKHR const & rhs ) const
   2793     {
   2794       return m_descriptorUpdateTemplateKHR != rhs.m_descriptorUpdateTemplateKHR;
   2795     }
   2796 
   2797     bool operator<(DescriptorUpdateTemplateKHR const & rhs ) const
   2798     {
   2799       return m_descriptorUpdateTemplateKHR < rhs.m_descriptorUpdateTemplateKHR;
   2800     }
   2801 
   2802 
   2803 
   2804     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorUpdateTemplateKHR() const
   2805     {
   2806       return m_descriptorUpdateTemplateKHR;
   2807     }
   2808 
   2809     explicit operator bool() const
   2810     {
   2811       return m_descriptorUpdateTemplateKHR != VK_NULL_HANDLE;
   2812     }
   2813 
   2814     bool operator!() const
   2815     {
   2816       return m_descriptorUpdateTemplateKHR == VK_NULL_HANDLE;
   2817     }
   2818 
   2819   private:
   2820     VkDescriptorUpdateTemplateKHR m_descriptorUpdateTemplateKHR;
   2821   };
   2822 
   2823   static_assert( sizeof( DescriptorUpdateTemplateKHR ) == sizeof( VkDescriptorUpdateTemplateKHR ), "handle and wrapper have different size!" );
   2824 
   2825   class SamplerYcbcrConversionKHR
   2826   {
   2827   public:
   2828     SamplerYcbcrConversionKHR()
   2829       : m_samplerYcbcrConversionKHR(VK_NULL_HANDLE)
   2830     {}
   2831 
   2832     SamplerYcbcrConversionKHR( std::nullptr_t )
   2833       : m_samplerYcbcrConversionKHR(VK_NULL_HANDLE)
   2834     {}
   2835 
   2836     VULKAN_HPP_TYPESAFE_EXPLICIT SamplerYcbcrConversionKHR( VkSamplerYcbcrConversionKHR samplerYcbcrConversionKHR )
   2837       : m_samplerYcbcrConversionKHR( samplerYcbcrConversionKHR )
   2838     {}
   2839 
   2840 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2841     SamplerYcbcrConversionKHR & operator=(VkSamplerYcbcrConversionKHR samplerYcbcrConversionKHR)
   2842     {
   2843       m_samplerYcbcrConversionKHR = samplerYcbcrConversionKHR;
   2844       return *this;
   2845     }
   2846 #endif
   2847 
   2848     SamplerYcbcrConversionKHR & operator=( std::nullptr_t )
   2849     {
   2850       m_samplerYcbcrConversionKHR = VK_NULL_HANDLE;
   2851       return *this;
   2852     }
   2853 
   2854     bool operator==( SamplerYcbcrConversionKHR const & rhs ) const
   2855     {
   2856       return m_samplerYcbcrConversionKHR == rhs.m_samplerYcbcrConversionKHR;
   2857     }
   2858 
   2859     bool operator!=(SamplerYcbcrConversionKHR const & rhs ) const
   2860     {
   2861       return m_samplerYcbcrConversionKHR != rhs.m_samplerYcbcrConversionKHR;
   2862     }
   2863 
   2864     bool operator<(SamplerYcbcrConversionKHR const & rhs ) const
   2865     {
   2866       return m_samplerYcbcrConversionKHR < rhs.m_samplerYcbcrConversionKHR;
   2867     }
   2868 
   2869 
   2870 
   2871     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSamplerYcbcrConversionKHR() const
   2872     {
   2873       return m_samplerYcbcrConversionKHR;
   2874     }
   2875 
   2876     explicit operator bool() const
   2877     {
   2878       return m_samplerYcbcrConversionKHR != VK_NULL_HANDLE;
   2879     }
   2880 
   2881     bool operator!() const
   2882     {
   2883       return m_samplerYcbcrConversionKHR == VK_NULL_HANDLE;
   2884     }
   2885 
   2886   private:
   2887     VkSamplerYcbcrConversionKHR m_samplerYcbcrConversionKHR;
   2888   };
   2889 
   2890   static_assert( sizeof( SamplerYcbcrConversionKHR ) == sizeof( VkSamplerYcbcrConversionKHR ), "handle and wrapper have different size!" );
   2891 
   2892   class ValidationCacheEXT
   2893   {
   2894   public:
   2895     ValidationCacheEXT()
   2896       : m_validationCacheEXT(VK_NULL_HANDLE)
   2897     {}
   2898 
   2899     ValidationCacheEXT( std::nullptr_t )
   2900       : m_validationCacheEXT(VK_NULL_HANDLE)
   2901     {}
   2902 
   2903     VULKAN_HPP_TYPESAFE_EXPLICIT ValidationCacheEXT( VkValidationCacheEXT validationCacheEXT )
   2904       : m_validationCacheEXT( validationCacheEXT )
   2905     {}
   2906 
   2907 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2908     ValidationCacheEXT & operator=(VkValidationCacheEXT validationCacheEXT)
   2909     {
   2910       m_validationCacheEXT = validationCacheEXT;
   2911       return *this;
   2912     }
   2913 #endif
   2914 
   2915     ValidationCacheEXT & operator=( std::nullptr_t )
   2916     {
   2917       m_validationCacheEXT = VK_NULL_HANDLE;
   2918       return *this;
   2919     }
   2920 
   2921     bool operator==( ValidationCacheEXT const & rhs ) const
   2922     {
   2923       return m_validationCacheEXT == rhs.m_validationCacheEXT;
   2924     }
   2925 
   2926     bool operator!=(ValidationCacheEXT const & rhs ) const
   2927     {
   2928       return m_validationCacheEXT != rhs.m_validationCacheEXT;
   2929     }
   2930 
   2931     bool operator<(ValidationCacheEXT const & rhs ) const
   2932     {
   2933       return m_validationCacheEXT < rhs.m_validationCacheEXT;
   2934     }
   2935 
   2936 
   2937 
   2938     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkValidationCacheEXT() const
   2939     {
   2940       return m_validationCacheEXT;
   2941     }
   2942 
   2943     explicit operator bool() const
   2944     {
   2945       return m_validationCacheEXT != VK_NULL_HANDLE;
   2946     }
   2947 
   2948     bool operator!() const
   2949     {
   2950       return m_validationCacheEXT == VK_NULL_HANDLE;
   2951     }
   2952 
   2953   private:
   2954     VkValidationCacheEXT m_validationCacheEXT;
   2955   };
   2956 
   2957   static_assert( sizeof( ValidationCacheEXT ) == sizeof( VkValidationCacheEXT ), "handle and wrapper have different size!" );
   2958 
   2959   class DisplayKHR
   2960   {
   2961   public:
   2962     DisplayKHR()
   2963       : m_displayKHR(VK_NULL_HANDLE)
   2964     {}
   2965 
   2966     DisplayKHR( std::nullptr_t )
   2967       : m_displayKHR(VK_NULL_HANDLE)
   2968     {}
   2969 
   2970     VULKAN_HPP_TYPESAFE_EXPLICIT DisplayKHR( VkDisplayKHR displayKHR )
   2971       : m_displayKHR( displayKHR )
   2972     {}
   2973 
   2974 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   2975     DisplayKHR & operator=(VkDisplayKHR displayKHR)
   2976     {
   2977       m_displayKHR = displayKHR;
   2978       return *this;
   2979     }
   2980 #endif
   2981 
   2982     DisplayKHR & operator=( std::nullptr_t )
   2983     {
   2984       m_displayKHR = VK_NULL_HANDLE;
   2985       return *this;
   2986     }
   2987 
   2988     bool operator==( DisplayKHR const & rhs ) const
   2989     {
   2990       return m_displayKHR == rhs.m_displayKHR;
   2991     }
   2992 
   2993     bool operator!=(DisplayKHR const & rhs ) const
   2994     {
   2995       return m_displayKHR != rhs.m_displayKHR;
   2996     }
   2997 
   2998     bool operator<(DisplayKHR const & rhs ) const
   2999     {
   3000       return m_displayKHR < rhs.m_displayKHR;
   3001     }
   3002 
   3003 
   3004 
   3005     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDisplayKHR() const
   3006     {
   3007       return m_displayKHR;
   3008     }
   3009 
   3010     explicit operator bool() const
   3011     {
   3012       return m_displayKHR != VK_NULL_HANDLE;
   3013     }
   3014 
   3015     bool operator!() const
   3016     {
   3017       return m_displayKHR == VK_NULL_HANDLE;
   3018     }
   3019 
   3020   private:
   3021     VkDisplayKHR m_displayKHR;
   3022   };
   3023 
   3024   static_assert( sizeof( DisplayKHR ) == sizeof( VkDisplayKHR ), "handle and wrapper have different size!" );
   3025 
   3026   class DisplayModeKHR
   3027   {
   3028   public:
   3029     DisplayModeKHR()
   3030       : m_displayModeKHR(VK_NULL_HANDLE)
   3031     {}
   3032 
   3033     DisplayModeKHR( std::nullptr_t )
   3034       : m_displayModeKHR(VK_NULL_HANDLE)
   3035     {}
   3036 
   3037     VULKAN_HPP_TYPESAFE_EXPLICIT DisplayModeKHR( VkDisplayModeKHR displayModeKHR )
   3038       : m_displayModeKHR( displayModeKHR )
   3039     {}
   3040 
   3041 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   3042     DisplayModeKHR & operator=(VkDisplayModeKHR displayModeKHR)
   3043     {
   3044       m_displayModeKHR = displayModeKHR;
   3045       return *this;
   3046     }
   3047 #endif
   3048 
   3049     DisplayModeKHR & operator=( std::nullptr_t )
   3050     {
   3051       m_displayModeKHR = VK_NULL_HANDLE;
   3052       return *this;
   3053     }
   3054 
   3055     bool operator==( DisplayModeKHR const & rhs ) const
   3056     {
   3057       return m_displayModeKHR == rhs.m_displayModeKHR;
   3058     }
   3059 
   3060     bool operator!=(DisplayModeKHR const & rhs ) const
   3061     {
   3062       return m_displayModeKHR != rhs.m_displayModeKHR;
   3063     }
   3064 
   3065     bool operator<(DisplayModeKHR const & rhs ) const
   3066     {
   3067       return m_displayModeKHR < rhs.m_displayModeKHR;
   3068     }
   3069 
   3070 
   3071 
   3072     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDisplayModeKHR() const
   3073     {
   3074       return m_displayModeKHR;
   3075     }
   3076 
   3077     explicit operator bool() const
   3078     {
   3079       return m_displayModeKHR != VK_NULL_HANDLE;
   3080     }
   3081 
   3082     bool operator!() const
   3083     {
   3084       return m_displayModeKHR == VK_NULL_HANDLE;
   3085     }
   3086 
   3087   private:
   3088     VkDisplayModeKHR m_displayModeKHR;
   3089   };
   3090 
   3091   static_assert( sizeof( DisplayModeKHR ) == sizeof( VkDisplayModeKHR ), "handle and wrapper have different size!" );
   3092 
   3093   class SurfaceKHR
   3094   {
   3095   public:
   3096     SurfaceKHR()
   3097       : m_surfaceKHR(VK_NULL_HANDLE)
   3098     {}
   3099 
   3100     SurfaceKHR( std::nullptr_t )
   3101       : m_surfaceKHR(VK_NULL_HANDLE)
   3102     {}
   3103 
   3104     VULKAN_HPP_TYPESAFE_EXPLICIT SurfaceKHR( VkSurfaceKHR surfaceKHR )
   3105       : m_surfaceKHR( surfaceKHR )
   3106     {}
   3107 
   3108 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   3109     SurfaceKHR & operator=(VkSurfaceKHR surfaceKHR)
   3110     {
   3111       m_surfaceKHR = surfaceKHR;
   3112       return *this;
   3113     }
   3114 #endif
   3115 
   3116     SurfaceKHR & operator=( std::nullptr_t )
   3117     {
   3118       m_surfaceKHR = VK_NULL_HANDLE;
   3119       return *this;
   3120     }
   3121 
   3122     bool operator==( SurfaceKHR const & rhs ) const
   3123     {
   3124       return m_surfaceKHR == rhs.m_surfaceKHR;
   3125     }
   3126 
   3127     bool operator!=(SurfaceKHR const & rhs ) const
   3128     {
   3129       return m_surfaceKHR != rhs.m_surfaceKHR;
   3130     }
   3131 
   3132     bool operator<(SurfaceKHR const & rhs ) const
   3133     {
   3134       return m_surfaceKHR < rhs.m_surfaceKHR;
   3135     }
   3136 
   3137 
   3138 
   3139     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSurfaceKHR() const
   3140     {
   3141       return m_surfaceKHR;
   3142     }
   3143 
   3144     explicit operator bool() const
   3145     {
   3146       return m_surfaceKHR != VK_NULL_HANDLE;
   3147     }
   3148 
   3149     bool operator!() const
   3150     {
   3151       return m_surfaceKHR == VK_NULL_HANDLE;
   3152     }
   3153 
   3154   private:
   3155     VkSurfaceKHR m_surfaceKHR;
   3156   };
   3157 
   3158   static_assert( sizeof( SurfaceKHR ) == sizeof( VkSurfaceKHR ), "handle and wrapper have different size!" );
   3159 
   3160   class SwapchainKHR
   3161   {
   3162   public:
   3163     SwapchainKHR()
   3164       : m_swapchainKHR(VK_NULL_HANDLE)
   3165     {}
   3166 
   3167     SwapchainKHR( std::nullptr_t )
   3168       : m_swapchainKHR(VK_NULL_HANDLE)
   3169     {}
   3170 
   3171     VULKAN_HPP_TYPESAFE_EXPLICIT SwapchainKHR( VkSwapchainKHR swapchainKHR )
   3172       : m_swapchainKHR( swapchainKHR )
   3173     {}
   3174 
   3175 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   3176     SwapchainKHR & operator=(VkSwapchainKHR swapchainKHR)
   3177     {
   3178       m_swapchainKHR = swapchainKHR;
   3179       return *this;
   3180     }
   3181 #endif
   3182 
   3183     SwapchainKHR & operator=( std::nullptr_t )
   3184     {
   3185       m_swapchainKHR = VK_NULL_HANDLE;
   3186       return *this;
   3187     }
   3188 
   3189     bool operator==( SwapchainKHR const & rhs ) const
   3190     {
   3191       return m_swapchainKHR == rhs.m_swapchainKHR;
   3192     }
   3193 
   3194     bool operator!=(SwapchainKHR const & rhs ) const
   3195     {
   3196       return m_swapchainKHR != rhs.m_swapchainKHR;
   3197     }
   3198 
   3199     bool operator<(SwapchainKHR const & rhs ) const
   3200     {
   3201       return m_swapchainKHR < rhs.m_swapchainKHR;
   3202     }
   3203 
   3204 
   3205 
   3206     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSwapchainKHR() const
   3207     {
   3208       return m_swapchainKHR;
   3209     }
   3210 
   3211     explicit operator bool() const
   3212     {
   3213       return m_swapchainKHR != VK_NULL_HANDLE;
   3214     }
   3215 
   3216     bool operator!() const
   3217     {
   3218       return m_swapchainKHR == VK_NULL_HANDLE;
   3219     }
   3220 
   3221   private:
   3222     VkSwapchainKHR m_swapchainKHR;
   3223   };
   3224 
   3225   static_assert( sizeof( SwapchainKHR ) == sizeof( VkSwapchainKHR ), "handle and wrapper have different size!" );
   3226 
   3227   class DebugReportCallbackEXT
   3228   {
   3229   public:
   3230     DebugReportCallbackEXT()
   3231       : m_debugReportCallbackEXT(VK_NULL_HANDLE)
   3232     {}
   3233 
   3234     DebugReportCallbackEXT( std::nullptr_t )
   3235       : m_debugReportCallbackEXT(VK_NULL_HANDLE)
   3236     {}
   3237 
   3238     VULKAN_HPP_TYPESAFE_EXPLICIT DebugReportCallbackEXT( VkDebugReportCallbackEXT debugReportCallbackEXT )
   3239       : m_debugReportCallbackEXT( debugReportCallbackEXT )
   3240     {}
   3241 
   3242 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   3243     DebugReportCallbackEXT & operator=(VkDebugReportCallbackEXT debugReportCallbackEXT)
   3244     {
   3245       m_debugReportCallbackEXT = debugReportCallbackEXT;
   3246       return *this;
   3247     }
   3248 #endif
   3249 
   3250     DebugReportCallbackEXT & operator=( std::nullptr_t )
   3251     {
   3252       m_debugReportCallbackEXT = VK_NULL_HANDLE;
   3253       return *this;
   3254     }
   3255 
   3256     bool operator==( DebugReportCallbackEXT const & rhs ) const
   3257     {
   3258       return m_debugReportCallbackEXT == rhs.m_debugReportCallbackEXT;
   3259     }
   3260 
   3261     bool operator!=(DebugReportCallbackEXT const & rhs ) const
   3262     {
   3263       return m_debugReportCallbackEXT != rhs.m_debugReportCallbackEXT;
   3264     }
   3265 
   3266     bool operator<(DebugReportCallbackEXT const & rhs ) const
   3267     {
   3268       return m_debugReportCallbackEXT < rhs.m_debugReportCallbackEXT;
   3269     }
   3270 
   3271 
   3272 
   3273     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDebugReportCallbackEXT() const
   3274     {
   3275       return m_debugReportCallbackEXT;
   3276     }
   3277 
   3278     explicit operator bool() const
   3279     {
   3280       return m_debugReportCallbackEXT != VK_NULL_HANDLE;
   3281     }
   3282 
   3283     bool operator!() const
   3284     {
   3285       return m_debugReportCallbackEXT == VK_NULL_HANDLE;
   3286     }
   3287 
   3288   private:
   3289     VkDebugReportCallbackEXT m_debugReportCallbackEXT;
   3290   };
   3291 
   3292   static_assert( sizeof( DebugReportCallbackEXT ) == sizeof( VkDebugReportCallbackEXT ), "handle and wrapper have different size!" );
   3293 
   3294   struct Offset2D
   3295   {
   3296     Offset2D( int32_t x_ = 0, int32_t y_ = 0 )
   3297       : x( x_ )
   3298       , y( y_ )
   3299     {
   3300     }
   3301 
   3302     Offset2D( VkOffset2D const & rhs )
   3303     {
   3304       memcpy( this, &rhs, sizeof( Offset2D ) );
   3305     }
   3306 
   3307     Offset2D& operator=( VkOffset2D const & rhs )
   3308     {
   3309       memcpy( this, &rhs, sizeof( Offset2D ) );
   3310       return *this;
   3311     }
   3312     Offset2D& setX( int32_t x_ )
   3313     {
   3314       x = x_;
   3315       return *this;
   3316     }
   3317 
   3318     Offset2D& setY( int32_t y_ )
   3319     {
   3320       y = y_;
   3321       return *this;
   3322     }
   3323 
   3324     operator const VkOffset2D&() const
   3325     {
   3326       return *reinterpret_cast<const VkOffset2D*>(this);
   3327     }
   3328 
   3329     bool operator==( Offset2D const& rhs ) const
   3330     {
   3331       return ( x == rhs.x )
   3332           && ( y == rhs.y );
   3333     }
   3334 
   3335     bool operator!=( Offset2D const& rhs ) const
   3336     {
   3337       return !operator==( rhs );
   3338     }
   3339 
   3340     int32_t x;
   3341     int32_t y;
   3342   };
   3343   static_assert( sizeof( Offset2D ) == sizeof( VkOffset2D ), "struct and wrapper have different size!" );
   3344 
   3345   struct Offset3D
   3346   {
   3347     Offset3D( int32_t x_ = 0, int32_t y_ = 0, int32_t z_ = 0 )
   3348       : x( x_ )
   3349       , y( y_ )
   3350       , z( z_ )
   3351     {
   3352     }
   3353 
   3354     Offset3D( VkOffset3D const & rhs )
   3355     {
   3356       memcpy( this, &rhs, sizeof( Offset3D ) );
   3357     }
   3358 
   3359     Offset3D& operator=( VkOffset3D const & rhs )
   3360     {
   3361       memcpy( this, &rhs, sizeof( Offset3D ) );
   3362       return *this;
   3363     }
   3364     Offset3D& setX( int32_t x_ )
   3365     {
   3366       x = x_;
   3367       return *this;
   3368     }
   3369 
   3370     Offset3D& setY( int32_t y_ )
   3371     {
   3372       y = y_;
   3373       return *this;
   3374     }
   3375 
   3376     Offset3D& setZ( int32_t z_ )
   3377     {
   3378       z = z_;
   3379       return *this;
   3380     }
   3381 
   3382     operator const VkOffset3D&() const
   3383     {
   3384       return *reinterpret_cast<const VkOffset3D*>(this);
   3385     }
   3386 
   3387     bool operator==( Offset3D const& rhs ) const
   3388     {
   3389       return ( x == rhs.x )
   3390           && ( y == rhs.y )
   3391           && ( z == rhs.z );
   3392     }
   3393 
   3394     bool operator!=( Offset3D const& rhs ) const
   3395     {
   3396       return !operator==( rhs );
   3397     }
   3398 
   3399     int32_t x;
   3400     int32_t y;
   3401     int32_t z;
   3402   };
   3403   static_assert( sizeof( Offset3D ) == sizeof( VkOffset3D ), "struct and wrapper have different size!" );
   3404 
   3405   struct Extent2D
   3406   {
   3407     Extent2D( uint32_t width_ = 0, uint32_t height_ = 0 )
   3408       : width( width_ )
   3409       , height( height_ )
   3410     {
   3411     }
   3412 
   3413     Extent2D( VkExtent2D const & rhs )
   3414     {
   3415       memcpy( this, &rhs, sizeof( Extent2D ) );
   3416     }
   3417 
   3418     Extent2D& operator=( VkExtent2D const & rhs )
   3419     {
   3420       memcpy( this, &rhs, sizeof( Extent2D ) );
   3421       return *this;
   3422     }
   3423     Extent2D& setWidth( uint32_t width_ )
   3424     {
   3425       width = width_;
   3426       return *this;
   3427     }
   3428 
   3429     Extent2D& setHeight( uint32_t height_ )
   3430     {
   3431       height = height_;
   3432       return *this;
   3433     }
   3434 
   3435     operator const VkExtent2D&() const
   3436     {
   3437       return *reinterpret_cast<const VkExtent2D*>(this);
   3438     }
   3439 
   3440     bool operator==( Extent2D const& rhs ) const
   3441     {
   3442       return ( width == rhs.width )
   3443           && ( height == rhs.height );
   3444     }
   3445 
   3446     bool operator!=( Extent2D const& rhs ) const
   3447     {
   3448       return !operator==( rhs );
   3449     }
   3450 
   3451     uint32_t width;
   3452     uint32_t height;
   3453   };
   3454   static_assert( sizeof( Extent2D ) == sizeof( VkExtent2D ), "struct and wrapper have different size!" );
   3455 
   3456   struct Extent3D
   3457   {
   3458     Extent3D( uint32_t width_ = 0, uint32_t height_ = 0, uint32_t depth_ = 0 )
   3459       : width( width_ )
   3460       , height( height_ )
   3461       , depth( depth_ )
   3462     {
   3463     }
   3464 
   3465     Extent3D( VkExtent3D const & rhs )
   3466     {
   3467       memcpy( this, &rhs, sizeof( Extent3D ) );
   3468     }
   3469 
   3470     Extent3D& operator=( VkExtent3D const & rhs )
   3471     {
   3472       memcpy( this, &rhs, sizeof( Extent3D ) );
   3473       return *this;
   3474     }
   3475     Extent3D& setWidth( uint32_t width_ )
   3476     {
   3477       width = width_;
   3478       return *this;
   3479     }
   3480 
   3481     Extent3D& setHeight( uint32_t height_ )
   3482     {
   3483       height = height_;
   3484       return *this;
   3485     }
   3486 
   3487     Extent3D& setDepth( uint32_t depth_ )
   3488     {
   3489       depth = depth_;
   3490       return *this;
   3491     }
   3492 
   3493     operator const VkExtent3D&() const
   3494     {
   3495       return *reinterpret_cast<const VkExtent3D*>(this);
   3496     }
   3497 
   3498     bool operator==( Extent3D const& rhs ) const
   3499     {
   3500       return ( width == rhs.width )
   3501           && ( height == rhs.height )
   3502           && ( depth == rhs.depth );
   3503     }
   3504 
   3505     bool operator!=( Extent3D const& rhs ) const
   3506     {
   3507       return !operator==( rhs );
   3508     }
   3509 
   3510     uint32_t width;
   3511     uint32_t height;
   3512     uint32_t depth;
   3513   };
   3514   static_assert( sizeof( Extent3D ) == sizeof( VkExtent3D ), "struct and wrapper have different size!" );
   3515 
   3516   struct Viewport
   3517   {
   3518     Viewport( float x_ = 0, float y_ = 0, float width_ = 0, float height_ = 0, float minDepth_ = 0, float maxDepth_ = 0 )
   3519       : x( x_ )
   3520       , y( y_ )
   3521       , width( width_ )
   3522       , height( height_ )
   3523       , minDepth( minDepth_ )
   3524       , maxDepth( maxDepth_ )
   3525     {
   3526     }
   3527 
   3528     Viewport( VkViewport const & rhs )
   3529     {
   3530       memcpy( this, &rhs, sizeof( Viewport ) );
   3531     }
   3532 
   3533     Viewport& operator=( VkViewport const & rhs )
   3534     {
   3535       memcpy( this, &rhs, sizeof( Viewport ) );
   3536       return *this;
   3537     }
   3538     Viewport& setX( float x_ )
   3539     {
   3540       x = x_;
   3541       return *this;
   3542     }
   3543 
   3544     Viewport& setY( float y_ )
   3545     {
   3546       y = y_;
   3547       return *this;
   3548     }
   3549 
   3550     Viewport& setWidth( float width_ )
   3551     {
   3552       width = width_;
   3553       return *this;
   3554     }
   3555 
   3556     Viewport& setHeight( float height_ )
   3557     {
   3558       height = height_;
   3559       return *this;
   3560     }
   3561 
   3562     Viewport& setMinDepth( float minDepth_ )
   3563     {
   3564       minDepth = minDepth_;
   3565       return *this;
   3566     }
   3567 
   3568     Viewport& setMaxDepth( float maxDepth_ )
   3569     {
   3570       maxDepth = maxDepth_;
   3571       return *this;
   3572     }
   3573 
   3574     operator const VkViewport&() const
   3575     {
   3576       return *reinterpret_cast<const VkViewport*>(this);
   3577     }
   3578 
   3579     bool operator==( Viewport const& rhs ) const
   3580     {
   3581       return ( x == rhs.x )
   3582           && ( y == rhs.y )
   3583           && ( width == rhs.width )
   3584           && ( height == rhs.height )
   3585           && ( minDepth == rhs.minDepth )
   3586           && ( maxDepth == rhs.maxDepth );
   3587     }
   3588 
   3589     bool operator!=( Viewport const& rhs ) const
   3590     {
   3591       return !operator==( rhs );
   3592     }
   3593 
   3594     float x;
   3595     float y;
   3596     float width;
   3597     float height;
   3598     float minDepth;
   3599     float maxDepth;
   3600   };
   3601   static_assert( sizeof( Viewport ) == sizeof( VkViewport ), "struct and wrapper have different size!" );
   3602 
   3603   struct Rect2D
   3604   {
   3605     Rect2D( Offset2D offset_ = Offset2D(), Extent2D extent_ = Extent2D() )
   3606       : offset( offset_ )
   3607       , extent( extent_ )
   3608     {
   3609     }
   3610 
   3611     Rect2D( VkRect2D const & rhs )
   3612     {
   3613       memcpy( this, &rhs, sizeof( Rect2D ) );
   3614     }
   3615 
   3616     Rect2D& operator=( VkRect2D const & rhs )
   3617     {
   3618       memcpy( this, &rhs, sizeof( Rect2D ) );
   3619       return *this;
   3620     }
   3621     Rect2D& setOffset( Offset2D offset_ )
   3622     {
   3623       offset = offset_;
   3624       return *this;
   3625     }
   3626 
   3627     Rect2D& setExtent( Extent2D extent_ )
   3628     {
   3629       extent = extent_;
   3630       return *this;
   3631     }
   3632 
   3633     operator const VkRect2D&() const
   3634     {
   3635       return *reinterpret_cast<const VkRect2D*>(this);
   3636     }
   3637 
   3638     bool operator==( Rect2D const& rhs ) const
   3639     {
   3640       return ( offset == rhs.offset )
   3641           && ( extent == rhs.extent );
   3642     }
   3643 
   3644     bool operator!=( Rect2D const& rhs ) const
   3645     {
   3646       return !operator==( rhs );
   3647     }
   3648 
   3649     Offset2D offset;
   3650     Extent2D extent;
   3651   };
   3652   static_assert( sizeof( Rect2D ) == sizeof( VkRect2D ), "struct and wrapper have different size!" );
   3653 
   3654   struct ClearRect
   3655   {
   3656     ClearRect( Rect2D rect_ = Rect2D(), uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
   3657       : rect( rect_ )
   3658       , baseArrayLayer( baseArrayLayer_ )
   3659       , layerCount( layerCount_ )
   3660     {
   3661     }
   3662 
   3663     ClearRect( VkClearRect const & rhs )
   3664     {
   3665       memcpy( this, &rhs, sizeof( ClearRect ) );
   3666     }
   3667 
   3668     ClearRect& operator=( VkClearRect const & rhs )
   3669     {
   3670       memcpy( this, &rhs, sizeof( ClearRect ) );
   3671       return *this;
   3672     }
   3673     ClearRect& setRect( Rect2D rect_ )
   3674     {
   3675       rect = rect_;
   3676       return *this;
   3677     }
   3678 
   3679     ClearRect& setBaseArrayLayer( uint32_t baseArrayLayer_ )
   3680     {
   3681       baseArrayLayer = baseArrayLayer_;
   3682       return *this;
   3683     }
   3684 
   3685     ClearRect& setLayerCount( uint32_t layerCount_ )
   3686     {
   3687       layerCount = layerCount_;
   3688       return *this;
   3689     }
   3690 
   3691     operator const VkClearRect&() const
   3692     {
   3693       return *reinterpret_cast<const VkClearRect*>(this);
   3694     }
   3695 
   3696     bool operator==( ClearRect const& rhs ) const
   3697     {
   3698       return ( rect == rhs.rect )
   3699           && ( baseArrayLayer == rhs.baseArrayLayer )
   3700           && ( layerCount == rhs.layerCount );
   3701     }
   3702 
   3703     bool operator!=( ClearRect const& rhs ) const
   3704     {
   3705       return !operator==( rhs );
   3706     }
   3707 
   3708     Rect2D rect;
   3709     uint32_t baseArrayLayer;
   3710     uint32_t layerCount;
   3711   };
   3712   static_assert( sizeof( ClearRect ) == sizeof( VkClearRect ), "struct and wrapper have different size!" );
   3713 
   3714   struct ExtensionProperties
   3715   {
   3716     operator const VkExtensionProperties&() const
   3717     {
   3718       return *reinterpret_cast<const VkExtensionProperties*>(this);
   3719     }
   3720 
   3721     bool operator==( ExtensionProperties const& rhs ) const
   3722     {
   3723       return ( memcmp( extensionName, rhs.extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
   3724           && ( specVersion == rhs.specVersion );
   3725     }
   3726 
   3727     bool operator!=( ExtensionProperties const& rhs ) const
   3728     {
   3729       return !operator==( rhs );
   3730     }
   3731 
   3732     char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
   3733     uint32_t specVersion;
   3734   };
   3735   static_assert( sizeof( ExtensionProperties ) == sizeof( VkExtensionProperties ), "struct and wrapper have different size!" );
   3736 
   3737   struct LayerProperties
   3738   {
   3739     operator const VkLayerProperties&() const
   3740     {
   3741       return *reinterpret_cast<const VkLayerProperties*>(this);
   3742     }
   3743 
   3744     bool operator==( LayerProperties const& rhs ) const
   3745     {
   3746       return ( memcmp( layerName, rhs.layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof( char ) ) == 0 )
   3747           && ( specVersion == rhs.specVersion )
   3748           && ( implementationVersion == rhs.implementationVersion )
   3749           && ( memcmp( description, rhs.description, VK_MAX_DESCRIPTION_SIZE * sizeof( char ) ) == 0 );
   3750     }
   3751 
   3752     bool operator!=( LayerProperties const& rhs ) const
   3753     {
   3754       return !operator==( rhs );
   3755     }
   3756 
   3757     char layerName[VK_MAX_EXTENSION_NAME_SIZE];
   3758     uint32_t specVersion;
   3759     uint32_t implementationVersion;
   3760     char description[VK_MAX_DESCRIPTION_SIZE];
   3761   };
   3762   static_assert( sizeof( LayerProperties ) == sizeof( VkLayerProperties ), "struct and wrapper have different size!" );
   3763 
   3764   struct AllocationCallbacks
   3765   {
   3766     AllocationCallbacks( void* pUserData_ = nullptr, PFN_vkAllocationFunction pfnAllocation_ = nullptr, PFN_vkReallocationFunction pfnReallocation_ = nullptr, PFN_vkFreeFunction pfnFree_ = nullptr, PFN_vkInternalAllocationNotification pfnInternalAllocation_ = nullptr, PFN_vkInternalFreeNotification pfnInternalFree_ = nullptr )
   3767       : pUserData( pUserData_ )
   3768       , pfnAllocation( pfnAllocation_ )
   3769       , pfnReallocation( pfnReallocation_ )
   3770       , pfnFree( pfnFree_ )
   3771       , pfnInternalAllocation( pfnInternalAllocation_ )
   3772       , pfnInternalFree( pfnInternalFree_ )
   3773     {
   3774     }
   3775 
   3776     AllocationCallbacks( VkAllocationCallbacks const & rhs )
   3777     {
   3778       memcpy( this, &rhs, sizeof( AllocationCallbacks ) );
   3779     }
   3780 
   3781     AllocationCallbacks& operator=( VkAllocationCallbacks const & rhs )
   3782     {
   3783       memcpy( this, &rhs, sizeof( AllocationCallbacks ) );
   3784       return *this;
   3785     }
   3786     AllocationCallbacks& setPUserData( void* pUserData_ )
   3787     {
   3788       pUserData = pUserData_;
   3789       return *this;
   3790     }
   3791 
   3792     AllocationCallbacks& setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ )
   3793     {
   3794       pfnAllocation = pfnAllocation_;
   3795       return *this;
   3796     }
   3797 
   3798     AllocationCallbacks& setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ )
   3799     {
   3800       pfnReallocation = pfnReallocation_;
   3801       return *this;
   3802     }
   3803 
   3804     AllocationCallbacks& setPfnFree( PFN_vkFreeFunction pfnFree_ )
   3805     {
   3806       pfnFree = pfnFree_;
   3807       return *this;
   3808     }
   3809 
   3810     AllocationCallbacks& setPfnInternalAllocation( PFN_vkInternalAllocationNotification pfnInternalAllocation_ )
   3811     {
   3812       pfnInternalAllocation = pfnInternalAllocation_;
   3813       return *this;
   3814     }
   3815 
   3816     AllocationCallbacks& setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ )
   3817     {
   3818       pfnInternalFree = pfnInternalFree_;
   3819       return *this;
   3820     }
   3821 
   3822     operator const VkAllocationCallbacks&() const
   3823     {
   3824       return *reinterpret_cast<const VkAllocationCallbacks*>(this);
   3825     }
   3826 
   3827     bool operator==( AllocationCallbacks const& rhs ) const
   3828     {
   3829       return ( pUserData == rhs.pUserData )
   3830           && ( pfnAllocation == rhs.pfnAllocation )
   3831           && ( pfnReallocation == rhs.pfnReallocation )
   3832           && ( pfnFree == rhs.pfnFree )
   3833           && ( pfnInternalAllocation == rhs.pfnInternalAllocation )
   3834           && ( pfnInternalFree == rhs.pfnInternalFree );
   3835     }
   3836 
   3837     bool operator!=( AllocationCallbacks const& rhs ) const
   3838     {
   3839       return !operator==( rhs );
   3840     }
   3841 
   3842     void* pUserData;
   3843     PFN_vkAllocationFunction pfnAllocation;
   3844     PFN_vkReallocationFunction pfnReallocation;
   3845     PFN_vkFreeFunction pfnFree;
   3846     PFN_vkInternalAllocationNotification pfnInternalAllocation;
   3847     PFN_vkInternalFreeNotification pfnInternalFree;
   3848   };
   3849   static_assert( sizeof( AllocationCallbacks ) == sizeof( VkAllocationCallbacks ), "struct and wrapper have different size!" );
   3850 
   3851   struct MemoryRequirements
   3852   {
   3853     operator const VkMemoryRequirements&() const
   3854     {
   3855       return *reinterpret_cast<const VkMemoryRequirements*>(this);
   3856     }
   3857 
   3858     bool operator==( MemoryRequirements const& rhs ) const
   3859     {
   3860       return ( size == rhs.size )
   3861           && ( alignment == rhs.alignment )
   3862           && ( memoryTypeBits == rhs.memoryTypeBits );
   3863     }
   3864 
   3865     bool operator!=( MemoryRequirements const& rhs ) const
   3866     {
   3867       return !operator==( rhs );
   3868     }
   3869 
   3870     DeviceSize size;
   3871     DeviceSize alignment;
   3872     uint32_t memoryTypeBits;
   3873   };
   3874   static_assert( sizeof( MemoryRequirements ) == sizeof( VkMemoryRequirements ), "struct and wrapper have different size!" );
   3875 
   3876   struct DescriptorBufferInfo
   3877   {
   3878     DescriptorBufferInfo( Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize range_ = 0 )
   3879       : buffer( buffer_ )
   3880       , offset( offset_ )
   3881       , range( range_ )
   3882     {
   3883     }
   3884 
   3885     DescriptorBufferInfo( VkDescriptorBufferInfo const & rhs )
   3886     {
   3887       memcpy( this, &rhs, sizeof( DescriptorBufferInfo ) );
   3888     }
   3889 
   3890     DescriptorBufferInfo& operator=( VkDescriptorBufferInfo const & rhs )
   3891     {
   3892       memcpy( this, &rhs, sizeof( DescriptorBufferInfo ) );
   3893       return *this;
   3894     }
   3895     DescriptorBufferInfo& setBuffer( Buffer buffer_ )
   3896     {
   3897       buffer = buffer_;
   3898       return *this;
   3899     }
   3900 
   3901     DescriptorBufferInfo& setOffset( DeviceSize offset_ )
   3902     {
   3903       offset = offset_;
   3904       return *this;
   3905     }
   3906 
   3907     DescriptorBufferInfo& setRange( DeviceSize range_ )
   3908     {
   3909       range = range_;
   3910       return *this;
   3911     }
   3912 
   3913     operator const VkDescriptorBufferInfo&() const
   3914     {
   3915       return *reinterpret_cast<const VkDescriptorBufferInfo*>(this);
   3916     }
   3917 
   3918     bool operator==( DescriptorBufferInfo const& rhs ) const
   3919     {
   3920       return ( buffer == rhs.buffer )
   3921           && ( offset == rhs.offset )
   3922           && ( range == rhs.range );
   3923     }
   3924 
   3925     bool operator!=( DescriptorBufferInfo const& rhs ) const
   3926     {
   3927       return !operator==( rhs );
   3928     }
   3929 
   3930     Buffer buffer;
   3931     DeviceSize offset;
   3932     DeviceSize range;
   3933   };
   3934   static_assert( sizeof( DescriptorBufferInfo ) == sizeof( VkDescriptorBufferInfo ), "struct and wrapper have different size!" );
   3935 
   3936   struct SubresourceLayout
   3937   {
   3938     operator const VkSubresourceLayout&() const
   3939     {
   3940       return *reinterpret_cast<const VkSubresourceLayout*>(this);
   3941     }
   3942 
   3943     bool operator==( SubresourceLayout const& rhs ) const
   3944     {
   3945       return ( offset == rhs.offset )
   3946           && ( size == rhs.size )
   3947           && ( rowPitch == rhs.rowPitch )
   3948           && ( arrayPitch == rhs.arrayPitch )
   3949           && ( depthPitch == rhs.depthPitch );
   3950     }
   3951 
   3952     bool operator!=( SubresourceLayout const& rhs ) const
   3953     {
   3954       return !operator==( rhs );
   3955     }
   3956 
   3957     DeviceSize offset;
   3958     DeviceSize size;
   3959     DeviceSize rowPitch;
   3960     DeviceSize arrayPitch;
   3961     DeviceSize depthPitch;
   3962   };
   3963   static_assert( sizeof( SubresourceLayout ) == sizeof( VkSubresourceLayout ), "struct and wrapper have different size!" );
   3964 
   3965   struct BufferCopy
   3966   {
   3967     BufferCopy( DeviceSize srcOffset_ = 0, DeviceSize dstOffset_ = 0, DeviceSize size_ = 0 )
   3968       : srcOffset( srcOffset_ )
   3969       , dstOffset( dstOffset_ )
   3970       , size( size_ )
   3971     {
   3972     }
   3973 
   3974     BufferCopy( VkBufferCopy const & rhs )
   3975     {
   3976       memcpy( this, &rhs, sizeof( BufferCopy ) );
   3977     }
   3978 
   3979     BufferCopy& operator=( VkBufferCopy const & rhs )
   3980     {
   3981       memcpy( this, &rhs, sizeof( BufferCopy ) );
   3982       return *this;
   3983     }
   3984     BufferCopy& setSrcOffset( DeviceSize srcOffset_ )
   3985     {
   3986       srcOffset = srcOffset_;
   3987       return *this;
   3988     }
   3989 
   3990     BufferCopy& setDstOffset( DeviceSize dstOffset_ )
   3991     {
   3992       dstOffset = dstOffset_;
   3993       return *this;
   3994     }
   3995 
   3996     BufferCopy& setSize( DeviceSize size_ )
   3997     {
   3998       size = size_;
   3999       return *this;
   4000     }
   4001 
   4002     operator const VkBufferCopy&() const
   4003     {
   4004       return *reinterpret_cast<const VkBufferCopy*>(this);
   4005     }
   4006 
   4007     bool operator==( BufferCopy const& rhs ) const
   4008     {
   4009       return ( srcOffset == rhs.srcOffset )
   4010           && ( dstOffset == rhs.dstOffset )
   4011           && ( size == rhs.size );
   4012     }
   4013 
   4014     bool operator!=( BufferCopy const& rhs ) const
   4015     {
   4016       return !operator==( rhs );
   4017     }
   4018 
   4019     DeviceSize srcOffset;
   4020     DeviceSize dstOffset;
   4021     DeviceSize size;
   4022   };
   4023   static_assert( sizeof( BufferCopy ) == sizeof( VkBufferCopy ), "struct and wrapper have different size!" );
   4024 
   4025   struct SpecializationMapEntry
   4026   {
   4027     SpecializationMapEntry( uint32_t constantID_ = 0, uint32_t offset_ = 0, size_t size_ = 0 )
   4028       : constantID( constantID_ )
   4029       , offset( offset_ )
   4030       , size( size_ )
   4031     {
   4032     }
   4033 
   4034     SpecializationMapEntry( VkSpecializationMapEntry const & rhs )
   4035     {
   4036       memcpy( this, &rhs, sizeof( SpecializationMapEntry ) );
   4037     }
   4038 
   4039     SpecializationMapEntry& operator=( VkSpecializationMapEntry const & rhs )
   4040     {
   4041       memcpy( this, &rhs, sizeof( SpecializationMapEntry ) );
   4042       return *this;
   4043     }
   4044     SpecializationMapEntry& setConstantID( uint32_t constantID_ )
   4045     {
   4046       constantID = constantID_;
   4047       return *this;
   4048     }
   4049 
   4050     SpecializationMapEntry& setOffset( uint32_t offset_ )
   4051     {
   4052       offset = offset_;
   4053       return *this;
   4054     }
   4055 
   4056     SpecializationMapEntry& setSize( size_t size_ )
   4057     {
   4058       size = size_;
   4059       return *this;
   4060     }
   4061 
   4062     operator const VkSpecializationMapEntry&() const
   4063     {
   4064       return *reinterpret_cast<const VkSpecializationMapEntry*>(this);
   4065     }
   4066 
   4067     bool operator==( SpecializationMapEntry const& rhs ) const
   4068     {
   4069       return ( constantID == rhs.constantID )
   4070           && ( offset == rhs.offset )
   4071           && ( size == rhs.size );
   4072     }
   4073 
   4074     bool operator!=( SpecializationMapEntry const& rhs ) const
   4075     {
   4076       return !operator==( rhs );
   4077     }
   4078 
   4079     uint32_t constantID;
   4080     uint32_t offset;
   4081     size_t size;
   4082   };
   4083   static_assert( sizeof( SpecializationMapEntry ) == sizeof( VkSpecializationMapEntry ), "struct and wrapper have different size!" );
   4084 
   4085   struct SpecializationInfo
   4086   {
   4087     SpecializationInfo( uint32_t mapEntryCount_ = 0, const SpecializationMapEntry* pMapEntries_ = nullptr, size_t dataSize_ = 0, const void* pData_ = nullptr )
   4088       : mapEntryCount( mapEntryCount_ )
   4089       , pMapEntries( pMapEntries_ )
   4090       , dataSize( dataSize_ )
   4091       , pData( pData_ )
   4092     {
   4093     }
   4094 
   4095     SpecializationInfo( VkSpecializationInfo const & rhs )
   4096     {
   4097       memcpy( this, &rhs, sizeof( SpecializationInfo ) );
   4098     }
   4099 
   4100     SpecializationInfo& operator=( VkSpecializationInfo const & rhs )
   4101     {
   4102       memcpy( this, &rhs, sizeof( SpecializationInfo ) );
   4103       return *this;
   4104     }
   4105     SpecializationInfo& setMapEntryCount( uint32_t mapEntryCount_ )
   4106     {
   4107       mapEntryCount = mapEntryCount_;
   4108       return *this;
   4109     }
   4110 
   4111     SpecializationInfo& setPMapEntries( const SpecializationMapEntry* pMapEntries_ )
   4112     {
   4113       pMapEntries = pMapEntries_;
   4114       return *this;
   4115     }
   4116 
   4117     SpecializationInfo& setDataSize( size_t dataSize_ )
   4118     {
   4119       dataSize = dataSize_;
   4120       return *this;
   4121     }
   4122 
   4123     SpecializationInfo& setPData( const void* pData_ )
   4124     {
   4125       pData = pData_;
   4126       return *this;
   4127     }
   4128 
   4129     operator const VkSpecializationInfo&() const
   4130     {
   4131       return *reinterpret_cast<const VkSpecializationInfo*>(this);
   4132     }
   4133 
   4134     bool operator==( SpecializationInfo const& rhs ) const
   4135     {
   4136       return ( mapEntryCount == rhs.mapEntryCount )
   4137           && ( pMapEntries == rhs.pMapEntries )
   4138           && ( dataSize == rhs.dataSize )
   4139           && ( pData == rhs.pData );
   4140     }
   4141 
   4142     bool operator!=( SpecializationInfo const& rhs ) const
   4143     {
   4144       return !operator==( rhs );
   4145     }
   4146 
   4147     uint32_t mapEntryCount;
   4148     const SpecializationMapEntry* pMapEntries;
   4149     size_t dataSize;
   4150     const void* pData;
   4151   };
   4152   static_assert( sizeof( SpecializationInfo ) == sizeof( VkSpecializationInfo ), "struct and wrapper have different size!" );
   4153 
   4154   union ClearColorValue
   4155   {
   4156     ClearColorValue( const std::array<float,4>& float32_ = { {0} } )
   4157     {
   4158       memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
   4159     }
   4160 
   4161     ClearColorValue( const std::array<int32_t,4>& int32_ )
   4162     {
   4163       memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
   4164     }
   4165 
   4166     ClearColorValue( const std::array<uint32_t,4>& uint32_ )
   4167     {
   4168       memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
   4169     }
   4170 
   4171     ClearColorValue& setFloat32( std::array<float,4> float32_ )
   4172     {
   4173       memcpy( &float32, float32_.data(), 4 * sizeof( float ) );
   4174       return *this;
   4175     }
   4176 
   4177     ClearColorValue& setInt32( std::array<int32_t,4> int32_ )
   4178     {
   4179       memcpy( &int32, int32_.data(), 4 * sizeof( int32_t ) );
   4180       return *this;
   4181     }
   4182 
   4183     ClearColorValue& setUint32( std::array<uint32_t,4> uint32_ )
   4184     {
   4185       memcpy( &uint32, uint32_.data(), 4 * sizeof( uint32_t ) );
   4186       return *this;
   4187     }
   4188 
   4189     operator VkClearColorValue const& () const
   4190     {
   4191       return *reinterpret_cast<const VkClearColorValue*>(this);
   4192     }
   4193 
   4194     float float32[4];
   4195     int32_t int32[4];
   4196     uint32_t uint32[4];
   4197   };
   4198 
   4199   struct ClearDepthStencilValue
   4200   {
   4201     ClearDepthStencilValue( float depth_ = 0, uint32_t stencil_ = 0 )
   4202       : depth( depth_ )
   4203       , stencil( stencil_ )
   4204     {
   4205     }
   4206 
   4207     ClearDepthStencilValue( VkClearDepthStencilValue const & rhs )
   4208     {
   4209       memcpy( this, &rhs, sizeof( ClearDepthStencilValue ) );
   4210     }
   4211 
   4212     ClearDepthStencilValue& operator=( VkClearDepthStencilValue const & rhs )
   4213     {
   4214       memcpy( this, &rhs, sizeof( ClearDepthStencilValue ) );
   4215       return *this;
   4216     }
   4217     ClearDepthStencilValue& setDepth( float depth_ )
   4218     {
   4219       depth = depth_;
   4220       return *this;
   4221     }
   4222 
   4223     ClearDepthStencilValue& setStencil( uint32_t stencil_ )
   4224     {
   4225       stencil = stencil_;
   4226       return *this;
   4227     }
   4228 
   4229     operator const VkClearDepthStencilValue&() const
   4230     {
   4231       return *reinterpret_cast<const VkClearDepthStencilValue*>(this);
   4232     }
   4233 
   4234     bool operator==( ClearDepthStencilValue const& rhs ) const
   4235     {
   4236       return ( depth == rhs.depth )
   4237           && ( stencil == rhs.stencil );
   4238     }
   4239 
   4240     bool operator!=( ClearDepthStencilValue const& rhs ) const
   4241     {
   4242       return !operator==( rhs );
   4243     }
   4244 
   4245     float depth;
   4246     uint32_t stencil;
   4247   };
   4248   static_assert( sizeof( ClearDepthStencilValue ) == sizeof( VkClearDepthStencilValue ), "struct and wrapper have different size!" );
   4249 
   4250   union ClearValue
   4251   {
   4252     ClearValue( ClearColorValue color_ = ClearColorValue() )
   4253     {
   4254       color = color_;
   4255     }
   4256 
   4257     ClearValue( ClearDepthStencilValue depthStencil_ )
   4258     {
   4259       depthStencil = depthStencil_;
   4260     }
   4261 
   4262     ClearValue& setColor( ClearColorValue color_ )
   4263     {
   4264       color = color_;
   4265       return *this;
   4266     }
   4267 
   4268     ClearValue& setDepthStencil( ClearDepthStencilValue depthStencil_ )
   4269     {
   4270       depthStencil = depthStencil_;
   4271       return *this;
   4272     }
   4273 
   4274     operator VkClearValue const& () const
   4275     {
   4276       return *reinterpret_cast<const VkClearValue*>(this);
   4277     }
   4278 
   4279 #ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
   4280     ClearColorValue color;
   4281     ClearDepthStencilValue depthStencil;
   4282 #else
   4283     VkClearColorValue color;
   4284     VkClearDepthStencilValue depthStencil;
   4285 #endif  // VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
   4286   };
   4287 
   4288   struct PhysicalDeviceFeatures
   4289   {
   4290     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 )
   4291       : robustBufferAccess( robustBufferAccess_ )
   4292       , fullDrawIndexUint32( fullDrawIndexUint32_ )
   4293       , imageCubeArray( imageCubeArray_ )
   4294       , independentBlend( independentBlend_ )
   4295       , geometryShader( geometryShader_ )
   4296       , tessellationShader( tessellationShader_ )
   4297       , sampleRateShading( sampleRateShading_ )
   4298       , dualSrcBlend( dualSrcBlend_ )
   4299       , logicOp( logicOp_ )
   4300       , multiDrawIndirect( multiDrawIndirect_ )
   4301       , drawIndirectFirstInstance( drawIndirectFirstInstance_ )
   4302       , depthClamp( depthClamp_ )
   4303       , depthBiasClamp( depthBiasClamp_ )
   4304       , fillModeNonSolid( fillModeNonSolid_ )
   4305       , depthBounds( depthBounds_ )
   4306       , wideLines( wideLines_ )
   4307       , largePoints( largePoints_ )
   4308       , alphaToOne( alphaToOne_ )
   4309       , multiViewport( multiViewport_ )
   4310       , samplerAnisotropy( samplerAnisotropy_ )
   4311       , textureCompressionETC2( textureCompressionETC2_ )
   4312       , textureCompressionASTC_LDR( textureCompressionASTC_LDR_ )
   4313       , textureCompressionBC( textureCompressionBC_ )
   4314       , occlusionQueryPrecise( occlusionQueryPrecise_ )
   4315       , pipelineStatisticsQuery( pipelineStatisticsQuery_ )
   4316       , vertexPipelineStoresAndAtomics( vertexPipelineStoresAndAtomics_ )
   4317       , fragmentStoresAndAtomics( fragmentStoresAndAtomics_ )
   4318       , shaderTessellationAndGeometryPointSize( shaderTessellationAndGeometryPointSize_ )
   4319       , shaderImageGatherExtended( shaderImageGatherExtended_ )
   4320       , shaderStorageImageExtendedFormats( shaderStorageImageExtendedFormats_ )
   4321       , shaderStorageImageMultisample( shaderStorageImageMultisample_ )
   4322       , shaderStorageImageReadWithoutFormat( shaderStorageImageReadWithoutFormat_ )
   4323       , shaderStorageImageWriteWithoutFormat( shaderStorageImageWriteWithoutFormat_ )
   4324       , shaderUniformBufferArrayDynamicIndexing( shaderUniformBufferArrayDynamicIndexing_ )
   4325       , shaderSampledImageArrayDynamicIndexing( shaderSampledImageArrayDynamicIndexing_ )
   4326       , shaderStorageBufferArrayDynamicIndexing( shaderStorageBufferArrayDynamicIndexing_ )
   4327       , shaderStorageImageArrayDynamicIndexing( shaderStorageImageArrayDynamicIndexing_ )
   4328       , shaderClipDistance( shaderClipDistance_ )
   4329       , shaderCullDistance( shaderCullDistance_ )
   4330       , shaderFloat64( shaderFloat64_ )
   4331       , shaderInt64( shaderInt64_ )
   4332       , shaderInt16( shaderInt16_ )
   4333       , shaderResourceResidency( shaderResourceResidency_ )
   4334       , shaderResourceMinLod( shaderResourceMinLod_ )
   4335       , sparseBinding( sparseBinding_ )
   4336       , sparseResidencyBuffer( sparseResidencyBuffer_ )
   4337       , sparseResidencyImage2D( sparseResidencyImage2D_ )
   4338       , sparseResidencyImage3D( sparseResidencyImage3D_ )
   4339       , sparseResidency2Samples( sparseResidency2Samples_ )
   4340       , sparseResidency4Samples( sparseResidency4Samples_ )
   4341       , sparseResidency8Samples( sparseResidency8Samples_ )
   4342       , sparseResidency16Samples( sparseResidency16Samples_ )
   4343       , sparseResidencyAliased( sparseResidencyAliased_ )
   4344       , variableMultisampleRate( variableMultisampleRate_ )
   4345       , inheritedQueries( inheritedQueries_ )
   4346     {
   4347     }
   4348 
   4349     PhysicalDeviceFeatures( VkPhysicalDeviceFeatures const & rhs )
   4350     {
   4351       memcpy( this, &rhs, sizeof( PhysicalDeviceFeatures ) );
   4352     }
   4353 
   4354     PhysicalDeviceFeatures& operator=( VkPhysicalDeviceFeatures const & rhs )
   4355     {
   4356       memcpy( this, &rhs, sizeof( PhysicalDeviceFeatures ) );
   4357       return *this;
   4358     }
   4359     PhysicalDeviceFeatures& setRobustBufferAccess( Bool32 robustBufferAccess_ )
   4360     {
   4361       robustBufferAccess = robustBufferAccess_;
   4362       return *this;
   4363     }
   4364 
   4365     PhysicalDeviceFeatures& setFullDrawIndexUint32( Bool32 fullDrawIndexUint32_ )
   4366     {
   4367       fullDrawIndexUint32 = fullDrawIndexUint32_;
   4368       return *this;
   4369     }
   4370 
   4371     PhysicalDeviceFeatures& setImageCubeArray( Bool32 imageCubeArray_ )
   4372     {
   4373       imageCubeArray = imageCubeArray_;
   4374       return *this;
   4375     }
   4376 
   4377     PhysicalDeviceFeatures& setIndependentBlend( Bool32 independentBlend_ )
   4378     {
   4379       independentBlend = independentBlend_;
   4380       return *this;
   4381     }
   4382 
   4383     PhysicalDeviceFeatures& setGeometryShader( Bool32 geometryShader_ )
   4384     {
   4385       geometryShader = geometryShader_;
   4386       return *this;
   4387     }
   4388 
   4389     PhysicalDeviceFeatures& setTessellationShader( Bool32 tessellationShader_ )
   4390     {
   4391       tessellationShader = tessellationShader_;
   4392       return *this;
   4393     }
   4394 
   4395     PhysicalDeviceFeatures& setSampleRateShading( Bool32 sampleRateShading_ )
   4396     {
   4397       sampleRateShading = sampleRateShading_;
   4398       return *this;
   4399     }
   4400 
   4401     PhysicalDeviceFeatures& setDualSrcBlend( Bool32 dualSrcBlend_ )
   4402     {
   4403       dualSrcBlend = dualSrcBlend_;
   4404       return *this;
   4405     }
   4406 
   4407     PhysicalDeviceFeatures& setLogicOp( Bool32 logicOp_ )
   4408     {
   4409       logicOp = logicOp_;
   4410       return *this;
   4411     }
   4412 
   4413     PhysicalDeviceFeatures& setMultiDrawIndirect( Bool32 multiDrawIndirect_ )
   4414     {
   4415       multiDrawIndirect = multiDrawIndirect_;
   4416       return *this;
   4417     }
   4418 
   4419     PhysicalDeviceFeatures& setDrawIndirectFirstInstance( Bool32 drawIndirectFirstInstance_ )
   4420     {
   4421       drawIndirectFirstInstance = drawIndirectFirstInstance_;
   4422       return *this;
   4423     }
   4424 
   4425     PhysicalDeviceFeatures& setDepthClamp( Bool32 depthClamp_ )
   4426     {
   4427       depthClamp = depthClamp_;
   4428       return *this;
   4429     }
   4430 
   4431     PhysicalDeviceFeatures& setDepthBiasClamp( Bool32 depthBiasClamp_ )
   4432     {
   4433       depthBiasClamp = depthBiasClamp_;
   4434       return *this;
   4435     }
   4436 
   4437     PhysicalDeviceFeatures& setFillModeNonSolid( Bool32 fillModeNonSolid_ )
   4438     {
   4439       fillModeNonSolid = fillModeNonSolid_;
   4440       return *this;
   4441     }
   4442 
   4443     PhysicalDeviceFeatures& setDepthBounds( Bool32 depthBounds_ )
   4444     {
   4445       depthBounds = depthBounds_;
   4446       return *this;
   4447     }
   4448 
   4449     PhysicalDeviceFeatures& setWideLines( Bool32 wideLines_ )
   4450     {
   4451       wideLines = wideLines_;
   4452       return *this;
   4453     }
   4454 
   4455     PhysicalDeviceFeatures& setLargePoints( Bool32 largePoints_ )
   4456     {
   4457       largePoints = largePoints_;
   4458       return *this;
   4459     }
   4460 
   4461     PhysicalDeviceFeatures& setAlphaToOne( Bool32 alphaToOne_ )
   4462     {
   4463       alphaToOne = alphaToOne_;
   4464       return *this;
   4465     }
   4466 
   4467     PhysicalDeviceFeatures& setMultiViewport( Bool32 multiViewport_ )
   4468     {
   4469       multiViewport = multiViewport_;
   4470       return *this;
   4471     }
   4472 
   4473     PhysicalDeviceFeatures& setSamplerAnisotropy( Bool32 samplerAnisotropy_ )
   4474     {
   4475       samplerAnisotropy = samplerAnisotropy_;
   4476       return *this;
   4477     }
   4478 
   4479     PhysicalDeviceFeatures& setTextureCompressionETC2( Bool32 textureCompressionETC2_ )
   4480     {
   4481       textureCompressionETC2 = textureCompressionETC2_;
   4482       return *this;
   4483     }
   4484 
   4485     PhysicalDeviceFeatures& setTextureCompressionASTC_LDR( Bool32 textureCompressionASTC_LDR_ )
   4486     {
   4487       textureCompressionASTC_LDR = textureCompressionASTC_LDR_;
   4488       return *this;
   4489     }
   4490 
   4491     PhysicalDeviceFeatures& setTextureCompressionBC( Bool32 textureCompressionBC_ )
   4492     {
   4493       textureCompressionBC = textureCompressionBC_;
   4494       return *this;
   4495     }
   4496 
   4497     PhysicalDeviceFeatures& setOcclusionQueryPrecise( Bool32 occlusionQueryPrecise_ )
   4498     {
   4499       occlusionQueryPrecise = occlusionQueryPrecise_;
   4500       return *this;
   4501     }
   4502 
   4503     PhysicalDeviceFeatures& setPipelineStatisticsQuery( Bool32 pipelineStatisticsQuery_ )
   4504     {
   4505       pipelineStatisticsQuery = pipelineStatisticsQuery_;
   4506       return *this;
   4507     }
   4508 
   4509     PhysicalDeviceFeatures& setVertexPipelineStoresAndAtomics( Bool32 vertexPipelineStoresAndAtomics_ )
   4510     {
   4511       vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics_;
   4512       return *this;
   4513     }
   4514 
   4515     PhysicalDeviceFeatures& setFragmentStoresAndAtomics( Bool32 fragmentStoresAndAtomics_ )
   4516     {
   4517       fragmentStoresAndAtomics = fragmentStoresAndAtomics_;
   4518       return *this;
   4519     }
   4520 
   4521     PhysicalDeviceFeatures& setShaderTessellationAndGeometryPointSize( Bool32 shaderTessellationAndGeometryPointSize_ )
   4522     {
   4523       shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize_;
   4524       return *this;
   4525     }
   4526 
   4527     PhysicalDeviceFeatures& setShaderImageGatherExtended( Bool32 shaderImageGatherExtended_ )
   4528     {
   4529       shaderImageGatherExtended = shaderImageGatherExtended_;
   4530       return *this;
   4531     }
   4532 
   4533     PhysicalDeviceFeatures& setShaderStorageImageExtendedFormats( Bool32 shaderStorageImageExtendedFormats_ )
   4534     {
   4535       shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats_;
   4536       return *this;
   4537     }
   4538 
   4539     PhysicalDeviceFeatures& setShaderStorageImageMultisample( Bool32 shaderStorageImageMultisample_ )
   4540     {
   4541       shaderStorageImageMultisample = shaderStorageImageMultisample_;
   4542       return *this;
   4543     }
   4544 
   4545     PhysicalDeviceFeatures& setShaderStorageImageReadWithoutFormat( Bool32 shaderStorageImageReadWithoutFormat_ )
   4546     {
   4547       shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat_;
   4548       return *this;
   4549     }
   4550 
   4551     PhysicalDeviceFeatures& setShaderStorageImageWriteWithoutFormat( Bool32 shaderStorageImageWriteWithoutFormat_ )
   4552     {
   4553       shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat_;
   4554       return *this;
   4555     }
   4556 
   4557     PhysicalDeviceFeatures& setShaderUniformBufferArrayDynamicIndexing( Bool32 shaderUniformBufferArrayDynamicIndexing_ )
   4558     {
   4559       shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing_;
   4560       return *this;
   4561     }
   4562 
   4563     PhysicalDeviceFeatures& setShaderSampledImageArrayDynamicIndexing( Bool32 shaderSampledImageArrayDynamicIndexing_ )
   4564     {
   4565       shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing_;
   4566       return *this;
   4567     }
   4568 
   4569     PhysicalDeviceFeatures& setShaderStorageBufferArrayDynamicIndexing( Bool32 shaderStorageBufferArrayDynamicIndexing_ )
   4570     {
   4571       shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing_;
   4572       return *this;
   4573     }
   4574 
   4575     PhysicalDeviceFeatures& setShaderStorageImageArrayDynamicIndexing( Bool32 shaderStorageImageArrayDynamicIndexing_ )
   4576     {
   4577       shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing_;
   4578       return *this;
   4579     }
   4580 
   4581     PhysicalDeviceFeatures& setShaderClipDistance( Bool32 shaderClipDistance_ )
   4582     {
   4583       shaderClipDistance = shaderClipDistance_;
   4584       return *this;
   4585     }
   4586 
   4587     PhysicalDeviceFeatures& setShaderCullDistance( Bool32 shaderCullDistance_ )
   4588     {
   4589       shaderCullDistance = shaderCullDistance_;
   4590       return *this;
   4591     }
   4592 
   4593     PhysicalDeviceFeatures& setShaderFloat64( Bool32 shaderFloat64_ )
   4594     {
   4595       shaderFloat64 = shaderFloat64_;
   4596       return *this;
   4597     }
   4598 
   4599     PhysicalDeviceFeatures& setShaderInt64( Bool32 shaderInt64_ )
   4600     {
   4601       shaderInt64 = shaderInt64_;
   4602       return *this;
   4603     }
   4604 
   4605     PhysicalDeviceFeatures& setShaderInt16( Bool32 shaderInt16_ )
   4606     {
   4607       shaderInt16 = shaderInt16_;
   4608       return *this;
   4609     }
   4610 
   4611     PhysicalDeviceFeatures& setShaderResourceResidency( Bool32 shaderResourceResidency_ )
   4612     {
   4613       shaderResourceResidency = shaderResourceResidency_;
   4614       return *this;
   4615     }
   4616 
   4617     PhysicalDeviceFeatures& setShaderResourceMinLod( Bool32 shaderResourceMinLod_ )
   4618     {
   4619       shaderResourceMinLod = shaderResourceMinLod_;
   4620       return *this;
   4621     }
   4622 
   4623     PhysicalDeviceFeatures& setSparseBinding( Bool32 sparseBinding_ )
   4624     {
   4625       sparseBinding = sparseBinding_;
   4626       return *this;
   4627     }
   4628 
   4629     PhysicalDeviceFeatures& setSparseResidencyBuffer( Bool32 sparseResidencyBuffer_ )
   4630     {
   4631       sparseResidencyBuffer = sparseResidencyBuffer_;
   4632       return *this;
   4633     }
   4634 
   4635     PhysicalDeviceFeatures& setSparseResidencyImage2D( Bool32 sparseResidencyImage2D_ )
   4636     {
   4637       sparseResidencyImage2D = sparseResidencyImage2D_;
   4638       return *this;
   4639     }
   4640 
   4641     PhysicalDeviceFeatures& setSparseResidencyImage3D( Bool32 sparseResidencyImage3D_ )
   4642     {
   4643       sparseResidencyImage3D = sparseResidencyImage3D_;
   4644       return *this;
   4645     }
   4646 
   4647     PhysicalDeviceFeatures& setSparseResidency2Samples( Bool32 sparseResidency2Samples_ )
   4648     {
   4649       sparseResidency2Samples = sparseResidency2Samples_;
   4650       return *this;
   4651     }
   4652 
   4653     PhysicalDeviceFeatures& setSparseResidency4Samples( Bool32 sparseResidency4Samples_ )
   4654     {
   4655       sparseResidency4Samples = sparseResidency4Samples_;
   4656       return *this;
   4657     }
   4658 
   4659     PhysicalDeviceFeatures& setSparseResidency8Samples( Bool32 sparseResidency8Samples_ )
   4660     {
   4661       sparseResidency8Samples = sparseResidency8Samples_;
   4662       return *this;
   4663     }
   4664 
   4665     PhysicalDeviceFeatures& setSparseResidency16Samples( Bool32 sparseResidency16Samples_ )
   4666     {
   4667       sparseResidency16Samples = sparseResidency16Samples_;
   4668       return *this;
   4669     }
   4670 
   4671     PhysicalDeviceFeatures& setSparseResidencyAliased( Bool32 sparseResidencyAliased_ )
   4672     {
   4673       sparseResidencyAliased = sparseResidencyAliased_;
   4674       return *this;
   4675     }
   4676 
   4677     PhysicalDeviceFeatures& setVariableMultisampleRate( Bool32 variableMultisampleRate_ )
   4678     {
   4679       variableMultisampleRate = variableMultisampleRate_;
   4680       return *this;
   4681     }
   4682 
   4683     PhysicalDeviceFeatures& setInheritedQueries( Bool32 inheritedQueries_ )
   4684     {
   4685       inheritedQueries = inheritedQueries_;
   4686       return *this;
   4687     }
   4688 
   4689     operator const VkPhysicalDeviceFeatures&() const
   4690     {
   4691       return *reinterpret_cast<const VkPhysicalDeviceFeatures*>(this);
   4692     }
   4693 
   4694     bool operator==( PhysicalDeviceFeatures const& rhs ) const
   4695     {
   4696       return ( robustBufferAccess == rhs.robustBufferAccess )
   4697           && ( fullDrawIndexUint32 == rhs.fullDrawIndexUint32 )
   4698           && ( imageCubeArray == rhs.imageCubeArray )
   4699           && ( independentBlend == rhs.independentBlend )
   4700           && ( geometryShader == rhs.geometryShader )
   4701           && ( tessellationShader == rhs.tessellationShader )
   4702           && ( sampleRateShading == rhs.sampleRateShading )
   4703           && ( dualSrcBlend == rhs.dualSrcBlend )
   4704           && ( logicOp == rhs.logicOp )
   4705           && ( multiDrawIndirect == rhs.multiDrawIndirect )
   4706           && ( drawIndirectFirstInstance == rhs.drawIndirectFirstInstance )
   4707           && ( depthClamp == rhs.depthClamp )
   4708           && ( depthBiasClamp == rhs.depthBiasClamp )
   4709           && ( fillModeNonSolid == rhs.fillModeNonSolid )
   4710           && ( depthBounds == rhs.depthBounds )
   4711           && ( wideLines == rhs.wideLines )
   4712           && ( largePoints == rhs.largePoints )
   4713           && ( alphaToOne == rhs.alphaToOne )
   4714           && ( multiViewport == rhs.multiViewport )
   4715           && ( samplerAnisotropy == rhs.samplerAnisotropy )
   4716           && ( textureCompressionETC2 == rhs.textureCompressionETC2 )
   4717           && ( textureCompressionASTC_LDR == rhs.textureCompressionASTC_LDR )
   4718           && ( textureCompressionBC == rhs.textureCompressionBC )
   4719           && ( occlusionQueryPrecise == rhs.occlusionQueryPrecise )
   4720           && ( pipelineStatisticsQuery == rhs.pipelineStatisticsQuery )
   4721           && ( vertexPipelineStoresAndAtomics == rhs.vertexPipelineStoresAndAtomics )
   4722           && ( fragmentStoresAndAtomics == rhs.fragmentStoresAndAtomics )
   4723           && ( shaderTessellationAndGeometryPointSize == rhs.shaderTessellationAndGeometryPointSize )
   4724           && ( shaderImageGatherExtended == rhs.shaderImageGatherExtended )
   4725           && ( shaderStorageImageExtendedFormats == rhs.shaderStorageImageExtendedFormats )
   4726           && ( shaderStorageImageMultisample == rhs.shaderStorageImageMultisample )
   4727           && ( shaderStorageImageReadWithoutFormat == rhs.shaderStorageImageReadWithoutFormat )
   4728           && ( shaderStorageImageWriteWithoutFormat == rhs.shaderStorageImageWriteWithoutFormat )
   4729           && ( shaderUniformBufferArrayDynamicIndexing == rhs.shaderUniformBufferArrayDynamicIndexing )
   4730           && ( shaderSampledImageArrayDynamicIndexing == rhs.shaderSampledImageArrayDynamicIndexing )
   4731           && ( shaderStorageBufferArrayDynamicIndexing == rhs.shaderStorageBufferArrayDynamicIndexing )
   4732           && ( shaderStorageImageArrayDynamicIndexing == rhs.shaderStorageImageArrayDynamicIndexing )
   4733           && ( shaderClipDistance == rhs.shaderClipDistance )
   4734           && ( shaderCullDistance == rhs.shaderCullDistance )
   4735           && ( shaderFloat64 == rhs.shaderFloat64 )
   4736           && ( shaderInt64 == rhs.shaderInt64 )
   4737           && ( shaderInt16 == rhs.shaderInt16 )
   4738           && ( shaderResourceResidency == rhs.shaderResourceResidency )
   4739           && ( shaderResourceMinLod == rhs.shaderResourceMinLod )
   4740           && ( sparseBinding == rhs.sparseBinding )
   4741           && ( sparseResidencyBuffer == rhs.sparseResidencyBuffer )
   4742           && ( sparseResidencyImage2D == rhs.sparseResidencyImage2D )
   4743           && ( sparseResidencyImage3D == rhs.sparseResidencyImage3D )
   4744           && ( sparseResidency2Samples == rhs.sparseResidency2Samples )
   4745           && ( sparseResidency4Samples == rhs.sparseResidency4Samples )
   4746           && ( sparseResidency8Samples == rhs.sparseResidency8Samples )
   4747           && ( sparseResidency16Samples == rhs.sparseResidency16Samples )
   4748           && ( sparseResidencyAliased == rhs.sparseResidencyAliased )
   4749           && ( variableMultisampleRate == rhs.variableMultisampleRate )
   4750           && ( inheritedQueries == rhs.inheritedQueries );
   4751     }
   4752 
   4753     bool operator!=( PhysicalDeviceFeatures const& rhs ) const
   4754     {
   4755       return !operator==( rhs );
   4756     }
   4757 
   4758     Bool32 robustBufferAccess;
   4759     Bool32 fullDrawIndexUint32;
   4760     Bool32 imageCubeArray;
   4761     Bool32 independentBlend;
   4762     Bool32 geometryShader;
   4763     Bool32 tessellationShader;
   4764     Bool32 sampleRateShading;
   4765     Bool32 dualSrcBlend;
   4766     Bool32 logicOp;
   4767     Bool32 multiDrawIndirect;
   4768     Bool32 drawIndirectFirstInstance;
   4769     Bool32 depthClamp;
   4770     Bool32 depthBiasClamp;
   4771     Bool32 fillModeNonSolid;
   4772     Bool32 depthBounds;
   4773     Bool32 wideLines;
   4774     Bool32 largePoints;
   4775     Bool32 alphaToOne;
   4776     Bool32 multiViewport;
   4777     Bool32 samplerAnisotropy;
   4778     Bool32 textureCompressionETC2;
   4779     Bool32 textureCompressionASTC_LDR;
   4780     Bool32 textureCompressionBC;
   4781     Bool32 occlusionQueryPrecise;
   4782     Bool32 pipelineStatisticsQuery;
   4783     Bool32 vertexPipelineStoresAndAtomics;
   4784     Bool32 fragmentStoresAndAtomics;
   4785     Bool32 shaderTessellationAndGeometryPointSize;
   4786     Bool32 shaderImageGatherExtended;
   4787     Bool32 shaderStorageImageExtendedFormats;
   4788     Bool32 shaderStorageImageMultisample;
   4789     Bool32 shaderStorageImageReadWithoutFormat;
   4790     Bool32 shaderStorageImageWriteWithoutFormat;
   4791     Bool32 shaderUniformBufferArrayDynamicIndexing;
   4792     Bool32 shaderSampledImageArrayDynamicIndexing;
   4793     Bool32 shaderStorageBufferArrayDynamicIndexing;
   4794     Bool32 shaderStorageImageArrayDynamicIndexing;
   4795     Bool32 shaderClipDistance;
   4796     Bool32 shaderCullDistance;
   4797     Bool32 shaderFloat64;
   4798     Bool32 shaderInt64;
   4799     Bool32 shaderInt16;
   4800     Bool32 shaderResourceResidency;
   4801     Bool32 shaderResourceMinLod;
   4802     Bool32 sparseBinding;
   4803     Bool32 sparseResidencyBuffer;
   4804     Bool32 sparseResidencyImage2D;
   4805     Bool32 sparseResidencyImage3D;
   4806     Bool32 sparseResidency2Samples;
   4807     Bool32 sparseResidency4Samples;
   4808     Bool32 sparseResidency8Samples;
   4809     Bool32 sparseResidency16Samples;
   4810     Bool32 sparseResidencyAliased;
   4811     Bool32 variableMultisampleRate;
   4812     Bool32 inheritedQueries;
   4813   };
   4814   static_assert( sizeof( PhysicalDeviceFeatures ) == sizeof( VkPhysicalDeviceFeatures ), "struct and wrapper have different size!" );
   4815 
   4816   struct PhysicalDeviceSparseProperties
   4817   {
   4818     operator const VkPhysicalDeviceSparseProperties&() const
   4819     {
   4820       return *reinterpret_cast<const VkPhysicalDeviceSparseProperties*>(this);
   4821     }
   4822 
   4823     bool operator==( PhysicalDeviceSparseProperties const& rhs ) const
   4824     {
   4825       return ( residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape )
   4826           && ( residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape )
   4827           && ( residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape )
   4828           && ( residencyAlignedMipSize == rhs.residencyAlignedMipSize )
   4829           && ( residencyNonResidentStrict == rhs.residencyNonResidentStrict );
   4830     }
   4831 
   4832     bool operator!=( PhysicalDeviceSparseProperties const& rhs ) const
   4833     {
   4834       return !operator==( rhs );
   4835     }
   4836 
   4837     Bool32 residencyStandard2DBlockShape;
   4838     Bool32 residencyStandard2DMultisampleBlockShape;
   4839     Bool32 residencyStandard3DBlockShape;
   4840     Bool32 residencyAlignedMipSize;
   4841     Bool32 residencyNonResidentStrict;
   4842   };
   4843   static_assert( sizeof( PhysicalDeviceSparseProperties ) == sizeof( VkPhysicalDeviceSparseProperties ), "struct and wrapper have different size!" );
   4844 
   4845   struct DrawIndirectCommand
   4846   {
   4847     DrawIndirectCommand( uint32_t vertexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstVertex_ = 0, uint32_t firstInstance_ = 0 )
   4848       : vertexCount( vertexCount_ )
   4849       , instanceCount( instanceCount_ )
   4850       , firstVertex( firstVertex_ )
   4851       , firstInstance( firstInstance_ )
   4852     {
   4853     }
   4854 
   4855     DrawIndirectCommand( VkDrawIndirectCommand const & rhs )
   4856     {
   4857       memcpy( this, &rhs, sizeof( DrawIndirectCommand ) );
   4858     }
   4859 
   4860     DrawIndirectCommand& operator=( VkDrawIndirectCommand const & rhs )
   4861     {
   4862       memcpy( this, &rhs, sizeof( DrawIndirectCommand ) );
   4863       return *this;
   4864     }
   4865     DrawIndirectCommand& setVertexCount( uint32_t vertexCount_ )
   4866     {
   4867       vertexCount = vertexCount_;
   4868       return *this;
   4869     }
   4870 
   4871     DrawIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
   4872     {
   4873       instanceCount = instanceCount_;
   4874       return *this;
   4875     }
   4876 
   4877     DrawIndirectCommand& setFirstVertex( uint32_t firstVertex_ )
   4878     {
   4879       firstVertex = firstVertex_;
   4880       return *this;
   4881     }
   4882 
   4883     DrawIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
   4884     {
   4885       firstInstance = firstInstance_;
   4886       return *this;
   4887     }
   4888 
   4889     operator const VkDrawIndirectCommand&() const
   4890     {
   4891       return *reinterpret_cast<const VkDrawIndirectCommand*>(this);
   4892     }
   4893 
   4894     bool operator==( DrawIndirectCommand const& rhs ) const
   4895     {
   4896       return ( vertexCount == rhs.vertexCount )
   4897           && ( instanceCount == rhs.instanceCount )
   4898           && ( firstVertex == rhs.firstVertex )
   4899           && ( firstInstance == rhs.firstInstance );
   4900     }
   4901 
   4902     bool operator!=( DrawIndirectCommand const& rhs ) const
   4903     {
   4904       return !operator==( rhs );
   4905     }
   4906 
   4907     uint32_t vertexCount;
   4908     uint32_t instanceCount;
   4909     uint32_t firstVertex;
   4910     uint32_t firstInstance;
   4911   };
   4912   static_assert( sizeof( DrawIndirectCommand ) == sizeof( VkDrawIndirectCommand ), "struct and wrapper have different size!" );
   4913 
   4914   struct DrawIndexedIndirectCommand
   4915   {
   4916     DrawIndexedIndirectCommand( uint32_t indexCount_ = 0, uint32_t instanceCount_ = 0, uint32_t firstIndex_ = 0, int32_t vertexOffset_ = 0, uint32_t firstInstance_ = 0 )
   4917       : indexCount( indexCount_ )
   4918       , instanceCount( instanceCount_ )
   4919       , firstIndex( firstIndex_ )
   4920       , vertexOffset( vertexOffset_ )
   4921       , firstInstance( firstInstance_ )
   4922     {
   4923     }
   4924 
   4925     DrawIndexedIndirectCommand( VkDrawIndexedIndirectCommand const & rhs )
   4926     {
   4927       memcpy( this, &rhs, sizeof( DrawIndexedIndirectCommand ) );
   4928     }
   4929 
   4930     DrawIndexedIndirectCommand& operator=( VkDrawIndexedIndirectCommand const & rhs )
   4931     {
   4932       memcpy( this, &rhs, sizeof( DrawIndexedIndirectCommand ) );
   4933       return *this;
   4934     }
   4935     DrawIndexedIndirectCommand& setIndexCount( uint32_t indexCount_ )
   4936     {
   4937       indexCount = indexCount_;
   4938       return *this;
   4939     }
   4940 
   4941     DrawIndexedIndirectCommand& setInstanceCount( uint32_t instanceCount_ )
   4942     {
   4943       instanceCount = instanceCount_;
   4944       return *this;
   4945     }
   4946 
   4947     DrawIndexedIndirectCommand& setFirstIndex( uint32_t firstIndex_ )
   4948     {
   4949       firstIndex = firstIndex_;
   4950       return *this;
   4951     }
   4952 
   4953     DrawIndexedIndirectCommand& setVertexOffset( int32_t vertexOffset_ )
   4954     {
   4955       vertexOffset = vertexOffset_;
   4956       return *this;
   4957     }
   4958 
   4959     DrawIndexedIndirectCommand& setFirstInstance( uint32_t firstInstance_ )
   4960     {
   4961       firstInstance = firstInstance_;
   4962       return *this;
   4963     }
   4964 
   4965     operator const VkDrawIndexedIndirectCommand&() const
   4966     {
   4967       return *reinterpret_cast<const VkDrawIndexedIndirectCommand*>(this);
   4968     }
   4969 
   4970     bool operator==( DrawIndexedIndirectCommand const& rhs ) const
   4971     {
   4972       return ( indexCount == rhs.indexCount )
   4973           && ( instanceCount == rhs.instanceCount )
   4974           && ( firstIndex == rhs.firstIndex )
   4975           && ( vertexOffset == rhs.vertexOffset )
   4976           && ( firstInstance == rhs.firstInstance );
   4977     }
   4978 
   4979     bool operator!=( DrawIndexedIndirectCommand const& rhs ) const
   4980     {
   4981       return !operator==( rhs );
   4982     }
   4983 
   4984     uint32_t indexCount;
   4985     uint32_t instanceCount;
   4986     uint32_t firstIndex;
   4987     int32_t vertexOffset;
   4988     uint32_t firstInstance;
   4989   };
   4990   static_assert( sizeof( DrawIndexedIndirectCommand ) == sizeof( VkDrawIndexedIndirectCommand ), "struct and wrapper have different size!" );
   4991 
   4992   struct DispatchIndirectCommand
   4993   {
   4994     DispatchIndirectCommand( uint32_t x_ = 0, uint32_t y_ = 0, uint32_t z_ = 0 )
   4995       : x( x_ )
   4996       , y( y_ )
   4997       , z( z_ )
   4998     {
   4999     }
   5000 
   5001     DispatchIndirectCommand( VkDispatchIndirectCommand const & rhs )
   5002     {
   5003       memcpy( this, &rhs, sizeof( DispatchIndirectCommand ) );
   5004     }
   5005 
   5006     DispatchIndirectCommand& operator=( VkDispatchIndirectCommand const & rhs )
   5007     {
   5008       memcpy( this, &rhs, sizeof( DispatchIndirectCommand ) );
   5009       return *this;
   5010     }
   5011     DispatchIndirectCommand& setX( uint32_t x_ )
   5012     {
   5013       x = x_;
   5014       return *this;
   5015     }
   5016 
   5017     DispatchIndirectCommand& setY( uint32_t y_ )
   5018     {
   5019       y = y_;
   5020       return *this;
   5021     }
   5022 
   5023     DispatchIndirectCommand& setZ( uint32_t z_ )
   5024     {
   5025       z = z_;
   5026       return *this;
   5027     }
   5028 
   5029     operator const VkDispatchIndirectCommand&() const
   5030     {
   5031       return *reinterpret_cast<const VkDispatchIndirectCommand*>(this);
   5032     }
   5033 
   5034     bool operator==( DispatchIndirectCommand const& rhs ) const
   5035     {
   5036       return ( x == rhs.x )
   5037           && ( y == rhs.y )
   5038           && ( z == rhs.z );
   5039     }
   5040 
   5041     bool operator!=( DispatchIndirectCommand const& rhs ) const
   5042     {
   5043       return !operator==( rhs );
   5044     }
   5045 
   5046     uint32_t x;
   5047     uint32_t y;
   5048     uint32_t z;
   5049   };
   5050   static_assert( sizeof( DispatchIndirectCommand ) == sizeof( VkDispatchIndirectCommand ), "struct and wrapper have different size!" );
   5051 
   5052   struct DisplayPlanePropertiesKHR
   5053   {
   5054     operator const VkDisplayPlanePropertiesKHR&() const
   5055     {
   5056       return *reinterpret_cast<const VkDisplayPlanePropertiesKHR*>(this);
   5057     }
   5058 
   5059     bool operator==( DisplayPlanePropertiesKHR const& rhs ) const
   5060     {
   5061       return ( currentDisplay == rhs.currentDisplay )
   5062           && ( currentStackIndex == rhs.currentStackIndex );
   5063     }
   5064 
   5065     bool operator!=( DisplayPlanePropertiesKHR const& rhs ) const
   5066     {
   5067       return !operator==( rhs );
   5068     }
   5069 
   5070     DisplayKHR currentDisplay;
   5071     uint32_t currentStackIndex;
   5072   };
   5073   static_assert( sizeof( DisplayPlanePropertiesKHR ) == sizeof( VkDisplayPlanePropertiesKHR ), "struct and wrapper have different size!" );
   5074 
   5075   struct DisplayModeParametersKHR
   5076   {
   5077     DisplayModeParametersKHR( Extent2D visibleRegion_ = Extent2D(), uint32_t refreshRate_ = 0 )
   5078       : visibleRegion( visibleRegion_ )
   5079       , refreshRate( refreshRate_ )
   5080     {
   5081     }
   5082 
   5083     DisplayModeParametersKHR( VkDisplayModeParametersKHR const & rhs )
   5084     {
   5085       memcpy( this, &rhs, sizeof( DisplayModeParametersKHR ) );
   5086     }
   5087 
   5088     DisplayModeParametersKHR& operator=( VkDisplayModeParametersKHR const & rhs )
   5089     {
   5090       memcpy( this, &rhs, sizeof( DisplayModeParametersKHR ) );
   5091       return *this;
   5092     }
   5093     DisplayModeParametersKHR& setVisibleRegion( Extent2D visibleRegion_ )
   5094     {
   5095       visibleRegion = visibleRegion_;
   5096       return *this;
   5097     }
   5098 
   5099     DisplayModeParametersKHR& setRefreshRate( uint32_t refreshRate_ )
   5100     {
   5101       refreshRate = refreshRate_;
   5102       return *this;
   5103     }
   5104 
   5105     operator const VkDisplayModeParametersKHR&() const
   5106     {
   5107       return *reinterpret_cast<const VkDisplayModeParametersKHR*>(this);
   5108     }
   5109 
   5110     bool operator==( DisplayModeParametersKHR const& rhs ) const
   5111     {
   5112       return ( visibleRegion == rhs.visibleRegion )
   5113           && ( refreshRate == rhs.refreshRate );
   5114     }
   5115 
   5116     bool operator!=( DisplayModeParametersKHR const& rhs ) const
   5117     {
   5118       return !operator==( rhs );
   5119     }
   5120 
   5121     Extent2D visibleRegion;
   5122     uint32_t refreshRate;
   5123   };
   5124   static_assert( sizeof( DisplayModeParametersKHR ) == sizeof( VkDisplayModeParametersKHR ), "struct and wrapper have different size!" );
   5125 
   5126   struct DisplayModePropertiesKHR
   5127   {
   5128     operator const VkDisplayModePropertiesKHR&() const
   5129     {
   5130       return *reinterpret_cast<const VkDisplayModePropertiesKHR*>(this);
   5131     }
   5132 
   5133     bool operator==( DisplayModePropertiesKHR const& rhs ) const
   5134     {
   5135       return ( displayMode == rhs.displayMode )
   5136           && ( parameters == rhs.parameters );
   5137     }
   5138 
   5139     bool operator!=( DisplayModePropertiesKHR const& rhs ) const
   5140     {
   5141       return !operator==( rhs );
   5142     }
   5143 
   5144     DisplayModeKHR displayMode;
   5145     DisplayModeParametersKHR parameters;
   5146   };
   5147   static_assert( sizeof( DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ), "struct and wrapper have different size!" );
   5148 
   5149   struct RectLayerKHR
   5150   {
   5151     RectLayerKHR( Offset2D offset_ = Offset2D(), Extent2D extent_ = Extent2D(), uint32_t layer_ = 0 )
   5152       : offset( offset_ )
   5153       , extent( extent_ )
   5154       , layer( layer_ )
   5155     {
   5156     }
   5157 
   5158     RectLayerKHR( VkRectLayerKHR const & rhs )
   5159     {
   5160       memcpy( this, &rhs, sizeof( RectLayerKHR ) );
   5161     }
   5162 
   5163     RectLayerKHR& operator=( VkRectLayerKHR const & rhs )
   5164     {
   5165       memcpy( this, &rhs, sizeof( RectLayerKHR ) );
   5166       return *this;
   5167     }
   5168     RectLayerKHR& setOffset( Offset2D offset_ )
   5169     {
   5170       offset = offset_;
   5171       return *this;
   5172     }
   5173 
   5174     RectLayerKHR& setExtent( Extent2D extent_ )
   5175     {
   5176       extent = extent_;
   5177       return *this;
   5178     }
   5179 
   5180     RectLayerKHR& setLayer( uint32_t layer_ )
   5181     {
   5182       layer = layer_;
   5183       return *this;
   5184     }
   5185 
   5186     operator const VkRectLayerKHR&() const
   5187     {
   5188       return *reinterpret_cast<const VkRectLayerKHR*>(this);
   5189     }
   5190 
   5191     bool operator==( RectLayerKHR const& rhs ) const
   5192     {
   5193       return ( offset == rhs.offset )
   5194           && ( extent == rhs.extent )
   5195           && ( layer == rhs.layer );
   5196     }
   5197 
   5198     bool operator!=( RectLayerKHR const& rhs ) const
   5199     {
   5200       return !operator==( rhs );
   5201     }
   5202 
   5203     Offset2D offset;
   5204     Extent2D extent;
   5205     uint32_t layer;
   5206   };
   5207   static_assert( sizeof( RectLayerKHR ) == sizeof( VkRectLayerKHR ), "struct and wrapper have different size!" );
   5208 
   5209   struct PresentRegionKHR
   5210   {
   5211     PresentRegionKHR( uint32_t rectangleCount_ = 0, const RectLayerKHR* pRectangles_ = nullptr )
   5212       : rectangleCount( rectangleCount_ )
   5213       , pRectangles( pRectangles_ )
   5214     {
   5215     }
   5216 
   5217     PresentRegionKHR( VkPresentRegionKHR const & rhs )
   5218     {
   5219       memcpy( this, &rhs, sizeof( PresentRegionKHR ) );
   5220     }
   5221 
   5222     PresentRegionKHR& operator=( VkPresentRegionKHR const & rhs )
   5223     {
   5224       memcpy( this, &rhs, sizeof( PresentRegionKHR ) );
   5225       return *this;
   5226     }
   5227     PresentRegionKHR& setRectangleCount( uint32_t rectangleCount_ )
   5228     {
   5229       rectangleCount = rectangleCount_;
   5230       return *this;
   5231     }
   5232 
   5233     PresentRegionKHR& setPRectangles( const RectLayerKHR* pRectangles_ )
   5234     {
   5235       pRectangles = pRectangles_;
   5236       return *this;
   5237     }
   5238 
   5239     operator const VkPresentRegionKHR&() const
   5240     {
   5241       return *reinterpret_cast<const VkPresentRegionKHR*>(this);
   5242     }
   5243 
   5244     bool operator==( PresentRegionKHR const& rhs ) const
   5245     {
   5246       return ( rectangleCount == rhs.rectangleCount )
   5247           && ( pRectangles == rhs.pRectangles );
   5248     }
   5249 
   5250     bool operator!=( PresentRegionKHR const& rhs ) const
   5251     {
   5252       return !operator==( rhs );
   5253     }
   5254 
   5255     uint32_t rectangleCount;
   5256     const RectLayerKHR* pRectangles;
   5257   };
   5258   static_assert( sizeof( PresentRegionKHR ) == sizeof( VkPresentRegionKHR ), "struct and wrapper have different size!" );
   5259 
   5260   struct XYColorEXT
   5261   {
   5262     XYColorEXT( float x_ = 0, float y_ = 0 )
   5263       : x( x_ )
   5264       , y( y_ )
   5265     {
   5266     }
   5267 
   5268     XYColorEXT( VkXYColorEXT const & rhs )
   5269     {
   5270       memcpy( this, &rhs, sizeof( XYColorEXT ) );
   5271     }
   5272 
   5273     XYColorEXT& operator=( VkXYColorEXT const & rhs )
   5274     {
   5275       memcpy( this, &rhs, sizeof( XYColorEXT ) );
   5276       return *this;
   5277     }
   5278     XYColorEXT& setX( float x_ )
   5279     {
   5280       x = x_;
   5281       return *this;
   5282     }
   5283 
   5284     XYColorEXT& setY( float y_ )
   5285     {
   5286       y = y_;
   5287       return *this;
   5288     }
   5289 
   5290     operator const VkXYColorEXT&() const
   5291     {
   5292       return *reinterpret_cast<const VkXYColorEXT*>(this);
   5293     }
   5294 
   5295     bool operator==( XYColorEXT const& rhs ) const
   5296     {
   5297       return ( x == rhs.x )
   5298           && ( y == rhs.y );
   5299     }
   5300 
   5301     bool operator!=( XYColorEXT const& rhs ) const
   5302     {
   5303       return !operator==( rhs );
   5304     }
   5305 
   5306     float x;
   5307     float y;
   5308   };
   5309   static_assert( sizeof( XYColorEXT ) == sizeof( VkXYColorEXT ), "struct and wrapper have different size!" );
   5310 
   5311   struct RefreshCycleDurationGOOGLE
   5312   {
   5313     RefreshCycleDurationGOOGLE( uint64_t refreshDuration_ = 0 )
   5314       : refreshDuration( refreshDuration_ )
   5315     {
   5316     }
   5317 
   5318     RefreshCycleDurationGOOGLE( VkRefreshCycleDurationGOOGLE const & rhs )
   5319     {
   5320       memcpy( this, &rhs, sizeof( RefreshCycleDurationGOOGLE ) );
   5321     }
   5322 
   5323     RefreshCycleDurationGOOGLE& operator=( VkRefreshCycleDurationGOOGLE const & rhs )
   5324     {
   5325       memcpy( this, &rhs, sizeof( RefreshCycleDurationGOOGLE ) );
   5326       return *this;
   5327     }
   5328     RefreshCycleDurationGOOGLE& setRefreshDuration( uint64_t refreshDuration_ )
   5329     {
   5330       refreshDuration = refreshDuration_;
   5331       return *this;
   5332     }
   5333 
   5334     operator const VkRefreshCycleDurationGOOGLE&() const
   5335     {
   5336       return *reinterpret_cast<const VkRefreshCycleDurationGOOGLE*>(this);
   5337     }
   5338 
   5339     bool operator==( RefreshCycleDurationGOOGLE const& rhs ) const
   5340     {
   5341       return ( refreshDuration == rhs.refreshDuration );
   5342     }
   5343 
   5344     bool operator!=( RefreshCycleDurationGOOGLE const& rhs ) const
   5345     {
   5346       return !operator==( rhs );
   5347     }
   5348 
   5349     uint64_t refreshDuration;
   5350   };
   5351   static_assert( sizeof( RefreshCycleDurationGOOGLE ) == sizeof( VkRefreshCycleDurationGOOGLE ), "struct and wrapper have different size!" );
   5352 
   5353   struct PastPresentationTimingGOOGLE
   5354   {
   5355     PastPresentationTimingGOOGLE( uint32_t presentID_ = 0, uint64_t desiredPresentTime_ = 0, uint64_t actualPresentTime_ = 0, uint64_t earliestPresentTime_ = 0, uint64_t presentMargin_ = 0 )
   5356       : presentID( presentID_ )
   5357       , desiredPresentTime( desiredPresentTime_ )
   5358       , actualPresentTime( actualPresentTime_ )
   5359       , earliestPresentTime( earliestPresentTime_ )
   5360       , presentMargin( presentMargin_ )
   5361     {
   5362     }
   5363 
   5364     PastPresentationTimingGOOGLE( VkPastPresentationTimingGOOGLE const & rhs )
   5365     {
   5366       memcpy( this, &rhs, sizeof( PastPresentationTimingGOOGLE ) );
   5367     }
   5368 
   5369     PastPresentationTimingGOOGLE& operator=( VkPastPresentationTimingGOOGLE const & rhs )
   5370     {
   5371       memcpy( this, &rhs, sizeof( PastPresentationTimingGOOGLE ) );
   5372       return *this;
   5373     }
   5374     PastPresentationTimingGOOGLE& setPresentID( uint32_t presentID_ )
   5375     {
   5376       presentID = presentID_;
   5377       return *this;
   5378     }
   5379 
   5380     PastPresentationTimingGOOGLE& setDesiredPresentTime( uint64_t desiredPresentTime_ )
   5381     {
   5382       desiredPresentTime = desiredPresentTime_;
   5383       return *this;
   5384     }
   5385 
   5386     PastPresentationTimingGOOGLE& setActualPresentTime( uint64_t actualPresentTime_ )
   5387     {
   5388       actualPresentTime = actualPresentTime_;
   5389       return *this;
   5390     }
   5391 
   5392     PastPresentationTimingGOOGLE& setEarliestPresentTime( uint64_t earliestPresentTime_ )
   5393     {
   5394       earliestPresentTime = earliestPresentTime_;
   5395       return *this;
   5396     }
   5397 
   5398     PastPresentationTimingGOOGLE& setPresentMargin( uint64_t presentMargin_ )
   5399     {
   5400       presentMargin = presentMargin_;
   5401       return *this;
   5402     }
   5403 
   5404     operator const VkPastPresentationTimingGOOGLE&() const
   5405     {
   5406       return *reinterpret_cast<const VkPastPresentationTimingGOOGLE*>(this);
   5407     }
   5408 
   5409     bool operator==( PastPresentationTimingGOOGLE const& rhs ) const
   5410     {
   5411       return ( presentID == rhs.presentID )
   5412           && ( desiredPresentTime == rhs.desiredPresentTime )
   5413           && ( actualPresentTime == rhs.actualPresentTime )
   5414           && ( earliestPresentTime == rhs.earliestPresentTime )
   5415           && ( presentMargin == rhs.presentMargin );
   5416     }
   5417 
   5418     bool operator!=( PastPresentationTimingGOOGLE const& rhs ) const
   5419     {
   5420       return !operator==( rhs );
   5421     }
   5422 
   5423     uint32_t presentID;
   5424     uint64_t desiredPresentTime;
   5425     uint64_t actualPresentTime;
   5426     uint64_t earliestPresentTime;
   5427     uint64_t presentMargin;
   5428   };
   5429   static_assert( sizeof( PastPresentationTimingGOOGLE ) == sizeof( VkPastPresentationTimingGOOGLE ), "struct and wrapper have different size!" );
   5430 
   5431   struct PresentTimeGOOGLE
   5432   {
   5433     PresentTimeGOOGLE( uint32_t presentID_ = 0, uint64_t desiredPresentTime_ = 0 )
   5434       : presentID( presentID_ )
   5435       , desiredPresentTime( desiredPresentTime_ )
   5436     {
   5437     }
   5438 
   5439     PresentTimeGOOGLE( VkPresentTimeGOOGLE const & rhs )
   5440     {
   5441       memcpy( this, &rhs, sizeof( PresentTimeGOOGLE ) );
   5442     }
   5443 
   5444     PresentTimeGOOGLE& operator=( VkPresentTimeGOOGLE const & rhs )
   5445     {
   5446       memcpy( this, &rhs, sizeof( PresentTimeGOOGLE ) );
   5447       return *this;
   5448     }
   5449     PresentTimeGOOGLE& setPresentID( uint32_t presentID_ )
   5450     {
   5451       presentID = presentID_;
   5452       return *this;
   5453     }
   5454 
   5455     PresentTimeGOOGLE& setDesiredPresentTime( uint64_t desiredPresentTime_ )
   5456     {
   5457       desiredPresentTime = desiredPresentTime_;
   5458       return *this;
   5459     }
   5460 
   5461     operator const VkPresentTimeGOOGLE&() const
   5462     {
   5463       return *reinterpret_cast<const VkPresentTimeGOOGLE*>(this);
   5464     }
   5465 
   5466     bool operator==( PresentTimeGOOGLE const& rhs ) const
   5467     {
   5468       return ( presentID == rhs.presentID )
   5469           && ( desiredPresentTime == rhs.desiredPresentTime );
   5470     }
   5471 
   5472     bool operator!=( PresentTimeGOOGLE const& rhs ) const
   5473     {
   5474       return !operator==( rhs );
   5475     }
   5476 
   5477     uint32_t presentID;
   5478     uint64_t desiredPresentTime;
   5479   };
   5480   static_assert( sizeof( PresentTimeGOOGLE ) == sizeof( VkPresentTimeGOOGLE ), "struct and wrapper have different size!" );
   5481 
   5482   struct ViewportWScalingNV
   5483   {
   5484     ViewportWScalingNV( float xcoeff_ = 0, float ycoeff_ = 0 )
   5485       : xcoeff( xcoeff_ )
   5486       , ycoeff( ycoeff_ )
   5487     {
   5488     }
   5489 
   5490     ViewportWScalingNV( VkViewportWScalingNV const & rhs )
   5491     {
   5492       memcpy( this, &rhs, sizeof( ViewportWScalingNV ) );
   5493     }
   5494 
   5495     ViewportWScalingNV& operator=( VkViewportWScalingNV const & rhs )
   5496     {
   5497       memcpy( this, &rhs, sizeof( ViewportWScalingNV ) );
   5498       return *this;
   5499     }
   5500     ViewportWScalingNV& setXcoeff( float xcoeff_ )
   5501     {
   5502       xcoeff = xcoeff_;
   5503       return *this;
   5504     }
   5505 
   5506     ViewportWScalingNV& setYcoeff( float ycoeff_ )
   5507     {
   5508       ycoeff = ycoeff_;
   5509       return *this;
   5510     }
   5511 
   5512     operator const VkViewportWScalingNV&() const
   5513     {
   5514       return *reinterpret_cast<const VkViewportWScalingNV*>(this);
   5515     }
   5516 
   5517     bool operator==( ViewportWScalingNV const& rhs ) const
   5518     {
   5519       return ( xcoeff == rhs.xcoeff )
   5520           && ( ycoeff == rhs.ycoeff );
   5521     }
   5522 
   5523     bool operator!=( ViewportWScalingNV const& rhs ) const
   5524     {
   5525       return !operator==( rhs );
   5526     }
   5527 
   5528     float xcoeff;
   5529     float ycoeff;
   5530   };
   5531   static_assert( sizeof( ViewportWScalingNV ) == sizeof( VkViewportWScalingNV ), "struct and wrapper have different size!" );
   5532 
   5533   struct SampleLocationEXT
   5534   {
   5535     SampleLocationEXT( float x_ = 0, float y_ = 0 )
   5536       : x( x_ )
   5537       , y( y_ )
   5538     {
   5539     }
   5540 
   5541     SampleLocationEXT( VkSampleLocationEXT const & rhs )
   5542     {
   5543       memcpy( this, &rhs, sizeof( SampleLocationEXT ) );
   5544     }
   5545 
   5546     SampleLocationEXT& operator=( VkSampleLocationEXT const & rhs )
   5547     {
   5548       memcpy( this, &rhs, sizeof( SampleLocationEXT ) );
   5549       return *this;
   5550     }
   5551     SampleLocationEXT& setX( float x_ )
   5552     {
   5553       x = x_;
   5554       return *this;
   5555     }
   5556 
   5557     SampleLocationEXT& setY( float y_ )
   5558     {
   5559       y = y_;
   5560       return *this;
   5561     }
   5562 
   5563     operator const VkSampleLocationEXT&() const
   5564     {
   5565       return *reinterpret_cast<const VkSampleLocationEXT*>(this);
   5566     }
   5567 
   5568     bool operator==( SampleLocationEXT const& rhs ) const
   5569     {
   5570       return ( x == rhs.x )
   5571           && ( y == rhs.y );
   5572     }
   5573 
   5574     bool operator!=( SampleLocationEXT const& rhs ) const
   5575     {
   5576       return !operator==( rhs );
   5577     }
   5578 
   5579     float x;
   5580     float y;
   5581   };
   5582   static_assert( sizeof( SampleLocationEXT ) == sizeof( VkSampleLocationEXT ), "struct and wrapper have different size!" );
   5583 
   5584   struct ShaderResourceUsageAMD
   5585   {
   5586     operator const VkShaderResourceUsageAMD&() const
   5587     {
   5588       return *reinterpret_cast<const VkShaderResourceUsageAMD*>(this);
   5589     }
   5590 
   5591     bool operator==( ShaderResourceUsageAMD const& rhs ) const
   5592     {
   5593       return ( numUsedVgprs == rhs.numUsedVgprs )
   5594           && ( numUsedSgprs == rhs.numUsedSgprs )
   5595           && ( ldsSizePerLocalWorkGroup == rhs.ldsSizePerLocalWorkGroup )
   5596           && ( ldsUsageSizeInBytes == rhs.ldsUsageSizeInBytes )
   5597           && ( scratchMemUsageInBytes == rhs.scratchMemUsageInBytes );
   5598     }
   5599 
   5600     bool operator!=( ShaderResourceUsageAMD const& rhs ) const
   5601     {
   5602       return !operator==( rhs );
   5603     }
   5604 
   5605     uint32_t numUsedVgprs;
   5606     uint32_t numUsedSgprs;
   5607     uint32_t ldsSizePerLocalWorkGroup;
   5608     size_t ldsUsageSizeInBytes;
   5609     size_t scratchMemUsageInBytes;
   5610   };
   5611   static_assert( sizeof( ShaderResourceUsageAMD ) == sizeof( VkShaderResourceUsageAMD ), "struct and wrapper have different size!" );
   5612 
   5613   enum class ImageLayout
   5614   {
   5615     eUndefined = VK_IMAGE_LAYOUT_UNDEFINED,
   5616     eGeneral = VK_IMAGE_LAYOUT_GENERAL,
   5617     eColorAttachmentOptimal = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
   5618     eDepthStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
   5619     eDepthStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
   5620     eShaderReadOnlyOptimal = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
   5621     eTransferSrcOptimal = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
   5622     eTransferDstOptimal = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
   5623     ePreinitialized = VK_IMAGE_LAYOUT_PREINITIALIZED,
   5624     ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
   5625     eSharedPresentKHR = VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
   5626     eDepthReadOnlyStencilAttachmentOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR,
   5627     eDepthAttachmentStencilReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR
   5628   };
   5629 
   5630   struct DescriptorImageInfo
   5631   {
   5632     DescriptorImageInfo( Sampler sampler_ = Sampler(), ImageView imageView_ = ImageView(), ImageLayout imageLayout_ = ImageLayout::eUndefined )
   5633       : sampler( sampler_ )
   5634       , imageView( imageView_ )
   5635       , imageLayout( imageLayout_ )
   5636     {
   5637     }
   5638 
   5639     DescriptorImageInfo( VkDescriptorImageInfo const & rhs )
   5640     {
   5641       memcpy( this, &rhs, sizeof( DescriptorImageInfo ) );
   5642     }
   5643 
   5644     DescriptorImageInfo& operator=( VkDescriptorImageInfo const & rhs )
   5645     {
   5646       memcpy( this, &rhs, sizeof( DescriptorImageInfo ) );
   5647       return *this;
   5648     }
   5649     DescriptorImageInfo& setSampler( Sampler sampler_ )
   5650     {
   5651       sampler = sampler_;
   5652       return *this;
   5653     }
   5654 
   5655     DescriptorImageInfo& setImageView( ImageView imageView_ )
   5656     {
   5657       imageView = imageView_;
   5658       return *this;
   5659     }
   5660 
   5661     DescriptorImageInfo& setImageLayout( ImageLayout imageLayout_ )
   5662     {
   5663       imageLayout = imageLayout_;
   5664       return *this;
   5665     }
   5666 
   5667     operator const VkDescriptorImageInfo&() const
   5668     {
   5669       return *reinterpret_cast<const VkDescriptorImageInfo*>(this);
   5670     }
   5671 
   5672     bool operator==( DescriptorImageInfo const& rhs ) const
   5673     {
   5674       return ( sampler == rhs.sampler )
   5675           && ( imageView == rhs.imageView )
   5676           && ( imageLayout == rhs.imageLayout );
   5677     }
   5678 
   5679     bool operator!=( DescriptorImageInfo const& rhs ) const
   5680     {
   5681       return !operator==( rhs );
   5682     }
   5683 
   5684     Sampler sampler;
   5685     ImageView imageView;
   5686     ImageLayout imageLayout;
   5687   };
   5688   static_assert( sizeof( DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ), "struct and wrapper have different size!" );
   5689 
   5690   struct AttachmentReference
   5691   {
   5692     AttachmentReference( uint32_t attachment_ = 0, ImageLayout layout_ = ImageLayout::eUndefined )
   5693       : attachment( attachment_ )
   5694       , layout( layout_ )
   5695     {
   5696     }
   5697 
   5698     AttachmentReference( VkAttachmentReference const & rhs )
   5699     {
   5700       memcpy( this, &rhs, sizeof( AttachmentReference ) );
   5701     }
   5702 
   5703     AttachmentReference& operator=( VkAttachmentReference const & rhs )
   5704     {
   5705       memcpy( this, &rhs, sizeof( AttachmentReference ) );
   5706       return *this;
   5707     }
   5708     AttachmentReference& setAttachment( uint32_t attachment_ )
   5709     {
   5710       attachment = attachment_;
   5711       return *this;
   5712     }
   5713 
   5714     AttachmentReference& setLayout( ImageLayout layout_ )
   5715     {
   5716       layout = layout_;
   5717       return *this;
   5718     }
   5719 
   5720     operator const VkAttachmentReference&() const
   5721     {
   5722       return *reinterpret_cast<const VkAttachmentReference*>(this);
   5723     }
   5724 
   5725     bool operator==( AttachmentReference const& rhs ) const
   5726     {
   5727       return ( attachment == rhs.attachment )
   5728           && ( layout == rhs.layout );
   5729     }
   5730 
   5731     bool operator!=( AttachmentReference const& rhs ) const
   5732     {
   5733       return !operator==( rhs );
   5734     }
   5735 
   5736     uint32_t attachment;
   5737     ImageLayout layout;
   5738   };
   5739   static_assert( sizeof( AttachmentReference ) == sizeof( VkAttachmentReference ), "struct and wrapper have different size!" );
   5740 
   5741   enum class AttachmentLoadOp
   5742   {
   5743     eLoad = VK_ATTACHMENT_LOAD_OP_LOAD,
   5744     eClear = VK_ATTACHMENT_LOAD_OP_CLEAR,
   5745     eDontCare = VK_ATTACHMENT_LOAD_OP_DONT_CARE
   5746   };
   5747 
   5748   enum class AttachmentStoreOp
   5749   {
   5750     eStore = VK_ATTACHMENT_STORE_OP_STORE,
   5751     eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE
   5752   };
   5753 
   5754   enum class ImageType
   5755   {
   5756     e1D = VK_IMAGE_TYPE_1D,
   5757     e2D = VK_IMAGE_TYPE_2D,
   5758     e3D = VK_IMAGE_TYPE_3D
   5759   };
   5760 
   5761   enum class ImageTiling
   5762   {
   5763     eOptimal = VK_IMAGE_TILING_OPTIMAL,
   5764     eLinear = VK_IMAGE_TILING_LINEAR
   5765   };
   5766 
   5767   enum class ImageViewType
   5768   {
   5769     e1D = VK_IMAGE_VIEW_TYPE_1D,
   5770     e2D = VK_IMAGE_VIEW_TYPE_2D,
   5771     e3D = VK_IMAGE_VIEW_TYPE_3D,
   5772     eCube = VK_IMAGE_VIEW_TYPE_CUBE,
   5773     e1DArray = VK_IMAGE_VIEW_TYPE_1D_ARRAY,
   5774     e2DArray = VK_IMAGE_VIEW_TYPE_2D_ARRAY,
   5775     eCubeArray = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
   5776   };
   5777 
   5778   enum class CommandBufferLevel
   5779   {
   5780     ePrimary = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
   5781     eSecondary = VK_COMMAND_BUFFER_LEVEL_SECONDARY
   5782   };
   5783 
   5784   enum class ComponentSwizzle
   5785   {
   5786     eIdentity = VK_COMPONENT_SWIZZLE_IDENTITY,
   5787     eZero = VK_COMPONENT_SWIZZLE_ZERO,
   5788     eOne = VK_COMPONENT_SWIZZLE_ONE,
   5789     eR = VK_COMPONENT_SWIZZLE_R,
   5790     eG = VK_COMPONENT_SWIZZLE_G,
   5791     eB = VK_COMPONENT_SWIZZLE_B,
   5792     eA = VK_COMPONENT_SWIZZLE_A
   5793   };
   5794 
   5795   struct ComponentMapping
   5796   {
   5797     ComponentMapping( ComponentSwizzle r_ = ComponentSwizzle::eIdentity, ComponentSwizzle g_ = ComponentSwizzle::eIdentity, ComponentSwizzle b_ = ComponentSwizzle::eIdentity, ComponentSwizzle a_ = ComponentSwizzle::eIdentity )
   5798       : r( r_ )
   5799       , g( g_ )
   5800       , b( b_ )
   5801       , a( a_ )
   5802     {
   5803     }
   5804 
   5805     ComponentMapping( VkComponentMapping const & rhs )
   5806     {
   5807       memcpy( this, &rhs, sizeof( ComponentMapping ) );
   5808     }
   5809 
   5810     ComponentMapping& operator=( VkComponentMapping const & rhs )
   5811     {
   5812       memcpy( this, &rhs, sizeof( ComponentMapping ) );
   5813       return *this;
   5814     }
   5815     ComponentMapping& setR( ComponentSwizzle r_ )
   5816     {
   5817       r = r_;
   5818       return *this;
   5819     }
   5820 
   5821     ComponentMapping& setG( ComponentSwizzle g_ )
   5822     {
   5823       g = g_;
   5824       return *this;
   5825     }
   5826 
   5827     ComponentMapping& setB( ComponentSwizzle b_ )
   5828     {
   5829       b = b_;
   5830       return *this;
   5831     }
   5832 
   5833     ComponentMapping& setA( ComponentSwizzle a_ )
   5834     {
   5835       a = a_;
   5836       return *this;
   5837     }
   5838 
   5839     operator const VkComponentMapping&() const
   5840     {
   5841       return *reinterpret_cast<const VkComponentMapping*>(this);
   5842     }
   5843 
   5844     bool operator==( ComponentMapping const& rhs ) const
   5845     {
   5846       return ( r == rhs.r )
   5847           && ( g == rhs.g )
   5848           && ( b == rhs.b )
   5849           && ( a == rhs.a );
   5850     }
   5851 
   5852     bool operator!=( ComponentMapping const& rhs ) const
   5853     {
   5854       return !operator==( rhs );
   5855     }
   5856 
   5857     ComponentSwizzle r;
   5858     ComponentSwizzle g;
   5859     ComponentSwizzle b;
   5860     ComponentSwizzle a;
   5861   };
   5862   static_assert( sizeof( ComponentMapping ) == sizeof( VkComponentMapping ), "struct and wrapper have different size!" );
   5863 
   5864   enum class DescriptorType
   5865   {
   5866     eSampler = VK_DESCRIPTOR_TYPE_SAMPLER,
   5867     eCombinedImageSampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
   5868     eSampledImage = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
   5869     eStorageImage = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
   5870     eUniformTexelBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
   5871     eStorageTexelBuffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
   5872     eUniformBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
   5873     eStorageBuffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
   5874     eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
   5875     eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
   5876     eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
   5877   };
   5878 
   5879   struct DescriptorPoolSize
   5880   {
   5881     DescriptorPoolSize( DescriptorType type_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0 )
   5882       : type( type_ )
   5883       , descriptorCount( descriptorCount_ )
   5884     {
   5885     }
   5886 
   5887     DescriptorPoolSize( VkDescriptorPoolSize const & rhs )
   5888     {
   5889       memcpy( this, &rhs, sizeof( DescriptorPoolSize ) );
   5890     }
   5891 
   5892     DescriptorPoolSize& operator=( VkDescriptorPoolSize const & rhs )
   5893     {
   5894       memcpy( this, &rhs, sizeof( DescriptorPoolSize ) );
   5895       return *this;
   5896     }
   5897     DescriptorPoolSize& setType( DescriptorType type_ )
   5898     {
   5899       type = type_;
   5900       return *this;
   5901     }
   5902 
   5903     DescriptorPoolSize& setDescriptorCount( uint32_t descriptorCount_ )
   5904     {
   5905       descriptorCount = descriptorCount_;
   5906       return *this;
   5907     }
   5908 
   5909     operator const VkDescriptorPoolSize&() const
   5910     {
   5911       return *reinterpret_cast<const VkDescriptorPoolSize*>(this);
   5912     }
   5913 
   5914     bool operator==( DescriptorPoolSize const& rhs ) const
   5915     {
   5916       return ( type == rhs.type )
   5917           && ( descriptorCount == rhs.descriptorCount );
   5918     }
   5919 
   5920     bool operator!=( DescriptorPoolSize const& rhs ) const
   5921     {
   5922       return !operator==( rhs );
   5923     }
   5924 
   5925     DescriptorType type;
   5926     uint32_t descriptorCount;
   5927   };
   5928   static_assert( sizeof( DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ), "struct and wrapper have different size!" );
   5929 
   5930   struct DescriptorUpdateTemplateEntryKHR
   5931   {
   5932     DescriptorUpdateTemplateEntryKHR( uint32_t dstBinding_ = 0, uint32_t dstArrayElement_ = 0, uint32_t descriptorCount_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, size_t offset_ = 0, size_t stride_ = 0 )
   5933       : dstBinding( dstBinding_ )
   5934       , dstArrayElement( dstArrayElement_ )
   5935       , descriptorCount( descriptorCount_ )
   5936       , descriptorType( descriptorType_ )
   5937       , offset( offset_ )
   5938       , stride( stride_ )
   5939     {
   5940     }
   5941 
   5942     DescriptorUpdateTemplateEntryKHR( VkDescriptorUpdateTemplateEntryKHR const & rhs )
   5943     {
   5944       memcpy( this, &rhs, sizeof( DescriptorUpdateTemplateEntryKHR ) );
   5945     }
   5946 
   5947     DescriptorUpdateTemplateEntryKHR& operator=( VkDescriptorUpdateTemplateEntryKHR const & rhs )
   5948     {
   5949       memcpy( this, &rhs, sizeof( DescriptorUpdateTemplateEntryKHR ) );
   5950       return *this;
   5951     }
   5952     DescriptorUpdateTemplateEntryKHR& setDstBinding( uint32_t dstBinding_ )
   5953     {
   5954       dstBinding = dstBinding_;
   5955       return *this;
   5956     }
   5957 
   5958     DescriptorUpdateTemplateEntryKHR& setDstArrayElement( uint32_t dstArrayElement_ )
   5959     {
   5960       dstArrayElement = dstArrayElement_;
   5961       return *this;
   5962     }
   5963 
   5964     DescriptorUpdateTemplateEntryKHR& setDescriptorCount( uint32_t descriptorCount_ )
   5965     {
   5966       descriptorCount = descriptorCount_;
   5967       return *this;
   5968     }
   5969 
   5970     DescriptorUpdateTemplateEntryKHR& setDescriptorType( DescriptorType descriptorType_ )
   5971     {
   5972       descriptorType = descriptorType_;
   5973       return *this;
   5974     }
   5975 
   5976     DescriptorUpdateTemplateEntryKHR& setOffset( size_t offset_ )
   5977     {
   5978       offset = offset_;
   5979       return *this;
   5980     }
   5981 
   5982     DescriptorUpdateTemplateEntryKHR& setStride( size_t stride_ )
   5983     {
   5984       stride = stride_;
   5985       return *this;
   5986     }
   5987 
   5988     operator const VkDescriptorUpdateTemplateEntryKHR&() const
   5989     {
   5990       return *reinterpret_cast<const VkDescriptorUpdateTemplateEntryKHR*>(this);
   5991     }
   5992 
   5993     bool operator==( DescriptorUpdateTemplateEntryKHR const& rhs ) const
   5994     {
   5995       return ( dstBinding == rhs.dstBinding )
   5996           && ( dstArrayElement == rhs.dstArrayElement )
   5997           && ( descriptorCount == rhs.descriptorCount )
   5998           && ( descriptorType == rhs.descriptorType )
   5999           && ( offset == rhs.offset )
   6000           && ( stride == rhs.stride );
   6001     }
   6002 
   6003     bool operator!=( DescriptorUpdateTemplateEntryKHR const& rhs ) const
   6004     {
   6005       return !operator==( rhs );
   6006     }
   6007 
   6008     uint32_t dstBinding;
   6009     uint32_t dstArrayElement;
   6010     uint32_t descriptorCount;
   6011     DescriptorType descriptorType;
   6012     size_t offset;
   6013     size_t stride;
   6014   };
   6015   static_assert( sizeof( DescriptorUpdateTemplateEntryKHR ) == sizeof( VkDescriptorUpdateTemplateEntryKHR ), "struct and wrapper have different size!" );
   6016 
   6017   enum class QueryType
   6018   {
   6019     eOcclusion = VK_QUERY_TYPE_OCCLUSION,
   6020     ePipelineStatistics = VK_QUERY_TYPE_PIPELINE_STATISTICS,
   6021     eTimestamp = VK_QUERY_TYPE_TIMESTAMP
   6022   };
   6023 
   6024   enum class BorderColor
   6025   {
   6026     eFloatTransparentBlack = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
   6027     eIntTransparentBlack = VK_BORDER_COLOR_INT_TRANSPARENT_BLACK,
   6028     eFloatOpaqueBlack = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK,
   6029     eIntOpaqueBlack = VK_BORDER_COLOR_INT_OPAQUE_BLACK,
   6030     eFloatOpaqueWhite = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE,
   6031     eIntOpaqueWhite = VK_BORDER_COLOR_INT_OPAQUE_WHITE
   6032   };
   6033 
   6034   enum class PipelineBindPoint
   6035   {
   6036     eGraphics = VK_PIPELINE_BIND_POINT_GRAPHICS,
   6037     eCompute = VK_PIPELINE_BIND_POINT_COMPUTE
   6038   };
   6039 
   6040   enum class PipelineCacheHeaderVersion
   6041   {
   6042     eOne = VK_PIPELINE_CACHE_HEADER_VERSION_ONE
   6043   };
   6044 
   6045   enum class PrimitiveTopology
   6046   {
   6047     ePointList = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
   6048     eLineList = VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
   6049     eLineStrip = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
   6050     eTriangleList = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
   6051     eTriangleStrip = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
   6052     eTriangleFan = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,
   6053     eLineListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
   6054     eLineStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
   6055     eTriangleListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY,
   6056     eTriangleStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY,
   6057     ePatchList = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
   6058   };
   6059 
   6060   enum class SharingMode
   6061   {
   6062     eExclusive = VK_SHARING_MODE_EXCLUSIVE,
   6063     eConcurrent = VK_SHARING_MODE_CONCURRENT
   6064   };
   6065 
   6066   enum class IndexType
   6067   {
   6068     eUint16 = VK_INDEX_TYPE_UINT16,
   6069     eUint32 = VK_INDEX_TYPE_UINT32
   6070   };
   6071 
   6072   enum class Filter
   6073   {
   6074     eNearest = VK_FILTER_NEAREST,
   6075     eLinear = VK_FILTER_LINEAR,
   6076     eCubicIMG = VK_FILTER_CUBIC_IMG
   6077   };
   6078 
   6079   enum class SamplerMipmapMode
   6080   {
   6081     eNearest = VK_SAMPLER_MIPMAP_MODE_NEAREST,
   6082     eLinear = VK_SAMPLER_MIPMAP_MODE_LINEAR
   6083   };
   6084 
   6085   enum class SamplerAddressMode
   6086   {
   6087     eRepeat = VK_SAMPLER_ADDRESS_MODE_REPEAT,
   6088     eMirroredRepeat = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
   6089     eClampToEdge = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
   6090     eClampToBorder = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
   6091     eMirrorClampToEdge = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
   6092   };
   6093 
   6094   enum class CompareOp
   6095   {
   6096     eNever = VK_COMPARE_OP_NEVER,
   6097     eLess = VK_COMPARE_OP_LESS,
   6098     eEqual = VK_COMPARE_OP_EQUAL,
   6099     eLessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL,
   6100     eGreater = VK_COMPARE_OP_GREATER,
   6101     eNotEqual = VK_COMPARE_OP_NOT_EQUAL,
   6102     eGreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL,
   6103     eAlways = VK_COMPARE_OP_ALWAYS
   6104   };
   6105 
   6106   enum class PolygonMode
   6107   {
   6108     eFill = VK_POLYGON_MODE_FILL,
   6109     eLine = VK_POLYGON_MODE_LINE,
   6110     ePoint = VK_POLYGON_MODE_POINT,
   6111     eFillRectangleNV = VK_POLYGON_MODE_FILL_RECTANGLE_NV
   6112   };
   6113 
   6114   enum class CullModeFlagBits
   6115   {
   6116     eNone = VK_CULL_MODE_NONE,
   6117     eFront = VK_CULL_MODE_FRONT_BIT,
   6118     eBack = VK_CULL_MODE_BACK_BIT,
   6119     eFrontAndBack = VK_CULL_MODE_FRONT_AND_BACK
   6120   };
   6121 
   6122   using CullModeFlags = Flags<CullModeFlagBits, VkCullModeFlags>;
   6123 
   6124   VULKAN_HPP_INLINE CullModeFlags operator|( CullModeFlagBits bit0, CullModeFlagBits bit1 )
   6125   {
   6126     return CullModeFlags( bit0 ) | bit1;
   6127   }
   6128 
   6129   VULKAN_HPP_INLINE CullModeFlags operator~( CullModeFlagBits bits )
   6130   {
   6131     return ~( CullModeFlags( bits ) );
   6132   }
   6133 
   6134   template <> struct FlagTraits<CullModeFlagBits>
   6135   {
   6136     enum
   6137     {
   6138       allFlags = VkFlags(CullModeFlagBits::eNone) | VkFlags(CullModeFlagBits::eFront) | VkFlags(CullModeFlagBits::eBack) | VkFlags(CullModeFlagBits::eFrontAndBack)
   6139     };
   6140   };
   6141 
   6142   enum class FrontFace
   6143   {
   6144     eCounterClockwise = VK_FRONT_FACE_COUNTER_CLOCKWISE,
   6145     eClockwise = VK_FRONT_FACE_CLOCKWISE
   6146   };
   6147 
   6148   enum class BlendFactor
   6149   {
   6150     eZero = VK_BLEND_FACTOR_ZERO,
   6151     eOne = VK_BLEND_FACTOR_ONE,
   6152     eSrcColor = VK_BLEND_FACTOR_SRC_COLOR,
   6153     eOneMinusSrcColor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
   6154     eDstColor = VK_BLEND_FACTOR_DST_COLOR,
   6155     eOneMinusDstColor = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR,
   6156     eSrcAlpha = VK_BLEND_FACTOR_SRC_ALPHA,
   6157     eOneMinusSrcAlpha = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
   6158     eDstAlpha = VK_BLEND_FACTOR_DST_ALPHA,
   6159     eOneMinusDstAlpha = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA,
   6160     eConstantColor = VK_BLEND_FACTOR_CONSTANT_COLOR,
   6161     eOneMinusConstantColor = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
   6162     eConstantAlpha = VK_BLEND_FACTOR_CONSTANT_ALPHA,
   6163     eOneMinusConstantAlpha = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
   6164     eSrcAlphaSaturate = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE,
   6165     eSrc1Color = VK_BLEND_FACTOR_SRC1_COLOR,
   6166     eOneMinusSrc1Color = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
   6167     eSrc1Alpha = VK_BLEND_FACTOR_SRC1_ALPHA,
   6168     eOneMinusSrc1Alpha = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
   6169   };
   6170 
   6171   enum class BlendOp
   6172   {
   6173     eAdd = VK_BLEND_OP_ADD,
   6174     eSubtract = VK_BLEND_OP_SUBTRACT,
   6175     eReverseSubtract = VK_BLEND_OP_REVERSE_SUBTRACT,
   6176     eMin = VK_BLEND_OP_MIN,
   6177     eMax = VK_BLEND_OP_MAX,
   6178     eZeroEXT = VK_BLEND_OP_ZERO_EXT,
   6179     eSrcEXT = VK_BLEND_OP_SRC_EXT,
   6180     eDstEXT = VK_BLEND_OP_DST_EXT,
   6181     eSrcOverEXT = VK_BLEND_OP_SRC_OVER_EXT,
   6182     eDstOverEXT = VK_BLEND_OP_DST_OVER_EXT,
   6183     eSrcInEXT = VK_BLEND_OP_SRC_IN_EXT,
   6184     eDstInEXT = VK_BLEND_OP_DST_IN_EXT,
   6185     eSrcOutEXT = VK_BLEND_OP_SRC_OUT_EXT,
   6186     eDstOutEXT = VK_BLEND_OP_DST_OUT_EXT,
   6187     eSrcAtopEXT = VK_BLEND_OP_SRC_ATOP_EXT,
   6188     eDstAtopEXT = VK_BLEND_OP_DST_ATOP_EXT,
   6189     eXorEXT = VK_BLEND_OP_XOR_EXT,
   6190     eMultiplyEXT = VK_BLEND_OP_MULTIPLY_EXT,
   6191     eScreenEXT = VK_BLEND_OP_SCREEN_EXT,
   6192     eOverlayEXT = VK_BLEND_OP_OVERLAY_EXT,
   6193     eDarkenEXT = VK_BLEND_OP_DARKEN_EXT,
   6194     eLightenEXT = VK_BLEND_OP_LIGHTEN_EXT,
   6195     eColordodgeEXT = VK_BLEND_OP_COLORDODGE_EXT,
   6196     eColorburnEXT = VK_BLEND_OP_COLORBURN_EXT,
   6197     eHardlightEXT = VK_BLEND_OP_HARDLIGHT_EXT,
   6198     eSoftlightEXT = VK_BLEND_OP_SOFTLIGHT_EXT,
   6199     eDifferenceEXT = VK_BLEND_OP_DIFFERENCE_EXT,
   6200     eExclusionEXT = VK_BLEND_OP_EXCLUSION_EXT,
   6201     eInvertEXT = VK_BLEND_OP_INVERT_EXT,
   6202     eInvertRgbEXT = VK_BLEND_OP_INVERT_RGB_EXT,
   6203     eLineardodgeEXT = VK_BLEND_OP_LINEARDODGE_EXT,
   6204     eLinearburnEXT = VK_BLEND_OP_LINEARBURN_EXT,
   6205     eVividlightEXT = VK_BLEND_OP_VIVIDLIGHT_EXT,
   6206     eLinearlightEXT = VK_BLEND_OP_LINEARLIGHT_EXT,
   6207     ePinlightEXT = VK_BLEND_OP_PINLIGHT_EXT,
   6208     eHardmixEXT = VK_BLEND_OP_HARDMIX_EXT,
   6209     eHslHueEXT = VK_BLEND_OP_HSL_HUE_EXT,
   6210     eHslSaturationEXT = VK_BLEND_OP_HSL_SATURATION_EXT,
   6211     eHslColorEXT = VK_BLEND_OP_HSL_COLOR_EXT,
   6212     eHslLuminosityEXT = VK_BLEND_OP_HSL_LUMINOSITY_EXT,
   6213     ePlusEXT = VK_BLEND_OP_PLUS_EXT,
   6214     ePlusClampedEXT = VK_BLEND_OP_PLUS_CLAMPED_EXT,
   6215     ePlusClampedAlphaEXT = VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT,
   6216     ePlusDarkerEXT = VK_BLEND_OP_PLUS_DARKER_EXT,
   6217     eMinusEXT = VK_BLEND_OP_MINUS_EXT,
   6218     eMinusClampedEXT = VK_BLEND_OP_MINUS_CLAMPED_EXT,
   6219     eContrastEXT = VK_BLEND_OP_CONTRAST_EXT,
   6220     eInvertOvgEXT = VK_BLEND_OP_INVERT_OVG_EXT,
   6221     eRedEXT = VK_BLEND_OP_RED_EXT,
   6222     eGreenEXT = VK_BLEND_OP_GREEN_EXT,
   6223     eBlueEXT = VK_BLEND_OP_BLUE_EXT
   6224   };
   6225 
   6226   enum class StencilOp
   6227   {
   6228     eKeep = VK_STENCIL_OP_KEEP,
   6229     eZero = VK_STENCIL_OP_ZERO,
   6230     eReplace = VK_STENCIL_OP_REPLACE,
   6231     eIncrementAndClamp = VK_STENCIL_OP_INCREMENT_AND_CLAMP,
   6232     eDecrementAndClamp = VK_STENCIL_OP_DECREMENT_AND_CLAMP,
   6233     eInvert = VK_STENCIL_OP_INVERT,
   6234     eIncrementAndWrap = VK_STENCIL_OP_INCREMENT_AND_WRAP,
   6235     eDecrementAndWrap = VK_STENCIL_OP_DECREMENT_AND_WRAP
   6236   };
   6237 
   6238   struct StencilOpState
   6239   {
   6240     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 )
   6241       : failOp( failOp_ )
   6242       , passOp( passOp_ )
   6243       , depthFailOp( depthFailOp_ )
   6244       , compareOp( compareOp_ )
   6245       , compareMask( compareMask_ )
   6246       , writeMask( writeMask_ )
   6247       , reference( reference_ )
   6248     {
   6249     }
   6250 
   6251     StencilOpState( VkStencilOpState const & rhs )
   6252     {
   6253       memcpy( this, &rhs, sizeof( StencilOpState ) );
   6254     }
   6255 
   6256     StencilOpState& operator=( VkStencilOpState const & rhs )
   6257     {
   6258       memcpy( this, &rhs, sizeof( StencilOpState ) );
   6259       return *this;
   6260     }
   6261     StencilOpState& setFailOp( StencilOp failOp_ )
   6262     {
   6263       failOp = failOp_;
   6264       return *this;
   6265     }
   6266 
   6267     StencilOpState& setPassOp( StencilOp passOp_ )
   6268     {
   6269       passOp = passOp_;
   6270       return *this;
   6271     }
   6272 
   6273     StencilOpState& setDepthFailOp( StencilOp depthFailOp_ )
   6274     {
   6275       depthFailOp = depthFailOp_;
   6276       return *this;
   6277     }
   6278 
   6279     StencilOpState& setCompareOp( CompareOp compareOp_ )
   6280     {
   6281       compareOp = compareOp_;
   6282       return *this;
   6283     }
   6284 
   6285     StencilOpState& setCompareMask( uint32_t compareMask_ )
   6286     {
   6287       compareMask = compareMask_;
   6288       return *this;
   6289     }
   6290 
   6291     StencilOpState& setWriteMask( uint32_t writeMask_ )
   6292     {
   6293       writeMask = writeMask_;
   6294       return *this;
   6295     }
   6296 
   6297     StencilOpState& setReference( uint32_t reference_ )
   6298     {
   6299       reference = reference_;
   6300       return *this;
   6301     }
   6302 
   6303     operator const VkStencilOpState&() const
   6304     {
   6305       return *reinterpret_cast<const VkStencilOpState*>(this);
   6306     }
   6307 
   6308     bool operator==( StencilOpState const& rhs ) const
   6309     {
   6310       return ( failOp == rhs.failOp )
   6311           && ( passOp == rhs.passOp )
   6312           && ( depthFailOp == rhs.depthFailOp )
   6313           && ( compareOp == rhs.compareOp )
   6314           && ( compareMask == rhs.compareMask )
   6315           && ( writeMask == rhs.writeMask )
   6316           && ( reference == rhs.reference );
   6317     }
   6318 
   6319     bool operator!=( StencilOpState const& rhs ) const
   6320     {
   6321       return !operator==( rhs );
   6322     }
   6323 
   6324     StencilOp failOp;
   6325     StencilOp passOp;
   6326     StencilOp depthFailOp;
   6327     CompareOp compareOp;
   6328     uint32_t compareMask;
   6329     uint32_t writeMask;
   6330     uint32_t reference;
   6331   };
   6332   static_assert( sizeof( StencilOpState ) == sizeof( VkStencilOpState ), "struct and wrapper have different size!" );
   6333 
   6334   enum class LogicOp
   6335   {
   6336     eClear = VK_LOGIC_OP_CLEAR,
   6337     eAnd = VK_LOGIC_OP_AND,
   6338     eAndReverse = VK_LOGIC_OP_AND_REVERSE,
   6339     eCopy = VK_LOGIC_OP_COPY,
   6340     eAndInverted = VK_LOGIC_OP_AND_INVERTED,
   6341     eNoOp = VK_LOGIC_OP_NO_OP,
   6342     eXor = VK_LOGIC_OP_XOR,
   6343     eOr = VK_LOGIC_OP_OR,
   6344     eNor = VK_LOGIC_OP_NOR,
   6345     eEquivalent = VK_LOGIC_OP_EQUIVALENT,
   6346     eInvert = VK_LOGIC_OP_INVERT,
   6347     eOrReverse = VK_LOGIC_OP_OR_REVERSE,
   6348     eCopyInverted = VK_LOGIC_OP_COPY_INVERTED,
   6349     eOrInverted = VK_LOGIC_OP_OR_INVERTED,
   6350     eNand = VK_LOGIC_OP_NAND,
   6351     eSet = VK_LOGIC_OP_SET
   6352   };
   6353 
   6354   enum class InternalAllocationType
   6355   {
   6356     eExecutable = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE
   6357   };
   6358 
   6359   enum class SystemAllocationScope
   6360   {
   6361     eCommand = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
   6362     eObject = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT,
   6363     eCache = VK_SYSTEM_ALLOCATION_SCOPE_CACHE,
   6364     eDevice = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE,
   6365     eInstance = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE
   6366   };
   6367 
   6368   enum class PhysicalDeviceType
   6369   {
   6370     eOther = VK_PHYSICAL_DEVICE_TYPE_OTHER,
   6371     eIntegratedGpu = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
   6372     eDiscreteGpu = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
   6373     eVirtualGpu = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU,
   6374     eCpu = VK_PHYSICAL_DEVICE_TYPE_CPU
   6375   };
   6376 
   6377   enum class VertexInputRate
   6378   {
   6379     eVertex = VK_VERTEX_INPUT_RATE_VERTEX,
   6380     eInstance = VK_VERTEX_INPUT_RATE_INSTANCE
   6381   };
   6382 
   6383   struct VertexInputBindingDescription
   6384   {
   6385     VertexInputBindingDescription( uint32_t binding_ = 0, uint32_t stride_ = 0, VertexInputRate inputRate_ = VertexInputRate::eVertex )
   6386       : binding( binding_ )
   6387       , stride( stride_ )
   6388       , inputRate( inputRate_ )
   6389     {
   6390     }
   6391 
   6392     VertexInputBindingDescription( VkVertexInputBindingDescription const & rhs )
   6393     {
   6394       memcpy( this, &rhs, sizeof( VertexInputBindingDescription ) );
   6395     }
   6396 
   6397     VertexInputBindingDescription& operator=( VkVertexInputBindingDescription const & rhs )
   6398     {
   6399       memcpy( this, &rhs, sizeof( VertexInputBindingDescription ) );
   6400       return *this;
   6401     }
   6402     VertexInputBindingDescription& setBinding( uint32_t binding_ )
   6403     {
   6404       binding = binding_;
   6405       return *this;
   6406     }
   6407 
   6408     VertexInputBindingDescription& setStride( uint32_t stride_ )
   6409     {
   6410       stride = stride_;
   6411       return *this;
   6412     }
   6413 
   6414     VertexInputBindingDescription& setInputRate( VertexInputRate inputRate_ )
   6415     {
   6416       inputRate = inputRate_;
   6417       return *this;
   6418     }
   6419 
   6420     operator const VkVertexInputBindingDescription&() const
   6421     {
   6422       return *reinterpret_cast<const VkVertexInputBindingDescription*>(this);
   6423     }
   6424 
   6425     bool operator==( VertexInputBindingDescription const& rhs ) const
   6426     {
   6427       return ( binding == rhs.binding )
   6428           && ( stride == rhs.stride )
   6429           && ( inputRate == rhs.inputRate );
   6430     }
   6431 
   6432     bool operator!=( VertexInputBindingDescription const& rhs ) const
   6433     {
   6434       return !operator==( rhs );
   6435     }
   6436 
   6437     uint32_t binding;
   6438     uint32_t stride;
   6439     VertexInputRate inputRate;
   6440   };
   6441   static_assert( sizeof( VertexInputBindingDescription ) == sizeof( VkVertexInputBindingDescription ), "struct and wrapper have different size!" );
   6442 
   6443   enum class Format
   6444   {
   6445     eUndefined = VK_FORMAT_UNDEFINED,
   6446     eR4G4UnormPack8 = VK_FORMAT_R4G4_UNORM_PACK8,
   6447     eR4G4B4A4UnormPack16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16,
   6448     eB4G4R4A4UnormPack16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16,
   6449     eR5G6B5UnormPack16 = VK_FORMAT_R5G6B5_UNORM_PACK16,
   6450     eB5G6R5UnormPack16 = VK_FORMAT_B5G6R5_UNORM_PACK16,
   6451     eR5G5B5A1UnormPack16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16,
   6452     eB5G5R5A1UnormPack16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16,
   6453     eA1R5G5B5UnormPack16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16,
   6454     eR8Unorm = VK_FORMAT_R8_UNORM,
   6455     eR8Snorm = VK_FORMAT_R8_SNORM,
   6456     eR8Uscaled = VK_FORMAT_R8_USCALED,
   6457     eR8Sscaled = VK_FORMAT_R8_SSCALED,
   6458     eR8Uint = VK_FORMAT_R8_UINT,
   6459     eR8Sint = VK_FORMAT_R8_SINT,
   6460     eR8Srgb = VK_FORMAT_R8_SRGB,
   6461     eR8G8Unorm = VK_FORMAT_R8G8_UNORM,
   6462     eR8G8Snorm = VK_FORMAT_R8G8_SNORM,
   6463     eR8G8Uscaled = VK_FORMAT_R8G8_USCALED,
   6464     eR8G8Sscaled = VK_FORMAT_R8G8_SSCALED,
   6465     eR8G8Uint = VK_FORMAT_R8G8_UINT,
   6466     eR8G8Sint = VK_FORMAT_R8G8_SINT,
   6467     eR8G8Srgb = VK_FORMAT_R8G8_SRGB,
   6468     eR8G8B8Unorm = VK_FORMAT_R8G8B8_UNORM,
   6469     eR8G8B8Snorm = VK_FORMAT_R8G8B8_SNORM,
   6470     eR8G8B8Uscaled = VK_FORMAT_R8G8B8_USCALED,
   6471     eR8G8B8Sscaled = VK_FORMAT_R8G8B8_SSCALED,
   6472     eR8G8B8Uint = VK_FORMAT_R8G8B8_UINT,
   6473     eR8G8B8Sint = VK_FORMAT_R8G8B8_SINT,
   6474     eR8G8B8Srgb = VK_FORMAT_R8G8B8_SRGB,
   6475     eB8G8R8Unorm = VK_FORMAT_B8G8R8_UNORM,
   6476     eB8G8R8Snorm = VK_FORMAT_B8G8R8_SNORM,
   6477     eB8G8R8Uscaled = VK_FORMAT_B8G8R8_USCALED,
   6478     eB8G8R8Sscaled = VK_FORMAT_B8G8R8_SSCALED,
   6479     eB8G8R8Uint = VK_FORMAT_B8G8R8_UINT,
   6480     eB8G8R8Sint = VK_FORMAT_B8G8R8_SINT,
   6481     eB8G8R8Srgb = VK_FORMAT_B8G8R8_SRGB,
   6482     eR8G8B8A8Unorm = VK_FORMAT_R8G8B8A8_UNORM,
   6483     eR8G8B8A8Snorm = VK_FORMAT_R8G8B8A8_SNORM,
   6484     eR8G8B8A8Uscaled = VK_FORMAT_R8G8B8A8_USCALED,
   6485     eR8G8B8A8Sscaled = VK_FORMAT_R8G8B8A8_SSCALED,
   6486     eR8G8B8A8Uint = VK_FORMAT_R8G8B8A8_UINT,
   6487     eR8G8B8A8Sint = VK_FORMAT_R8G8B8A8_SINT,
   6488     eR8G8B8A8Srgb = VK_FORMAT_R8G8B8A8_SRGB,
   6489     eB8G8R8A8Unorm = VK_FORMAT_B8G8R8A8_UNORM,
   6490     eB8G8R8A8Snorm = VK_FORMAT_B8G8R8A8_SNORM,
   6491     eB8G8R8A8Uscaled = VK_FORMAT_B8G8R8A8_USCALED,
   6492     eB8G8R8A8Sscaled = VK_FORMAT_B8G8R8A8_SSCALED,
   6493     eB8G8R8A8Uint = VK_FORMAT_B8G8R8A8_UINT,
   6494     eB8G8R8A8Sint = VK_FORMAT_B8G8R8A8_SINT,
   6495     eB8G8R8A8Srgb = VK_FORMAT_B8G8R8A8_SRGB,
   6496     eA8B8G8R8UnormPack32 = VK_FORMAT_A8B8G8R8_UNORM_PACK32,
   6497     eA8B8G8R8SnormPack32 = VK_FORMAT_A8B8G8R8_SNORM_PACK32,
   6498     eA8B8G8R8UscaledPack32 = VK_FORMAT_A8B8G8R8_USCALED_PACK32,
   6499     eA8B8G8R8SscaledPack32 = VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
   6500     eA8B8G8R8UintPack32 = VK_FORMAT_A8B8G8R8_UINT_PACK32,
   6501     eA8B8G8R8SintPack32 = VK_FORMAT_A8B8G8R8_SINT_PACK32,
   6502     eA8B8G8R8SrgbPack32 = VK_FORMAT_A8B8G8R8_SRGB_PACK32,
   6503     eA2R10G10B10UnormPack32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32,
   6504     eA2R10G10B10SnormPack32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32,
   6505     eA2R10G10B10UscaledPack32 = VK_FORMAT_A2R10G10B10_USCALED_PACK32,
   6506     eA2R10G10B10SscaledPack32 = VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
   6507     eA2R10G10B10UintPack32 = VK_FORMAT_A2R10G10B10_UINT_PACK32,
   6508     eA2R10G10B10SintPack32 = VK_FORMAT_A2R10G10B10_SINT_PACK32,
   6509     eA2B10G10R10UnormPack32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32,
   6510     eA2B10G10R10SnormPack32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32,
   6511     eA2B10G10R10UscaledPack32 = VK_FORMAT_A2B10G10R10_USCALED_PACK32,
   6512     eA2B10G10R10SscaledPack32 = VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
   6513     eA2B10G10R10UintPack32 = VK_FORMAT_A2B10G10R10_UINT_PACK32,
   6514     eA2B10G10R10SintPack32 = VK_FORMAT_A2B10G10R10_SINT_PACK32,
   6515     eR16Unorm = VK_FORMAT_R16_UNORM,
   6516     eR16Snorm = VK_FORMAT_R16_SNORM,
   6517     eR16Uscaled = VK_FORMAT_R16_USCALED,
   6518     eR16Sscaled = VK_FORMAT_R16_SSCALED,
   6519     eR16Uint = VK_FORMAT_R16_UINT,
   6520     eR16Sint = VK_FORMAT_R16_SINT,
   6521     eR16Sfloat = VK_FORMAT_R16_SFLOAT,
   6522     eR16G16Unorm = VK_FORMAT_R16G16_UNORM,
   6523     eR16G16Snorm = VK_FORMAT_R16G16_SNORM,
   6524     eR16G16Uscaled = VK_FORMAT_R16G16_USCALED,
   6525     eR16G16Sscaled = VK_FORMAT_R16G16_SSCALED,
   6526     eR16G16Uint = VK_FORMAT_R16G16_UINT,
   6527     eR16G16Sint = VK_FORMAT_R16G16_SINT,
   6528     eR16G16Sfloat = VK_FORMAT_R16G16_SFLOAT,
   6529     eR16G16B16Unorm = VK_FORMAT_R16G16B16_UNORM,
   6530     eR16G16B16Snorm = VK_FORMAT_R16G16B16_SNORM,
   6531     eR16G16B16Uscaled = VK_FORMAT_R16G16B16_USCALED,
   6532     eR16G16B16Sscaled = VK_FORMAT_R16G16B16_SSCALED,
   6533     eR16G16B16Uint = VK_FORMAT_R16G16B16_UINT,
   6534     eR16G16B16Sint = VK_FORMAT_R16G16B16_SINT,
   6535     eR16G16B16Sfloat = VK_FORMAT_R16G16B16_SFLOAT,
   6536     eR16G16B16A16Unorm = VK_FORMAT_R16G16B16A16_UNORM,
   6537     eR16G16B16A16Snorm = VK_FORMAT_R16G16B16A16_SNORM,
   6538     eR16G16B16A16Uscaled = VK_FORMAT_R16G16B16A16_USCALED,
   6539     eR16G16B16A16Sscaled = VK_FORMAT_R16G16B16A16_SSCALED,
   6540     eR16G16B16A16Uint = VK_FORMAT_R16G16B16A16_UINT,
   6541     eR16G16B16A16Sint = VK_FORMAT_R16G16B16A16_SINT,
   6542     eR16G16B16A16Sfloat = VK_FORMAT_R16G16B16A16_SFLOAT,
   6543     eR32Uint = VK_FORMAT_R32_UINT,
   6544     eR32Sint = VK_FORMAT_R32_SINT,
   6545     eR32Sfloat = VK_FORMAT_R32_SFLOAT,
   6546     eR32G32Uint = VK_FORMAT_R32G32_UINT,
   6547     eR32G32Sint = VK_FORMAT_R32G32_SINT,
   6548     eR32G32Sfloat = VK_FORMAT_R32G32_SFLOAT,
   6549     eR32G32B32Uint = VK_FORMAT_R32G32B32_UINT,
   6550     eR32G32B32Sint = VK_FORMAT_R32G32B32_SINT,
   6551     eR32G32B32Sfloat = VK_FORMAT_R32G32B32_SFLOAT,
   6552     eR32G32B32A32Uint = VK_FORMAT_R32G32B32A32_UINT,
   6553     eR32G32B32A32Sint = VK_FORMAT_R32G32B32A32_SINT,
   6554     eR32G32B32A32Sfloat = VK_FORMAT_R32G32B32A32_SFLOAT,
   6555     eR64Uint = VK_FORMAT_R64_UINT,
   6556     eR64Sint = VK_FORMAT_R64_SINT,
   6557     eR64Sfloat = VK_FORMAT_R64_SFLOAT,
   6558     eR64G64Uint = VK_FORMAT_R64G64_UINT,
   6559     eR64G64Sint = VK_FORMAT_R64G64_SINT,
   6560     eR64G64Sfloat = VK_FORMAT_R64G64_SFLOAT,
   6561     eR64G64B64Uint = VK_FORMAT_R64G64B64_UINT,
   6562     eR64G64B64Sint = VK_FORMAT_R64G64B64_SINT,
   6563     eR64G64B64Sfloat = VK_FORMAT_R64G64B64_SFLOAT,
   6564     eR64G64B64A64Uint = VK_FORMAT_R64G64B64A64_UINT,
   6565     eR64G64B64A64Sint = VK_FORMAT_R64G64B64A64_SINT,
   6566     eR64G64B64A64Sfloat = VK_FORMAT_R64G64B64A64_SFLOAT,
   6567     eB10G11R11UfloatPack32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32,
   6568     eE5B9G9R9UfloatPack32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
   6569     eD16Unorm = VK_FORMAT_D16_UNORM,
   6570     eX8D24UnormPack32 = VK_FORMAT_X8_D24_UNORM_PACK32,
   6571     eD32Sfloat = VK_FORMAT_D32_SFLOAT,
   6572     eS8Uint = VK_FORMAT_S8_UINT,
   6573     eD16UnormS8Uint = VK_FORMAT_D16_UNORM_S8_UINT,
   6574     eD24UnormS8Uint = VK_FORMAT_D24_UNORM_S8_UINT,
   6575     eD32SfloatS8Uint = VK_FORMAT_D32_SFLOAT_S8_UINT,
   6576     eBc1RgbUnormBlock = VK_FORMAT_BC1_RGB_UNORM_BLOCK,
   6577     eBc1RgbSrgbBlock = VK_FORMAT_BC1_RGB_SRGB_BLOCK,
   6578     eBc1RgbaUnormBlock = VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
   6579     eBc1RgbaSrgbBlock = VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
   6580     eBc2UnormBlock = VK_FORMAT_BC2_UNORM_BLOCK,
   6581     eBc2SrgbBlock = VK_FORMAT_BC2_SRGB_BLOCK,
   6582     eBc3UnormBlock = VK_FORMAT_BC3_UNORM_BLOCK,
   6583     eBc3SrgbBlock = VK_FORMAT_BC3_SRGB_BLOCK,
   6584     eBc4UnormBlock = VK_FORMAT_BC4_UNORM_BLOCK,
   6585     eBc4SnormBlock = VK_FORMAT_BC4_SNORM_BLOCK,
   6586     eBc5UnormBlock = VK_FORMAT_BC5_UNORM_BLOCK,
   6587     eBc5SnormBlock = VK_FORMAT_BC5_SNORM_BLOCK,
   6588     eBc6HUfloatBlock = VK_FORMAT_BC6H_UFLOAT_BLOCK,
   6589     eBc6HSfloatBlock = VK_FORMAT_BC6H_SFLOAT_BLOCK,
   6590     eBc7UnormBlock = VK_FORMAT_BC7_UNORM_BLOCK,
   6591     eBc7SrgbBlock = VK_FORMAT_BC7_SRGB_BLOCK,
   6592     eEtc2R8G8B8UnormBlock = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
   6593     eEtc2R8G8B8SrgbBlock = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
   6594     eEtc2R8G8B8A1UnormBlock = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
   6595     eEtc2R8G8B8A1SrgbBlock = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
   6596     eEtc2R8G8B8A8UnormBlock = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
   6597     eEtc2R8G8B8A8SrgbBlock = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
   6598     eEacR11UnormBlock = VK_FORMAT_EAC_R11_UNORM_BLOCK,
   6599     eEacR11SnormBlock = VK_FORMAT_EAC_R11_SNORM_BLOCK,
   6600     eEacR11G11UnormBlock = VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
   6601     eEacR11G11SnormBlock = VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
   6602     eAstc4x4UnormBlock = VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
   6603     eAstc4x4SrgbBlock = VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
   6604     eAstc5x4UnormBlock = VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
   6605     eAstc5x4SrgbBlock = VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
   6606     eAstc5x5UnormBlock = VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
   6607     eAstc5x5SrgbBlock = VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
   6608     eAstc6x5UnormBlock = VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
   6609     eAstc6x5SrgbBlock = VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
   6610     eAstc6x6UnormBlock = VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
   6611     eAstc6x6SrgbBlock = VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
   6612     eAstc8x5UnormBlock = VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
   6613     eAstc8x5SrgbBlock = VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
   6614     eAstc8x6UnormBlock = VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
   6615     eAstc8x6SrgbBlock = VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
   6616     eAstc8x8UnormBlock = VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
   6617     eAstc8x8SrgbBlock = VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
   6618     eAstc10x5UnormBlock = VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
   6619     eAstc10x5SrgbBlock = VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
   6620     eAstc10x6UnormBlock = VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
   6621     eAstc10x6SrgbBlock = VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
   6622     eAstc10x8UnormBlock = VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
   6623     eAstc10x8SrgbBlock = VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
   6624     eAstc10x10UnormBlock = VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
   6625     eAstc10x10SrgbBlock = VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
   6626     eAstc12x10UnormBlock = VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
   6627     eAstc12x10SrgbBlock = VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
   6628     eAstc12x12UnormBlock = VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
   6629     eAstc12x12SrgbBlock = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
   6630     ePvrtc12BppUnormBlockIMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
   6631     ePvrtc14BppUnormBlockIMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
   6632     ePvrtc22BppUnormBlockIMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
   6633     ePvrtc24BppUnormBlockIMG = VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
   6634     ePvrtc12BppSrgbBlockIMG = VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
   6635     ePvrtc14BppSrgbBlockIMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
   6636     ePvrtc22BppSrgbBlockIMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
   6637     ePvrtc24BppSrgbBlockIMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,
   6638     eG8B8G8R8422UnormKHR = VK_FORMAT_G8B8G8R8_422_UNORM_KHR,
   6639     eB8G8R8G8422UnormKHR = VK_FORMAT_B8G8R8G8_422_UNORM_KHR,
   6640     eG8B8R83Plane420UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR,
   6641     eG8B8R82Plane420UnormKHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR,
   6642     eG8B8R83Plane422UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR,
   6643     eG8B8R82Plane422UnormKHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR,
   6644     eG8B8R83Plane444UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR,
   6645     eR10X6UnormPack16KHR = VK_FORMAT_R10X6_UNORM_PACK16_KHR,
   6646     eR10X6G10X6Unorm2Pack16KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR,
   6647     eR10X6G10X6B10X6A10X6Unorm4Pack16KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR,
   6648     eG10X6B10X6G10X6R10X6422Unorm4Pack16KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR,
   6649     eB10X6G10X6R10X6G10X6422Unorm4Pack16KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR,
   6650     eG10X6B10X6R10X63Plane420Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR,
   6651     eG10X6B10X6R10X62Plane420Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR,
   6652     eG10X6B10X6R10X63Plane422Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR,
   6653     eG10X6B10X6R10X62Plane422Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR,
   6654     eG10X6B10X6R10X63Plane444Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR,
   6655     eR12X4UnormPack16KHR = VK_FORMAT_R12X4_UNORM_PACK16_KHR,
   6656     eR12X4G12X4Unorm2Pack16KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR,
   6657     eR12X4G12X4B12X4A12X4Unorm4Pack16KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR,
   6658     eG12X4B12X4G12X4R12X4422Unorm4Pack16KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR,
   6659     eB12X4G12X4R12X4G12X4422Unorm4Pack16KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR,
   6660     eG12X4B12X4R12X43Plane420Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR,
   6661     eG12X4B12X4R12X42Plane420Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR,
   6662     eG12X4B12X4R12X43Plane422Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR,
   6663     eG12X4B12X4R12X42Plane422Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR,
   6664     eG12X4B12X4R12X43Plane444Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR,
   6665     eG16B16G16R16422UnormKHR = VK_FORMAT_G16B16G16R16_422_UNORM_KHR,
   6666     eB16G16R16G16422UnormKHR = VK_FORMAT_B16G16R16G16_422_UNORM_KHR,
   6667     eG16B16R163Plane420UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR,
   6668     eG16B16R162Plane420UnormKHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR,
   6669     eG16B16R163Plane422UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR,
   6670     eG16B16R162Plane422UnormKHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR,
   6671     eG16B16R163Plane444UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR
   6672   };
   6673 
   6674   struct VertexInputAttributeDescription
   6675   {
   6676     VertexInputAttributeDescription( uint32_t location_ = 0, uint32_t binding_ = 0, Format format_ = Format::eUndefined, uint32_t offset_ = 0 )
   6677       : location( location_ )
   6678       , binding( binding_ )
   6679       , format( format_ )
   6680       , offset( offset_ )
   6681     {
   6682     }
   6683 
   6684     VertexInputAttributeDescription( VkVertexInputAttributeDescription const & rhs )
   6685     {
   6686       memcpy( this, &rhs, sizeof( VertexInputAttributeDescription ) );
   6687     }
   6688 
   6689     VertexInputAttributeDescription& operator=( VkVertexInputAttributeDescription const & rhs )
   6690     {
   6691       memcpy( this, &rhs, sizeof( VertexInputAttributeDescription ) );
   6692       return *this;
   6693     }
   6694     VertexInputAttributeDescription& setLocation( uint32_t location_ )
   6695     {
   6696       location = location_;
   6697       return *this;
   6698     }
   6699 
   6700     VertexInputAttributeDescription& setBinding( uint32_t binding_ )
   6701     {
   6702       binding = binding_;
   6703       return *this;
   6704     }
   6705 
   6706     VertexInputAttributeDescription& setFormat( Format format_ )
   6707     {
   6708       format = format_;
   6709       return *this;
   6710     }
   6711 
   6712     VertexInputAttributeDescription& setOffset( uint32_t offset_ )
   6713     {
   6714       offset = offset_;
   6715       return *this;
   6716     }
   6717 
   6718     operator const VkVertexInputAttributeDescription&() const
   6719     {
   6720       return *reinterpret_cast<const VkVertexInputAttributeDescription*>(this);
   6721     }
   6722 
   6723     bool operator==( VertexInputAttributeDescription const& rhs ) const
   6724     {
   6725       return ( location == rhs.location )
   6726           && ( binding == rhs.binding )
   6727           && ( format == rhs.format )
   6728           && ( offset == rhs.offset );
   6729     }
   6730 
   6731     bool operator!=( VertexInputAttributeDescription const& rhs ) const
   6732     {
   6733       return !operator==( rhs );
   6734     }
   6735 
   6736     uint32_t location;
   6737     uint32_t binding;
   6738     Format format;
   6739     uint32_t offset;
   6740   };
   6741   static_assert( sizeof( VertexInputAttributeDescription ) == sizeof( VkVertexInputAttributeDescription ), "struct and wrapper have different size!" );
   6742 
   6743   enum class StructureType
   6744   {
   6745     eApplicationInfo = VK_STRUCTURE_TYPE_APPLICATION_INFO,
   6746     eInstanceCreateInfo = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
   6747     eDeviceQueueCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
   6748     eDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
   6749     eSubmitInfo = VK_STRUCTURE_TYPE_SUBMIT_INFO,
   6750     eMemoryAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
   6751     eMappedMemoryRange = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
   6752     eBindSparseInfo = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
   6753     eFenceCreateInfo = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
   6754     eSemaphoreCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
   6755     eEventCreateInfo = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO,
   6756     eQueryPoolCreateInfo = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
   6757     eBufferCreateInfo = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
   6758     eBufferViewCreateInfo = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO,
   6759     eImageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
   6760     eImageViewCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
   6761     eShaderModuleCreateInfo = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
   6762     ePipelineCacheCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,
   6763     ePipelineShaderStageCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
   6764     ePipelineVertexInputStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
   6765     ePipelineInputAssemblyStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
   6766     ePipelineTessellationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
   6767     ePipelineViewportStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
   6768     ePipelineRasterizationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
   6769     ePipelineMultisampleStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
   6770     ePipelineDepthStencilStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
   6771     ePipelineColorBlendStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
   6772     ePipelineDynamicStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
   6773     eGraphicsPipelineCreateInfo = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
   6774     eComputePipelineCreateInfo = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
   6775     ePipelineLayoutCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
   6776     eSamplerCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
   6777     eDescriptorSetLayoutCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
   6778     eDescriptorPoolCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
   6779     eDescriptorSetAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
   6780     eWriteDescriptorSet = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
   6781     eCopyDescriptorSet = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET,
   6782     eFramebufferCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
   6783     eRenderPassCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
   6784     eCommandPoolCreateInfo = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
   6785     eCommandBufferAllocateInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
   6786     eCommandBufferInheritanceInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
   6787     eCommandBufferBeginInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
   6788     eRenderPassBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
   6789     eBufferMemoryBarrier = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
   6790     eImageMemoryBarrier = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
   6791     eMemoryBarrier = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
   6792     eLoaderInstanceCreateInfo = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO,
   6793     eLoaderDeviceCreateInfo = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
   6794     eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
   6795     ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
   6796     eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
   6797     eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
   6798     eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
   6799     eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
   6800     eXcbSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
   6801     eWaylandSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
   6802     eMirSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR,
   6803     eAndroidSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
   6804     eWin32SurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
   6805     eDebugReportCallbackCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
   6806     ePipelineRasterizationStateRasterizationOrderAMD = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD,
   6807     eDebugMarkerObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT,
   6808     eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
   6809     eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
   6810     eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
   6811     eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
   6812     eDedicatedAllocationMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,
   6813     eTextureLodGatherFormatPropertiesAMD = VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD,
   6814     eRenderPassMultiviewCreateInfoKHX = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHX,
   6815     ePhysicalDeviceMultiviewFeaturesKHX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHX,
   6816     ePhysicalDeviceMultiviewPropertiesKHX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX,
   6817     eExternalMemoryImageCreateInfoNV = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV,
   6818     eExportMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV,
   6819     eImportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV,
   6820     eExportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV,
   6821     eWin32KeyedMutexAcquireReleaseInfoNV = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV,
   6822     ePhysicalDeviceFeatures2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
   6823     ePhysicalDeviceProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
   6824     eFormatProperties2KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR,
   6825     eImageFormatProperties2KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR,
   6826     ePhysicalDeviceImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR,
   6827     eQueueFamilyProperties2KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR,
   6828     ePhysicalDeviceMemoryProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR,
   6829     eSparseImageFormatProperties2KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR,
   6830     ePhysicalDeviceSparseImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR,
   6831     eMemoryAllocateFlagsInfoKHX = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX,
   6832     eDeviceGroupRenderPassBeginInfoKHX = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX,
   6833     eDeviceGroupCommandBufferBeginInfoKHX = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX,
   6834     eDeviceGroupSubmitInfoKHX = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX,
   6835     eDeviceGroupBindSparseInfoKHX = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX,
   6836     eAcquireNextImageInfoKHX = VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHX,
   6837     eBindBufferMemoryDeviceGroupInfoKHX = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHX,
   6838     eBindImageMemoryDeviceGroupInfoKHX = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHX,
   6839     eDeviceGroupPresentCapabilitiesKHX = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX,
   6840     eImageSwapchainCreateInfoKHX = VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHX,
   6841     eBindImageMemorySwapchainInfoKHX = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHX,
   6842     eDeviceGroupPresentInfoKHX = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX,
   6843     eDeviceGroupSwapchainCreateInfoKHX = VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX,
   6844     eValidationFlagsEXT = VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT,
   6845     eViSurfaceCreateInfoNN = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN,
   6846     ePhysicalDeviceGroupPropertiesKHX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX,
   6847     eDeviceGroupDeviceCreateInfoKHX = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX,
   6848     ePhysicalDeviceExternalImageFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR,
   6849     eExternalImageFormatPropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR,
   6850     ePhysicalDeviceExternalBufferInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR,
   6851     eExternalBufferPropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR,
   6852     ePhysicalDeviceIdPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR,
   6853     eExternalMemoryBufferCreateInfoKHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR,
   6854     eExternalMemoryImageCreateInfoKHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR,
   6855     eExportMemoryAllocateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR,
   6856     eImportMemoryWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR,
   6857     eExportMemoryWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR,
   6858     eMemoryWin32HandlePropertiesKHR = VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR,
   6859     eMemoryGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR,
   6860     eImportMemoryFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR,
   6861     eMemoryFdPropertiesKHR = VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR,
   6862     eMemoryGetFdInfoKHR = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR,
   6863     eWin32KeyedMutexAcquireReleaseInfoKHR = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR,
   6864     ePhysicalDeviceExternalSemaphoreInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR,
   6865     eExternalSemaphorePropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR,
   6866     eExportSemaphoreCreateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR,
   6867     eImportSemaphoreWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR,
   6868     eExportSemaphoreWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR,
   6869     eD3D12FenceSubmitInfoKHR = VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR,
   6870     eSemaphoreGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR,
   6871     eImportSemaphoreFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR,
   6872     eSemaphoreGetFdInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR,
   6873     ePhysicalDevicePushDescriptorPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR,
   6874     ePhysicalDevice16BitStorageFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR,
   6875     ePresentRegionsKHR = VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR,
   6876     eDescriptorUpdateTemplateCreateInfoKHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR,
   6877     eObjectTableCreateInfoNVX = VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX,
   6878     eIndirectCommandsLayoutCreateInfoNVX = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX,
   6879     eCmdProcessCommandsInfoNVX = VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX,
   6880     eCmdReserveSpaceForCommandsInfoNVX = VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX,
   6881     eDeviceGeneratedCommandsLimitsNVX = VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX,
   6882     eDeviceGeneratedCommandsFeaturesNVX = VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX,
   6883     ePipelineViewportWScalingStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV,
   6884     eSurfaceCapabilities2EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT,
   6885     eDisplayPowerInfoEXT = VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT,
   6886     eDeviceEventInfoEXT = VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT,
   6887     eDisplayEventInfoEXT = VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT,
   6888     eSwapchainCounterCreateInfoEXT = VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT,
   6889     ePresentTimesInfoGOOGLE = VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE,
   6890     ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX,
   6891     ePipelineViewportSwizzleStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV,
   6892     ePhysicalDeviceDiscardRectanglePropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT,
   6893     ePipelineDiscardRectangleStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT,
   6894     ePhysicalDeviceConservativeRasterizationPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT,
   6895     ePipelineRasterizationConservativeStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT,
   6896     eHdrMetadataEXT = VK_STRUCTURE_TYPE_HDR_METADATA_EXT,
   6897     eSharedPresentSurfaceCapabilitiesKHR = VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR,
   6898     ePhysicalDeviceExternalFenceInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR,
   6899     eExternalFencePropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR,
   6900     eExportFenceCreateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR,
   6901     eImportFenceWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR,
   6902     eExportFenceWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR,
   6903     eFenceGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR,
   6904     eImportFenceFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR,
   6905     eFenceGetFdInfoKHR = VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR,
   6906     ePhysicalDevicePointClippingPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR,
   6907     eRenderPassInputAttachmentAspectCreateInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR,
   6908     eImageViewUsageCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR,
   6909     ePipelineTessellationDomainOriginStateCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR,
   6910     ePhysicalDeviceSurfaceInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR,
   6911     eSurfaceCapabilities2KHR = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR,
   6912     eSurfaceFormat2KHR = VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR,
   6913     ePhysicalDeviceVariablePointerFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR,
   6914     eIosSurfaceCreateInfoMVK = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK,
   6915     eMacosSurfaceCreateInfoMVK = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK,
   6916     eMemoryDedicatedRequirementsKHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR,
   6917     eMemoryDedicatedAllocateInfoKHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,
   6918     ePhysicalDeviceSamplerFilterMinmaxPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT,
   6919     eSamplerReductionModeCreateInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT,
   6920     eSampleLocationsInfoEXT = VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT,
   6921     eRenderPassSampleLocationsBeginInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT,
   6922     ePipelineSampleLocationsStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT,
   6923     ePhysicalDeviceSampleLocationsPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT,
   6924     eMultisamplePropertiesEXT = VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT,
   6925     eBufferMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR,
   6926     eImageMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR,
   6927     eImageSparseMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR,
   6928     eMemoryRequirements2KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR,
   6929     eSparseImageMemoryRequirements2KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR,
   6930     eImageFormatListCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR,
   6931     ePhysicalDeviceBlendOperationAdvancedFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT,
   6932     ePhysicalDeviceBlendOperationAdvancedPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT,
   6933     ePipelineColorBlendAdvancedStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT,
   6934     ePipelineCoverageToColorStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV,
   6935     ePipelineCoverageModulationStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV,
   6936     eSamplerYcbcrConversionCreateInfoKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR,
   6937     eSamplerYcbcrConversionInfoKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR,
   6938     eBindImagePlaneMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR,
   6939     eImagePlaneMemoryRequirementsInfoKHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR,
   6940     ePhysicalDeviceSamplerYcbcrConversionFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR,
   6941     eSamplerYcbcrConversionImageFormatPropertiesKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR,
   6942     eBindBufferMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
   6943     eBindImageMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR,
   6944     eValidationCacheCreateInfoEXT = VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT,
   6945     eShaderModuleValidationCacheCreateInfoEXT = VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT,
   6946     eDeviceQueueGlobalPriorityCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT,
   6947     eImportMemoryHostPointerInfoEXT = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
   6948     eMemoryHostPointerPropertiesEXT = VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT,
   6949     ePhysicalDeviceExternalMemoryHostPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT
   6950   };
   6951 
   6952   struct ApplicationInfo
   6953   {
   6954     ApplicationInfo( const char* pApplicationName_ = nullptr, uint32_t applicationVersion_ = 0, const char* pEngineName_ = nullptr, uint32_t engineVersion_ = 0, uint32_t apiVersion_ = 0 )
   6955       : pApplicationName( pApplicationName_ )
   6956       , applicationVersion( applicationVersion_ )
   6957       , pEngineName( pEngineName_ )
   6958       , engineVersion( engineVersion_ )
   6959       , apiVersion( apiVersion_ )
   6960     {
   6961     }
   6962 
   6963     ApplicationInfo( VkApplicationInfo const & rhs )
   6964     {
   6965       memcpy( this, &rhs, sizeof( ApplicationInfo ) );
   6966     }
   6967 
   6968     ApplicationInfo& operator=( VkApplicationInfo const & rhs )
   6969     {
   6970       memcpy( this, &rhs, sizeof( ApplicationInfo ) );
   6971       return *this;
   6972     }
   6973     ApplicationInfo& setPNext( const void* pNext_ )
   6974     {
   6975       pNext = pNext_;
   6976       return *this;
   6977     }
   6978 
   6979     ApplicationInfo& setPApplicationName( const char* pApplicationName_ )
   6980     {
   6981       pApplicationName = pApplicationName_;
   6982       return *this;
   6983     }
   6984 
   6985     ApplicationInfo& setApplicationVersion( uint32_t applicationVersion_ )
   6986     {
   6987       applicationVersion = applicationVersion_;
   6988       return *this;
   6989     }
   6990 
   6991     ApplicationInfo& setPEngineName( const char* pEngineName_ )
   6992     {
   6993       pEngineName = pEngineName_;
   6994       return *this;
   6995     }
   6996 
   6997     ApplicationInfo& setEngineVersion( uint32_t engineVersion_ )
   6998     {
   6999       engineVersion = engineVersion_;
   7000       return *this;
   7001     }
   7002 
   7003     ApplicationInfo& setApiVersion( uint32_t apiVersion_ )
   7004     {
   7005       apiVersion = apiVersion_;
   7006       return *this;
   7007     }
   7008 
   7009     operator const VkApplicationInfo&() const
   7010     {
   7011       return *reinterpret_cast<const VkApplicationInfo*>(this);
   7012     }
   7013 
   7014     bool operator==( ApplicationInfo const& rhs ) const
   7015     {
   7016       return ( sType == rhs.sType )
   7017           && ( pNext == rhs.pNext )
   7018           && ( pApplicationName == rhs.pApplicationName )
   7019           && ( applicationVersion == rhs.applicationVersion )
   7020           && ( pEngineName == rhs.pEngineName )
   7021           && ( engineVersion == rhs.engineVersion )
   7022           && ( apiVersion == rhs.apiVersion );
   7023     }
   7024 
   7025     bool operator!=( ApplicationInfo const& rhs ) const
   7026     {
   7027       return !operator==( rhs );
   7028     }
   7029 
   7030   private:
   7031     StructureType sType = StructureType::eApplicationInfo;
   7032 
   7033   public:
   7034     const void* pNext = nullptr;
   7035     const char* pApplicationName;
   7036     uint32_t applicationVersion;
   7037     const char* pEngineName;
   7038     uint32_t engineVersion;
   7039     uint32_t apiVersion;
   7040   };
   7041   static_assert( sizeof( ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" );
   7042 
   7043   struct DeviceQueueCreateInfo
   7044   {
   7045     DeviceQueueCreateInfo( DeviceQueueCreateFlags flags_ = DeviceQueueCreateFlags(), uint32_t queueFamilyIndex_ = 0, uint32_t queueCount_ = 0, const float* pQueuePriorities_ = nullptr )
   7046       : flags( flags_ )
   7047       , queueFamilyIndex( queueFamilyIndex_ )
   7048       , queueCount( queueCount_ )
   7049       , pQueuePriorities( pQueuePriorities_ )
   7050     {
   7051     }
   7052 
   7053     DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs )
   7054     {
   7055       memcpy( this, &rhs, sizeof( DeviceQueueCreateInfo ) );
   7056     }
   7057 
   7058     DeviceQueueCreateInfo& operator=( VkDeviceQueueCreateInfo const & rhs )
   7059     {
   7060       memcpy( this, &rhs, sizeof( DeviceQueueCreateInfo ) );
   7061       return *this;
   7062     }
   7063     DeviceQueueCreateInfo& setPNext( const void* pNext_ )
   7064     {
   7065       pNext = pNext_;
   7066       return *this;
   7067     }
   7068 
   7069     DeviceQueueCreateInfo& setFlags( DeviceQueueCreateFlags flags_ )
   7070     {
   7071       flags = flags_;
   7072       return *this;
   7073     }
   7074 
   7075     DeviceQueueCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
   7076     {
   7077       queueFamilyIndex = queueFamilyIndex_;
   7078       return *this;
   7079     }
   7080 
   7081     DeviceQueueCreateInfo& setQueueCount( uint32_t queueCount_ )
   7082     {
   7083       queueCount = queueCount_;
   7084       return *this;
   7085     }
   7086 
   7087     DeviceQueueCreateInfo& setPQueuePriorities( const float* pQueuePriorities_ )
   7088     {
   7089       pQueuePriorities = pQueuePriorities_;
   7090       return *this;
   7091     }
   7092 
   7093     operator const VkDeviceQueueCreateInfo&() const
   7094     {
   7095       return *reinterpret_cast<const VkDeviceQueueCreateInfo*>(this);
   7096     }
   7097 
   7098     bool operator==( DeviceQueueCreateInfo const& rhs ) const
   7099     {
   7100       return ( sType == rhs.sType )
   7101           && ( pNext == rhs.pNext )
   7102           && ( flags == rhs.flags )
   7103           && ( queueFamilyIndex == rhs.queueFamilyIndex )
   7104           && ( queueCount == rhs.queueCount )
   7105           && ( pQueuePriorities == rhs.pQueuePriorities );
   7106     }
   7107 
   7108     bool operator!=( DeviceQueueCreateInfo const& rhs ) const
   7109     {
   7110       return !operator==( rhs );
   7111     }
   7112 
   7113   private:
   7114     StructureType sType = StructureType::eDeviceQueueCreateInfo;
   7115 
   7116   public:
   7117     const void* pNext = nullptr;
   7118     DeviceQueueCreateFlags flags;
   7119     uint32_t queueFamilyIndex;
   7120     uint32_t queueCount;
   7121     const float* pQueuePriorities;
   7122   };
   7123   static_assert( sizeof( DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ), "struct and wrapper have different size!" );
   7124 
   7125   struct DeviceCreateInfo
   7126   {
   7127     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 )
   7128       : flags( flags_ )
   7129       , queueCreateInfoCount( queueCreateInfoCount_ )
   7130       , pQueueCreateInfos( pQueueCreateInfos_ )
   7131       , enabledLayerCount( enabledLayerCount_ )
   7132       , ppEnabledLayerNames( ppEnabledLayerNames_ )
   7133       , enabledExtensionCount( enabledExtensionCount_ )
   7134       , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
   7135       , pEnabledFeatures( pEnabledFeatures_ )
   7136     {
   7137     }
   7138 
   7139     DeviceCreateInfo( VkDeviceCreateInfo const & rhs )
   7140     {
   7141       memcpy( this, &rhs, sizeof( DeviceCreateInfo ) );
   7142     }
   7143 
   7144     DeviceCreateInfo& operator=( VkDeviceCreateInfo const & rhs )
   7145     {
   7146       memcpy( this, &rhs, sizeof( DeviceCreateInfo ) );
   7147       return *this;
   7148     }
   7149     DeviceCreateInfo& setPNext( const void* pNext_ )
   7150     {
   7151       pNext = pNext_;
   7152       return *this;
   7153     }
   7154 
   7155     DeviceCreateInfo& setFlags( DeviceCreateFlags flags_ )
   7156     {
   7157       flags = flags_;
   7158       return *this;
   7159     }
   7160 
   7161     DeviceCreateInfo& setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ )
   7162     {
   7163       queueCreateInfoCount = queueCreateInfoCount_;
   7164       return *this;
   7165     }
   7166 
   7167     DeviceCreateInfo& setPQueueCreateInfos( const DeviceQueueCreateInfo* pQueueCreateInfos_ )
   7168     {
   7169       pQueueCreateInfos = pQueueCreateInfos_;
   7170       return *this;
   7171     }
   7172 
   7173     DeviceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
   7174     {
   7175       enabledLayerCount = enabledLayerCount_;
   7176       return *this;
   7177     }
   7178 
   7179     DeviceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
   7180     {
   7181       ppEnabledLayerNames = ppEnabledLayerNames_;
   7182       return *this;
   7183     }
   7184 
   7185     DeviceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
   7186     {
   7187       enabledExtensionCount = enabledExtensionCount_;
   7188       return *this;
   7189     }
   7190 
   7191     DeviceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
   7192     {
   7193       ppEnabledExtensionNames = ppEnabledExtensionNames_;
   7194       return *this;
   7195     }
   7196 
   7197     DeviceCreateInfo& setPEnabledFeatures( const PhysicalDeviceFeatures* pEnabledFeatures_ )
   7198     {
   7199       pEnabledFeatures = pEnabledFeatures_;
   7200       return *this;
   7201     }
   7202 
   7203     operator const VkDeviceCreateInfo&() const
   7204     {
   7205       return *reinterpret_cast<const VkDeviceCreateInfo*>(this);
   7206     }
   7207 
   7208     bool operator==( DeviceCreateInfo const& rhs ) const
   7209     {
   7210       return ( sType == rhs.sType )
   7211           && ( pNext == rhs.pNext )
   7212           && ( flags == rhs.flags )
   7213           && ( queueCreateInfoCount == rhs.queueCreateInfoCount )
   7214           && ( pQueueCreateInfos == rhs.pQueueCreateInfos )
   7215           && ( enabledLayerCount == rhs.enabledLayerCount )
   7216           && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
   7217           && ( enabledExtensionCount == rhs.enabledExtensionCount )
   7218           && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames )
   7219           && ( pEnabledFeatures == rhs.pEnabledFeatures );
   7220     }
   7221 
   7222     bool operator!=( DeviceCreateInfo const& rhs ) const
   7223     {
   7224       return !operator==( rhs );
   7225     }
   7226 
   7227   private:
   7228     StructureType sType = StructureType::eDeviceCreateInfo;
   7229 
   7230   public:
   7231     const void* pNext = nullptr;
   7232     DeviceCreateFlags flags;
   7233     uint32_t queueCreateInfoCount;
   7234     const DeviceQueueCreateInfo* pQueueCreateInfos;
   7235     uint32_t enabledLayerCount;
   7236     const char* const* ppEnabledLayerNames;
   7237     uint32_t enabledExtensionCount;
   7238     const char* const* ppEnabledExtensionNames;
   7239     const PhysicalDeviceFeatures* pEnabledFeatures;
   7240   };
   7241   static_assert( sizeof( DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ), "struct and wrapper have different size!" );
   7242 
   7243   struct InstanceCreateInfo
   7244   {
   7245     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 )
   7246       : flags( flags_ )
   7247       , pApplicationInfo( pApplicationInfo_ )
   7248       , enabledLayerCount( enabledLayerCount_ )
   7249       , ppEnabledLayerNames( ppEnabledLayerNames_ )
   7250       , enabledExtensionCount( enabledExtensionCount_ )
   7251       , ppEnabledExtensionNames( ppEnabledExtensionNames_ )
   7252     {
   7253     }
   7254 
   7255     InstanceCreateInfo( VkInstanceCreateInfo const & rhs )
   7256     {
   7257       memcpy( this, &rhs, sizeof( InstanceCreateInfo ) );
   7258     }
   7259 
   7260     InstanceCreateInfo& operator=( VkInstanceCreateInfo const & rhs )
   7261     {
   7262       memcpy( this, &rhs, sizeof( InstanceCreateInfo ) );
   7263       return *this;
   7264     }
   7265     InstanceCreateInfo& setPNext( const void* pNext_ )
   7266     {
   7267       pNext = pNext_;
   7268       return *this;
   7269     }
   7270 
   7271     InstanceCreateInfo& setFlags( InstanceCreateFlags flags_ )
   7272     {
   7273       flags = flags_;
   7274       return *this;
   7275     }
   7276 
   7277     InstanceCreateInfo& setPApplicationInfo( const ApplicationInfo* pApplicationInfo_ )
   7278     {
   7279       pApplicationInfo = pApplicationInfo_;
   7280       return *this;
   7281     }
   7282 
   7283     InstanceCreateInfo& setEnabledLayerCount( uint32_t enabledLayerCount_ )
   7284     {
   7285       enabledLayerCount = enabledLayerCount_;
   7286       return *this;
   7287     }
   7288 
   7289     InstanceCreateInfo& setPpEnabledLayerNames( const char* const* ppEnabledLayerNames_ )
   7290     {
   7291       ppEnabledLayerNames = ppEnabledLayerNames_;
   7292       return *this;
   7293     }
   7294 
   7295     InstanceCreateInfo& setEnabledExtensionCount( uint32_t enabledExtensionCount_ )
   7296     {
   7297       enabledExtensionCount = enabledExtensionCount_;
   7298       return *this;
   7299     }
   7300 
   7301     InstanceCreateInfo& setPpEnabledExtensionNames( const char* const* ppEnabledExtensionNames_ )
   7302     {
   7303       ppEnabledExtensionNames = ppEnabledExtensionNames_;
   7304       return *this;
   7305     }
   7306 
   7307     operator const VkInstanceCreateInfo&() const
   7308     {
   7309       return *reinterpret_cast<const VkInstanceCreateInfo*>(this);
   7310     }
   7311 
   7312     bool operator==( InstanceCreateInfo const& rhs ) const
   7313     {
   7314       return ( sType == rhs.sType )
   7315           && ( pNext == rhs.pNext )
   7316           && ( flags == rhs.flags )
   7317           && ( pApplicationInfo == rhs.pApplicationInfo )
   7318           && ( enabledLayerCount == rhs.enabledLayerCount )
   7319           && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames )
   7320           && ( enabledExtensionCount == rhs.enabledExtensionCount )
   7321           && ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames );
   7322     }
   7323 
   7324     bool operator!=( InstanceCreateInfo const& rhs ) const
   7325     {
   7326       return !operator==( rhs );
   7327     }
   7328 
   7329   private:
   7330     StructureType sType = StructureType::eInstanceCreateInfo;
   7331 
   7332   public:
   7333     const void* pNext = nullptr;
   7334     InstanceCreateFlags flags;
   7335     const ApplicationInfo* pApplicationInfo;
   7336     uint32_t enabledLayerCount;
   7337     const char* const* ppEnabledLayerNames;
   7338     uint32_t enabledExtensionCount;
   7339     const char* const* ppEnabledExtensionNames;
   7340   };
   7341   static_assert( sizeof( InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ), "struct and wrapper have different size!" );
   7342 
   7343   struct MemoryAllocateInfo
   7344   {
   7345     MemoryAllocateInfo( DeviceSize allocationSize_ = 0, uint32_t memoryTypeIndex_ = 0 )
   7346       : allocationSize( allocationSize_ )
   7347       , memoryTypeIndex( memoryTypeIndex_ )
   7348     {
   7349     }
   7350 
   7351     MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs )
   7352     {
   7353       memcpy( this, &rhs, sizeof( MemoryAllocateInfo ) );
   7354     }
   7355 
   7356     MemoryAllocateInfo& operator=( VkMemoryAllocateInfo const & rhs )
   7357     {
   7358       memcpy( this, &rhs, sizeof( MemoryAllocateInfo ) );
   7359       return *this;
   7360     }
   7361     MemoryAllocateInfo& setPNext( const void* pNext_ )
   7362     {
   7363       pNext = pNext_;
   7364       return *this;
   7365     }
   7366 
   7367     MemoryAllocateInfo& setAllocationSize( DeviceSize allocationSize_ )
   7368     {
   7369       allocationSize = allocationSize_;
   7370       return *this;
   7371     }
   7372 
   7373     MemoryAllocateInfo& setMemoryTypeIndex( uint32_t memoryTypeIndex_ )
   7374     {
   7375       memoryTypeIndex = memoryTypeIndex_;
   7376       return *this;
   7377     }
   7378 
   7379     operator const VkMemoryAllocateInfo&() const
   7380     {
   7381       return *reinterpret_cast<const VkMemoryAllocateInfo*>(this);
   7382     }
   7383 
   7384     bool operator==( MemoryAllocateInfo const& rhs ) const
   7385     {
   7386       return ( sType == rhs.sType )
   7387           && ( pNext == rhs.pNext )
   7388           && ( allocationSize == rhs.allocationSize )
   7389           && ( memoryTypeIndex == rhs.memoryTypeIndex );
   7390     }
   7391 
   7392     bool operator!=( MemoryAllocateInfo const& rhs ) const
   7393     {
   7394       return !operator==( rhs );
   7395     }
   7396 
   7397   private:
   7398     StructureType sType = StructureType::eMemoryAllocateInfo;
   7399 
   7400   public:
   7401     const void* pNext = nullptr;
   7402     DeviceSize allocationSize;
   7403     uint32_t memoryTypeIndex;
   7404   };
   7405   static_assert( sizeof( MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ), "struct and wrapper have different size!" );
   7406 
   7407   struct MappedMemoryRange
   7408   {
   7409     MappedMemoryRange( DeviceMemory memory_ = DeviceMemory(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
   7410       : memory( memory_ )
   7411       , offset( offset_ )
   7412       , size( size_ )
   7413     {
   7414     }
   7415 
   7416     MappedMemoryRange( VkMappedMemoryRange const & rhs )
   7417     {
   7418       memcpy( this, &rhs, sizeof( MappedMemoryRange ) );
   7419     }
   7420 
   7421     MappedMemoryRange& operator=( VkMappedMemoryRange const & rhs )
   7422     {
   7423       memcpy( this, &rhs, sizeof( MappedMemoryRange ) );
   7424       return *this;
   7425     }
   7426     MappedMemoryRange& setPNext( const void* pNext_ )
   7427     {
   7428       pNext = pNext_;
   7429       return *this;
   7430     }
   7431 
   7432     MappedMemoryRange& setMemory( DeviceMemory memory_ )
   7433     {
   7434       memory = memory_;
   7435       return *this;
   7436     }
   7437 
   7438     MappedMemoryRange& setOffset( DeviceSize offset_ )
   7439     {
   7440       offset = offset_;
   7441       return *this;
   7442     }
   7443 
   7444     MappedMemoryRange& setSize( DeviceSize size_ )
   7445     {
   7446       size = size_;
   7447       return *this;
   7448     }
   7449 
   7450     operator const VkMappedMemoryRange&() const
   7451     {
   7452       return *reinterpret_cast<const VkMappedMemoryRange*>(this);
   7453     }
   7454 
   7455     bool operator==( MappedMemoryRange const& rhs ) const
   7456     {
   7457       return ( sType == rhs.sType )
   7458           && ( pNext == rhs.pNext )
   7459           && ( memory == rhs.memory )
   7460           && ( offset == rhs.offset )
   7461           && ( size == rhs.size );
   7462     }
   7463 
   7464     bool operator!=( MappedMemoryRange const& rhs ) const
   7465     {
   7466       return !operator==( rhs );
   7467     }
   7468 
   7469   private:
   7470     StructureType sType = StructureType::eMappedMemoryRange;
   7471 
   7472   public:
   7473     const void* pNext = nullptr;
   7474     DeviceMemory memory;
   7475     DeviceSize offset;
   7476     DeviceSize size;
   7477   };
   7478   static_assert( sizeof( MappedMemoryRange ) == sizeof( VkMappedMemoryRange ), "struct and wrapper have different size!" );
   7479 
   7480   struct WriteDescriptorSet
   7481   {
   7482     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 )
   7483       : dstSet( dstSet_ )
   7484       , dstBinding( dstBinding_ )
   7485       , dstArrayElement( dstArrayElement_ )
   7486       , descriptorCount( descriptorCount_ )
   7487       , descriptorType( descriptorType_ )
   7488       , pImageInfo( pImageInfo_ )
   7489       , pBufferInfo( pBufferInfo_ )
   7490       , pTexelBufferView( pTexelBufferView_ )
   7491     {
   7492     }
   7493 
   7494     WriteDescriptorSet( VkWriteDescriptorSet const & rhs )
   7495     {
   7496       memcpy( this, &rhs, sizeof( WriteDescriptorSet ) );
   7497     }
   7498 
   7499     WriteDescriptorSet& operator=( VkWriteDescriptorSet const & rhs )
   7500     {
   7501       memcpy( this, &rhs, sizeof( WriteDescriptorSet ) );
   7502       return *this;
   7503     }
   7504     WriteDescriptorSet& setPNext( const void* pNext_ )
   7505     {
   7506       pNext = pNext_;
   7507       return *this;
   7508     }
   7509 
   7510     WriteDescriptorSet& setDstSet( DescriptorSet dstSet_ )
   7511     {
   7512       dstSet = dstSet_;
   7513       return *this;
   7514     }
   7515 
   7516     WriteDescriptorSet& setDstBinding( uint32_t dstBinding_ )
   7517     {
   7518       dstBinding = dstBinding_;
   7519       return *this;
   7520     }
   7521 
   7522     WriteDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
   7523     {
   7524       dstArrayElement = dstArrayElement_;
   7525       return *this;
   7526     }
   7527 
   7528     WriteDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
   7529     {
   7530       descriptorCount = descriptorCount_;
   7531       return *this;
   7532     }
   7533 
   7534     WriteDescriptorSet& setDescriptorType( DescriptorType descriptorType_ )
   7535     {
   7536       descriptorType = descriptorType_;
   7537       return *this;
   7538     }
   7539 
   7540     WriteDescriptorSet& setPImageInfo( const DescriptorImageInfo* pImageInfo_ )
   7541     {
   7542       pImageInfo = pImageInfo_;
   7543       return *this;
   7544     }
   7545 
   7546     WriteDescriptorSet& setPBufferInfo( const DescriptorBufferInfo* pBufferInfo_ )
   7547     {
   7548       pBufferInfo = pBufferInfo_;
   7549       return *this;
   7550     }
   7551 
   7552     WriteDescriptorSet& setPTexelBufferView( const BufferView* pTexelBufferView_ )
   7553     {
   7554       pTexelBufferView = pTexelBufferView_;
   7555       return *this;
   7556     }
   7557 
   7558     operator const VkWriteDescriptorSet&() const
   7559     {
   7560       return *reinterpret_cast<const VkWriteDescriptorSet*>(this);
   7561     }
   7562 
   7563     bool operator==( WriteDescriptorSet const& rhs ) const
   7564     {
   7565       return ( sType == rhs.sType )
   7566           && ( pNext == rhs.pNext )
   7567           && ( dstSet == rhs.dstSet )
   7568           && ( dstBinding == rhs.dstBinding )
   7569           && ( dstArrayElement == rhs.dstArrayElement )
   7570           && ( descriptorCount == rhs.descriptorCount )
   7571           && ( descriptorType == rhs.descriptorType )
   7572           && ( pImageInfo == rhs.pImageInfo )
   7573           && ( pBufferInfo == rhs.pBufferInfo )
   7574           && ( pTexelBufferView == rhs.pTexelBufferView );
   7575     }
   7576 
   7577     bool operator!=( WriteDescriptorSet const& rhs ) const
   7578     {
   7579       return !operator==( rhs );
   7580     }
   7581 
   7582   private:
   7583     StructureType sType = StructureType::eWriteDescriptorSet;
   7584 
   7585   public:
   7586     const void* pNext = nullptr;
   7587     DescriptorSet dstSet;
   7588     uint32_t dstBinding;
   7589     uint32_t dstArrayElement;
   7590     uint32_t descriptorCount;
   7591     DescriptorType descriptorType;
   7592     const DescriptorImageInfo* pImageInfo;
   7593     const DescriptorBufferInfo* pBufferInfo;
   7594     const BufferView* pTexelBufferView;
   7595   };
   7596   static_assert( sizeof( WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ), "struct and wrapper have different size!" );
   7597 
   7598   struct CopyDescriptorSet
   7599   {
   7600     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 )
   7601       : srcSet( srcSet_ )
   7602       , srcBinding( srcBinding_ )
   7603       , srcArrayElement( srcArrayElement_ )
   7604       , dstSet( dstSet_ )
   7605       , dstBinding( dstBinding_ )
   7606       , dstArrayElement( dstArrayElement_ )
   7607       , descriptorCount( descriptorCount_ )
   7608     {
   7609     }
   7610 
   7611     CopyDescriptorSet( VkCopyDescriptorSet const & rhs )
   7612     {
   7613       memcpy( this, &rhs, sizeof( CopyDescriptorSet ) );
   7614     }
   7615 
   7616     CopyDescriptorSet& operator=( VkCopyDescriptorSet const & rhs )
   7617     {
   7618       memcpy( this, &rhs, sizeof( CopyDescriptorSet ) );
   7619       return *this;
   7620     }
   7621     CopyDescriptorSet& setPNext( const void* pNext_ )
   7622     {
   7623       pNext = pNext_;
   7624       return *this;
   7625     }
   7626 
   7627     CopyDescriptorSet& setSrcSet( DescriptorSet srcSet_ )
   7628     {
   7629       srcSet = srcSet_;
   7630       return *this;
   7631     }
   7632 
   7633     CopyDescriptorSet& setSrcBinding( uint32_t srcBinding_ )
   7634     {
   7635       srcBinding = srcBinding_;
   7636       return *this;
   7637     }
   7638 
   7639     CopyDescriptorSet& setSrcArrayElement( uint32_t srcArrayElement_ )
   7640     {
   7641       srcArrayElement = srcArrayElement_;
   7642       return *this;
   7643     }
   7644 
   7645     CopyDescriptorSet& setDstSet( DescriptorSet dstSet_ )
   7646     {
   7647       dstSet = dstSet_;
   7648       return *this;
   7649     }
   7650 
   7651     CopyDescriptorSet& setDstBinding( uint32_t dstBinding_ )
   7652     {
   7653       dstBinding = dstBinding_;
   7654       return *this;
   7655     }
   7656 
   7657     CopyDescriptorSet& setDstArrayElement( uint32_t dstArrayElement_ )
   7658     {
   7659       dstArrayElement = dstArrayElement_;
   7660       return *this;
   7661     }
   7662 
   7663     CopyDescriptorSet& setDescriptorCount( uint32_t descriptorCount_ )
   7664     {
   7665       descriptorCount = descriptorCount_;
   7666       return *this;
   7667     }
   7668 
   7669     operator const VkCopyDescriptorSet&() const
   7670     {
   7671       return *reinterpret_cast<const VkCopyDescriptorSet*>(this);
   7672     }
   7673 
   7674     bool operator==( CopyDescriptorSet const& rhs ) const
   7675     {
   7676       return ( sType == rhs.sType )
   7677           && ( pNext == rhs.pNext )
   7678           && ( srcSet == rhs.srcSet )
   7679           && ( srcBinding == rhs.srcBinding )
   7680           && ( srcArrayElement == rhs.srcArrayElement )
   7681           && ( dstSet == rhs.dstSet )
   7682           && ( dstBinding == rhs.dstBinding )
   7683           && ( dstArrayElement == rhs.dstArrayElement )
   7684           && ( descriptorCount == rhs.descriptorCount );
   7685     }
   7686 
   7687     bool operator!=( CopyDescriptorSet const& rhs ) const
   7688     {
   7689       return !operator==( rhs );
   7690     }
   7691 
   7692   private:
   7693     StructureType sType = StructureType::eCopyDescriptorSet;
   7694 
   7695   public:
   7696     const void* pNext = nullptr;
   7697     DescriptorSet srcSet;
   7698     uint32_t srcBinding;
   7699     uint32_t srcArrayElement;
   7700     DescriptorSet dstSet;
   7701     uint32_t dstBinding;
   7702     uint32_t dstArrayElement;
   7703     uint32_t descriptorCount;
   7704   };
   7705   static_assert( sizeof( CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ), "struct and wrapper have different size!" );
   7706 
   7707   struct BufferViewCreateInfo
   7708   {
   7709     BufferViewCreateInfo( BufferViewCreateFlags flags_ = BufferViewCreateFlags(), Buffer buffer_ = Buffer(), Format format_ = Format::eUndefined, DeviceSize offset_ = 0, DeviceSize range_ = 0 )
   7710       : flags( flags_ )
   7711       , buffer( buffer_ )
   7712       , format( format_ )
   7713       , offset( offset_ )
   7714       , range( range_ )
   7715     {
   7716     }
   7717 
   7718     BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs )
   7719     {
   7720       memcpy( this, &rhs, sizeof( BufferViewCreateInfo ) );
   7721     }
   7722 
   7723     BufferViewCreateInfo& operator=( VkBufferViewCreateInfo const & rhs )
   7724     {
   7725       memcpy( this, &rhs, sizeof( BufferViewCreateInfo ) );
   7726       return *this;
   7727     }
   7728     BufferViewCreateInfo& setPNext( const void* pNext_ )
   7729     {
   7730       pNext = pNext_;
   7731       return *this;
   7732     }
   7733 
   7734     BufferViewCreateInfo& setFlags( BufferViewCreateFlags flags_ )
   7735     {
   7736       flags = flags_;
   7737       return *this;
   7738     }
   7739 
   7740     BufferViewCreateInfo& setBuffer( Buffer buffer_ )
   7741     {
   7742       buffer = buffer_;
   7743       return *this;
   7744     }
   7745 
   7746     BufferViewCreateInfo& setFormat( Format format_ )
   7747     {
   7748       format = format_;
   7749       return *this;
   7750     }
   7751 
   7752     BufferViewCreateInfo& setOffset( DeviceSize offset_ )
   7753     {
   7754       offset = offset_;
   7755       return *this;
   7756     }
   7757 
   7758     BufferViewCreateInfo& setRange( DeviceSize range_ )
   7759     {
   7760       range = range_;
   7761       return *this;
   7762     }
   7763 
   7764     operator const VkBufferViewCreateInfo&() const
   7765     {
   7766       return *reinterpret_cast<const VkBufferViewCreateInfo*>(this);
   7767     }
   7768 
   7769     bool operator==( BufferViewCreateInfo const& rhs ) const
   7770     {
   7771       return ( sType == rhs.sType )
   7772           && ( pNext == rhs.pNext )
   7773           && ( flags == rhs.flags )
   7774           && ( buffer == rhs.buffer )
   7775           && ( format == rhs.format )
   7776           && ( offset == rhs.offset )
   7777           && ( range == rhs.range );
   7778     }
   7779 
   7780     bool operator!=( BufferViewCreateInfo const& rhs ) const
   7781     {
   7782       return !operator==( rhs );
   7783     }
   7784 
   7785   private:
   7786     StructureType sType = StructureType::eBufferViewCreateInfo;
   7787 
   7788   public:
   7789     const void* pNext = nullptr;
   7790     BufferViewCreateFlags flags;
   7791     Buffer buffer;
   7792     Format format;
   7793     DeviceSize offset;
   7794     DeviceSize range;
   7795   };
   7796   static_assert( sizeof( BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ), "struct and wrapper have different size!" );
   7797 
   7798   struct ShaderModuleCreateInfo
   7799   {
   7800     ShaderModuleCreateInfo( ShaderModuleCreateFlags flags_ = ShaderModuleCreateFlags(), size_t codeSize_ = 0, const uint32_t* pCode_ = nullptr )
   7801       : flags( flags_ )
   7802       , codeSize( codeSize_ )
   7803       , pCode( pCode_ )
   7804     {
   7805     }
   7806 
   7807     ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs )
   7808     {
   7809       memcpy( this, &rhs, sizeof( ShaderModuleCreateInfo ) );
   7810     }
   7811 
   7812     ShaderModuleCreateInfo& operator=( VkShaderModuleCreateInfo const & rhs )
   7813     {
   7814       memcpy( this, &rhs, sizeof( ShaderModuleCreateInfo ) );
   7815       return *this;
   7816     }
   7817     ShaderModuleCreateInfo& setPNext( const void* pNext_ )
   7818     {
   7819       pNext = pNext_;
   7820       return *this;
   7821     }
   7822 
   7823     ShaderModuleCreateInfo& setFlags( ShaderModuleCreateFlags flags_ )
   7824     {
   7825       flags = flags_;
   7826       return *this;
   7827     }
   7828 
   7829     ShaderModuleCreateInfo& setCodeSize( size_t codeSize_ )
   7830     {
   7831       codeSize = codeSize_;
   7832       return *this;
   7833     }
   7834 
   7835     ShaderModuleCreateInfo& setPCode( const uint32_t* pCode_ )
   7836     {
   7837       pCode = pCode_;
   7838       return *this;
   7839     }
   7840 
   7841     operator const VkShaderModuleCreateInfo&() const
   7842     {
   7843       return *reinterpret_cast<const VkShaderModuleCreateInfo*>(this);
   7844     }
   7845 
   7846     bool operator==( ShaderModuleCreateInfo const& rhs ) const
   7847     {
   7848       return ( sType == rhs.sType )
   7849           && ( pNext == rhs.pNext )
   7850           && ( flags == rhs.flags )
   7851           && ( codeSize == rhs.codeSize )
   7852           && ( pCode == rhs.pCode );
   7853     }
   7854 
   7855     bool operator!=( ShaderModuleCreateInfo const& rhs ) const
   7856     {
   7857       return !operator==( rhs );
   7858     }
   7859 
   7860   private:
   7861     StructureType sType = StructureType::eShaderModuleCreateInfo;
   7862 
   7863   public:
   7864     const void* pNext = nullptr;
   7865     ShaderModuleCreateFlags flags;
   7866     size_t codeSize;
   7867     const uint32_t* pCode;
   7868   };
   7869   static_assert( sizeof( ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ), "struct and wrapper have different size!" );
   7870 
   7871   struct DescriptorSetAllocateInfo
   7872   {
   7873     DescriptorSetAllocateInfo( DescriptorPool descriptorPool_ = DescriptorPool(), uint32_t descriptorSetCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr )
   7874       : descriptorPool( descriptorPool_ )
   7875       , descriptorSetCount( descriptorSetCount_ )
   7876       , pSetLayouts( pSetLayouts_ )
   7877     {
   7878     }
   7879 
   7880     DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs )
   7881     {
   7882       memcpy( this, &rhs, sizeof( DescriptorSetAllocateInfo ) );
   7883     }
   7884 
   7885     DescriptorSetAllocateInfo& operator=( VkDescriptorSetAllocateInfo const & rhs )
   7886     {
   7887       memcpy( this, &rhs, sizeof( DescriptorSetAllocateInfo ) );
   7888       return *this;
   7889     }
   7890     DescriptorSetAllocateInfo& setPNext( const void* pNext_ )
   7891     {
   7892       pNext = pNext_;
   7893       return *this;
   7894     }
   7895 
   7896     DescriptorSetAllocateInfo& setDescriptorPool( DescriptorPool descriptorPool_ )
   7897     {
   7898       descriptorPool = descriptorPool_;
   7899       return *this;
   7900     }
   7901 
   7902     DescriptorSetAllocateInfo& setDescriptorSetCount( uint32_t descriptorSetCount_ )
   7903     {
   7904       descriptorSetCount = descriptorSetCount_;
   7905       return *this;
   7906     }
   7907 
   7908     DescriptorSetAllocateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
   7909     {
   7910       pSetLayouts = pSetLayouts_;
   7911       return *this;
   7912     }
   7913 
   7914     operator const VkDescriptorSetAllocateInfo&() const
   7915     {
   7916       return *reinterpret_cast<const VkDescriptorSetAllocateInfo*>(this);
   7917     }
   7918 
   7919     bool operator==( DescriptorSetAllocateInfo const& rhs ) const
   7920     {
   7921       return ( sType == rhs.sType )
   7922           && ( pNext == rhs.pNext )
   7923           && ( descriptorPool == rhs.descriptorPool )
   7924           && ( descriptorSetCount == rhs.descriptorSetCount )
   7925           && ( pSetLayouts == rhs.pSetLayouts );
   7926     }
   7927 
   7928     bool operator!=( DescriptorSetAllocateInfo const& rhs ) const
   7929     {
   7930       return !operator==( rhs );
   7931     }
   7932 
   7933   private:
   7934     StructureType sType = StructureType::eDescriptorSetAllocateInfo;
   7935 
   7936   public:
   7937     const void* pNext = nullptr;
   7938     DescriptorPool descriptorPool;
   7939     uint32_t descriptorSetCount;
   7940     const DescriptorSetLayout* pSetLayouts;
   7941   };
   7942   static_assert( sizeof( DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ), "struct and wrapper have different size!" );
   7943 
   7944   struct PipelineVertexInputStateCreateInfo
   7945   {
   7946     PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateFlags flags_ = PipelineVertexInputStateCreateFlags(), uint32_t vertexBindingDescriptionCount_ = 0, const VertexInputBindingDescription* pVertexBindingDescriptions_ = nullptr, uint32_t vertexAttributeDescriptionCount_ = 0, const VertexInputAttributeDescription* pVertexAttributeDescriptions_ = nullptr )
   7947       : flags( flags_ )
   7948       , vertexBindingDescriptionCount( vertexBindingDescriptionCount_ )
   7949       , pVertexBindingDescriptions( pVertexBindingDescriptions_ )
   7950       , vertexAttributeDescriptionCount( vertexAttributeDescriptionCount_ )
   7951       , pVertexAttributeDescriptions( pVertexAttributeDescriptions_ )
   7952     {
   7953     }
   7954 
   7955     PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs )
   7956     {
   7957       memcpy( this, &rhs, sizeof( PipelineVertexInputStateCreateInfo ) );
   7958     }
   7959 
   7960     PipelineVertexInputStateCreateInfo& operator=( VkPipelineVertexInputStateCreateInfo const & rhs )
   7961     {
   7962       memcpy( this, &rhs, sizeof( PipelineVertexInputStateCreateInfo ) );
   7963       return *this;
   7964     }
   7965     PipelineVertexInputStateCreateInfo& setPNext( const void* pNext_ )
   7966     {
   7967       pNext = pNext_;
   7968       return *this;
   7969     }
   7970 
   7971     PipelineVertexInputStateCreateInfo& setFlags( PipelineVertexInputStateCreateFlags flags_ )
   7972     {
   7973       flags = flags_;
   7974       return *this;
   7975     }
   7976 
   7977     PipelineVertexInputStateCreateInfo& setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ )
   7978     {
   7979       vertexBindingDescriptionCount = vertexBindingDescriptionCount_;
   7980       return *this;
   7981     }
   7982 
   7983     PipelineVertexInputStateCreateInfo& setPVertexBindingDescriptions( const VertexInputBindingDescription* pVertexBindingDescriptions_ )
   7984     {
   7985       pVertexBindingDescriptions = pVertexBindingDescriptions_;
   7986       return *this;
   7987     }
   7988 
   7989     PipelineVertexInputStateCreateInfo& setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ )
   7990     {
   7991       vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_;
   7992       return *this;
   7993     }
   7994 
   7995     PipelineVertexInputStateCreateInfo& setPVertexAttributeDescriptions( const VertexInputAttributeDescription* pVertexAttributeDescriptions_ )
   7996     {
   7997       pVertexAttributeDescriptions = pVertexAttributeDescriptions_;
   7998       return *this;
   7999     }
   8000 
   8001     operator const VkPipelineVertexInputStateCreateInfo&() const
   8002     {
   8003       return *reinterpret_cast<const VkPipelineVertexInputStateCreateInfo*>(this);
   8004     }
   8005 
   8006     bool operator==( PipelineVertexInputStateCreateInfo const& rhs ) const
   8007     {
   8008       return ( sType == rhs.sType )
   8009           && ( pNext == rhs.pNext )
   8010           && ( flags == rhs.flags )
   8011           && ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount )
   8012           && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions )
   8013           && ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount )
   8014           && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions );
   8015     }
   8016 
   8017     bool operator!=( PipelineVertexInputStateCreateInfo const& rhs ) const
   8018     {
   8019       return !operator==( rhs );
   8020     }
   8021 
   8022   private:
   8023     StructureType sType = StructureType::ePipelineVertexInputStateCreateInfo;
   8024 
   8025   public:
   8026     const void* pNext = nullptr;
   8027     PipelineVertexInputStateCreateFlags flags;
   8028     uint32_t vertexBindingDescriptionCount;
   8029     const VertexInputBindingDescription* pVertexBindingDescriptions;
   8030     uint32_t vertexAttributeDescriptionCount;
   8031     const VertexInputAttributeDescription* pVertexAttributeDescriptions;
   8032   };
   8033   static_assert( sizeof( PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ), "struct and wrapper have different size!" );
   8034 
   8035   struct PipelineInputAssemblyStateCreateInfo
   8036   {
   8037     PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateFlags flags_ = PipelineInputAssemblyStateCreateFlags(), PrimitiveTopology topology_ = PrimitiveTopology::ePointList, Bool32 primitiveRestartEnable_ = 0 )
   8038       : flags( flags_ )
   8039       , topology( topology_ )
   8040       , primitiveRestartEnable( primitiveRestartEnable_ )
   8041     {
   8042     }
   8043 
   8044     PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs )
   8045     {
   8046       memcpy( this, &rhs, sizeof( PipelineInputAssemblyStateCreateInfo ) );
   8047     }
   8048 
   8049     PipelineInputAssemblyStateCreateInfo& operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs )
   8050     {
   8051       memcpy( this, &rhs, sizeof( PipelineInputAssemblyStateCreateInfo ) );
   8052       return *this;
   8053     }
   8054     PipelineInputAssemblyStateCreateInfo& setPNext( const void* pNext_ )
   8055     {
   8056       pNext = pNext_;
   8057       return *this;
   8058     }
   8059 
   8060     PipelineInputAssemblyStateCreateInfo& setFlags( PipelineInputAssemblyStateCreateFlags flags_ )
   8061     {
   8062       flags = flags_;
   8063       return *this;
   8064     }
   8065 
   8066     PipelineInputAssemblyStateCreateInfo& setTopology( PrimitiveTopology topology_ )
   8067     {
   8068       topology = topology_;
   8069       return *this;
   8070     }
   8071 
   8072     PipelineInputAssemblyStateCreateInfo& setPrimitiveRestartEnable( Bool32 primitiveRestartEnable_ )
   8073     {
   8074       primitiveRestartEnable = primitiveRestartEnable_;
   8075       return *this;
   8076     }
   8077 
   8078     operator const VkPipelineInputAssemblyStateCreateInfo&() const
   8079     {
   8080       return *reinterpret_cast<const VkPipelineInputAssemblyStateCreateInfo*>(this);
   8081     }
   8082 
   8083     bool operator==( PipelineInputAssemblyStateCreateInfo const& rhs ) const
   8084     {
   8085       return ( sType == rhs.sType )
   8086           && ( pNext == rhs.pNext )
   8087           && ( flags == rhs.flags )
   8088           && ( topology == rhs.topology )
   8089           && ( primitiveRestartEnable == rhs.primitiveRestartEnable );
   8090     }
   8091 
   8092     bool operator!=( PipelineInputAssemblyStateCreateInfo const& rhs ) const
   8093     {
   8094       return !operator==( rhs );
   8095     }
   8096 
   8097   private:
   8098     StructureType sType = StructureType::ePipelineInputAssemblyStateCreateInfo;
   8099 
   8100   public:
   8101     const void* pNext = nullptr;
   8102     PipelineInputAssemblyStateCreateFlags flags;
   8103     PrimitiveTopology topology;
   8104     Bool32 primitiveRestartEnable;
   8105   };
   8106   static_assert( sizeof( PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ), "struct and wrapper have different size!" );
   8107 
   8108   struct PipelineTessellationStateCreateInfo
   8109   {
   8110     PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateFlags flags_ = PipelineTessellationStateCreateFlags(), uint32_t patchControlPoints_ = 0 )
   8111       : flags( flags_ )
   8112       , patchControlPoints( patchControlPoints_ )
   8113     {
   8114     }
   8115 
   8116     PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs )
   8117     {
   8118       memcpy( this, &rhs, sizeof( PipelineTessellationStateCreateInfo ) );
   8119     }
   8120 
   8121     PipelineTessellationStateCreateInfo& operator=( VkPipelineTessellationStateCreateInfo const & rhs )
   8122     {
   8123       memcpy( this, &rhs, sizeof( PipelineTessellationStateCreateInfo ) );
   8124       return *this;
   8125     }
   8126     PipelineTessellationStateCreateInfo& setPNext( const void* pNext_ )
   8127     {
   8128       pNext = pNext_;
   8129       return *this;
   8130     }
   8131 
   8132     PipelineTessellationStateCreateInfo& setFlags( PipelineTessellationStateCreateFlags flags_ )
   8133     {
   8134       flags = flags_;
   8135       return *this;
   8136     }
   8137 
   8138     PipelineTessellationStateCreateInfo& setPatchControlPoints( uint32_t patchControlPoints_ )
   8139     {
   8140       patchControlPoints = patchControlPoints_;
   8141       return *this;
   8142     }
   8143 
   8144     operator const VkPipelineTessellationStateCreateInfo&() const
   8145     {
   8146       return *reinterpret_cast<const VkPipelineTessellationStateCreateInfo*>(this);
   8147     }
   8148 
   8149     bool operator==( PipelineTessellationStateCreateInfo const& rhs ) const
   8150     {
   8151       return ( sType == rhs.sType )
   8152           && ( pNext == rhs.pNext )
   8153           && ( flags == rhs.flags )
   8154           && ( patchControlPoints == rhs.patchControlPoints );
   8155     }
   8156 
   8157     bool operator!=( PipelineTessellationStateCreateInfo const& rhs ) const
   8158     {
   8159       return !operator==( rhs );
   8160     }
   8161 
   8162   private:
   8163     StructureType sType = StructureType::ePipelineTessellationStateCreateInfo;
   8164 
   8165   public:
   8166     const void* pNext = nullptr;
   8167     PipelineTessellationStateCreateFlags flags;
   8168     uint32_t patchControlPoints;
   8169   };
   8170   static_assert( sizeof( PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ), "struct and wrapper have different size!" );
   8171 
   8172   struct PipelineViewportStateCreateInfo
   8173   {
   8174     PipelineViewportStateCreateInfo( PipelineViewportStateCreateFlags flags_ = PipelineViewportStateCreateFlags(), uint32_t viewportCount_ = 0, const Viewport* pViewports_ = nullptr, uint32_t scissorCount_ = 0, const Rect2D* pScissors_ = nullptr )
   8175       : flags( flags_ )
   8176       , viewportCount( viewportCount_ )
   8177       , pViewports( pViewports_ )
   8178       , scissorCount( scissorCount_ )
   8179       , pScissors( pScissors_ )
   8180     {
   8181     }
   8182 
   8183     PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs )
   8184     {
   8185       memcpy( this, &rhs, sizeof( PipelineViewportStateCreateInfo ) );
   8186     }
   8187 
   8188     PipelineViewportStateCreateInfo& operator=( VkPipelineViewportStateCreateInfo const & rhs )
   8189     {
   8190       memcpy( this, &rhs, sizeof( PipelineViewportStateCreateInfo ) );
   8191       return *this;
   8192     }
   8193     PipelineViewportStateCreateInfo& setPNext( const void* pNext_ )
   8194     {
   8195       pNext = pNext_;
   8196       return *this;
   8197     }
   8198 
   8199     PipelineViewportStateCreateInfo& setFlags( PipelineViewportStateCreateFlags flags_ )
   8200     {
   8201       flags = flags_;
   8202       return *this;
   8203     }
   8204 
   8205     PipelineViewportStateCreateInfo& setViewportCount( uint32_t viewportCount_ )
   8206     {
   8207       viewportCount = viewportCount_;
   8208       return *this;
   8209     }
   8210 
   8211     PipelineViewportStateCreateInfo& setPViewports( const Viewport* pViewports_ )
   8212     {
   8213       pViewports = pViewports_;
   8214       return *this;
   8215     }
   8216 
   8217     PipelineViewportStateCreateInfo& setScissorCount( uint32_t scissorCount_ )
   8218     {
   8219       scissorCount = scissorCount_;
   8220       return *this;
   8221     }
   8222 
   8223     PipelineViewportStateCreateInfo& setPScissors( const Rect2D* pScissors_ )
   8224     {
   8225       pScissors = pScissors_;
   8226       return *this;
   8227     }
   8228 
   8229     operator const VkPipelineViewportStateCreateInfo&() const
   8230     {
   8231       return *reinterpret_cast<const VkPipelineViewportStateCreateInfo*>(this);
   8232     }
   8233 
   8234     bool operator==( PipelineViewportStateCreateInfo const& rhs ) const
   8235     {
   8236       return ( sType == rhs.sType )
   8237           && ( pNext == rhs.pNext )
   8238           && ( flags == rhs.flags )
   8239           && ( viewportCount == rhs.viewportCount )
   8240           && ( pViewports == rhs.pViewports )
   8241           && ( scissorCount == rhs.scissorCount )
   8242           && ( pScissors == rhs.pScissors );
   8243     }
   8244 
   8245     bool operator!=( PipelineViewportStateCreateInfo const& rhs ) const
   8246     {
   8247       return !operator==( rhs );
   8248     }
   8249 
   8250   private:
   8251     StructureType sType = StructureType::ePipelineViewportStateCreateInfo;
   8252 
   8253   public:
   8254     const void* pNext = nullptr;
   8255     PipelineViewportStateCreateFlags flags;
   8256     uint32_t viewportCount;
   8257     const Viewport* pViewports;
   8258     uint32_t scissorCount;
   8259     const Rect2D* pScissors;
   8260   };
   8261   static_assert( sizeof( PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ), "struct and wrapper have different size!" );
   8262 
   8263   struct PipelineRasterizationStateCreateInfo
   8264   {
   8265     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 )
   8266       : flags( flags_ )
   8267       , depthClampEnable( depthClampEnable_ )
   8268       , rasterizerDiscardEnable( rasterizerDiscardEnable_ )
   8269       , polygonMode( polygonMode_ )
   8270       , cullMode( cullMode_ )
   8271       , frontFace( frontFace_ )
   8272       , depthBiasEnable( depthBiasEnable_ )
   8273       , depthBiasConstantFactor( depthBiasConstantFactor_ )
   8274       , depthBiasClamp( depthBiasClamp_ )
   8275       , depthBiasSlopeFactor( depthBiasSlopeFactor_ )
   8276       , lineWidth( lineWidth_ )
   8277     {
   8278     }
   8279 
   8280     PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs )
   8281     {
   8282       memcpy( this, &rhs, sizeof( PipelineRasterizationStateCreateInfo ) );
   8283     }
   8284 
   8285     PipelineRasterizationStateCreateInfo& operator=( VkPipelineRasterizationStateCreateInfo const & rhs )
   8286     {
   8287       memcpy( this, &rhs, sizeof( PipelineRasterizationStateCreateInfo ) );
   8288       return *this;
   8289     }
   8290     PipelineRasterizationStateCreateInfo& setPNext( const void* pNext_ )
   8291     {
   8292       pNext = pNext_;
   8293       return *this;
   8294     }
   8295 
   8296     PipelineRasterizationStateCreateInfo& setFlags( PipelineRasterizationStateCreateFlags flags_ )
   8297     {
   8298       flags = flags_;
   8299       return *this;
   8300     }
   8301 
   8302     PipelineRasterizationStateCreateInfo& setDepthClampEnable( Bool32 depthClampEnable_ )
   8303     {
   8304       depthClampEnable = depthClampEnable_;
   8305       return *this;
   8306     }
   8307 
   8308     PipelineRasterizationStateCreateInfo& setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable_ )
   8309     {
   8310       rasterizerDiscardEnable = rasterizerDiscardEnable_;
   8311       return *this;
   8312     }
   8313 
   8314     PipelineRasterizationStateCreateInfo& setPolygonMode( PolygonMode polygonMode_ )
   8315     {
   8316       polygonMode = polygonMode_;
   8317       return *this;
   8318     }
   8319 
   8320     PipelineRasterizationStateCreateInfo& setCullMode( CullModeFlags cullMode_ )
   8321     {
   8322       cullMode = cullMode_;
   8323       return *this;
   8324     }
   8325 
   8326     PipelineRasterizationStateCreateInfo& setFrontFace( FrontFace frontFace_ )
   8327     {
   8328       frontFace = frontFace_;
   8329       return *this;
   8330     }
   8331 
   8332     PipelineRasterizationStateCreateInfo& setDepthBiasEnable( Bool32 depthBiasEnable_ )
   8333     {
   8334       depthBiasEnable = depthBiasEnable_;
   8335       return *this;
   8336     }
   8337 
   8338     PipelineRasterizationStateCreateInfo& setDepthBiasConstantFactor( float depthBiasConstantFactor_ )
   8339     {
   8340       depthBiasConstantFactor = depthBiasConstantFactor_;
   8341       return *this;
   8342     }
   8343 
   8344     PipelineRasterizationStateCreateInfo& setDepthBiasClamp( float depthBiasClamp_ )
   8345     {
   8346       depthBiasClamp = depthBiasClamp_;
   8347       return *this;
   8348     }
   8349 
   8350     PipelineRasterizationStateCreateInfo& setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ )
   8351     {
   8352       depthBiasSlopeFactor = depthBiasSlopeFactor_;
   8353       return *this;
   8354     }
   8355 
   8356     PipelineRasterizationStateCreateInfo& setLineWidth( float lineWidth_ )
   8357     {
   8358       lineWidth = lineWidth_;
   8359       return *this;
   8360     }
   8361 
   8362     operator const VkPipelineRasterizationStateCreateInfo&() const
   8363     {
   8364       return *reinterpret_cast<const VkPipelineRasterizationStateCreateInfo*>(this);
   8365     }
   8366 
   8367     bool operator==( PipelineRasterizationStateCreateInfo const& rhs ) const
   8368     {
   8369       return ( sType == rhs.sType )
   8370           && ( pNext == rhs.pNext )
   8371           && ( flags == rhs.flags )
   8372           && ( depthClampEnable == rhs.depthClampEnable )
   8373           && ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable )
   8374           && ( polygonMode == rhs.polygonMode )
   8375           && ( cullMode == rhs.cullMode )
   8376           && ( frontFace == rhs.frontFace )
   8377           && ( depthBiasEnable == rhs.depthBiasEnable )
   8378           && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor )
   8379           && ( depthBiasClamp == rhs.depthBiasClamp )
   8380           && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor )
   8381           && ( lineWidth == rhs.lineWidth );
   8382     }
   8383 
   8384     bool operator!=( PipelineRasterizationStateCreateInfo const& rhs ) const
   8385     {
   8386       return !operator==( rhs );
   8387     }
   8388 
   8389   private:
   8390     StructureType sType = StructureType::ePipelineRasterizationStateCreateInfo;
   8391 
   8392   public:
   8393     const void* pNext = nullptr;
   8394     PipelineRasterizationStateCreateFlags flags;
   8395     Bool32 depthClampEnable;
   8396     Bool32 rasterizerDiscardEnable;
   8397     PolygonMode polygonMode;
   8398     CullModeFlags cullMode;
   8399     FrontFace frontFace;
   8400     Bool32 depthBiasEnable;
   8401     float depthBiasConstantFactor;
   8402     float depthBiasClamp;
   8403     float depthBiasSlopeFactor;
   8404     float lineWidth;
   8405   };
   8406   static_assert( sizeof( PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ), "struct and wrapper have different size!" );
   8407 
   8408   struct PipelineDepthStencilStateCreateInfo
   8409   {
   8410     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 )
   8411       : flags( flags_ )
   8412       , depthTestEnable( depthTestEnable_ )
   8413       , depthWriteEnable( depthWriteEnable_ )
   8414       , depthCompareOp( depthCompareOp_ )
   8415       , depthBoundsTestEnable( depthBoundsTestEnable_ )
   8416       , stencilTestEnable( stencilTestEnable_ )
   8417       , front( front_ )
   8418       , back( back_ )
   8419       , minDepthBounds( minDepthBounds_ )
   8420       , maxDepthBounds( maxDepthBounds_ )
   8421     {
   8422     }
   8423 
   8424     PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs )
   8425     {
   8426       memcpy( this, &rhs, sizeof( PipelineDepthStencilStateCreateInfo ) );
   8427     }
   8428 
   8429     PipelineDepthStencilStateCreateInfo& operator=( VkPipelineDepthStencilStateCreateInfo const & rhs )
   8430     {
   8431       memcpy( this, &rhs, sizeof( PipelineDepthStencilStateCreateInfo ) );
   8432       return *this;
   8433     }
   8434     PipelineDepthStencilStateCreateInfo& setPNext( const void* pNext_ )
   8435     {
   8436       pNext = pNext_;
   8437       return *this;
   8438     }
   8439 
   8440     PipelineDepthStencilStateCreateInfo& setFlags( PipelineDepthStencilStateCreateFlags flags_ )
   8441     {
   8442       flags = flags_;
   8443       return *this;
   8444     }
   8445 
   8446     PipelineDepthStencilStateCreateInfo& setDepthTestEnable( Bool32 depthTestEnable_ )
   8447     {
   8448       depthTestEnable = depthTestEnable_;
   8449       return *this;
   8450     }
   8451 
   8452     PipelineDepthStencilStateCreateInfo& setDepthWriteEnable( Bool32 depthWriteEnable_ )
   8453     {
   8454       depthWriteEnable = depthWriteEnable_;
   8455       return *this;
   8456     }
   8457 
   8458     PipelineDepthStencilStateCreateInfo& setDepthCompareOp( CompareOp depthCompareOp_ )
   8459     {
   8460       depthCompareOp = depthCompareOp_;
   8461       return *this;
   8462     }
   8463 
   8464     PipelineDepthStencilStateCreateInfo& setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable_ )
   8465     {
   8466       depthBoundsTestEnable = depthBoundsTestEnable_;
   8467       return *this;
   8468     }
   8469 
   8470     PipelineDepthStencilStateCreateInfo& setStencilTestEnable( Bool32 stencilTestEnable_ )
   8471     {
   8472       stencilTestEnable = stencilTestEnable_;
   8473       return *this;
   8474     }
   8475 
   8476     PipelineDepthStencilStateCreateInfo& setFront( StencilOpState front_ )
   8477     {
   8478       front = front_;
   8479       return *this;
   8480     }
   8481 
   8482     PipelineDepthStencilStateCreateInfo& setBack( StencilOpState back_ )
   8483     {
   8484       back = back_;
   8485       return *this;
   8486     }
   8487 
   8488     PipelineDepthStencilStateCreateInfo& setMinDepthBounds( float minDepthBounds_ )
   8489     {
   8490       minDepthBounds = minDepthBounds_;
   8491       return *this;
   8492     }
   8493 
   8494     PipelineDepthStencilStateCreateInfo& setMaxDepthBounds( float maxDepthBounds_ )
   8495     {
   8496       maxDepthBounds = maxDepthBounds_;
   8497       return *this;
   8498     }
   8499 
   8500     operator const VkPipelineDepthStencilStateCreateInfo&() const
   8501     {
   8502       return *reinterpret_cast<const VkPipelineDepthStencilStateCreateInfo*>(this);
   8503     }
   8504 
   8505     bool operator==( PipelineDepthStencilStateCreateInfo const& rhs ) const
   8506     {
   8507       return ( sType == rhs.sType )
   8508           && ( pNext == rhs.pNext )
   8509           && ( flags == rhs.flags )
   8510           && ( depthTestEnable == rhs.depthTestEnable )
   8511           && ( depthWriteEnable == rhs.depthWriteEnable )
   8512           && ( depthCompareOp == rhs.depthCompareOp )
   8513           && ( depthBoundsTestEnable == rhs.depthBoundsTestEnable )
   8514           && ( stencilTestEnable == rhs.stencilTestEnable )
   8515           && ( front == rhs.front )
   8516           && ( back == rhs.back )
   8517           && ( minDepthBounds == rhs.minDepthBounds )
   8518           && ( maxDepthBounds == rhs.maxDepthBounds );
   8519     }
   8520 
   8521     bool operator!=( PipelineDepthStencilStateCreateInfo const& rhs ) const
   8522     {
   8523       return !operator==( rhs );
   8524     }
   8525 
   8526   private:
   8527     StructureType sType = StructureType::ePipelineDepthStencilStateCreateInfo;
   8528 
   8529   public:
   8530     const void* pNext = nullptr;
   8531     PipelineDepthStencilStateCreateFlags flags;
   8532     Bool32 depthTestEnable;
   8533     Bool32 depthWriteEnable;
   8534     CompareOp depthCompareOp;
   8535     Bool32 depthBoundsTestEnable;
   8536     Bool32 stencilTestEnable;
   8537     StencilOpState front;
   8538     StencilOpState back;
   8539     float minDepthBounds;
   8540     float maxDepthBounds;
   8541   };
   8542   static_assert( sizeof( PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ), "struct and wrapper have different size!" );
   8543 
   8544   struct PipelineCacheCreateInfo
   8545   {
   8546     PipelineCacheCreateInfo( PipelineCacheCreateFlags flags_ = PipelineCacheCreateFlags(), size_t initialDataSize_ = 0, const void* pInitialData_ = nullptr )
   8547       : flags( flags_ )
   8548       , initialDataSize( initialDataSize_ )
   8549       , pInitialData( pInitialData_ )
   8550     {
   8551     }
   8552 
   8553     PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs )
   8554     {
   8555       memcpy( this, &rhs, sizeof( PipelineCacheCreateInfo ) );
   8556     }
   8557 
   8558     PipelineCacheCreateInfo& operator=( VkPipelineCacheCreateInfo const & rhs )
   8559     {
   8560       memcpy( this, &rhs, sizeof( PipelineCacheCreateInfo ) );
   8561       return *this;
   8562     }
   8563     PipelineCacheCreateInfo& setPNext( const void* pNext_ )
   8564     {
   8565       pNext = pNext_;
   8566       return *this;
   8567     }
   8568 
   8569     PipelineCacheCreateInfo& setFlags( PipelineCacheCreateFlags flags_ )
   8570     {
   8571       flags = flags_;
   8572       return *this;
   8573     }
   8574 
   8575     PipelineCacheCreateInfo& setInitialDataSize( size_t initialDataSize_ )
   8576     {
   8577       initialDataSize = initialDataSize_;
   8578       return *this;
   8579     }
   8580 
   8581     PipelineCacheCreateInfo& setPInitialData( const void* pInitialData_ )
   8582     {
   8583       pInitialData = pInitialData_;
   8584       return *this;
   8585     }
   8586 
   8587     operator const VkPipelineCacheCreateInfo&() const
   8588     {
   8589       return *reinterpret_cast<const VkPipelineCacheCreateInfo*>(this);
   8590     }
   8591 
   8592     bool operator==( PipelineCacheCreateInfo const& rhs ) const
   8593     {
   8594       return ( sType == rhs.sType )
   8595           && ( pNext == rhs.pNext )
   8596           && ( flags == rhs.flags )
   8597           && ( initialDataSize == rhs.initialDataSize )
   8598           && ( pInitialData == rhs.pInitialData );
   8599     }
   8600 
   8601     bool operator!=( PipelineCacheCreateInfo const& rhs ) const
   8602     {
   8603       return !operator==( rhs );
   8604     }
   8605 
   8606   private:
   8607     StructureType sType = StructureType::ePipelineCacheCreateInfo;
   8608 
   8609   public:
   8610     const void* pNext = nullptr;
   8611     PipelineCacheCreateFlags flags;
   8612     size_t initialDataSize;
   8613     const void* pInitialData;
   8614   };
   8615   static_assert( sizeof( PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ), "struct and wrapper have different size!" );
   8616 
   8617   struct SamplerCreateInfo
   8618   {
   8619     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 )
   8620       : flags( flags_ )
   8621       , magFilter( magFilter_ )
   8622       , minFilter( minFilter_ )
   8623       , mipmapMode( mipmapMode_ )
   8624       , addressModeU( addressModeU_ )
   8625       , addressModeV( addressModeV_ )
   8626       , addressModeW( addressModeW_ )
   8627       , mipLodBias( mipLodBias_ )
   8628       , anisotropyEnable( anisotropyEnable_ )
   8629       , maxAnisotropy( maxAnisotropy_ )
   8630       , compareEnable( compareEnable_ )
   8631       , compareOp( compareOp_ )
   8632       , minLod( minLod_ )
   8633       , maxLod( maxLod_ )
   8634       , borderColor( borderColor_ )
   8635       , unnormalizedCoordinates( unnormalizedCoordinates_ )
   8636     {
   8637     }
   8638 
   8639     SamplerCreateInfo( VkSamplerCreateInfo const & rhs )
   8640     {
   8641       memcpy( this, &rhs, sizeof( SamplerCreateInfo ) );
   8642     }
   8643 
   8644     SamplerCreateInfo& operator=( VkSamplerCreateInfo const & rhs )
   8645     {
   8646       memcpy( this, &rhs, sizeof( SamplerCreateInfo ) );
   8647       return *this;
   8648     }
   8649     SamplerCreateInfo& setPNext( const void* pNext_ )
   8650     {
   8651       pNext = pNext_;
   8652       return *this;
   8653     }
   8654 
   8655     SamplerCreateInfo& setFlags( SamplerCreateFlags flags_ )
   8656     {
   8657       flags = flags_;
   8658       return *this;
   8659     }
   8660 
   8661     SamplerCreateInfo& setMagFilter( Filter magFilter_ )
   8662     {
   8663       magFilter = magFilter_;
   8664       return *this;
   8665     }
   8666 
   8667     SamplerCreateInfo& setMinFilter( Filter minFilter_ )
   8668     {
   8669       minFilter = minFilter_;
   8670       return *this;
   8671     }
   8672 
   8673     SamplerCreateInfo& setMipmapMode( SamplerMipmapMode mipmapMode_ )
   8674     {
   8675       mipmapMode = mipmapMode_;
   8676       return *this;
   8677     }
   8678 
   8679     SamplerCreateInfo& setAddressModeU( SamplerAddressMode addressModeU_ )
   8680     {
   8681       addressModeU = addressModeU_;
   8682       return *this;
   8683     }
   8684 
   8685     SamplerCreateInfo& setAddressModeV( SamplerAddressMode addressModeV_ )
   8686     {
   8687       addressModeV = addressModeV_;
   8688       return *this;
   8689     }
   8690 
   8691     SamplerCreateInfo& setAddressModeW( SamplerAddressMode addressModeW_ )
   8692     {
   8693       addressModeW = addressModeW_;
   8694       return *this;
   8695     }
   8696 
   8697     SamplerCreateInfo& setMipLodBias( float mipLodBias_ )
   8698     {
   8699       mipLodBias = mipLodBias_;
   8700       return *this;
   8701     }
   8702 
   8703     SamplerCreateInfo& setAnisotropyEnable( Bool32 anisotropyEnable_ )
   8704     {
   8705       anisotropyEnable = anisotropyEnable_;
   8706       return *this;
   8707     }
   8708 
   8709     SamplerCreateInfo& setMaxAnisotropy( float maxAnisotropy_ )
   8710     {
   8711       maxAnisotropy = maxAnisotropy_;
   8712       return *this;
   8713     }
   8714 
   8715     SamplerCreateInfo& setCompareEnable( Bool32 compareEnable_ )
   8716     {
   8717       compareEnable = compareEnable_;
   8718       return *this;
   8719     }
   8720 
   8721     SamplerCreateInfo& setCompareOp( CompareOp compareOp_ )
   8722     {
   8723       compareOp = compareOp_;
   8724       return *this;
   8725     }
   8726 
   8727     SamplerCreateInfo& setMinLod( float minLod_ )
   8728     {
   8729       minLod = minLod_;
   8730       return *this;
   8731     }
   8732 
   8733     SamplerCreateInfo& setMaxLod( float maxLod_ )
   8734     {
   8735       maxLod = maxLod_;
   8736       return *this;
   8737     }
   8738 
   8739     SamplerCreateInfo& setBorderColor( BorderColor borderColor_ )
   8740     {
   8741       borderColor = borderColor_;
   8742       return *this;
   8743     }
   8744 
   8745     SamplerCreateInfo& setUnnormalizedCoordinates( Bool32 unnormalizedCoordinates_ )
   8746     {
   8747       unnormalizedCoordinates = unnormalizedCoordinates_;
   8748       return *this;
   8749     }
   8750 
   8751     operator const VkSamplerCreateInfo&() const
   8752     {
   8753       return *reinterpret_cast<const VkSamplerCreateInfo*>(this);
   8754     }
   8755 
   8756     bool operator==( SamplerCreateInfo const& rhs ) const
   8757     {
   8758       return ( sType == rhs.sType )
   8759           && ( pNext == rhs.pNext )
   8760           && ( flags == rhs.flags )
   8761           && ( magFilter == rhs.magFilter )
   8762           && ( minFilter == rhs.minFilter )
   8763           && ( mipmapMode == rhs.mipmapMode )
   8764           && ( addressModeU == rhs.addressModeU )
   8765           && ( addressModeV == rhs.addressModeV )
   8766           && ( addressModeW == rhs.addressModeW )
   8767           && ( mipLodBias == rhs.mipLodBias )
   8768           && ( anisotropyEnable == rhs.anisotropyEnable )
   8769           && ( maxAnisotropy == rhs.maxAnisotropy )
   8770           && ( compareEnable == rhs.compareEnable )
   8771           && ( compareOp == rhs.compareOp )
   8772           && ( minLod == rhs.minLod )
   8773           && ( maxLod == rhs.maxLod )
   8774           && ( borderColor == rhs.borderColor )
   8775           && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates );
   8776     }
   8777 
   8778     bool operator!=( SamplerCreateInfo const& rhs ) const
   8779     {
   8780       return !operator==( rhs );
   8781     }
   8782 
   8783   private:
   8784     StructureType sType = StructureType::eSamplerCreateInfo;
   8785 
   8786   public:
   8787     const void* pNext = nullptr;
   8788     SamplerCreateFlags flags;
   8789     Filter magFilter;
   8790     Filter minFilter;
   8791     SamplerMipmapMode mipmapMode;
   8792     SamplerAddressMode addressModeU;
   8793     SamplerAddressMode addressModeV;
   8794     SamplerAddressMode addressModeW;
   8795     float mipLodBias;
   8796     Bool32 anisotropyEnable;
   8797     float maxAnisotropy;
   8798     Bool32 compareEnable;
   8799     CompareOp compareOp;
   8800     float minLod;
   8801     float maxLod;
   8802     BorderColor borderColor;
   8803     Bool32 unnormalizedCoordinates;
   8804   };
   8805   static_assert( sizeof( SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ), "struct and wrapper have different size!" );
   8806 
   8807   struct CommandBufferAllocateInfo
   8808   {
   8809     CommandBufferAllocateInfo( CommandPool commandPool_ = CommandPool(), CommandBufferLevel level_ = CommandBufferLevel::ePrimary, uint32_t commandBufferCount_ = 0 )
   8810       : commandPool( commandPool_ )
   8811       , level( level_ )
   8812       , commandBufferCount( commandBufferCount_ )
   8813     {
   8814     }
   8815 
   8816     CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs )
   8817     {
   8818       memcpy( this, &rhs, sizeof( CommandBufferAllocateInfo ) );
   8819     }
   8820 
   8821     CommandBufferAllocateInfo& operator=( VkCommandBufferAllocateInfo const & rhs )
   8822     {
   8823       memcpy( this, &rhs, sizeof( CommandBufferAllocateInfo ) );
   8824       return *this;
   8825     }
   8826     CommandBufferAllocateInfo& setPNext( const void* pNext_ )
   8827     {
   8828       pNext = pNext_;
   8829       return *this;
   8830     }
   8831 
   8832     CommandBufferAllocateInfo& setCommandPool( CommandPool commandPool_ )
   8833     {
   8834       commandPool = commandPool_;
   8835       return *this;
   8836     }
   8837 
   8838     CommandBufferAllocateInfo& setLevel( CommandBufferLevel level_ )
   8839     {
   8840       level = level_;
   8841       return *this;
   8842     }
   8843 
   8844     CommandBufferAllocateInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
   8845     {
   8846       commandBufferCount = commandBufferCount_;
   8847       return *this;
   8848     }
   8849 
   8850     operator const VkCommandBufferAllocateInfo&() const
   8851     {
   8852       return *reinterpret_cast<const VkCommandBufferAllocateInfo*>(this);
   8853     }
   8854 
   8855     bool operator==( CommandBufferAllocateInfo const& rhs ) const
   8856     {
   8857       return ( sType == rhs.sType )
   8858           && ( pNext == rhs.pNext )
   8859           && ( commandPool == rhs.commandPool )
   8860           && ( level == rhs.level )
   8861           && ( commandBufferCount == rhs.commandBufferCount );
   8862     }
   8863 
   8864     bool operator!=( CommandBufferAllocateInfo const& rhs ) const
   8865     {
   8866       return !operator==( rhs );
   8867     }
   8868 
   8869   private:
   8870     StructureType sType = StructureType::eCommandBufferAllocateInfo;
   8871 
   8872   public:
   8873     const void* pNext = nullptr;
   8874     CommandPool commandPool;
   8875     CommandBufferLevel level;
   8876     uint32_t commandBufferCount;
   8877   };
   8878   static_assert( sizeof( CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ), "struct and wrapper have different size!" );
   8879 
   8880   struct RenderPassBeginInfo
   8881   {
   8882     RenderPassBeginInfo( RenderPass renderPass_ = RenderPass(), Framebuffer framebuffer_ = Framebuffer(), Rect2D renderArea_ = Rect2D(), uint32_t clearValueCount_ = 0, const ClearValue* pClearValues_ = nullptr )
   8883       : renderPass( renderPass_ )
   8884       , framebuffer( framebuffer_ )
   8885       , renderArea( renderArea_ )
   8886       , clearValueCount( clearValueCount_ )
   8887       , pClearValues( pClearValues_ )
   8888     {
   8889     }
   8890 
   8891     RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs )
   8892     {
   8893       memcpy( this, &rhs, sizeof( RenderPassBeginInfo ) );
   8894     }
   8895 
   8896     RenderPassBeginInfo& operator=( VkRenderPassBeginInfo const & rhs )
   8897     {
   8898       memcpy( this, &rhs, sizeof( RenderPassBeginInfo ) );
   8899       return *this;
   8900     }
   8901     RenderPassBeginInfo& setPNext( const void* pNext_ )
   8902     {
   8903       pNext = pNext_;
   8904       return *this;
   8905     }
   8906 
   8907     RenderPassBeginInfo& setRenderPass( RenderPass renderPass_ )
   8908     {
   8909       renderPass = renderPass_;
   8910       return *this;
   8911     }
   8912 
   8913     RenderPassBeginInfo& setFramebuffer( Framebuffer framebuffer_ )
   8914     {
   8915       framebuffer = framebuffer_;
   8916       return *this;
   8917     }
   8918 
   8919     RenderPassBeginInfo& setRenderArea( Rect2D renderArea_ )
   8920     {
   8921       renderArea = renderArea_;
   8922       return *this;
   8923     }
   8924 
   8925     RenderPassBeginInfo& setClearValueCount( uint32_t clearValueCount_ )
   8926     {
   8927       clearValueCount = clearValueCount_;
   8928       return *this;
   8929     }
   8930 
   8931     RenderPassBeginInfo& setPClearValues( const ClearValue* pClearValues_ )
   8932     {
   8933       pClearValues = pClearValues_;
   8934       return *this;
   8935     }
   8936 
   8937     operator const VkRenderPassBeginInfo&() const
   8938     {
   8939       return *reinterpret_cast<const VkRenderPassBeginInfo*>(this);
   8940     }
   8941 
   8942     bool operator==( RenderPassBeginInfo const& rhs ) const
   8943     {
   8944       return ( sType == rhs.sType )
   8945           && ( pNext == rhs.pNext )
   8946           && ( renderPass == rhs.renderPass )
   8947           && ( framebuffer == rhs.framebuffer )
   8948           && ( renderArea == rhs.renderArea )
   8949           && ( clearValueCount == rhs.clearValueCount )
   8950           && ( pClearValues == rhs.pClearValues );
   8951     }
   8952 
   8953     bool operator!=( RenderPassBeginInfo const& rhs ) const
   8954     {
   8955       return !operator==( rhs );
   8956     }
   8957 
   8958   private:
   8959     StructureType sType = StructureType::eRenderPassBeginInfo;
   8960 
   8961   public:
   8962     const void* pNext = nullptr;
   8963     RenderPass renderPass;
   8964     Framebuffer framebuffer;
   8965     Rect2D renderArea;
   8966     uint32_t clearValueCount;
   8967     const ClearValue* pClearValues;
   8968   };
   8969   static_assert( sizeof( RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ), "struct and wrapper have different size!" );
   8970 
   8971   struct EventCreateInfo
   8972   {
   8973     EventCreateInfo( EventCreateFlags flags_ = EventCreateFlags() )
   8974       : flags( flags_ )
   8975     {
   8976     }
   8977 
   8978     EventCreateInfo( VkEventCreateInfo const & rhs )
   8979     {
   8980       memcpy( this, &rhs, sizeof( EventCreateInfo ) );
   8981     }
   8982 
   8983     EventCreateInfo& operator=( VkEventCreateInfo const & rhs )
   8984     {
   8985       memcpy( this, &rhs, sizeof( EventCreateInfo ) );
   8986       return *this;
   8987     }
   8988     EventCreateInfo& setPNext( const void* pNext_ )
   8989     {
   8990       pNext = pNext_;
   8991       return *this;
   8992     }
   8993 
   8994     EventCreateInfo& setFlags( EventCreateFlags flags_ )
   8995     {
   8996       flags = flags_;
   8997       return *this;
   8998     }
   8999 
   9000     operator const VkEventCreateInfo&() const
   9001     {
   9002       return *reinterpret_cast<const VkEventCreateInfo*>(this);
   9003     }
   9004 
   9005     bool operator==( EventCreateInfo const& rhs ) const
   9006     {
   9007       return ( sType == rhs.sType )
   9008           && ( pNext == rhs.pNext )
   9009           && ( flags == rhs.flags );
   9010     }
   9011 
   9012     bool operator!=( EventCreateInfo const& rhs ) const
   9013     {
   9014       return !operator==( rhs );
   9015     }
   9016 
   9017   private:
   9018     StructureType sType = StructureType::eEventCreateInfo;
   9019 
   9020   public:
   9021     const void* pNext = nullptr;
   9022     EventCreateFlags flags;
   9023   };
   9024   static_assert( sizeof( EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" );
   9025 
   9026   struct SemaphoreCreateInfo
   9027   {
   9028     SemaphoreCreateInfo( SemaphoreCreateFlags flags_ = SemaphoreCreateFlags() )
   9029       : flags( flags_ )
   9030     {
   9031     }
   9032 
   9033     SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs )
   9034     {
   9035       memcpy( this, &rhs, sizeof( SemaphoreCreateInfo ) );
   9036     }
   9037 
   9038     SemaphoreCreateInfo& operator=( VkSemaphoreCreateInfo const & rhs )
   9039     {
   9040       memcpy( this, &rhs, sizeof( SemaphoreCreateInfo ) );
   9041       return *this;
   9042     }
   9043     SemaphoreCreateInfo& setPNext( const void* pNext_ )
   9044     {
   9045       pNext = pNext_;
   9046       return *this;
   9047     }
   9048 
   9049     SemaphoreCreateInfo& setFlags( SemaphoreCreateFlags flags_ )
   9050     {
   9051       flags = flags_;
   9052       return *this;
   9053     }
   9054 
   9055     operator const VkSemaphoreCreateInfo&() const
   9056     {
   9057       return *reinterpret_cast<const VkSemaphoreCreateInfo*>(this);
   9058     }
   9059 
   9060     bool operator==( SemaphoreCreateInfo const& rhs ) const
   9061     {
   9062       return ( sType == rhs.sType )
   9063           && ( pNext == rhs.pNext )
   9064           && ( flags == rhs.flags );
   9065     }
   9066 
   9067     bool operator!=( SemaphoreCreateInfo const& rhs ) const
   9068     {
   9069       return !operator==( rhs );
   9070     }
   9071 
   9072   private:
   9073     StructureType sType = StructureType::eSemaphoreCreateInfo;
   9074 
   9075   public:
   9076     const void* pNext = nullptr;
   9077     SemaphoreCreateFlags flags;
   9078   };
   9079   static_assert( sizeof( SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ), "struct and wrapper have different size!" );
   9080 
   9081   struct FramebufferCreateInfo
   9082   {
   9083     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 )
   9084       : flags( flags_ )
   9085       , renderPass( renderPass_ )
   9086       , attachmentCount( attachmentCount_ )
   9087       , pAttachments( pAttachments_ )
   9088       , width( width_ )
   9089       , height( height_ )
   9090       , layers( layers_ )
   9091     {
   9092     }
   9093 
   9094     FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs )
   9095     {
   9096       memcpy( this, &rhs, sizeof( FramebufferCreateInfo ) );
   9097     }
   9098 
   9099     FramebufferCreateInfo& operator=( VkFramebufferCreateInfo const & rhs )
   9100     {
   9101       memcpy( this, &rhs, sizeof( FramebufferCreateInfo ) );
   9102       return *this;
   9103     }
   9104     FramebufferCreateInfo& setPNext( const void* pNext_ )
   9105     {
   9106       pNext = pNext_;
   9107       return *this;
   9108     }
   9109 
   9110     FramebufferCreateInfo& setFlags( FramebufferCreateFlags flags_ )
   9111     {
   9112       flags = flags_;
   9113       return *this;
   9114     }
   9115 
   9116     FramebufferCreateInfo& setRenderPass( RenderPass renderPass_ )
   9117     {
   9118       renderPass = renderPass_;
   9119       return *this;
   9120     }
   9121 
   9122     FramebufferCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
   9123     {
   9124       attachmentCount = attachmentCount_;
   9125       return *this;
   9126     }
   9127 
   9128     FramebufferCreateInfo& setPAttachments( const ImageView* pAttachments_ )
   9129     {
   9130       pAttachments = pAttachments_;
   9131       return *this;
   9132     }
   9133 
   9134     FramebufferCreateInfo& setWidth( uint32_t width_ )
   9135     {
   9136       width = width_;
   9137       return *this;
   9138     }
   9139 
   9140     FramebufferCreateInfo& setHeight( uint32_t height_ )
   9141     {
   9142       height = height_;
   9143       return *this;
   9144     }
   9145 
   9146     FramebufferCreateInfo& setLayers( uint32_t layers_ )
   9147     {
   9148       layers = layers_;
   9149       return *this;
   9150     }
   9151 
   9152     operator const VkFramebufferCreateInfo&() const
   9153     {
   9154       return *reinterpret_cast<const VkFramebufferCreateInfo*>(this);
   9155     }
   9156 
   9157     bool operator==( FramebufferCreateInfo const& rhs ) const
   9158     {
   9159       return ( sType == rhs.sType )
   9160           && ( pNext == rhs.pNext )
   9161           && ( flags == rhs.flags )
   9162           && ( renderPass == rhs.renderPass )
   9163           && ( attachmentCount == rhs.attachmentCount )
   9164           && ( pAttachments == rhs.pAttachments )
   9165           && ( width == rhs.width )
   9166           && ( height == rhs.height )
   9167           && ( layers == rhs.layers );
   9168     }
   9169 
   9170     bool operator!=( FramebufferCreateInfo const& rhs ) const
   9171     {
   9172       return !operator==( rhs );
   9173     }
   9174 
   9175   private:
   9176     StructureType sType = StructureType::eFramebufferCreateInfo;
   9177 
   9178   public:
   9179     const void* pNext = nullptr;
   9180     FramebufferCreateFlags flags;
   9181     RenderPass renderPass;
   9182     uint32_t attachmentCount;
   9183     const ImageView* pAttachments;
   9184     uint32_t width;
   9185     uint32_t height;
   9186     uint32_t layers;
   9187   };
   9188   static_assert( sizeof( FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ), "struct and wrapper have different size!" );
   9189 
   9190   struct DisplayModeCreateInfoKHR
   9191   {
   9192     DisplayModeCreateInfoKHR( DisplayModeCreateFlagsKHR flags_ = DisplayModeCreateFlagsKHR(), DisplayModeParametersKHR parameters_ = DisplayModeParametersKHR() )
   9193       : flags( flags_ )
   9194       , parameters( parameters_ )
   9195     {
   9196     }
   9197 
   9198     DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs )
   9199     {
   9200       memcpy( this, &rhs, sizeof( DisplayModeCreateInfoKHR ) );
   9201     }
   9202 
   9203     DisplayModeCreateInfoKHR& operator=( VkDisplayModeCreateInfoKHR const & rhs )
   9204     {
   9205       memcpy( this, &rhs, sizeof( DisplayModeCreateInfoKHR ) );
   9206       return *this;
   9207     }
   9208     DisplayModeCreateInfoKHR& setPNext( const void* pNext_ )
   9209     {
   9210       pNext = pNext_;
   9211       return *this;
   9212     }
   9213 
   9214     DisplayModeCreateInfoKHR& setFlags( DisplayModeCreateFlagsKHR flags_ )
   9215     {
   9216       flags = flags_;
   9217       return *this;
   9218     }
   9219 
   9220     DisplayModeCreateInfoKHR& setParameters( DisplayModeParametersKHR parameters_ )
   9221     {
   9222       parameters = parameters_;
   9223       return *this;
   9224     }
   9225 
   9226     operator const VkDisplayModeCreateInfoKHR&() const
   9227     {
   9228       return *reinterpret_cast<const VkDisplayModeCreateInfoKHR*>(this);
   9229     }
   9230 
   9231     bool operator==( DisplayModeCreateInfoKHR const& rhs ) const
   9232     {
   9233       return ( sType == rhs.sType )
   9234           && ( pNext == rhs.pNext )
   9235           && ( flags == rhs.flags )
   9236           && ( parameters == rhs.parameters );
   9237     }
   9238 
   9239     bool operator!=( DisplayModeCreateInfoKHR const& rhs ) const
   9240     {
   9241       return !operator==( rhs );
   9242     }
   9243 
   9244   private:
   9245     StructureType sType = StructureType::eDisplayModeCreateInfoKHR;
   9246 
   9247   public:
   9248     const void* pNext = nullptr;
   9249     DisplayModeCreateFlagsKHR flags;
   9250     DisplayModeParametersKHR parameters;
   9251   };
   9252   static_assert( sizeof( DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ), "struct and wrapper have different size!" );
   9253 
   9254   struct DisplayPresentInfoKHR
   9255   {
   9256     DisplayPresentInfoKHR( Rect2D srcRect_ = Rect2D(), Rect2D dstRect_ = Rect2D(), Bool32 persistent_ = 0 )
   9257       : srcRect( srcRect_ )
   9258       , dstRect( dstRect_ )
   9259       , persistent( persistent_ )
   9260     {
   9261     }
   9262 
   9263     DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs )
   9264     {
   9265       memcpy( this, &rhs, sizeof( DisplayPresentInfoKHR ) );
   9266     }
   9267 
   9268     DisplayPresentInfoKHR& operator=( VkDisplayPresentInfoKHR const & rhs )
   9269     {
   9270       memcpy( this, &rhs, sizeof( DisplayPresentInfoKHR ) );
   9271       return *this;
   9272     }
   9273     DisplayPresentInfoKHR& setPNext( const void* pNext_ )
   9274     {
   9275       pNext = pNext_;
   9276       return *this;
   9277     }
   9278 
   9279     DisplayPresentInfoKHR& setSrcRect( Rect2D srcRect_ )
   9280     {
   9281       srcRect = srcRect_;
   9282       return *this;
   9283     }
   9284 
   9285     DisplayPresentInfoKHR& setDstRect( Rect2D dstRect_ )
   9286     {
   9287       dstRect = dstRect_;
   9288       return *this;
   9289     }
   9290 
   9291     DisplayPresentInfoKHR& setPersistent( Bool32 persistent_ )
   9292     {
   9293       persistent = persistent_;
   9294       return *this;
   9295     }
   9296 
   9297     operator const VkDisplayPresentInfoKHR&() const
   9298     {
   9299       return *reinterpret_cast<const VkDisplayPresentInfoKHR*>(this);
   9300     }
   9301 
   9302     bool operator==( DisplayPresentInfoKHR const& rhs ) const
   9303     {
   9304       return ( sType == rhs.sType )
   9305           && ( pNext == rhs.pNext )
   9306           && ( srcRect == rhs.srcRect )
   9307           && ( dstRect == rhs.dstRect )
   9308           && ( persistent == rhs.persistent );
   9309     }
   9310 
   9311     bool operator!=( DisplayPresentInfoKHR const& rhs ) const
   9312     {
   9313       return !operator==( rhs );
   9314     }
   9315 
   9316   private:
   9317     StructureType sType = StructureType::eDisplayPresentInfoKHR;
   9318 
   9319   public:
   9320     const void* pNext = nullptr;
   9321     Rect2D srcRect;
   9322     Rect2D dstRect;
   9323     Bool32 persistent;
   9324   };
   9325   static_assert( sizeof( DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ), "struct and wrapper have different size!" );
   9326 
   9327 #ifdef VK_USE_PLATFORM_ANDROID_KHR
   9328   struct AndroidSurfaceCreateInfoKHR
   9329   {
   9330     AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateFlagsKHR flags_ = AndroidSurfaceCreateFlagsKHR(), ANativeWindow* window_ = nullptr )
   9331       : flags( flags_ )
   9332       , window( window_ )
   9333     {
   9334     }
   9335 
   9336     AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs )
   9337     {
   9338       memcpy( this, &rhs, sizeof( AndroidSurfaceCreateInfoKHR ) );
   9339     }
   9340 
   9341     AndroidSurfaceCreateInfoKHR& operator=( VkAndroidSurfaceCreateInfoKHR const & rhs )
   9342     {
   9343       memcpy( this, &rhs, sizeof( AndroidSurfaceCreateInfoKHR ) );
   9344       return *this;
   9345     }
   9346     AndroidSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
   9347     {
   9348       pNext = pNext_;
   9349       return *this;
   9350     }
   9351 
   9352     AndroidSurfaceCreateInfoKHR& setFlags( AndroidSurfaceCreateFlagsKHR flags_ )
   9353     {
   9354       flags = flags_;
   9355       return *this;
   9356     }
   9357 
   9358     AndroidSurfaceCreateInfoKHR& setWindow( ANativeWindow* window_ )
   9359     {
   9360       window = window_;
   9361       return *this;
   9362     }
   9363 
   9364     operator const VkAndroidSurfaceCreateInfoKHR&() const
   9365     {
   9366       return *reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>(this);
   9367     }
   9368 
   9369     bool operator==( AndroidSurfaceCreateInfoKHR const& rhs ) const
   9370     {
   9371       return ( sType == rhs.sType )
   9372           && ( pNext == rhs.pNext )
   9373           && ( flags == rhs.flags )
   9374           && ( window == rhs.window );
   9375     }
   9376 
   9377     bool operator!=( AndroidSurfaceCreateInfoKHR const& rhs ) const
   9378     {
   9379       return !operator==( rhs );
   9380     }
   9381 
   9382   private:
   9383     StructureType sType = StructureType::eAndroidSurfaceCreateInfoKHR;
   9384 
   9385   public:
   9386     const void* pNext = nullptr;
   9387     AndroidSurfaceCreateFlagsKHR flags;
   9388     ANativeWindow* window;
   9389   };
   9390   static_assert( sizeof( AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
   9391 #endif /*VK_USE_PLATFORM_ANDROID_KHR*/
   9392 
   9393 #ifdef VK_USE_PLATFORM_MIR_KHR
   9394   struct MirSurfaceCreateInfoKHR
   9395   {
   9396     MirSurfaceCreateInfoKHR( MirSurfaceCreateFlagsKHR flags_ = MirSurfaceCreateFlagsKHR(), MirConnection* connection_ = nullptr, MirSurface* mirSurface_ = nullptr )
   9397       : flags( flags_ )
   9398       , connection( connection_ )
   9399       , mirSurface( mirSurface_ )
   9400     {
   9401     }
   9402 
   9403     MirSurfaceCreateInfoKHR( VkMirSurfaceCreateInfoKHR const & rhs )
   9404     {
   9405       memcpy( this, &rhs, sizeof( MirSurfaceCreateInfoKHR ) );
   9406     }
   9407 
   9408     MirSurfaceCreateInfoKHR& operator=( VkMirSurfaceCreateInfoKHR const & rhs )
   9409     {
   9410       memcpy( this, &rhs, sizeof( MirSurfaceCreateInfoKHR ) );
   9411       return *this;
   9412     }
   9413     MirSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
   9414     {
   9415       pNext = pNext_;
   9416       return *this;
   9417     }
   9418 
   9419     MirSurfaceCreateInfoKHR& setFlags( MirSurfaceCreateFlagsKHR flags_ )
   9420     {
   9421       flags = flags_;
   9422       return *this;
   9423     }
   9424 
   9425     MirSurfaceCreateInfoKHR& setConnection( MirConnection* connection_ )
   9426     {
   9427       connection = connection_;
   9428       return *this;
   9429     }
   9430 
   9431     MirSurfaceCreateInfoKHR& setMirSurface( MirSurface* mirSurface_ )
   9432     {
   9433       mirSurface = mirSurface_;
   9434       return *this;
   9435     }
   9436 
   9437     operator const VkMirSurfaceCreateInfoKHR&() const
   9438     {
   9439       return *reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>(this);
   9440     }
   9441 
   9442     bool operator==( MirSurfaceCreateInfoKHR const& rhs ) const
   9443     {
   9444       return ( sType == rhs.sType )
   9445           && ( pNext == rhs.pNext )
   9446           && ( flags == rhs.flags )
   9447           && ( connection == rhs.connection )
   9448           && ( mirSurface == rhs.mirSurface );
   9449     }
   9450 
   9451     bool operator!=( MirSurfaceCreateInfoKHR const& rhs ) const
   9452     {
   9453       return !operator==( rhs );
   9454     }
   9455 
   9456   private:
   9457     StructureType sType = StructureType::eMirSurfaceCreateInfoKHR;
   9458 
   9459   public:
   9460     const void* pNext = nullptr;
   9461     MirSurfaceCreateFlagsKHR flags;
   9462     MirConnection* connection;
   9463     MirSurface* mirSurface;
   9464   };
   9465   static_assert( sizeof( MirSurfaceCreateInfoKHR ) == sizeof( VkMirSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
   9466 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   9467 
   9468 #ifdef VK_USE_PLATFORM_VI_NN
   9469   struct ViSurfaceCreateInfoNN
   9470   {
   9471     ViSurfaceCreateInfoNN( ViSurfaceCreateFlagsNN flags_ = ViSurfaceCreateFlagsNN(), void* window_ = nullptr )
   9472       : flags( flags_ )
   9473       , window( window_ )
   9474     {
   9475     }
   9476 
   9477     ViSurfaceCreateInfoNN( VkViSurfaceCreateInfoNN const & rhs )
   9478     {
   9479       memcpy( this, &rhs, sizeof( ViSurfaceCreateInfoNN ) );
   9480     }
   9481 
   9482     ViSurfaceCreateInfoNN& operator=( VkViSurfaceCreateInfoNN const & rhs )
   9483     {
   9484       memcpy( this, &rhs, sizeof( ViSurfaceCreateInfoNN ) );
   9485       return *this;
   9486     }
   9487     ViSurfaceCreateInfoNN& setPNext( const void* pNext_ )
   9488     {
   9489       pNext = pNext_;
   9490       return *this;
   9491     }
   9492 
   9493     ViSurfaceCreateInfoNN& setFlags( ViSurfaceCreateFlagsNN flags_ )
   9494     {
   9495       flags = flags_;
   9496       return *this;
   9497     }
   9498 
   9499     ViSurfaceCreateInfoNN& setWindow( void* window_ )
   9500     {
   9501       window = window_;
   9502       return *this;
   9503     }
   9504 
   9505     operator const VkViSurfaceCreateInfoNN&() const
   9506     {
   9507       return *reinterpret_cast<const VkViSurfaceCreateInfoNN*>(this);
   9508     }
   9509 
   9510     bool operator==( ViSurfaceCreateInfoNN const& rhs ) const
   9511     {
   9512       return ( sType == rhs.sType )
   9513           && ( pNext == rhs.pNext )
   9514           && ( flags == rhs.flags )
   9515           && ( window == rhs.window );
   9516     }
   9517 
   9518     bool operator!=( ViSurfaceCreateInfoNN const& rhs ) const
   9519     {
   9520       return !operator==( rhs );
   9521     }
   9522 
   9523   private:
   9524     StructureType sType = StructureType::eViSurfaceCreateInfoNN;
   9525 
   9526   public:
   9527     const void* pNext = nullptr;
   9528     ViSurfaceCreateFlagsNN flags;
   9529     void* window;
   9530   };
   9531   static_assert( sizeof( ViSurfaceCreateInfoNN ) == sizeof( VkViSurfaceCreateInfoNN ), "struct and wrapper have different size!" );
   9532 #endif /*VK_USE_PLATFORM_VI_NN*/
   9533 
   9534 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   9535   struct WaylandSurfaceCreateInfoKHR
   9536   {
   9537     WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateFlagsKHR flags_ = WaylandSurfaceCreateFlagsKHR(), struct wl_display* display_ = nullptr, struct wl_surface* surface_ = nullptr )
   9538       : flags( flags_ )
   9539       , display( display_ )
   9540       , surface( surface_ )
   9541     {
   9542     }
   9543 
   9544     WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs )
   9545     {
   9546       memcpy( this, &rhs, sizeof( WaylandSurfaceCreateInfoKHR ) );
   9547     }
   9548 
   9549     WaylandSurfaceCreateInfoKHR& operator=( VkWaylandSurfaceCreateInfoKHR const & rhs )
   9550     {
   9551       memcpy( this, &rhs, sizeof( WaylandSurfaceCreateInfoKHR ) );
   9552       return *this;
   9553     }
   9554     WaylandSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
   9555     {
   9556       pNext = pNext_;
   9557       return *this;
   9558     }
   9559 
   9560     WaylandSurfaceCreateInfoKHR& setFlags( WaylandSurfaceCreateFlagsKHR flags_ )
   9561     {
   9562       flags = flags_;
   9563       return *this;
   9564     }
   9565 
   9566     WaylandSurfaceCreateInfoKHR& setDisplay( struct wl_display* display_ )
   9567     {
   9568       display = display_;
   9569       return *this;
   9570     }
   9571 
   9572     WaylandSurfaceCreateInfoKHR& setSurface( struct wl_surface* surface_ )
   9573     {
   9574       surface = surface_;
   9575       return *this;
   9576     }
   9577 
   9578     operator const VkWaylandSurfaceCreateInfoKHR&() const
   9579     {
   9580       return *reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>(this);
   9581     }
   9582 
   9583     bool operator==( WaylandSurfaceCreateInfoKHR const& rhs ) const
   9584     {
   9585       return ( sType == rhs.sType )
   9586           && ( pNext == rhs.pNext )
   9587           && ( flags == rhs.flags )
   9588           && ( display == rhs.display )
   9589           && ( surface == rhs.surface );
   9590     }
   9591 
   9592     bool operator!=( WaylandSurfaceCreateInfoKHR const& rhs ) const
   9593     {
   9594       return !operator==( rhs );
   9595     }
   9596 
   9597   private:
   9598     StructureType sType = StructureType::eWaylandSurfaceCreateInfoKHR;
   9599 
   9600   public:
   9601     const void* pNext = nullptr;
   9602     WaylandSurfaceCreateFlagsKHR flags;
   9603     struct wl_display* display;
   9604     struct wl_surface* surface;
   9605   };
   9606   static_assert( sizeof( WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
   9607 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   9608 
   9609 #ifdef VK_USE_PLATFORM_WIN32_KHR
   9610   struct Win32SurfaceCreateInfoKHR
   9611   {
   9612     Win32SurfaceCreateInfoKHR( Win32SurfaceCreateFlagsKHR flags_ = Win32SurfaceCreateFlagsKHR(), HINSTANCE hinstance_ = 0, HWND hwnd_ = 0 )
   9613       : flags( flags_ )
   9614       , hinstance( hinstance_ )
   9615       , hwnd( hwnd_ )
   9616     {
   9617     }
   9618 
   9619     Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs )
   9620     {
   9621       memcpy( this, &rhs, sizeof( Win32SurfaceCreateInfoKHR ) );
   9622     }
   9623 
   9624     Win32SurfaceCreateInfoKHR& operator=( VkWin32SurfaceCreateInfoKHR const & rhs )
   9625     {
   9626       memcpy( this, &rhs, sizeof( Win32SurfaceCreateInfoKHR ) );
   9627       return *this;
   9628     }
   9629     Win32SurfaceCreateInfoKHR& setPNext( const void* pNext_ )
   9630     {
   9631       pNext = pNext_;
   9632       return *this;
   9633     }
   9634 
   9635     Win32SurfaceCreateInfoKHR& setFlags( Win32SurfaceCreateFlagsKHR flags_ )
   9636     {
   9637       flags = flags_;
   9638       return *this;
   9639     }
   9640 
   9641     Win32SurfaceCreateInfoKHR& setHinstance( HINSTANCE hinstance_ )
   9642     {
   9643       hinstance = hinstance_;
   9644       return *this;
   9645     }
   9646 
   9647     Win32SurfaceCreateInfoKHR& setHwnd( HWND hwnd_ )
   9648     {
   9649       hwnd = hwnd_;
   9650       return *this;
   9651     }
   9652 
   9653     operator const VkWin32SurfaceCreateInfoKHR&() const
   9654     {
   9655       return *reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>(this);
   9656     }
   9657 
   9658     bool operator==( Win32SurfaceCreateInfoKHR const& rhs ) const
   9659     {
   9660       return ( sType == rhs.sType )
   9661           && ( pNext == rhs.pNext )
   9662           && ( flags == rhs.flags )
   9663           && ( hinstance == rhs.hinstance )
   9664           && ( hwnd == rhs.hwnd );
   9665     }
   9666 
   9667     bool operator!=( Win32SurfaceCreateInfoKHR const& rhs ) const
   9668     {
   9669       return !operator==( rhs );
   9670     }
   9671 
   9672   private:
   9673     StructureType sType = StructureType::eWin32SurfaceCreateInfoKHR;
   9674 
   9675   public:
   9676     const void* pNext = nullptr;
   9677     Win32SurfaceCreateFlagsKHR flags;
   9678     HINSTANCE hinstance;
   9679     HWND hwnd;
   9680   };
   9681   static_assert( sizeof( Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
   9682 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   9683 
   9684 #ifdef VK_USE_PLATFORM_XLIB_KHR
   9685   struct XlibSurfaceCreateInfoKHR
   9686   {
   9687     XlibSurfaceCreateInfoKHR( XlibSurfaceCreateFlagsKHR flags_ = XlibSurfaceCreateFlagsKHR(), Display* dpy_ = nullptr, Window window_ = 0 )
   9688       : flags( flags_ )
   9689       , dpy( dpy_ )
   9690       , window( window_ )
   9691     {
   9692     }
   9693 
   9694     XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs )
   9695     {
   9696       memcpy( this, &rhs, sizeof( XlibSurfaceCreateInfoKHR ) );
   9697     }
   9698 
   9699     XlibSurfaceCreateInfoKHR& operator=( VkXlibSurfaceCreateInfoKHR const & rhs )
   9700     {
   9701       memcpy( this, &rhs, sizeof( XlibSurfaceCreateInfoKHR ) );
   9702       return *this;
   9703     }
   9704     XlibSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
   9705     {
   9706       pNext = pNext_;
   9707       return *this;
   9708     }
   9709 
   9710     XlibSurfaceCreateInfoKHR& setFlags( XlibSurfaceCreateFlagsKHR flags_ )
   9711     {
   9712       flags = flags_;
   9713       return *this;
   9714     }
   9715 
   9716     XlibSurfaceCreateInfoKHR& setDpy( Display* dpy_ )
   9717     {
   9718       dpy = dpy_;
   9719       return *this;
   9720     }
   9721 
   9722     XlibSurfaceCreateInfoKHR& setWindow( Window window_ )
   9723     {
   9724       window = window_;
   9725       return *this;
   9726     }
   9727 
   9728     operator const VkXlibSurfaceCreateInfoKHR&() const
   9729     {
   9730       return *reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>(this);
   9731     }
   9732 
   9733     bool operator==( XlibSurfaceCreateInfoKHR const& rhs ) const
   9734     {
   9735       return ( sType == rhs.sType )
   9736           && ( pNext == rhs.pNext )
   9737           && ( flags == rhs.flags )
   9738           && ( dpy == rhs.dpy )
   9739           && ( window == rhs.window );
   9740     }
   9741 
   9742     bool operator!=( XlibSurfaceCreateInfoKHR const& rhs ) const
   9743     {
   9744       return !operator==( rhs );
   9745     }
   9746 
   9747   private:
   9748     StructureType sType = StructureType::eXlibSurfaceCreateInfoKHR;
   9749 
   9750   public:
   9751     const void* pNext = nullptr;
   9752     XlibSurfaceCreateFlagsKHR flags;
   9753     Display* dpy;
   9754     Window window;
   9755   };
   9756   static_assert( sizeof( XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
   9757 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   9758 
   9759 #ifdef VK_USE_PLATFORM_XCB_KHR
   9760   struct XcbSurfaceCreateInfoKHR
   9761   {
   9762     XcbSurfaceCreateInfoKHR( XcbSurfaceCreateFlagsKHR flags_ = XcbSurfaceCreateFlagsKHR(), xcb_connection_t* connection_ = nullptr, xcb_window_t window_ = 0 )
   9763       : flags( flags_ )
   9764       , connection( connection_ )
   9765       , window( window_ )
   9766     {
   9767     }
   9768 
   9769     XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs )
   9770     {
   9771       memcpy( this, &rhs, sizeof( XcbSurfaceCreateInfoKHR ) );
   9772     }
   9773 
   9774     XcbSurfaceCreateInfoKHR& operator=( VkXcbSurfaceCreateInfoKHR const & rhs )
   9775     {
   9776       memcpy( this, &rhs, sizeof( XcbSurfaceCreateInfoKHR ) );
   9777       return *this;
   9778     }
   9779     XcbSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
   9780     {
   9781       pNext = pNext_;
   9782       return *this;
   9783     }
   9784 
   9785     XcbSurfaceCreateInfoKHR& setFlags( XcbSurfaceCreateFlagsKHR flags_ )
   9786     {
   9787       flags = flags_;
   9788       return *this;
   9789     }
   9790 
   9791     XcbSurfaceCreateInfoKHR& setConnection( xcb_connection_t* connection_ )
   9792     {
   9793       connection = connection_;
   9794       return *this;
   9795     }
   9796 
   9797     XcbSurfaceCreateInfoKHR& setWindow( xcb_window_t window_ )
   9798     {
   9799       window = window_;
   9800       return *this;
   9801     }
   9802 
   9803     operator const VkXcbSurfaceCreateInfoKHR&() const
   9804     {
   9805       return *reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>(this);
   9806     }
   9807 
   9808     bool operator==( XcbSurfaceCreateInfoKHR const& rhs ) const
   9809     {
   9810       return ( sType == rhs.sType )
   9811           && ( pNext == rhs.pNext )
   9812           && ( flags == rhs.flags )
   9813           && ( connection == rhs.connection )
   9814           && ( window == rhs.window );
   9815     }
   9816 
   9817     bool operator!=( XcbSurfaceCreateInfoKHR const& rhs ) const
   9818     {
   9819       return !operator==( rhs );
   9820     }
   9821 
   9822   private:
   9823     StructureType sType = StructureType::eXcbSurfaceCreateInfoKHR;
   9824 
   9825   public:
   9826     const void* pNext = nullptr;
   9827     XcbSurfaceCreateFlagsKHR flags;
   9828     xcb_connection_t* connection;
   9829     xcb_window_t window;
   9830   };
   9831   static_assert( sizeof( XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
   9832 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   9833 
   9834   struct DebugMarkerMarkerInfoEXT
   9835   {
   9836     DebugMarkerMarkerInfoEXT( const char* pMarkerName_ = nullptr, std::array<float,4> const& color_ = { { 0, 0, 0, 0 } } )
   9837       : pMarkerName( pMarkerName_ )
   9838     {
   9839       memcpy( &color, color_.data(), 4 * sizeof( float ) );
   9840     }
   9841 
   9842     DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs )
   9843     {
   9844       memcpy( this, &rhs, sizeof( DebugMarkerMarkerInfoEXT ) );
   9845     }
   9846 
   9847     DebugMarkerMarkerInfoEXT& operator=( VkDebugMarkerMarkerInfoEXT const & rhs )
   9848     {
   9849       memcpy( this, &rhs, sizeof( DebugMarkerMarkerInfoEXT ) );
   9850       return *this;
   9851     }
   9852     DebugMarkerMarkerInfoEXT& setPNext( const void* pNext_ )
   9853     {
   9854       pNext = pNext_;
   9855       return *this;
   9856     }
   9857 
   9858     DebugMarkerMarkerInfoEXT& setPMarkerName( const char* pMarkerName_ )
   9859     {
   9860       pMarkerName = pMarkerName_;
   9861       return *this;
   9862     }
   9863 
   9864     DebugMarkerMarkerInfoEXT& setColor( std::array<float,4> color_ )
   9865     {
   9866       memcpy( &color, color_.data(), 4 * sizeof( float ) );
   9867       return *this;
   9868     }
   9869 
   9870     operator const VkDebugMarkerMarkerInfoEXT&() const
   9871     {
   9872       return *reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>(this);
   9873     }
   9874 
   9875     bool operator==( DebugMarkerMarkerInfoEXT const& rhs ) const
   9876     {
   9877       return ( sType == rhs.sType )
   9878           && ( pNext == rhs.pNext )
   9879           && ( pMarkerName == rhs.pMarkerName )
   9880           && ( memcmp( color, rhs.color, 4 * sizeof( float ) ) == 0 );
   9881     }
   9882 
   9883     bool operator!=( DebugMarkerMarkerInfoEXT const& rhs ) const
   9884     {
   9885       return !operator==( rhs );
   9886     }
   9887 
   9888   private:
   9889     StructureType sType = StructureType::eDebugMarkerMarkerInfoEXT;
   9890 
   9891   public:
   9892     const void* pNext = nullptr;
   9893     const char* pMarkerName;
   9894     float color[4];
   9895   };
   9896   static_assert( sizeof( DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ), "struct and wrapper have different size!" );
   9897 
   9898   struct DedicatedAllocationImageCreateInfoNV
   9899   {
   9900     DedicatedAllocationImageCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
   9901       : dedicatedAllocation( dedicatedAllocation_ )
   9902     {
   9903     }
   9904 
   9905     DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs )
   9906     {
   9907       memcpy( this, &rhs, sizeof( DedicatedAllocationImageCreateInfoNV ) );
   9908     }
   9909 
   9910     DedicatedAllocationImageCreateInfoNV& operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs )
   9911     {
   9912       memcpy( this, &rhs, sizeof( DedicatedAllocationImageCreateInfoNV ) );
   9913       return *this;
   9914     }
   9915     DedicatedAllocationImageCreateInfoNV& setPNext( const void* pNext_ )
   9916     {
   9917       pNext = pNext_;
   9918       return *this;
   9919     }
   9920 
   9921     DedicatedAllocationImageCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
   9922     {
   9923       dedicatedAllocation = dedicatedAllocation_;
   9924       return *this;
   9925     }
   9926 
   9927     operator const VkDedicatedAllocationImageCreateInfoNV&() const
   9928     {
   9929       return *reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(this);
   9930     }
   9931 
   9932     bool operator==( DedicatedAllocationImageCreateInfoNV const& rhs ) const
   9933     {
   9934       return ( sType == rhs.sType )
   9935           && ( pNext == rhs.pNext )
   9936           && ( dedicatedAllocation == rhs.dedicatedAllocation );
   9937     }
   9938 
   9939     bool operator!=( DedicatedAllocationImageCreateInfoNV const& rhs ) const
   9940     {
   9941       return !operator==( rhs );
   9942     }
   9943 
   9944   private:
   9945     StructureType sType = StructureType::eDedicatedAllocationImageCreateInfoNV;
   9946 
   9947   public:
   9948     const void* pNext = nullptr;
   9949     Bool32 dedicatedAllocation;
   9950   };
   9951   static_assert( sizeof( DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ), "struct and wrapper have different size!" );
   9952 
   9953   struct DedicatedAllocationBufferCreateInfoNV
   9954   {
   9955     DedicatedAllocationBufferCreateInfoNV( Bool32 dedicatedAllocation_ = 0 )
   9956       : dedicatedAllocation( dedicatedAllocation_ )
   9957     {
   9958     }
   9959 
   9960     DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
   9961     {
   9962       memcpy( this, &rhs, sizeof( DedicatedAllocationBufferCreateInfoNV ) );
   9963     }
   9964 
   9965     DedicatedAllocationBufferCreateInfoNV& operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs )
   9966     {
   9967       memcpy( this, &rhs, sizeof( DedicatedAllocationBufferCreateInfoNV ) );
   9968       return *this;
   9969     }
   9970     DedicatedAllocationBufferCreateInfoNV& setPNext( const void* pNext_ )
   9971     {
   9972       pNext = pNext_;
   9973       return *this;
   9974     }
   9975 
   9976     DedicatedAllocationBufferCreateInfoNV& setDedicatedAllocation( Bool32 dedicatedAllocation_ )
   9977     {
   9978       dedicatedAllocation = dedicatedAllocation_;
   9979       return *this;
   9980     }
   9981 
   9982     operator const VkDedicatedAllocationBufferCreateInfoNV&() const
   9983     {
   9984       return *reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(this);
   9985     }
   9986 
   9987     bool operator==( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
   9988     {
   9989       return ( sType == rhs.sType )
   9990           && ( pNext == rhs.pNext )
   9991           && ( dedicatedAllocation == rhs.dedicatedAllocation );
   9992     }
   9993 
   9994     bool operator!=( DedicatedAllocationBufferCreateInfoNV const& rhs ) const
   9995     {
   9996       return !operator==( rhs );
   9997     }
   9998 
   9999   private:
   10000     StructureType sType = StructureType::eDedicatedAllocationBufferCreateInfoNV;
   10001 
   10002   public:
   10003     const void* pNext = nullptr;
   10004     Bool32 dedicatedAllocation;
   10005   };
   10006   static_assert( sizeof( DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ), "struct and wrapper have different size!" );
   10007 
   10008   struct DedicatedAllocationMemoryAllocateInfoNV
   10009   {
   10010     DedicatedAllocationMemoryAllocateInfoNV( Image image_ = Image(), Buffer buffer_ = Buffer() )
   10011       : image( image_ )
   10012       , buffer( buffer_ )
   10013     {
   10014     }
   10015 
   10016     DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
   10017     {
   10018       memcpy( this, &rhs, sizeof( DedicatedAllocationMemoryAllocateInfoNV ) );
   10019     }
   10020 
   10021     DedicatedAllocationMemoryAllocateInfoNV& operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs )
   10022     {
   10023       memcpy( this, &rhs, sizeof( DedicatedAllocationMemoryAllocateInfoNV ) );
   10024       return *this;
   10025     }
   10026     DedicatedAllocationMemoryAllocateInfoNV& setPNext( const void* pNext_ )
   10027     {
   10028       pNext = pNext_;
   10029       return *this;
   10030     }
   10031 
   10032     DedicatedAllocationMemoryAllocateInfoNV& setImage( Image image_ )
   10033     {
   10034       image = image_;
   10035       return *this;
   10036     }
   10037 
   10038     DedicatedAllocationMemoryAllocateInfoNV& setBuffer( Buffer buffer_ )
   10039     {
   10040       buffer = buffer_;
   10041       return *this;
   10042     }
   10043 
   10044     operator const VkDedicatedAllocationMemoryAllocateInfoNV&() const
   10045     {
   10046       return *reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(this);
   10047     }
   10048 
   10049     bool operator==( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
   10050     {
   10051       return ( sType == rhs.sType )
   10052           && ( pNext == rhs.pNext )
   10053           && ( image == rhs.image )
   10054           && ( buffer == rhs.buffer );
   10055     }
   10056 
   10057     bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const& rhs ) const
   10058     {
   10059       return !operator==( rhs );
   10060     }
   10061 
   10062   private:
   10063     StructureType sType = StructureType::eDedicatedAllocationMemoryAllocateInfoNV;
   10064 
   10065   public:
   10066     const void* pNext = nullptr;
   10067     Image image;
   10068     Buffer buffer;
   10069   };
   10070   static_assert( sizeof( DedicatedAllocationMemoryAllocateInfoNV ) == sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
   10071 
   10072 #ifdef VK_USE_PLATFORM_WIN32_KHR
   10073   struct ExportMemoryWin32HandleInfoNV
   10074   {
   10075     ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0 )
   10076       : pAttributes( pAttributes_ )
   10077       , dwAccess( dwAccess_ )
   10078     {
   10079     }
   10080 
   10081     ExportMemoryWin32HandleInfoNV( VkExportMemoryWin32HandleInfoNV const & rhs )
   10082     {
   10083       memcpy( this, &rhs, sizeof( ExportMemoryWin32HandleInfoNV ) );
   10084     }
   10085 
   10086     ExportMemoryWin32HandleInfoNV& operator=( VkExportMemoryWin32HandleInfoNV const & rhs )
   10087     {
   10088       memcpy( this, &rhs, sizeof( ExportMemoryWin32HandleInfoNV ) );
   10089       return *this;
   10090     }
   10091     ExportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
   10092     {
   10093       pNext = pNext_;
   10094       return *this;
   10095     }
   10096 
   10097     ExportMemoryWin32HandleInfoNV& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
   10098     {
   10099       pAttributes = pAttributes_;
   10100       return *this;
   10101     }
   10102 
   10103     ExportMemoryWin32HandleInfoNV& setDwAccess( DWORD dwAccess_ )
   10104     {
   10105       dwAccess = dwAccess_;
   10106       return *this;
   10107     }
   10108 
   10109     operator const VkExportMemoryWin32HandleInfoNV&() const
   10110     {
   10111       return *reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(this);
   10112     }
   10113 
   10114     bool operator==( ExportMemoryWin32HandleInfoNV const& rhs ) const
   10115     {
   10116       return ( sType == rhs.sType )
   10117           && ( pNext == rhs.pNext )
   10118           && ( pAttributes == rhs.pAttributes )
   10119           && ( dwAccess == rhs.dwAccess );
   10120     }
   10121 
   10122     bool operator!=( ExportMemoryWin32HandleInfoNV const& rhs ) const
   10123     {
   10124       return !operator==( rhs );
   10125     }
   10126 
   10127   private:
   10128     StructureType sType = StructureType::eExportMemoryWin32HandleInfoNV;
   10129 
   10130   public:
   10131     const void* pNext = nullptr;
   10132     const SECURITY_ATTRIBUTES* pAttributes;
   10133     DWORD dwAccess;
   10134   };
   10135   static_assert( sizeof( ExportMemoryWin32HandleInfoNV ) == sizeof( VkExportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
   10136 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   10137 
   10138 #ifdef VK_USE_PLATFORM_WIN32_KHR
   10139   struct Win32KeyedMutexAcquireReleaseInfoNV
   10140   {
   10141     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 )
   10142       : acquireCount( acquireCount_ )
   10143       , pAcquireSyncs( pAcquireSyncs_ )
   10144       , pAcquireKeys( pAcquireKeys_ )
   10145       , pAcquireTimeoutMilliseconds( pAcquireTimeoutMilliseconds_ )
   10146       , releaseCount( releaseCount_ )
   10147       , pReleaseSyncs( pReleaseSyncs_ )
   10148       , pReleaseKeys( pReleaseKeys_ )
   10149     {
   10150     }
   10151 
   10152     Win32KeyedMutexAcquireReleaseInfoNV( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
   10153     {
   10154       memcpy( this, &rhs, sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) );
   10155     }
   10156 
   10157     Win32KeyedMutexAcquireReleaseInfoNV& operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs )
   10158     {
   10159       memcpy( this, &rhs, sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) );
   10160       return *this;
   10161     }
   10162     Win32KeyedMutexAcquireReleaseInfoNV& setPNext( const void* pNext_ )
   10163     {
   10164       pNext = pNext_;
   10165       return *this;
   10166     }
   10167 
   10168     Win32KeyedMutexAcquireReleaseInfoNV& setAcquireCount( uint32_t acquireCount_ )
   10169     {
   10170       acquireCount = acquireCount_;
   10171       return *this;
   10172     }
   10173 
   10174     Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireSyncs( const DeviceMemory* pAcquireSyncs_ )
   10175     {
   10176       pAcquireSyncs = pAcquireSyncs_;
   10177       return *this;
   10178     }
   10179 
   10180     Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireKeys( const uint64_t* pAcquireKeys_ )
   10181     {
   10182       pAcquireKeys = pAcquireKeys_;
   10183       return *this;
   10184     }
   10185 
   10186     Win32KeyedMutexAcquireReleaseInfoNV& setPAcquireTimeoutMilliseconds( const uint32_t* pAcquireTimeoutMilliseconds_ )
   10187     {
   10188       pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_;
   10189       return *this;
   10190     }
   10191 
   10192     Win32KeyedMutexAcquireReleaseInfoNV& setReleaseCount( uint32_t releaseCount_ )
   10193     {
   10194       releaseCount = releaseCount_;
   10195       return *this;
   10196     }
   10197 
   10198     Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseSyncs( const DeviceMemory* pReleaseSyncs_ )
   10199     {
   10200       pReleaseSyncs = pReleaseSyncs_;
   10201       return *this;
   10202     }
   10203 
   10204     Win32KeyedMutexAcquireReleaseInfoNV& setPReleaseKeys( const uint64_t* pReleaseKeys_ )
   10205     {
   10206       pReleaseKeys = pReleaseKeys_;
   10207       return *this;
   10208     }
   10209 
   10210     operator const VkWin32KeyedMutexAcquireReleaseInfoNV&() const
   10211     {
   10212       return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(this);
   10213     }
   10214 
   10215     bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
   10216     {
   10217       return ( sType == rhs.sType )
   10218           && ( pNext == rhs.pNext )
   10219           && ( acquireCount == rhs.acquireCount )
   10220           && ( pAcquireSyncs == rhs.pAcquireSyncs )
   10221           && ( pAcquireKeys == rhs.pAcquireKeys )
   10222           && ( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds )
   10223           && ( releaseCount == rhs.releaseCount )
   10224           && ( pReleaseSyncs == rhs.pReleaseSyncs )
   10225           && ( pReleaseKeys == rhs.pReleaseKeys );
   10226     }
   10227 
   10228     bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const& rhs ) const
   10229     {
   10230       return !operator==( rhs );
   10231     }
   10232 
   10233   private:
   10234     StructureType sType = StructureType::eWin32KeyedMutexAcquireReleaseInfoNV;
   10235 
   10236   public:
   10237     const void* pNext = nullptr;
   10238     uint32_t acquireCount;
   10239     const DeviceMemory* pAcquireSyncs;
   10240     const uint64_t* pAcquireKeys;
   10241     const uint32_t* pAcquireTimeoutMilliseconds;
   10242     uint32_t releaseCount;
   10243     const DeviceMemory* pReleaseSyncs;
   10244     const uint64_t* pReleaseKeys;
   10245   };
   10246   static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ), "struct and wrapper have different size!" );
   10247 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   10248 
   10249   struct DeviceGeneratedCommandsFeaturesNVX
   10250   {
   10251     DeviceGeneratedCommandsFeaturesNVX( Bool32 computeBindingPointSupport_ = 0 )
   10252       : computeBindingPointSupport( computeBindingPointSupport_ )
   10253     {
   10254     }
   10255 
   10256     DeviceGeneratedCommandsFeaturesNVX( VkDeviceGeneratedCommandsFeaturesNVX const & rhs )
   10257     {
   10258       memcpy( this, &rhs, sizeof( DeviceGeneratedCommandsFeaturesNVX ) );
   10259     }
   10260 
   10261     DeviceGeneratedCommandsFeaturesNVX& operator=( VkDeviceGeneratedCommandsFeaturesNVX const & rhs )
   10262     {
   10263       memcpy( this, &rhs, sizeof( DeviceGeneratedCommandsFeaturesNVX ) );
   10264       return *this;
   10265     }
   10266     DeviceGeneratedCommandsFeaturesNVX& setPNext( const void* pNext_ )
   10267     {
   10268       pNext = pNext_;
   10269       return *this;
   10270     }
   10271 
   10272     DeviceGeneratedCommandsFeaturesNVX& setComputeBindingPointSupport( Bool32 computeBindingPointSupport_ )
   10273     {
   10274       computeBindingPointSupport = computeBindingPointSupport_;
   10275       return *this;
   10276     }
   10277 
   10278     operator const VkDeviceGeneratedCommandsFeaturesNVX&() const
   10279     {
   10280       return *reinterpret_cast<const VkDeviceGeneratedCommandsFeaturesNVX*>(this);
   10281     }
   10282 
   10283     bool operator==( DeviceGeneratedCommandsFeaturesNVX const& rhs ) const
   10284     {
   10285       return ( sType == rhs.sType )
   10286           && ( pNext == rhs.pNext )
   10287           && ( computeBindingPointSupport == rhs.computeBindingPointSupport );
   10288     }
   10289 
   10290     bool operator!=( DeviceGeneratedCommandsFeaturesNVX const& rhs ) const
   10291     {
   10292       return !operator==( rhs );
   10293     }
   10294 
   10295   private:
   10296     StructureType sType = StructureType::eDeviceGeneratedCommandsFeaturesNVX;
   10297 
   10298   public:
   10299     const void* pNext = nullptr;
   10300     Bool32 computeBindingPointSupport;
   10301   };
   10302   static_assert( sizeof( DeviceGeneratedCommandsFeaturesNVX ) == sizeof( VkDeviceGeneratedCommandsFeaturesNVX ), "struct and wrapper have different size!" );
   10303 
   10304   struct DeviceGeneratedCommandsLimitsNVX
   10305   {
   10306     DeviceGeneratedCommandsLimitsNVX( uint32_t maxIndirectCommandsLayoutTokenCount_ = 0, uint32_t maxObjectEntryCounts_ = 0, uint32_t minSequenceCountBufferOffsetAlignment_ = 0, uint32_t minSequenceIndexBufferOffsetAlignment_ = 0, uint32_t minCommandsTokenBufferOffsetAlignment_ = 0 )
   10307       : maxIndirectCommandsLayoutTokenCount( maxIndirectCommandsLayoutTokenCount_ )
   10308       , maxObjectEntryCounts( maxObjectEntryCounts_ )
   10309       , minSequenceCountBufferOffsetAlignment( minSequenceCountBufferOffsetAlignment_ )
   10310       , minSequenceIndexBufferOffsetAlignment( minSequenceIndexBufferOffsetAlignment_ )
   10311       , minCommandsTokenBufferOffsetAlignment( minCommandsTokenBufferOffsetAlignment_ )
   10312     {
   10313     }
   10314 
   10315     DeviceGeneratedCommandsLimitsNVX( VkDeviceGeneratedCommandsLimitsNVX const & rhs )
   10316     {
   10317       memcpy( this, &rhs, sizeof( DeviceGeneratedCommandsLimitsNVX ) );
   10318     }
   10319 
   10320     DeviceGeneratedCommandsLimitsNVX& operator=( VkDeviceGeneratedCommandsLimitsNVX const & rhs )
   10321     {
   10322       memcpy( this, &rhs, sizeof( DeviceGeneratedCommandsLimitsNVX ) );
   10323       return *this;
   10324     }
   10325     DeviceGeneratedCommandsLimitsNVX& setPNext( const void* pNext_ )
   10326     {
   10327       pNext = pNext_;
   10328       return *this;
   10329     }
   10330 
   10331     DeviceGeneratedCommandsLimitsNVX& setMaxIndirectCommandsLayoutTokenCount( uint32_t maxIndirectCommandsLayoutTokenCount_ )
   10332     {
   10333       maxIndirectCommandsLayoutTokenCount = maxIndirectCommandsLayoutTokenCount_;
   10334       return *this;
   10335     }
   10336 
   10337     DeviceGeneratedCommandsLimitsNVX& setMaxObjectEntryCounts( uint32_t maxObjectEntryCounts_ )
   10338     {
   10339       maxObjectEntryCounts = maxObjectEntryCounts_;
   10340       return *this;
   10341     }
   10342 
   10343     DeviceGeneratedCommandsLimitsNVX& setMinSequenceCountBufferOffsetAlignment( uint32_t minSequenceCountBufferOffsetAlignment_ )
   10344     {
   10345       minSequenceCountBufferOffsetAlignment = minSequenceCountBufferOffsetAlignment_;
   10346       return *this;
   10347     }
   10348 
   10349     DeviceGeneratedCommandsLimitsNVX& setMinSequenceIndexBufferOffsetAlignment( uint32_t minSequenceIndexBufferOffsetAlignment_ )
   10350     {
   10351       minSequenceIndexBufferOffsetAlignment = minSequenceIndexBufferOffsetAlignment_;
   10352       return *this;
   10353     }
   10354 
   10355     DeviceGeneratedCommandsLimitsNVX& setMinCommandsTokenBufferOffsetAlignment( uint32_t minCommandsTokenBufferOffsetAlignment_ )
   10356     {
   10357       minCommandsTokenBufferOffsetAlignment = minCommandsTokenBufferOffsetAlignment_;
   10358       return *this;
   10359     }
   10360 
   10361     operator const VkDeviceGeneratedCommandsLimitsNVX&() const
   10362     {
   10363       return *reinterpret_cast<const VkDeviceGeneratedCommandsLimitsNVX*>(this);
   10364     }
   10365 
   10366     bool operator==( DeviceGeneratedCommandsLimitsNVX const& rhs ) const
   10367     {
   10368       return ( sType == rhs.sType )
   10369           && ( pNext == rhs.pNext )
   10370           && ( maxIndirectCommandsLayoutTokenCount == rhs.maxIndirectCommandsLayoutTokenCount )
   10371           && ( maxObjectEntryCounts == rhs.maxObjectEntryCounts )
   10372           && ( minSequenceCountBufferOffsetAlignment == rhs.minSequenceCountBufferOffsetAlignment )
   10373           && ( minSequenceIndexBufferOffsetAlignment == rhs.minSequenceIndexBufferOffsetAlignment )
   10374           && ( minCommandsTokenBufferOffsetAlignment == rhs.minCommandsTokenBufferOffsetAlignment );
   10375     }
   10376 
   10377     bool operator!=( DeviceGeneratedCommandsLimitsNVX const& rhs ) const
   10378     {
   10379       return !operator==( rhs );
   10380     }
   10381 
   10382   private:
   10383     StructureType sType = StructureType::eDeviceGeneratedCommandsLimitsNVX;
   10384 
   10385   public:
   10386     const void* pNext = nullptr;
   10387     uint32_t maxIndirectCommandsLayoutTokenCount;
   10388     uint32_t maxObjectEntryCounts;
   10389     uint32_t minSequenceCountBufferOffsetAlignment;
   10390     uint32_t minSequenceIndexBufferOffsetAlignment;
   10391     uint32_t minCommandsTokenBufferOffsetAlignment;
   10392   };
   10393   static_assert( sizeof( DeviceGeneratedCommandsLimitsNVX ) == sizeof( VkDeviceGeneratedCommandsLimitsNVX ), "struct and wrapper have different size!" );
   10394 
   10395   struct CmdReserveSpaceForCommandsInfoNVX
   10396   {
   10397     CmdReserveSpaceForCommandsInfoNVX( ObjectTableNVX objectTable_ = ObjectTableNVX(), IndirectCommandsLayoutNVX indirectCommandsLayout_ = IndirectCommandsLayoutNVX(), uint32_t maxSequencesCount_ = 0 )
   10398       : objectTable( objectTable_ )
   10399       , indirectCommandsLayout( indirectCommandsLayout_ )
   10400       , maxSequencesCount( maxSequencesCount_ )
   10401     {
   10402     }
   10403 
   10404     CmdReserveSpaceForCommandsInfoNVX( VkCmdReserveSpaceForCommandsInfoNVX const & rhs )
   10405     {
   10406       memcpy( this, &rhs, sizeof( CmdReserveSpaceForCommandsInfoNVX ) );
   10407     }
   10408 
   10409     CmdReserveSpaceForCommandsInfoNVX& operator=( VkCmdReserveSpaceForCommandsInfoNVX const & rhs )
   10410     {
   10411       memcpy( this, &rhs, sizeof( CmdReserveSpaceForCommandsInfoNVX ) );
   10412       return *this;
   10413     }
   10414     CmdReserveSpaceForCommandsInfoNVX& setPNext( const void* pNext_ )
   10415     {
   10416       pNext = pNext_;
   10417       return *this;
   10418     }
   10419 
   10420     CmdReserveSpaceForCommandsInfoNVX& setObjectTable( ObjectTableNVX objectTable_ )
   10421     {
   10422       objectTable = objectTable_;
   10423       return *this;
   10424     }
   10425 
   10426     CmdReserveSpaceForCommandsInfoNVX& setIndirectCommandsLayout( IndirectCommandsLayoutNVX indirectCommandsLayout_ )
   10427     {
   10428       indirectCommandsLayout = indirectCommandsLayout_;
   10429       return *this;
   10430     }
   10431 
   10432     CmdReserveSpaceForCommandsInfoNVX& setMaxSequencesCount( uint32_t maxSequencesCount_ )
   10433     {
   10434       maxSequencesCount = maxSequencesCount_;
   10435       return *this;
   10436     }
   10437 
   10438     operator const VkCmdReserveSpaceForCommandsInfoNVX&() const
   10439     {
   10440       return *reinterpret_cast<const VkCmdReserveSpaceForCommandsInfoNVX*>(this);
   10441     }
   10442 
   10443     bool operator==( CmdReserveSpaceForCommandsInfoNVX const& rhs ) const
   10444     {
   10445       return ( sType == rhs.sType )
   10446           && ( pNext == rhs.pNext )
   10447           && ( objectTable == rhs.objectTable )
   10448           && ( indirectCommandsLayout == rhs.indirectCommandsLayout )
   10449           && ( maxSequencesCount == rhs.maxSequencesCount );
   10450     }
   10451 
   10452     bool operator!=( CmdReserveSpaceForCommandsInfoNVX const& rhs ) const
   10453     {
   10454       return !operator==( rhs );
   10455     }
   10456 
   10457   private:
   10458     StructureType sType = StructureType::eCmdReserveSpaceForCommandsInfoNVX;
   10459 
   10460   public:
   10461     const void* pNext = nullptr;
   10462     ObjectTableNVX objectTable;
   10463     IndirectCommandsLayoutNVX indirectCommandsLayout;
   10464     uint32_t maxSequencesCount;
   10465   };
   10466   static_assert( sizeof( CmdReserveSpaceForCommandsInfoNVX ) == sizeof( VkCmdReserveSpaceForCommandsInfoNVX ), "struct and wrapper have different size!" );
   10467 
   10468   struct PhysicalDeviceFeatures2KHR
   10469   {
   10470     PhysicalDeviceFeatures2KHR( PhysicalDeviceFeatures features_ = PhysicalDeviceFeatures() )
   10471       : features( features_ )
   10472     {
   10473     }
   10474 
   10475     PhysicalDeviceFeatures2KHR( VkPhysicalDeviceFeatures2KHR const & rhs )
   10476     {
   10477       memcpy( this, &rhs, sizeof( PhysicalDeviceFeatures2KHR ) );
   10478     }
   10479 
   10480     PhysicalDeviceFeatures2KHR& operator=( VkPhysicalDeviceFeatures2KHR const & rhs )
   10481     {
   10482       memcpy( this, &rhs, sizeof( PhysicalDeviceFeatures2KHR ) );
   10483       return *this;
   10484     }
   10485     PhysicalDeviceFeatures2KHR& setPNext( void* pNext_ )
   10486     {
   10487       pNext = pNext_;
   10488       return *this;
   10489     }
   10490 
   10491     PhysicalDeviceFeatures2KHR& setFeatures( PhysicalDeviceFeatures features_ )
   10492     {
   10493       features = features_;
   10494       return *this;
   10495     }
   10496 
   10497     operator const VkPhysicalDeviceFeatures2KHR&() const
   10498     {
   10499       return *reinterpret_cast<const VkPhysicalDeviceFeatures2KHR*>(this);
   10500     }
   10501 
   10502     bool operator==( PhysicalDeviceFeatures2KHR const& rhs ) const
   10503     {
   10504       return ( sType == rhs.sType )
   10505           && ( pNext == rhs.pNext )
   10506           && ( features == rhs.features );
   10507     }
   10508 
   10509     bool operator!=( PhysicalDeviceFeatures2KHR const& rhs ) const
   10510     {
   10511       return !operator==( rhs );
   10512     }
   10513 
   10514   private:
   10515     StructureType sType = StructureType::ePhysicalDeviceFeatures2KHR;
   10516 
   10517   public:
   10518     void* pNext = nullptr;
   10519     PhysicalDeviceFeatures features;
   10520   };
   10521   static_assert( sizeof( PhysicalDeviceFeatures2KHR ) == sizeof( VkPhysicalDeviceFeatures2KHR ), "struct and wrapper have different size!" );
   10522 
   10523   struct PhysicalDevicePushDescriptorPropertiesKHR
   10524   {
   10525     PhysicalDevicePushDescriptorPropertiesKHR( uint32_t maxPushDescriptors_ = 0 )
   10526       : maxPushDescriptors( maxPushDescriptors_ )
   10527     {
   10528     }
   10529 
   10530     PhysicalDevicePushDescriptorPropertiesKHR( VkPhysicalDevicePushDescriptorPropertiesKHR const & rhs )
   10531     {
   10532       memcpy( this, &rhs, sizeof( PhysicalDevicePushDescriptorPropertiesKHR ) );
   10533     }
   10534 
   10535     PhysicalDevicePushDescriptorPropertiesKHR& operator=( VkPhysicalDevicePushDescriptorPropertiesKHR const & rhs )
   10536     {
   10537       memcpy( this, &rhs, sizeof( PhysicalDevicePushDescriptorPropertiesKHR ) );
   10538       return *this;
   10539     }
   10540     PhysicalDevicePushDescriptorPropertiesKHR& setPNext( void* pNext_ )
   10541     {
   10542       pNext = pNext_;
   10543       return *this;
   10544     }
   10545 
   10546     PhysicalDevicePushDescriptorPropertiesKHR& setMaxPushDescriptors( uint32_t maxPushDescriptors_ )
   10547     {
   10548       maxPushDescriptors = maxPushDescriptors_;
   10549       return *this;
   10550     }
   10551 
   10552     operator const VkPhysicalDevicePushDescriptorPropertiesKHR&() const
   10553     {
   10554       return *reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(this);
   10555     }
   10556 
   10557     bool operator==( PhysicalDevicePushDescriptorPropertiesKHR const& rhs ) const
   10558     {
   10559       return ( sType == rhs.sType )
   10560           && ( pNext == rhs.pNext )
   10561           && ( maxPushDescriptors == rhs.maxPushDescriptors );
   10562     }
   10563 
   10564     bool operator!=( PhysicalDevicePushDescriptorPropertiesKHR const& rhs ) const
   10565     {
   10566       return !operator==( rhs );
   10567     }
   10568 
   10569   private:
   10570     StructureType sType = StructureType::ePhysicalDevicePushDescriptorPropertiesKHR;
   10571 
   10572   public:
   10573     void* pNext = nullptr;
   10574     uint32_t maxPushDescriptors;
   10575   };
   10576   static_assert( sizeof( PhysicalDevicePushDescriptorPropertiesKHR ) == sizeof( VkPhysicalDevicePushDescriptorPropertiesKHR ), "struct and wrapper have different size!" );
   10577 
   10578   struct PresentRegionsKHR
   10579   {
   10580     PresentRegionsKHR( uint32_t swapchainCount_ = 0, const PresentRegionKHR* pRegions_ = nullptr )
   10581       : swapchainCount( swapchainCount_ )
   10582       , pRegions( pRegions_ )
   10583     {
   10584     }
   10585 
   10586     PresentRegionsKHR( VkPresentRegionsKHR const & rhs )
   10587     {
   10588       memcpy( this, &rhs, sizeof( PresentRegionsKHR ) );
   10589     }
   10590 
   10591     PresentRegionsKHR& operator=( VkPresentRegionsKHR const & rhs )
   10592     {
   10593       memcpy( this, &rhs, sizeof( PresentRegionsKHR ) );
   10594       return *this;
   10595     }
   10596     PresentRegionsKHR& setPNext( const void* pNext_ )
   10597     {
   10598       pNext = pNext_;
   10599       return *this;
   10600     }
   10601 
   10602     PresentRegionsKHR& setSwapchainCount( uint32_t swapchainCount_ )
   10603     {
   10604       swapchainCount = swapchainCount_;
   10605       return *this;
   10606     }
   10607 
   10608     PresentRegionsKHR& setPRegions( const PresentRegionKHR* pRegions_ )
   10609     {
   10610       pRegions = pRegions_;
   10611       return *this;
   10612     }
   10613 
   10614     operator const VkPresentRegionsKHR&() const
   10615     {
   10616       return *reinterpret_cast<const VkPresentRegionsKHR*>(this);
   10617     }
   10618 
   10619     bool operator==( PresentRegionsKHR const& rhs ) const
   10620     {
   10621       return ( sType == rhs.sType )
   10622           && ( pNext == rhs.pNext )
   10623           && ( swapchainCount == rhs.swapchainCount )
   10624           && ( pRegions == rhs.pRegions );
   10625     }
   10626 
   10627     bool operator!=( PresentRegionsKHR const& rhs ) const
   10628     {
   10629       return !operator==( rhs );
   10630     }
   10631 
   10632   private:
   10633     StructureType sType = StructureType::ePresentRegionsKHR;
   10634 
   10635   public:
   10636     const void* pNext = nullptr;
   10637     uint32_t swapchainCount;
   10638     const PresentRegionKHR* pRegions;
   10639   };
   10640   static_assert( sizeof( PresentRegionsKHR ) == sizeof( VkPresentRegionsKHR ), "struct and wrapper have different size!" );
   10641 
   10642   struct PhysicalDeviceVariablePointerFeaturesKHR
   10643   {
   10644     PhysicalDeviceVariablePointerFeaturesKHR( Bool32 variablePointersStorageBuffer_ = 0, Bool32 variablePointers_ = 0 )
   10645       : variablePointersStorageBuffer( variablePointersStorageBuffer_ )
   10646       , variablePointers( variablePointers_ )
   10647     {
   10648     }
   10649 
   10650     PhysicalDeviceVariablePointerFeaturesKHR( VkPhysicalDeviceVariablePointerFeaturesKHR const & rhs )
   10651     {
   10652       memcpy( this, &rhs, sizeof( PhysicalDeviceVariablePointerFeaturesKHR ) );
   10653     }
   10654 
   10655     PhysicalDeviceVariablePointerFeaturesKHR& operator=( VkPhysicalDeviceVariablePointerFeaturesKHR const & rhs )
   10656     {
   10657       memcpy( this, &rhs, sizeof( PhysicalDeviceVariablePointerFeaturesKHR ) );
   10658       return *this;
   10659     }
   10660     PhysicalDeviceVariablePointerFeaturesKHR& setPNext( void* pNext_ )
   10661     {
   10662       pNext = pNext_;
   10663       return *this;
   10664     }
   10665 
   10666     PhysicalDeviceVariablePointerFeaturesKHR& setVariablePointersStorageBuffer( Bool32 variablePointersStorageBuffer_ )
   10667     {
   10668       variablePointersStorageBuffer = variablePointersStorageBuffer_;
   10669       return *this;
   10670     }
   10671 
   10672     PhysicalDeviceVariablePointerFeaturesKHR& setVariablePointers( Bool32 variablePointers_ )
   10673     {
   10674       variablePointers = variablePointers_;
   10675       return *this;
   10676     }
   10677 
   10678     operator const VkPhysicalDeviceVariablePointerFeaturesKHR&() const
   10679     {
   10680       return *reinterpret_cast<const VkPhysicalDeviceVariablePointerFeaturesKHR*>(this);
   10681     }
   10682 
   10683     bool operator==( PhysicalDeviceVariablePointerFeaturesKHR const& rhs ) const
   10684     {
   10685       return ( sType == rhs.sType )
   10686           && ( pNext == rhs.pNext )
   10687           && ( variablePointersStorageBuffer == rhs.variablePointersStorageBuffer )
   10688           && ( variablePointers == rhs.variablePointers );
   10689     }
   10690 
   10691     bool operator!=( PhysicalDeviceVariablePointerFeaturesKHR const& rhs ) const
   10692     {
   10693       return !operator==( rhs );
   10694     }
   10695 
   10696   private:
   10697     StructureType sType = StructureType::ePhysicalDeviceVariablePointerFeaturesKHR;
   10698 
   10699   public:
   10700     void* pNext = nullptr;
   10701     Bool32 variablePointersStorageBuffer;
   10702     Bool32 variablePointers;
   10703   };
   10704   static_assert( sizeof( PhysicalDeviceVariablePointerFeaturesKHR ) == sizeof( VkPhysicalDeviceVariablePointerFeaturesKHR ), "struct and wrapper have different size!" );
   10705 
   10706   struct PhysicalDeviceIDPropertiesKHR
   10707   {
   10708     operator const VkPhysicalDeviceIDPropertiesKHR&() const
   10709     {
   10710       return *reinterpret_cast<const VkPhysicalDeviceIDPropertiesKHR*>(this);
   10711     }
   10712 
   10713     bool operator==( PhysicalDeviceIDPropertiesKHR const& rhs ) const
   10714     {
   10715       return ( sType == rhs.sType )
   10716           && ( pNext == rhs.pNext )
   10717           && ( memcmp( deviceUUID, rhs.deviceUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
   10718           && ( memcmp( driverUUID, rhs.driverUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
   10719           && ( memcmp( deviceLUID, rhs.deviceLUID, VK_LUID_SIZE_KHR * sizeof( uint8_t ) ) == 0 )
   10720           && ( deviceNodeMask == rhs.deviceNodeMask )
   10721           && ( deviceLUIDValid == rhs.deviceLUIDValid );
   10722     }
   10723 
   10724     bool operator!=( PhysicalDeviceIDPropertiesKHR const& rhs ) const
   10725     {
   10726       return !operator==( rhs );
   10727     }
   10728 
   10729   private:
   10730     StructureType sType = StructureType::ePhysicalDeviceIdPropertiesKHR;
   10731 
   10732   public:
   10733     void* pNext = nullptr;
   10734     uint8_t deviceUUID[VK_UUID_SIZE];
   10735     uint8_t driverUUID[VK_UUID_SIZE];
   10736     uint8_t deviceLUID[VK_LUID_SIZE_KHR];
   10737     uint32_t deviceNodeMask;
   10738     Bool32 deviceLUIDValid;
   10739   };
   10740   static_assert( sizeof( PhysicalDeviceIDPropertiesKHR ) == sizeof( VkPhysicalDeviceIDPropertiesKHR ), "struct and wrapper have different size!" );
   10741 
   10742 #ifdef VK_USE_PLATFORM_WIN32_KHR
   10743   struct ExportMemoryWin32HandleInfoKHR
   10744   {
   10745     ExportMemoryWin32HandleInfoKHR( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0, LPCWSTR name_ = 0 )
   10746       : pAttributes( pAttributes_ )
   10747       , dwAccess( dwAccess_ )
   10748       , name( name_ )
   10749     {
   10750     }
   10751 
   10752     ExportMemoryWin32HandleInfoKHR( VkExportMemoryWin32HandleInfoKHR const & rhs )
   10753     {
   10754       memcpy( this, &rhs, sizeof( ExportMemoryWin32HandleInfoKHR ) );
   10755     }
   10756 
   10757     ExportMemoryWin32HandleInfoKHR& operator=( VkExportMemoryWin32HandleInfoKHR const & rhs )
   10758     {
   10759       memcpy( this, &rhs, sizeof( ExportMemoryWin32HandleInfoKHR ) );
   10760       return *this;
   10761     }
   10762     ExportMemoryWin32HandleInfoKHR& setPNext( const void* pNext_ )
   10763     {
   10764       pNext = pNext_;
   10765       return *this;
   10766     }
   10767 
   10768     ExportMemoryWin32HandleInfoKHR& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
   10769     {
   10770       pAttributes = pAttributes_;
   10771       return *this;
   10772     }
   10773 
   10774     ExportMemoryWin32HandleInfoKHR& setDwAccess( DWORD dwAccess_ )
   10775     {
   10776       dwAccess = dwAccess_;
   10777       return *this;
   10778     }
   10779 
   10780     ExportMemoryWin32HandleInfoKHR& setName( LPCWSTR name_ )
   10781     {
   10782       name = name_;
   10783       return *this;
   10784     }
   10785 
   10786     operator const VkExportMemoryWin32HandleInfoKHR&() const
   10787     {
   10788       return *reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(this);
   10789     }
   10790 
   10791     bool operator==( ExportMemoryWin32HandleInfoKHR const& rhs ) const
   10792     {
   10793       return ( sType == rhs.sType )
   10794           && ( pNext == rhs.pNext )
   10795           && ( pAttributes == rhs.pAttributes )
   10796           && ( dwAccess == rhs.dwAccess )
   10797           && ( name == rhs.name );
   10798     }
   10799 
   10800     bool operator!=( ExportMemoryWin32HandleInfoKHR const& rhs ) const
   10801     {
   10802       return !operator==( rhs );
   10803     }
   10804 
   10805   private:
   10806     StructureType sType = StructureType::eExportMemoryWin32HandleInfoKHR;
   10807 
   10808   public:
   10809     const void* pNext = nullptr;
   10810     const SECURITY_ATTRIBUTES* pAttributes;
   10811     DWORD dwAccess;
   10812     LPCWSTR name;
   10813   };
   10814   static_assert( sizeof( ExportMemoryWin32HandleInfoKHR ) == sizeof( VkExportMemoryWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   10815 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   10816 
   10817 #ifdef VK_USE_PLATFORM_WIN32_KHR
   10818   struct MemoryWin32HandlePropertiesKHR
   10819   {
   10820     operator const VkMemoryWin32HandlePropertiesKHR&() const
   10821     {
   10822       return *reinterpret_cast<const VkMemoryWin32HandlePropertiesKHR*>(this);
   10823     }
   10824 
   10825     bool operator==( MemoryWin32HandlePropertiesKHR const& rhs ) const
   10826     {
   10827       return ( sType == rhs.sType )
   10828           && ( pNext == rhs.pNext )
   10829           && ( memoryTypeBits == rhs.memoryTypeBits );
   10830     }
   10831 
   10832     bool operator!=( MemoryWin32HandlePropertiesKHR const& rhs ) const
   10833     {
   10834       return !operator==( rhs );
   10835     }
   10836 
   10837   private:
   10838     StructureType sType = StructureType::eMemoryWin32HandlePropertiesKHR;
   10839 
   10840   public:
   10841     void* pNext = nullptr;
   10842     uint32_t memoryTypeBits;
   10843   };
   10844   static_assert( sizeof( MemoryWin32HandlePropertiesKHR ) == sizeof( VkMemoryWin32HandlePropertiesKHR ), "struct and wrapper have different size!" );
   10845 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   10846 
   10847   struct MemoryFdPropertiesKHR
   10848   {
   10849     operator const VkMemoryFdPropertiesKHR&() const
   10850     {
   10851       return *reinterpret_cast<const VkMemoryFdPropertiesKHR*>(this);
   10852     }
   10853 
   10854     bool operator==( MemoryFdPropertiesKHR const& rhs ) const
   10855     {
   10856       return ( sType == rhs.sType )
   10857           && ( pNext == rhs.pNext )
   10858           && ( memoryTypeBits == rhs.memoryTypeBits );
   10859     }
   10860 
   10861     bool operator!=( MemoryFdPropertiesKHR const& rhs ) const
   10862     {
   10863       return !operator==( rhs );
   10864     }
   10865 
   10866   private:
   10867     StructureType sType = StructureType::eMemoryFdPropertiesKHR;
   10868 
   10869   public:
   10870     void* pNext = nullptr;
   10871     uint32_t memoryTypeBits;
   10872   };
   10873   static_assert( sizeof( MemoryFdPropertiesKHR ) == sizeof( VkMemoryFdPropertiesKHR ), "struct and wrapper have different size!" );
   10874 
   10875 #ifdef VK_USE_PLATFORM_WIN32_KHR
   10876   struct Win32KeyedMutexAcquireReleaseInfoKHR
   10877   {
   10878     Win32KeyedMutexAcquireReleaseInfoKHR( uint32_t acquireCount_ = 0, const DeviceMemory* pAcquireSyncs_ = nullptr, const uint64_t* pAcquireKeys_ = nullptr, const uint32_t* pAcquireTimeouts_ = nullptr, uint32_t releaseCount_ = 0, const DeviceMemory* pReleaseSyncs_ = nullptr, const uint64_t* pReleaseKeys_ = nullptr )
   10879       : acquireCount( acquireCount_ )
   10880       , pAcquireSyncs( pAcquireSyncs_ )
   10881       , pAcquireKeys( pAcquireKeys_ )
   10882       , pAcquireTimeouts( pAcquireTimeouts_ )
   10883       , releaseCount( releaseCount_ )
   10884       , pReleaseSyncs( pReleaseSyncs_ )
   10885       , pReleaseKeys( pReleaseKeys_ )
   10886     {
   10887     }
   10888 
   10889     Win32KeyedMutexAcquireReleaseInfoKHR( VkWin32KeyedMutexAcquireReleaseInfoKHR const & rhs )
   10890     {
   10891       memcpy( this, &rhs, sizeof( Win32KeyedMutexAcquireReleaseInfoKHR ) );
   10892     }
   10893 
   10894     Win32KeyedMutexAcquireReleaseInfoKHR& operator=( VkWin32KeyedMutexAcquireReleaseInfoKHR const & rhs )
   10895     {
   10896       memcpy( this, &rhs, sizeof( Win32KeyedMutexAcquireReleaseInfoKHR ) );
   10897       return *this;
   10898     }
   10899     Win32KeyedMutexAcquireReleaseInfoKHR& setPNext( const void* pNext_ )
   10900     {
   10901       pNext = pNext_;
   10902       return *this;
   10903     }
   10904 
   10905     Win32KeyedMutexAcquireReleaseInfoKHR& setAcquireCount( uint32_t acquireCount_ )
   10906     {
   10907       acquireCount = acquireCount_;
   10908       return *this;
   10909     }
   10910 
   10911     Win32KeyedMutexAcquireReleaseInfoKHR& setPAcquireSyncs( const DeviceMemory* pAcquireSyncs_ )
   10912     {
   10913       pAcquireSyncs = pAcquireSyncs_;
   10914       return *this;
   10915     }
   10916 
   10917     Win32KeyedMutexAcquireReleaseInfoKHR& setPAcquireKeys( const uint64_t* pAcquireKeys_ )
   10918     {
   10919       pAcquireKeys = pAcquireKeys_;
   10920       return *this;
   10921     }
   10922 
   10923     Win32KeyedMutexAcquireReleaseInfoKHR& setPAcquireTimeouts( const uint32_t* pAcquireTimeouts_ )
   10924     {
   10925       pAcquireTimeouts = pAcquireTimeouts_;
   10926       return *this;
   10927     }
   10928 
   10929     Win32KeyedMutexAcquireReleaseInfoKHR& setReleaseCount( uint32_t releaseCount_ )
   10930     {
   10931       releaseCount = releaseCount_;
   10932       return *this;
   10933     }
   10934 
   10935     Win32KeyedMutexAcquireReleaseInfoKHR& setPReleaseSyncs( const DeviceMemory* pReleaseSyncs_ )
   10936     {
   10937       pReleaseSyncs = pReleaseSyncs_;
   10938       return *this;
   10939     }
   10940 
   10941     Win32KeyedMutexAcquireReleaseInfoKHR& setPReleaseKeys( const uint64_t* pReleaseKeys_ )
   10942     {
   10943       pReleaseKeys = pReleaseKeys_;
   10944       return *this;
   10945     }
   10946 
   10947     operator const VkWin32KeyedMutexAcquireReleaseInfoKHR&() const
   10948     {
   10949       return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(this);
   10950     }
   10951 
   10952     bool operator==( Win32KeyedMutexAcquireReleaseInfoKHR const& rhs ) const
   10953     {
   10954       return ( sType == rhs.sType )
   10955           && ( pNext == rhs.pNext )
   10956           && ( acquireCount == rhs.acquireCount )
   10957           && ( pAcquireSyncs == rhs.pAcquireSyncs )
   10958           && ( pAcquireKeys == rhs.pAcquireKeys )
   10959           && ( pAcquireTimeouts == rhs.pAcquireTimeouts )
   10960           && ( releaseCount == rhs.releaseCount )
   10961           && ( pReleaseSyncs == rhs.pReleaseSyncs )
   10962           && ( pReleaseKeys == rhs.pReleaseKeys );
   10963     }
   10964 
   10965     bool operator!=( Win32KeyedMutexAcquireReleaseInfoKHR const& rhs ) const
   10966     {
   10967       return !operator==( rhs );
   10968     }
   10969 
   10970   private:
   10971     StructureType sType = StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR;
   10972 
   10973   public:
   10974     const void* pNext = nullptr;
   10975     uint32_t acquireCount;
   10976     const DeviceMemory* pAcquireSyncs;
   10977     const uint64_t* pAcquireKeys;
   10978     const uint32_t* pAcquireTimeouts;
   10979     uint32_t releaseCount;
   10980     const DeviceMemory* pReleaseSyncs;
   10981     const uint64_t* pReleaseKeys;
   10982   };
   10983   static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoKHR ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoKHR ), "struct and wrapper have different size!" );
   10984 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   10985 
   10986 #ifdef VK_USE_PLATFORM_WIN32_KHR
   10987   struct ExportSemaphoreWin32HandleInfoKHR
   10988   {
   10989     ExportSemaphoreWin32HandleInfoKHR( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0, LPCWSTR name_ = 0 )
   10990       : pAttributes( pAttributes_ )
   10991       , dwAccess( dwAccess_ )
   10992       , name( name_ )
   10993     {
   10994     }
   10995 
   10996     ExportSemaphoreWin32HandleInfoKHR( VkExportSemaphoreWin32HandleInfoKHR const & rhs )
   10997     {
   10998       memcpy( this, &rhs, sizeof( ExportSemaphoreWin32HandleInfoKHR ) );
   10999     }
   11000 
   11001     ExportSemaphoreWin32HandleInfoKHR& operator=( VkExportSemaphoreWin32HandleInfoKHR const & rhs )
   11002     {
   11003       memcpy( this, &rhs, sizeof( ExportSemaphoreWin32HandleInfoKHR ) );
   11004       return *this;
   11005     }
   11006     ExportSemaphoreWin32HandleInfoKHR& setPNext( const void* pNext_ )
   11007     {
   11008       pNext = pNext_;
   11009       return *this;
   11010     }
   11011 
   11012     ExportSemaphoreWin32HandleInfoKHR& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
   11013     {
   11014       pAttributes = pAttributes_;
   11015       return *this;
   11016     }
   11017 
   11018     ExportSemaphoreWin32HandleInfoKHR& setDwAccess( DWORD dwAccess_ )
   11019     {
   11020       dwAccess = dwAccess_;
   11021       return *this;
   11022     }
   11023 
   11024     ExportSemaphoreWin32HandleInfoKHR& setName( LPCWSTR name_ )
   11025     {
   11026       name = name_;
   11027       return *this;
   11028     }
   11029 
   11030     operator const VkExportSemaphoreWin32HandleInfoKHR&() const
   11031     {
   11032       return *reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(this);
   11033     }
   11034 
   11035     bool operator==( ExportSemaphoreWin32HandleInfoKHR const& rhs ) const
   11036     {
   11037       return ( sType == rhs.sType )
   11038           && ( pNext == rhs.pNext )
   11039           && ( pAttributes == rhs.pAttributes )
   11040           && ( dwAccess == rhs.dwAccess )
   11041           && ( name == rhs.name );
   11042     }
   11043 
   11044     bool operator!=( ExportSemaphoreWin32HandleInfoKHR const& rhs ) const
   11045     {
   11046       return !operator==( rhs );
   11047     }
   11048 
   11049   private:
   11050     StructureType sType = StructureType::eExportSemaphoreWin32HandleInfoKHR;
   11051 
   11052   public:
   11053     const void* pNext = nullptr;
   11054     const SECURITY_ATTRIBUTES* pAttributes;
   11055     DWORD dwAccess;
   11056     LPCWSTR name;
   11057   };
   11058   static_assert( sizeof( ExportSemaphoreWin32HandleInfoKHR ) == sizeof( VkExportSemaphoreWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   11059 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   11060 
   11061 #ifdef VK_USE_PLATFORM_WIN32_KHR
   11062   struct D3D12FenceSubmitInfoKHR
   11063   {
   11064     D3D12FenceSubmitInfoKHR( uint32_t waitSemaphoreValuesCount_ = 0, const uint64_t* pWaitSemaphoreValues_ = nullptr, uint32_t signalSemaphoreValuesCount_ = 0, const uint64_t* pSignalSemaphoreValues_ = nullptr )
   11065       : waitSemaphoreValuesCount( waitSemaphoreValuesCount_ )
   11066       , pWaitSemaphoreValues( pWaitSemaphoreValues_ )
   11067       , signalSemaphoreValuesCount( signalSemaphoreValuesCount_ )
   11068       , pSignalSemaphoreValues( pSignalSemaphoreValues_ )
   11069     {
   11070     }
   11071 
   11072     D3D12FenceSubmitInfoKHR( VkD3D12FenceSubmitInfoKHR const & rhs )
   11073     {
   11074       memcpy( this, &rhs, sizeof( D3D12FenceSubmitInfoKHR ) );
   11075     }
   11076 
   11077     D3D12FenceSubmitInfoKHR& operator=( VkD3D12FenceSubmitInfoKHR const & rhs )
   11078     {
   11079       memcpy( this, &rhs, sizeof( D3D12FenceSubmitInfoKHR ) );
   11080       return *this;
   11081     }
   11082     D3D12FenceSubmitInfoKHR& setPNext( const void* pNext_ )
   11083     {
   11084       pNext = pNext_;
   11085       return *this;
   11086     }
   11087 
   11088     D3D12FenceSubmitInfoKHR& setWaitSemaphoreValuesCount( uint32_t waitSemaphoreValuesCount_ )
   11089     {
   11090       waitSemaphoreValuesCount = waitSemaphoreValuesCount_;
   11091       return *this;
   11092     }
   11093 
   11094     D3D12FenceSubmitInfoKHR& setPWaitSemaphoreValues( const uint64_t* pWaitSemaphoreValues_ )
   11095     {
   11096       pWaitSemaphoreValues = pWaitSemaphoreValues_;
   11097       return *this;
   11098     }
   11099 
   11100     D3D12FenceSubmitInfoKHR& setSignalSemaphoreValuesCount( uint32_t signalSemaphoreValuesCount_ )
   11101     {
   11102       signalSemaphoreValuesCount = signalSemaphoreValuesCount_;
   11103       return *this;
   11104     }
   11105 
   11106     D3D12FenceSubmitInfoKHR& setPSignalSemaphoreValues( const uint64_t* pSignalSemaphoreValues_ )
   11107     {
   11108       pSignalSemaphoreValues = pSignalSemaphoreValues_;
   11109       return *this;
   11110     }
   11111 
   11112     operator const VkD3D12FenceSubmitInfoKHR&() const
   11113     {
   11114       return *reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(this);
   11115     }
   11116 
   11117     bool operator==( D3D12FenceSubmitInfoKHR const& rhs ) const
   11118     {
   11119       return ( sType == rhs.sType )
   11120           && ( pNext == rhs.pNext )
   11121           && ( waitSemaphoreValuesCount == rhs.waitSemaphoreValuesCount )
   11122           && ( pWaitSemaphoreValues == rhs.pWaitSemaphoreValues )
   11123           && ( signalSemaphoreValuesCount == rhs.signalSemaphoreValuesCount )
   11124           && ( pSignalSemaphoreValues == rhs.pSignalSemaphoreValues );
   11125     }
   11126 
   11127     bool operator!=( D3D12FenceSubmitInfoKHR const& rhs ) const
   11128     {
   11129       return !operator==( rhs );
   11130     }
   11131 
   11132   private:
   11133     StructureType sType = StructureType::eD3D12FenceSubmitInfoKHR;
   11134 
   11135   public:
   11136     const void* pNext = nullptr;
   11137     uint32_t waitSemaphoreValuesCount;
   11138     const uint64_t* pWaitSemaphoreValues;
   11139     uint32_t signalSemaphoreValuesCount;
   11140     const uint64_t* pSignalSemaphoreValues;
   11141   };
   11142   static_assert( sizeof( D3D12FenceSubmitInfoKHR ) == sizeof( VkD3D12FenceSubmitInfoKHR ), "struct and wrapper have different size!" );
   11143 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   11144 
   11145 #ifdef VK_USE_PLATFORM_WIN32_KHR
   11146   struct ExportFenceWin32HandleInfoKHR
   11147   {
   11148     ExportFenceWin32HandleInfoKHR( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0, LPCWSTR name_ = 0 )
   11149       : pAttributes( pAttributes_ )
   11150       , dwAccess( dwAccess_ )
   11151       , name( name_ )
   11152     {
   11153     }
   11154 
   11155     ExportFenceWin32HandleInfoKHR( VkExportFenceWin32HandleInfoKHR const & rhs )
   11156     {
   11157       memcpy( this, &rhs, sizeof( ExportFenceWin32HandleInfoKHR ) );
   11158     }
   11159 
   11160     ExportFenceWin32HandleInfoKHR& operator=( VkExportFenceWin32HandleInfoKHR const & rhs )
   11161     {
   11162       memcpy( this, &rhs, sizeof( ExportFenceWin32HandleInfoKHR ) );
   11163       return *this;
   11164     }
   11165     ExportFenceWin32HandleInfoKHR& setPNext( const void* pNext_ )
   11166     {
   11167       pNext = pNext_;
   11168       return *this;
   11169     }
   11170 
   11171     ExportFenceWin32HandleInfoKHR& setPAttributes( const SECURITY_ATTRIBUTES* pAttributes_ )
   11172     {
   11173       pAttributes = pAttributes_;
   11174       return *this;
   11175     }
   11176 
   11177     ExportFenceWin32HandleInfoKHR& setDwAccess( DWORD dwAccess_ )
   11178     {
   11179       dwAccess = dwAccess_;
   11180       return *this;
   11181     }
   11182 
   11183     ExportFenceWin32HandleInfoKHR& setName( LPCWSTR name_ )
   11184     {
   11185       name = name_;
   11186       return *this;
   11187     }
   11188 
   11189     operator const VkExportFenceWin32HandleInfoKHR&() const
   11190     {
   11191       return *reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(this);
   11192     }
   11193 
   11194     bool operator==( ExportFenceWin32HandleInfoKHR const& rhs ) const
   11195     {
   11196       return ( sType == rhs.sType )
   11197           && ( pNext == rhs.pNext )
   11198           && ( pAttributes == rhs.pAttributes )
   11199           && ( dwAccess == rhs.dwAccess )
   11200           && ( name == rhs.name );
   11201     }
   11202 
   11203     bool operator!=( ExportFenceWin32HandleInfoKHR const& rhs ) const
   11204     {
   11205       return !operator==( rhs );
   11206     }
   11207 
   11208   private:
   11209     StructureType sType = StructureType::eExportFenceWin32HandleInfoKHR;
   11210 
   11211   public:
   11212     const void* pNext = nullptr;
   11213     const SECURITY_ATTRIBUTES* pAttributes;
   11214     DWORD dwAccess;
   11215     LPCWSTR name;
   11216   };
   11217   static_assert( sizeof( ExportFenceWin32HandleInfoKHR ) == sizeof( VkExportFenceWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   11218 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   11219 
   11220   struct PhysicalDeviceMultiviewFeaturesKHX
   11221   {
   11222     PhysicalDeviceMultiviewFeaturesKHX( Bool32 multiview_ = 0, Bool32 multiviewGeometryShader_ = 0, Bool32 multiviewTessellationShader_ = 0 )
   11223       : multiview( multiview_ )
   11224       , multiviewGeometryShader( multiviewGeometryShader_ )
   11225       , multiviewTessellationShader( multiviewTessellationShader_ )
   11226     {
   11227     }
   11228 
   11229     PhysicalDeviceMultiviewFeaturesKHX( VkPhysicalDeviceMultiviewFeaturesKHX const & rhs )
   11230     {
   11231       memcpy( this, &rhs, sizeof( PhysicalDeviceMultiviewFeaturesKHX ) );
   11232     }
   11233 
   11234     PhysicalDeviceMultiviewFeaturesKHX& operator=( VkPhysicalDeviceMultiviewFeaturesKHX const & rhs )
   11235     {
   11236       memcpy( this, &rhs, sizeof( PhysicalDeviceMultiviewFeaturesKHX ) );
   11237       return *this;
   11238     }
   11239     PhysicalDeviceMultiviewFeaturesKHX& setPNext( void* pNext_ )
   11240     {
   11241       pNext = pNext_;
   11242       return *this;
   11243     }
   11244 
   11245     PhysicalDeviceMultiviewFeaturesKHX& setMultiview( Bool32 multiview_ )
   11246     {
   11247       multiview = multiview_;
   11248       return *this;
   11249     }
   11250 
   11251     PhysicalDeviceMultiviewFeaturesKHX& setMultiviewGeometryShader( Bool32 multiviewGeometryShader_ )
   11252     {
   11253       multiviewGeometryShader = multiviewGeometryShader_;
   11254       return *this;
   11255     }
   11256 
   11257     PhysicalDeviceMultiviewFeaturesKHX& setMultiviewTessellationShader( Bool32 multiviewTessellationShader_ )
   11258     {
   11259       multiviewTessellationShader = multiviewTessellationShader_;
   11260       return *this;
   11261     }
   11262 
   11263     operator const VkPhysicalDeviceMultiviewFeaturesKHX&() const
   11264     {
   11265       return *reinterpret_cast<const VkPhysicalDeviceMultiviewFeaturesKHX*>(this);
   11266     }
   11267 
   11268     bool operator==( PhysicalDeviceMultiviewFeaturesKHX const& rhs ) const
   11269     {
   11270       return ( sType == rhs.sType )
   11271           && ( pNext == rhs.pNext )
   11272           && ( multiview == rhs.multiview )
   11273           && ( multiviewGeometryShader == rhs.multiviewGeometryShader )
   11274           && ( multiviewTessellationShader == rhs.multiviewTessellationShader );
   11275     }
   11276 
   11277     bool operator!=( PhysicalDeviceMultiviewFeaturesKHX const& rhs ) const
   11278     {
   11279       return !operator==( rhs );
   11280     }
   11281 
   11282   private:
   11283     StructureType sType = StructureType::ePhysicalDeviceMultiviewFeaturesKHX;
   11284 
   11285   public:
   11286     void* pNext = nullptr;
   11287     Bool32 multiview;
   11288     Bool32 multiviewGeometryShader;
   11289     Bool32 multiviewTessellationShader;
   11290   };
   11291   static_assert( sizeof( PhysicalDeviceMultiviewFeaturesKHX ) == sizeof( VkPhysicalDeviceMultiviewFeaturesKHX ), "struct and wrapper have different size!" );
   11292 
   11293   struct PhysicalDeviceMultiviewPropertiesKHX
   11294   {
   11295     operator const VkPhysicalDeviceMultiviewPropertiesKHX&() const
   11296     {
   11297       return *reinterpret_cast<const VkPhysicalDeviceMultiviewPropertiesKHX*>(this);
   11298     }
   11299 
   11300     bool operator==( PhysicalDeviceMultiviewPropertiesKHX const& rhs ) const
   11301     {
   11302       return ( sType == rhs.sType )
   11303           && ( pNext == rhs.pNext )
   11304           && ( maxMultiviewViewCount == rhs.maxMultiviewViewCount )
   11305           && ( maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex );
   11306     }
   11307 
   11308     bool operator!=( PhysicalDeviceMultiviewPropertiesKHX const& rhs ) const
   11309     {
   11310       return !operator==( rhs );
   11311     }
   11312 
   11313   private:
   11314     StructureType sType = StructureType::ePhysicalDeviceMultiviewPropertiesKHX;
   11315 
   11316   public:
   11317     void* pNext = nullptr;
   11318     uint32_t maxMultiviewViewCount;
   11319     uint32_t maxMultiviewInstanceIndex;
   11320   };
   11321   static_assert( sizeof( PhysicalDeviceMultiviewPropertiesKHX ) == sizeof( VkPhysicalDeviceMultiviewPropertiesKHX ), "struct and wrapper have different size!" );
   11322 
   11323   struct RenderPassMultiviewCreateInfoKHX
   11324   {
   11325     RenderPassMultiviewCreateInfoKHX( uint32_t subpassCount_ = 0, const uint32_t* pViewMasks_ = nullptr, uint32_t dependencyCount_ = 0, const int32_t* pViewOffsets_ = nullptr, uint32_t correlationMaskCount_ = 0, const uint32_t* pCorrelationMasks_ = nullptr )
   11326       : subpassCount( subpassCount_ )
   11327       , pViewMasks( pViewMasks_ )
   11328       , dependencyCount( dependencyCount_ )
   11329       , pViewOffsets( pViewOffsets_ )
   11330       , correlationMaskCount( correlationMaskCount_ )
   11331       , pCorrelationMasks( pCorrelationMasks_ )
   11332     {
   11333     }
   11334 
   11335     RenderPassMultiviewCreateInfoKHX( VkRenderPassMultiviewCreateInfoKHX const & rhs )
   11336     {
   11337       memcpy( this, &rhs, sizeof( RenderPassMultiviewCreateInfoKHX ) );
   11338     }
   11339 
   11340     RenderPassMultiviewCreateInfoKHX& operator=( VkRenderPassMultiviewCreateInfoKHX const & rhs )
   11341     {
   11342       memcpy( this, &rhs, sizeof( RenderPassMultiviewCreateInfoKHX ) );
   11343       return *this;
   11344     }
   11345     RenderPassMultiviewCreateInfoKHX& setPNext( const void* pNext_ )
   11346     {
   11347       pNext = pNext_;
   11348       return *this;
   11349     }
   11350 
   11351     RenderPassMultiviewCreateInfoKHX& setSubpassCount( uint32_t subpassCount_ )
   11352     {
   11353       subpassCount = subpassCount_;
   11354       return *this;
   11355     }
   11356 
   11357     RenderPassMultiviewCreateInfoKHX& setPViewMasks( const uint32_t* pViewMasks_ )
   11358     {
   11359       pViewMasks = pViewMasks_;
   11360       return *this;
   11361     }
   11362 
   11363     RenderPassMultiviewCreateInfoKHX& setDependencyCount( uint32_t dependencyCount_ )
   11364     {
   11365       dependencyCount = dependencyCount_;
   11366       return *this;
   11367     }
   11368 
   11369     RenderPassMultiviewCreateInfoKHX& setPViewOffsets( const int32_t* pViewOffsets_ )
   11370     {
   11371       pViewOffsets = pViewOffsets_;
   11372       return *this;
   11373     }
   11374 
   11375     RenderPassMultiviewCreateInfoKHX& setCorrelationMaskCount( uint32_t correlationMaskCount_ )
   11376     {
   11377       correlationMaskCount = correlationMaskCount_;
   11378       return *this;
   11379     }
   11380 
   11381     RenderPassMultiviewCreateInfoKHX& setPCorrelationMasks( const uint32_t* pCorrelationMasks_ )
   11382     {
   11383       pCorrelationMasks = pCorrelationMasks_;
   11384       return *this;
   11385     }
   11386 
   11387     operator const VkRenderPassMultiviewCreateInfoKHX&() const
   11388     {
   11389       return *reinterpret_cast<const VkRenderPassMultiviewCreateInfoKHX*>(this);
   11390     }
   11391 
   11392     bool operator==( RenderPassMultiviewCreateInfoKHX const& rhs ) const
   11393     {
   11394       return ( sType == rhs.sType )
   11395           && ( pNext == rhs.pNext )
   11396           && ( subpassCount == rhs.subpassCount )
   11397           && ( pViewMasks == rhs.pViewMasks )
   11398           && ( dependencyCount == rhs.dependencyCount )
   11399           && ( pViewOffsets == rhs.pViewOffsets )
   11400           && ( correlationMaskCount == rhs.correlationMaskCount )
   11401           && ( pCorrelationMasks == rhs.pCorrelationMasks );
   11402     }
   11403 
   11404     bool operator!=( RenderPassMultiviewCreateInfoKHX const& rhs ) const
   11405     {
   11406       return !operator==( rhs );
   11407     }
   11408 
   11409   private:
   11410     StructureType sType = StructureType::eRenderPassMultiviewCreateInfoKHX;
   11411 
   11412   public:
   11413     const void* pNext = nullptr;
   11414     uint32_t subpassCount;
   11415     const uint32_t* pViewMasks;
   11416     uint32_t dependencyCount;
   11417     const int32_t* pViewOffsets;
   11418     uint32_t correlationMaskCount;
   11419     const uint32_t* pCorrelationMasks;
   11420   };
   11421   static_assert( sizeof( RenderPassMultiviewCreateInfoKHX ) == sizeof( VkRenderPassMultiviewCreateInfoKHX ), "struct and wrapper have different size!" );
   11422 
   11423   struct BindBufferMemoryInfoKHR
   11424   {
   11425     BindBufferMemoryInfoKHR( Buffer buffer_ = Buffer(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0 )
   11426       : buffer( buffer_ )
   11427       , memory( memory_ )
   11428       , memoryOffset( memoryOffset_ )
   11429     {
   11430     }
   11431 
   11432     BindBufferMemoryInfoKHR( VkBindBufferMemoryInfoKHR const & rhs )
   11433     {
   11434       memcpy( this, &rhs, sizeof( BindBufferMemoryInfoKHR ) );
   11435     }
   11436 
   11437     BindBufferMemoryInfoKHR& operator=( VkBindBufferMemoryInfoKHR const & rhs )
   11438     {
   11439       memcpy( this, &rhs, sizeof( BindBufferMemoryInfoKHR ) );
   11440       return *this;
   11441     }
   11442     BindBufferMemoryInfoKHR& setPNext( const void* pNext_ )
   11443     {
   11444       pNext = pNext_;
   11445       return *this;
   11446     }
   11447 
   11448     BindBufferMemoryInfoKHR& setBuffer( Buffer buffer_ )
   11449     {
   11450       buffer = buffer_;
   11451       return *this;
   11452     }
   11453 
   11454     BindBufferMemoryInfoKHR& setMemory( DeviceMemory memory_ )
   11455     {
   11456       memory = memory_;
   11457       return *this;
   11458     }
   11459 
   11460     BindBufferMemoryInfoKHR& setMemoryOffset( DeviceSize memoryOffset_ )
   11461     {
   11462       memoryOffset = memoryOffset_;
   11463       return *this;
   11464     }
   11465 
   11466     operator const VkBindBufferMemoryInfoKHR&() const
   11467     {
   11468       return *reinterpret_cast<const VkBindBufferMemoryInfoKHR*>(this);
   11469     }
   11470 
   11471     bool operator==( BindBufferMemoryInfoKHR const& rhs ) const
   11472     {
   11473       return ( sType == rhs.sType )
   11474           && ( pNext == rhs.pNext )
   11475           && ( buffer == rhs.buffer )
   11476           && ( memory == rhs.memory )
   11477           && ( memoryOffset == rhs.memoryOffset );
   11478     }
   11479 
   11480     bool operator!=( BindBufferMemoryInfoKHR const& rhs ) const
   11481     {
   11482       return !operator==( rhs );
   11483     }
   11484 
   11485   private:
   11486     StructureType sType = StructureType::eBindBufferMemoryInfoKHR;
   11487 
   11488   public:
   11489     const void* pNext = nullptr;
   11490     Buffer buffer;
   11491     DeviceMemory memory;
   11492     DeviceSize memoryOffset;
   11493   };
   11494   static_assert( sizeof( BindBufferMemoryInfoKHR ) == sizeof( VkBindBufferMemoryInfoKHR ), "struct and wrapper have different size!" );
   11495 
   11496   struct BindBufferMemoryDeviceGroupInfoKHX
   11497   {
   11498     BindBufferMemoryDeviceGroupInfoKHX( uint32_t deviceIndexCount_ = 0, const uint32_t* pDeviceIndices_ = nullptr )
   11499       : deviceIndexCount( deviceIndexCount_ )
   11500       , pDeviceIndices( pDeviceIndices_ )
   11501     {
   11502     }
   11503 
   11504     BindBufferMemoryDeviceGroupInfoKHX( VkBindBufferMemoryDeviceGroupInfoKHX const & rhs )
   11505     {
   11506       memcpy( this, &rhs, sizeof( BindBufferMemoryDeviceGroupInfoKHX ) );
   11507     }
   11508 
   11509     BindBufferMemoryDeviceGroupInfoKHX& operator=( VkBindBufferMemoryDeviceGroupInfoKHX const & rhs )
   11510     {
   11511       memcpy( this, &rhs, sizeof( BindBufferMemoryDeviceGroupInfoKHX ) );
   11512       return *this;
   11513     }
   11514     BindBufferMemoryDeviceGroupInfoKHX& setPNext( const void* pNext_ )
   11515     {
   11516       pNext = pNext_;
   11517       return *this;
   11518     }
   11519 
   11520     BindBufferMemoryDeviceGroupInfoKHX& setDeviceIndexCount( uint32_t deviceIndexCount_ )
   11521     {
   11522       deviceIndexCount = deviceIndexCount_;
   11523       return *this;
   11524     }
   11525 
   11526     BindBufferMemoryDeviceGroupInfoKHX& setPDeviceIndices( const uint32_t* pDeviceIndices_ )
   11527     {
   11528       pDeviceIndices = pDeviceIndices_;
   11529       return *this;
   11530     }
   11531 
   11532     operator const VkBindBufferMemoryDeviceGroupInfoKHX&() const
   11533     {
   11534       return *reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfoKHX*>(this);
   11535     }
   11536 
   11537     bool operator==( BindBufferMemoryDeviceGroupInfoKHX const& rhs ) const
   11538     {
   11539       return ( sType == rhs.sType )
   11540           && ( pNext == rhs.pNext )
   11541           && ( deviceIndexCount == rhs.deviceIndexCount )
   11542           && ( pDeviceIndices == rhs.pDeviceIndices );
   11543     }
   11544 
   11545     bool operator!=( BindBufferMemoryDeviceGroupInfoKHX const& rhs ) const
   11546     {
   11547       return !operator==( rhs );
   11548     }
   11549 
   11550   private:
   11551     StructureType sType = StructureType::eBindBufferMemoryDeviceGroupInfoKHX;
   11552 
   11553   public:
   11554     const void* pNext = nullptr;
   11555     uint32_t deviceIndexCount;
   11556     const uint32_t* pDeviceIndices;
   11557   };
   11558   static_assert( sizeof( BindBufferMemoryDeviceGroupInfoKHX ) == sizeof( VkBindBufferMemoryDeviceGroupInfoKHX ), "struct and wrapper have different size!" );
   11559 
   11560   struct BindImageMemoryInfoKHR
   11561   {
   11562     BindImageMemoryInfoKHR( Image image_ = Image(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0 )
   11563       : image( image_ )
   11564       , memory( memory_ )
   11565       , memoryOffset( memoryOffset_ )
   11566     {
   11567     }
   11568 
   11569     BindImageMemoryInfoKHR( VkBindImageMemoryInfoKHR const & rhs )
   11570     {
   11571       memcpy( this, &rhs, sizeof( BindImageMemoryInfoKHR ) );
   11572     }
   11573 
   11574     BindImageMemoryInfoKHR& operator=( VkBindImageMemoryInfoKHR const & rhs )
   11575     {
   11576       memcpy( this, &rhs, sizeof( BindImageMemoryInfoKHR ) );
   11577       return *this;
   11578     }
   11579     BindImageMemoryInfoKHR& setPNext( const void* pNext_ )
   11580     {
   11581       pNext = pNext_;
   11582       return *this;
   11583     }
   11584 
   11585     BindImageMemoryInfoKHR& setImage( Image image_ )
   11586     {
   11587       image = image_;
   11588       return *this;
   11589     }
   11590 
   11591     BindImageMemoryInfoKHR& setMemory( DeviceMemory memory_ )
   11592     {
   11593       memory = memory_;
   11594       return *this;
   11595     }
   11596 
   11597     BindImageMemoryInfoKHR& setMemoryOffset( DeviceSize memoryOffset_ )
   11598     {
   11599       memoryOffset = memoryOffset_;
   11600       return *this;
   11601     }
   11602 
   11603     operator const VkBindImageMemoryInfoKHR&() const
   11604     {
   11605       return *reinterpret_cast<const VkBindImageMemoryInfoKHR*>(this);
   11606     }
   11607 
   11608     bool operator==( BindImageMemoryInfoKHR const& rhs ) const
   11609     {
   11610       return ( sType == rhs.sType )
   11611           && ( pNext == rhs.pNext )
   11612           && ( image == rhs.image )
   11613           && ( memory == rhs.memory )
   11614           && ( memoryOffset == rhs.memoryOffset );
   11615     }
   11616 
   11617     bool operator!=( BindImageMemoryInfoKHR const& rhs ) const
   11618     {
   11619       return !operator==( rhs );
   11620     }
   11621 
   11622   private:
   11623     StructureType sType = StructureType::eBindImageMemoryInfoKHR;
   11624 
   11625   public:
   11626     const void* pNext = nullptr;
   11627     Image image;
   11628     DeviceMemory memory;
   11629     DeviceSize memoryOffset;
   11630   };
   11631   static_assert( sizeof( BindImageMemoryInfoKHR ) == sizeof( VkBindImageMemoryInfoKHR ), "struct and wrapper have different size!" );
   11632 
   11633   struct BindImageMemoryDeviceGroupInfoKHX
   11634   {
   11635     BindImageMemoryDeviceGroupInfoKHX( uint32_t deviceIndexCount_ = 0, const uint32_t* pDeviceIndices_ = nullptr, uint32_t SFRRectCount_ = 0, const Rect2D* pSFRRects_ = nullptr )
   11636       : deviceIndexCount( deviceIndexCount_ )
   11637       , pDeviceIndices( pDeviceIndices_ )
   11638       , SFRRectCount( SFRRectCount_ )
   11639       , pSFRRects( pSFRRects_ )
   11640     {
   11641     }
   11642 
   11643     BindImageMemoryDeviceGroupInfoKHX( VkBindImageMemoryDeviceGroupInfoKHX const & rhs )
   11644     {
   11645       memcpy( this, &rhs, sizeof( BindImageMemoryDeviceGroupInfoKHX ) );
   11646     }
   11647 
   11648     BindImageMemoryDeviceGroupInfoKHX& operator=( VkBindImageMemoryDeviceGroupInfoKHX const & rhs )
   11649     {
   11650       memcpy( this, &rhs, sizeof( BindImageMemoryDeviceGroupInfoKHX ) );
   11651       return *this;
   11652     }
   11653     BindImageMemoryDeviceGroupInfoKHX& setPNext( const void* pNext_ )
   11654     {
   11655       pNext = pNext_;
   11656       return *this;
   11657     }
   11658 
   11659     BindImageMemoryDeviceGroupInfoKHX& setDeviceIndexCount( uint32_t deviceIndexCount_ )
   11660     {
   11661       deviceIndexCount = deviceIndexCount_;
   11662       return *this;
   11663     }
   11664 
   11665     BindImageMemoryDeviceGroupInfoKHX& setPDeviceIndices( const uint32_t* pDeviceIndices_ )
   11666     {
   11667       pDeviceIndices = pDeviceIndices_;
   11668       return *this;
   11669     }
   11670 
   11671     BindImageMemoryDeviceGroupInfoKHX& setSFRRectCount( uint32_t SFRRectCount_ )
   11672     {
   11673       SFRRectCount = SFRRectCount_;
   11674       return *this;
   11675     }
   11676 
   11677     BindImageMemoryDeviceGroupInfoKHX& setPSFRRects( const Rect2D* pSFRRects_ )
   11678     {
   11679       pSFRRects = pSFRRects_;
   11680       return *this;
   11681     }
   11682 
   11683     operator const VkBindImageMemoryDeviceGroupInfoKHX&() const
   11684     {
   11685       return *reinterpret_cast<const VkBindImageMemoryDeviceGroupInfoKHX*>(this);
   11686     }
   11687 
   11688     bool operator==( BindImageMemoryDeviceGroupInfoKHX const& rhs ) const
   11689     {
   11690       return ( sType == rhs.sType )
   11691           && ( pNext == rhs.pNext )
   11692           && ( deviceIndexCount == rhs.deviceIndexCount )
   11693           && ( pDeviceIndices == rhs.pDeviceIndices )
   11694           && ( SFRRectCount == rhs.SFRRectCount )
   11695           && ( pSFRRects == rhs.pSFRRects );
   11696     }
   11697 
   11698     bool operator!=( BindImageMemoryDeviceGroupInfoKHX const& rhs ) const
   11699     {
   11700       return !operator==( rhs );
   11701     }
   11702 
   11703   private:
   11704     StructureType sType = StructureType::eBindImageMemoryDeviceGroupInfoKHX;
   11705 
   11706   public:
   11707     const void* pNext = nullptr;
   11708     uint32_t deviceIndexCount;
   11709     const uint32_t* pDeviceIndices;
   11710     uint32_t SFRRectCount;
   11711     const Rect2D* pSFRRects;
   11712   };
   11713   static_assert( sizeof( BindImageMemoryDeviceGroupInfoKHX ) == sizeof( VkBindImageMemoryDeviceGroupInfoKHX ), "struct and wrapper have different size!" );
   11714 
   11715   struct DeviceGroupRenderPassBeginInfoKHX
   11716   {
   11717     DeviceGroupRenderPassBeginInfoKHX( uint32_t deviceMask_ = 0, uint32_t deviceRenderAreaCount_ = 0, const Rect2D* pDeviceRenderAreas_ = nullptr )
   11718       : deviceMask( deviceMask_ )
   11719       , deviceRenderAreaCount( deviceRenderAreaCount_ )
   11720       , pDeviceRenderAreas( pDeviceRenderAreas_ )
   11721     {
   11722     }
   11723 
   11724     DeviceGroupRenderPassBeginInfoKHX( VkDeviceGroupRenderPassBeginInfoKHX const & rhs )
   11725     {
   11726       memcpy( this, &rhs, sizeof( DeviceGroupRenderPassBeginInfoKHX ) );
   11727     }
   11728 
   11729     DeviceGroupRenderPassBeginInfoKHX& operator=( VkDeviceGroupRenderPassBeginInfoKHX const & rhs )
   11730     {
   11731       memcpy( this, &rhs, sizeof( DeviceGroupRenderPassBeginInfoKHX ) );
   11732       return *this;
   11733     }
   11734     DeviceGroupRenderPassBeginInfoKHX& setPNext( const void* pNext_ )
   11735     {
   11736       pNext = pNext_;
   11737       return *this;
   11738     }
   11739 
   11740     DeviceGroupRenderPassBeginInfoKHX& setDeviceMask( uint32_t deviceMask_ )
   11741     {
   11742       deviceMask = deviceMask_;
   11743       return *this;
   11744     }
   11745 
   11746     DeviceGroupRenderPassBeginInfoKHX& setDeviceRenderAreaCount( uint32_t deviceRenderAreaCount_ )
   11747     {
   11748       deviceRenderAreaCount = deviceRenderAreaCount_;
   11749       return *this;
   11750     }
   11751 
   11752     DeviceGroupRenderPassBeginInfoKHX& setPDeviceRenderAreas( const Rect2D* pDeviceRenderAreas_ )
   11753     {
   11754       pDeviceRenderAreas = pDeviceRenderAreas_;
   11755       return *this;
   11756     }
   11757 
   11758     operator const VkDeviceGroupRenderPassBeginInfoKHX&() const
   11759     {
   11760       return *reinterpret_cast<const VkDeviceGroupRenderPassBeginInfoKHX*>(this);
   11761     }
   11762 
   11763     bool operator==( DeviceGroupRenderPassBeginInfoKHX const& rhs ) const
   11764     {
   11765       return ( sType == rhs.sType )
   11766           && ( pNext == rhs.pNext )
   11767           && ( deviceMask == rhs.deviceMask )
   11768           && ( deviceRenderAreaCount == rhs.deviceRenderAreaCount )
   11769           && ( pDeviceRenderAreas == rhs.pDeviceRenderAreas );
   11770     }
   11771 
   11772     bool operator!=( DeviceGroupRenderPassBeginInfoKHX const& rhs ) const
   11773     {
   11774       return !operator==( rhs );
   11775     }
   11776 
   11777   private:
   11778     StructureType sType = StructureType::eDeviceGroupRenderPassBeginInfoKHX;
   11779 
   11780   public:
   11781     const void* pNext = nullptr;
   11782     uint32_t deviceMask;
   11783     uint32_t deviceRenderAreaCount;
   11784     const Rect2D* pDeviceRenderAreas;
   11785   };
   11786   static_assert( sizeof( DeviceGroupRenderPassBeginInfoKHX ) == sizeof( VkDeviceGroupRenderPassBeginInfoKHX ), "struct and wrapper have different size!" );
   11787 
   11788   struct DeviceGroupCommandBufferBeginInfoKHX
   11789   {
   11790     DeviceGroupCommandBufferBeginInfoKHX( uint32_t deviceMask_ = 0 )
   11791       : deviceMask( deviceMask_ )
   11792     {
   11793     }
   11794 
   11795     DeviceGroupCommandBufferBeginInfoKHX( VkDeviceGroupCommandBufferBeginInfoKHX const & rhs )
   11796     {
   11797       memcpy( this, &rhs, sizeof( DeviceGroupCommandBufferBeginInfoKHX ) );
   11798     }
   11799 
   11800     DeviceGroupCommandBufferBeginInfoKHX& operator=( VkDeviceGroupCommandBufferBeginInfoKHX const & rhs )
   11801     {
   11802       memcpy( this, &rhs, sizeof( DeviceGroupCommandBufferBeginInfoKHX ) );
   11803       return *this;
   11804     }
   11805     DeviceGroupCommandBufferBeginInfoKHX& setPNext( const void* pNext_ )
   11806     {
   11807       pNext = pNext_;
   11808       return *this;
   11809     }
   11810 
   11811     DeviceGroupCommandBufferBeginInfoKHX& setDeviceMask( uint32_t deviceMask_ )
   11812     {
   11813       deviceMask = deviceMask_;
   11814       return *this;
   11815     }
   11816 
   11817     operator const VkDeviceGroupCommandBufferBeginInfoKHX&() const
   11818     {
   11819       return *reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfoKHX*>(this);
   11820     }
   11821 
   11822     bool operator==( DeviceGroupCommandBufferBeginInfoKHX const& rhs ) const
   11823     {
   11824       return ( sType == rhs.sType )
   11825           && ( pNext == rhs.pNext )
   11826           && ( deviceMask == rhs.deviceMask );
   11827     }
   11828 
   11829     bool operator!=( DeviceGroupCommandBufferBeginInfoKHX const& rhs ) const
   11830     {
   11831       return !operator==( rhs );
   11832     }
   11833 
   11834   private:
   11835     StructureType sType = StructureType::eDeviceGroupCommandBufferBeginInfoKHX;
   11836 
   11837   public:
   11838     const void* pNext = nullptr;
   11839     uint32_t deviceMask;
   11840   };
   11841   static_assert( sizeof( DeviceGroupCommandBufferBeginInfoKHX ) == sizeof( VkDeviceGroupCommandBufferBeginInfoKHX ), "struct and wrapper have different size!" );
   11842 
   11843   struct DeviceGroupSubmitInfoKHX
   11844   {
   11845     DeviceGroupSubmitInfoKHX( uint32_t waitSemaphoreCount_ = 0, const uint32_t* pWaitSemaphoreDeviceIndices_ = nullptr, uint32_t commandBufferCount_ = 0, const uint32_t* pCommandBufferDeviceMasks_ = nullptr, uint32_t signalSemaphoreCount_ = 0, const uint32_t* pSignalSemaphoreDeviceIndices_ = nullptr )
   11846       : waitSemaphoreCount( waitSemaphoreCount_ )
   11847       , pWaitSemaphoreDeviceIndices( pWaitSemaphoreDeviceIndices_ )
   11848       , commandBufferCount( commandBufferCount_ )
   11849       , pCommandBufferDeviceMasks( pCommandBufferDeviceMasks_ )
   11850       , signalSemaphoreCount( signalSemaphoreCount_ )
   11851       , pSignalSemaphoreDeviceIndices( pSignalSemaphoreDeviceIndices_ )
   11852     {
   11853     }
   11854 
   11855     DeviceGroupSubmitInfoKHX( VkDeviceGroupSubmitInfoKHX const & rhs )
   11856     {
   11857       memcpy( this, &rhs, sizeof( DeviceGroupSubmitInfoKHX ) );
   11858     }
   11859 
   11860     DeviceGroupSubmitInfoKHX& operator=( VkDeviceGroupSubmitInfoKHX const & rhs )
   11861     {
   11862       memcpy( this, &rhs, sizeof( DeviceGroupSubmitInfoKHX ) );
   11863       return *this;
   11864     }
   11865     DeviceGroupSubmitInfoKHX& setPNext( const void* pNext_ )
   11866     {
   11867       pNext = pNext_;
   11868       return *this;
   11869     }
   11870 
   11871     DeviceGroupSubmitInfoKHX& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
   11872     {
   11873       waitSemaphoreCount = waitSemaphoreCount_;
   11874       return *this;
   11875     }
   11876 
   11877     DeviceGroupSubmitInfoKHX& setPWaitSemaphoreDeviceIndices( const uint32_t* pWaitSemaphoreDeviceIndices_ )
   11878     {
   11879       pWaitSemaphoreDeviceIndices = pWaitSemaphoreDeviceIndices_;
   11880       return *this;
   11881     }
   11882 
   11883     DeviceGroupSubmitInfoKHX& setCommandBufferCount( uint32_t commandBufferCount_ )
   11884     {
   11885       commandBufferCount = commandBufferCount_;
   11886       return *this;
   11887     }
   11888 
   11889     DeviceGroupSubmitInfoKHX& setPCommandBufferDeviceMasks( const uint32_t* pCommandBufferDeviceMasks_ )
   11890     {
   11891       pCommandBufferDeviceMasks = pCommandBufferDeviceMasks_;
   11892       return *this;
   11893     }
   11894 
   11895     DeviceGroupSubmitInfoKHX& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
   11896     {
   11897       signalSemaphoreCount = signalSemaphoreCount_;
   11898       return *this;
   11899     }
   11900 
   11901     DeviceGroupSubmitInfoKHX& setPSignalSemaphoreDeviceIndices( const uint32_t* pSignalSemaphoreDeviceIndices_ )
   11902     {
   11903       pSignalSemaphoreDeviceIndices = pSignalSemaphoreDeviceIndices_;
   11904       return *this;
   11905     }
   11906 
   11907     operator const VkDeviceGroupSubmitInfoKHX&() const
   11908     {
   11909       return *reinterpret_cast<const VkDeviceGroupSubmitInfoKHX*>(this);
   11910     }
   11911 
   11912     bool operator==( DeviceGroupSubmitInfoKHX const& rhs ) const
   11913     {
   11914       return ( sType == rhs.sType )
   11915           && ( pNext == rhs.pNext )
   11916           && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
   11917           && ( pWaitSemaphoreDeviceIndices == rhs.pWaitSemaphoreDeviceIndices )
   11918           && ( commandBufferCount == rhs.commandBufferCount )
   11919           && ( pCommandBufferDeviceMasks == rhs.pCommandBufferDeviceMasks )
   11920           && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
   11921           && ( pSignalSemaphoreDeviceIndices == rhs.pSignalSemaphoreDeviceIndices );
   11922     }
   11923 
   11924     bool operator!=( DeviceGroupSubmitInfoKHX const& rhs ) const
   11925     {
   11926       return !operator==( rhs );
   11927     }
   11928 
   11929   private:
   11930     StructureType sType = StructureType::eDeviceGroupSubmitInfoKHX;
   11931 
   11932   public:
   11933     const void* pNext = nullptr;
   11934     uint32_t waitSemaphoreCount;
   11935     const uint32_t* pWaitSemaphoreDeviceIndices;
   11936     uint32_t commandBufferCount;
   11937     const uint32_t* pCommandBufferDeviceMasks;
   11938     uint32_t signalSemaphoreCount;
   11939     const uint32_t* pSignalSemaphoreDeviceIndices;
   11940   };
   11941   static_assert( sizeof( DeviceGroupSubmitInfoKHX ) == sizeof( VkDeviceGroupSubmitInfoKHX ), "struct and wrapper have different size!" );
   11942 
   11943   struct DeviceGroupBindSparseInfoKHX
   11944   {
   11945     DeviceGroupBindSparseInfoKHX( uint32_t resourceDeviceIndex_ = 0, uint32_t memoryDeviceIndex_ = 0 )
   11946       : resourceDeviceIndex( resourceDeviceIndex_ )
   11947       , memoryDeviceIndex( memoryDeviceIndex_ )
   11948     {
   11949     }
   11950 
   11951     DeviceGroupBindSparseInfoKHX( VkDeviceGroupBindSparseInfoKHX const & rhs )
   11952     {
   11953       memcpy( this, &rhs, sizeof( DeviceGroupBindSparseInfoKHX ) );
   11954     }
   11955 
   11956     DeviceGroupBindSparseInfoKHX& operator=( VkDeviceGroupBindSparseInfoKHX const & rhs )
   11957     {
   11958       memcpy( this, &rhs, sizeof( DeviceGroupBindSparseInfoKHX ) );
   11959       return *this;
   11960     }
   11961     DeviceGroupBindSparseInfoKHX& setPNext( const void* pNext_ )
   11962     {
   11963       pNext = pNext_;
   11964       return *this;
   11965     }
   11966 
   11967     DeviceGroupBindSparseInfoKHX& setResourceDeviceIndex( uint32_t resourceDeviceIndex_ )
   11968     {
   11969       resourceDeviceIndex = resourceDeviceIndex_;
   11970       return *this;
   11971     }
   11972 
   11973     DeviceGroupBindSparseInfoKHX& setMemoryDeviceIndex( uint32_t memoryDeviceIndex_ )
   11974     {
   11975       memoryDeviceIndex = memoryDeviceIndex_;
   11976       return *this;
   11977     }
   11978 
   11979     operator const VkDeviceGroupBindSparseInfoKHX&() const
   11980     {
   11981       return *reinterpret_cast<const VkDeviceGroupBindSparseInfoKHX*>(this);
   11982     }
   11983 
   11984     bool operator==( DeviceGroupBindSparseInfoKHX const& rhs ) const
   11985     {
   11986       return ( sType == rhs.sType )
   11987           && ( pNext == rhs.pNext )
   11988           && ( resourceDeviceIndex == rhs.resourceDeviceIndex )
   11989           && ( memoryDeviceIndex == rhs.memoryDeviceIndex );
   11990     }
   11991 
   11992     bool operator!=( DeviceGroupBindSparseInfoKHX const& rhs ) const
   11993     {
   11994       return !operator==( rhs );
   11995     }
   11996 
   11997   private:
   11998     StructureType sType = StructureType::eDeviceGroupBindSparseInfoKHX;
   11999 
   12000   public:
   12001     const void* pNext = nullptr;
   12002     uint32_t resourceDeviceIndex;
   12003     uint32_t memoryDeviceIndex;
   12004   };
   12005   static_assert( sizeof( DeviceGroupBindSparseInfoKHX ) == sizeof( VkDeviceGroupBindSparseInfoKHX ), "struct and wrapper have different size!" );
   12006 
   12007   struct ImageSwapchainCreateInfoKHX
   12008   {
   12009     ImageSwapchainCreateInfoKHX( SwapchainKHR swapchain_ = SwapchainKHR() )
   12010       : swapchain( swapchain_ )
   12011     {
   12012     }
   12013 
   12014     ImageSwapchainCreateInfoKHX( VkImageSwapchainCreateInfoKHX const & rhs )
   12015     {
   12016       memcpy( this, &rhs, sizeof( ImageSwapchainCreateInfoKHX ) );
   12017     }
   12018 
   12019     ImageSwapchainCreateInfoKHX& operator=( VkImageSwapchainCreateInfoKHX const & rhs )
   12020     {
   12021       memcpy( this, &rhs, sizeof( ImageSwapchainCreateInfoKHX ) );
   12022       return *this;
   12023     }
   12024     ImageSwapchainCreateInfoKHX& setPNext( const void* pNext_ )
   12025     {
   12026       pNext = pNext_;
   12027       return *this;
   12028     }
   12029 
   12030     ImageSwapchainCreateInfoKHX& setSwapchain( SwapchainKHR swapchain_ )
   12031     {
   12032       swapchain = swapchain_;
   12033       return *this;
   12034     }
   12035 
   12036     operator const VkImageSwapchainCreateInfoKHX&() const
   12037     {
   12038       return *reinterpret_cast<const VkImageSwapchainCreateInfoKHX*>(this);
   12039     }
   12040 
   12041     bool operator==( ImageSwapchainCreateInfoKHX const& rhs ) const
   12042     {
   12043       return ( sType == rhs.sType )
   12044           && ( pNext == rhs.pNext )
   12045           && ( swapchain == rhs.swapchain );
   12046     }
   12047 
   12048     bool operator!=( ImageSwapchainCreateInfoKHX const& rhs ) const
   12049     {
   12050       return !operator==( rhs );
   12051     }
   12052 
   12053   private:
   12054     StructureType sType = StructureType::eImageSwapchainCreateInfoKHX;
   12055 
   12056   public:
   12057     const void* pNext = nullptr;
   12058     SwapchainKHR swapchain;
   12059   };
   12060   static_assert( sizeof( ImageSwapchainCreateInfoKHX ) == sizeof( VkImageSwapchainCreateInfoKHX ), "struct and wrapper have different size!" );
   12061 
   12062   struct BindImageMemorySwapchainInfoKHX
   12063   {
   12064     BindImageMemorySwapchainInfoKHX( SwapchainKHR swapchain_ = SwapchainKHR(), uint32_t imageIndex_ = 0 )
   12065       : swapchain( swapchain_ )
   12066       , imageIndex( imageIndex_ )
   12067     {
   12068     }
   12069 
   12070     BindImageMemorySwapchainInfoKHX( VkBindImageMemorySwapchainInfoKHX const & rhs )
   12071     {
   12072       memcpy( this, &rhs, sizeof( BindImageMemorySwapchainInfoKHX ) );
   12073     }
   12074 
   12075     BindImageMemorySwapchainInfoKHX& operator=( VkBindImageMemorySwapchainInfoKHX const & rhs )
   12076     {
   12077       memcpy( this, &rhs, sizeof( BindImageMemorySwapchainInfoKHX ) );
   12078       return *this;
   12079     }
   12080     BindImageMemorySwapchainInfoKHX& setPNext( const void* pNext_ )
   12081     {
   12082       pNext = pNext_;
   12083       return *this;
   12084     }
   12085 
   12086     BindImageMemorySwapchainInfoKHX& setSwapchain( SwapchainKHR swapchain_ )
   12087     {
   12088       swapchain = swapchain_;
   12089       return *this;
   12090     }
   12091 
   12092     BindImageMemorySwapchainInfoKHX& setImageIndex( uint32_t imageIndex_ )
   12093     {
   12094       imageIndex = imageIndex_;
   12095       return *this;
   12096     }
   12097 
   12098     operator const VkBindImageMemorySwapchainInfoKHX&() const
   12099     {
   12100       return *reinterpret_cast<const VkBindImageMemorySwapchainInfoKHX*>(this);
   12101     }
   12102 
   12103     bool operator==( BindImageMemorySwapchainInfoKHX const& rhs ) const
   12104     {
   12105       return ( sType == rhs.sType )
   12106           && ( pNext == rhs.pNext )
   12107           && ( swapchain == rhs.swapchain )
   12108           && ( imageIndex == rhs.imageIndex );
   12109     }
   12110 
   12111     bool operator!=( BindImageMemorySwapchainInfoKHX const& rhs ) const
   12112     {
   12113       return !operator==( rhs );
   12114     }
   12115 
   12116   private:
   12117     StructureType sType = StructureType::eBindImageMemorySwapchainInfoKHX;
   12118 
   12119   public:
   12120     const void* pNext = nullptr;
   12121     SwapchainKHR swapchain;
   12122     uint32_t imageIndex;
   12123   };
   12124   static_assert( sizeof( BindImageMemorySwapchainInfoKHX ) == sizeof( VkBindImageMemorySwapchainInfoKHX ), "struct and wrapper have different size!" );
   12125 
   12126   struct AcquireNextImageInfoKHX
   12127   {
   12128     AcquireNextImageInfoKHX( SwapchainKHR swapchain_ = SwapchainKHR(), uint64_t timeout_ = 0, Semaphore semaphore_ = Semaphore(), Fence fence_ = Fence(), uint32_t deviceMask_ = 0 )
   12129       : swapchain( swapchain_ )
   12130       , timeout( timeout_ )
   12131       , semaphore( semaphore_ )
   12132       , fence( fence_ )
   12133       , deviceMask( deviceMask_ )
   12134     {
   12135     }
   12136 
   12137     AcquireNextImageInfoKHX( VkAcquireNextImageInfoKHX const & rhs )
   12138     {
   12139       memcpy( this, &rhs, sizeof( AcquireNextImageInfoKHX ) );
   12140     }
   12141 
   12142     AcquireNextImageInfoKHX& operator=( VkAcquireNextImageInfoKHX const & rhs )
   12143     {
   12144       memcpy( this, &rhs, sizeof( AcquireNextImageInfoKHX ) );
   12145       return *this;
   12146     }
   12147     AcquireNextImageInfoKHX& setPNext( const void* pNext_ )
   12148     {
   12149       pNext = pNext_;
   12150       return *this;
   12151     }
   12152 
   12153     AcquireNextImageInfoKHX& setSwapchain( SwapchainKHR swapchain_ )
   12154     {
   12155       swapchain = swapchain_;
   12156       return *this;
   12157     }
   12158 
   12159     AcquireNextImageInfoKHX& setTimeout( uint64_t timeout_ )
   12160     {
   12161       timeout = timeout_;
   12162       return *this;
   12163     }
   12164 
   12165     AcquireNextImageInfoKHX& setSemaphore( Semaphore semaphore_ )
   12166     {
   12167       semaphore = semaphore_;
   12168       return *this;
   12169     }
   12170 
   12171     AcquireNextImageInfoKHX& setFence( Fence fence_ )
   12172     {
   12173       fence = fence_;
   12174       return *this;
   12175     }
   12176 
   12177     AcquireNextImageInfoKHX& setDeviceMask( uint32_t deviceMask_ )
   12178     {
   12179       deviceMask = deviceMask_;
   12180       return *this;
   12181     }
   12182 
   12183     operator const VkAcquireNextImageInfoKHX&() const
   12184     {
   12185       return *reinterpret_cast<const VkAcquireNextImageInfoKHX*>(this);
   12186     }
   12187 
   12188     bool operator==( AcquireNextImageInfoKHX const& rhs ) const
   12189     {
   12190       return ( sType == rhs.sType )
   12191           && ( pNext == rhs.pNext )
   12192           && ( swapchain == rhs.swapchain )
   12193           && ( timeout == rhs.timeout )
   12194           && ( semaphore == rhs.semaphore )
   12195           && ( fence == rhs.fence )
   12196           && ( deviceMask == rhs.deviceMask );
   12197     }
   12198 
   12199     bool operator!=( AcquireNextImageInfoKHX const& rhs ) const
   12200     {
   12201       return !operator==( rhs );
   12202     }
   12203 
   12204   private:
   12205     StructureType sType = StructureType::eAcquireNextImageInfoKHX;
   12206 
   12207   public:
   12208     const void* pNext = nullptr;
   12209     SwapchainKHR swapchain;
   12210     uint64_t timeout;
   12211     Semaphore semaphore;
   12212     Fence fence;
   12213     uint32_t deviceMask;
   12214   };
   12215   static_assert( sizeof( AcquireNextImageInfoKHX ) == sizeof( VkAcquireNextImageInfoKHX ), "struct and wrapper have different size!" );
   12216 
   12217   struct HdrMetadataEXT
   12218   {
   12219     HdrMetadataEXT( XYColorEXT displayPrimaryRed_ = XYColorEXT(), XYColorEXT displayPrimaryGreen_ = XYColorEXT(), XYColorEXT displayPrimaryBlue_ = XYColorEXT(), XYColorEXT whitePoint_ = XYColorEXT(), float maxLuminance_ = 0, float minLuminance_ = 0, float maxContentLightLevel_ = 0, float maxFrameAverageLightLevel_ = 0 )
   12220       : displayPrimaryRed( displayPrimaryRed_ )
   12221       , displayPrimaryGreen( displayPrimaryGreen_ )
   12222       , displayPrimaryBlue( displayPrimaryBlue_ )
   12223       , whitePoint( whitePoint_ )
   12224       , maxLuminance( maxLuminance_ )
   12225       , minLuminance( minLuminance_ )
   12226       , maxContentLightLevel( maxContentLightLevel_ )
   12227       , maxFrameAverageLightLevel( maxFrameAverageLightLevel_ )
   12228     {
   12229     }
   12230 
   12231     HdrMetadataEXT( VkHdrMetadataEXT const & rhs )
   12232     {
   12233       memcpy( this, &rhs, sizeof( HdrMetadataEXT ) );
   12234     }
   12235 
   12236     HdrMetadataEXT& operator=( VkHdrMetadataEXT const & rhs )
   12237     {
   12238       memcpy( this, &rhs, sizeof( HdrMetadataEXT ) );
   12239       return *this;
   12240     }
   12241     HdrMetadataEXT& setPNext( const void* pNext_ )
   12242     {
   12243       pNext = pNext_;
   12244       return *this;
   12245     }
   12246 
   12247     HdrMetadataEXT& setDisplayPrimaryRed( XYColorEXT displayPrimaryRed_ )
   12248     {
   12249       displayPrimaryRed = displayPrimaryRed_;
   12250       return *this;
   12251     }
   12252 
   12253     HdrMetadataEXT& setDisplayPrimaryGreen( XYColorEXT displayPrimaryGreen_ )
   12254     {
   12255       displayPrimaryGreen = displayPrimaryGreen_;
   12256       return *this;
   12257     }
   12258 
   12259     HdrMetadataEXT& setDisplayPrimaryBlue( XYColorEXT displayPrimaryBlue_ )
   12260     {
   12261       displayPrimaryBlue = displayPrimaryBlue_;
   12262       return *this;
   12263     }
   12264 
   12265     HdrMetadataEXT& setWhitePoint( XYColorEXT whitePoint_ )
   12266     {
   12267       whitePoint = whitePoint_;
   12268       return *this;
   12269     }
   12270 
   12271     HdrMetadataEXT& setMaxLuminance( float maxLuminance_ )
   12272     {
   12273       maxLuminance = maxLuminance_;
   12274       return *this;
   12275     }
   12276 
   12277     HdrMetadataEXT& setMinLuminance( float minLuminance_ )
   12278     {
   12279       minLuminance = minLuminance_;
   12280       return *this;
   12281     }
   12282 
   12283     HdrMetadataEXT& setMaxContentLightLevel( float maxContentLightLevel_ )
   12284     {
   12285       maxContentLightLevel = maxContentLightLevel_;
   12286       return *this;
   12287     }
   12288 
   12289     HdrMetadataEXT& setMaxFrameAverageLightLevel( float maxFrameAverageLightLevel_ )
   12290     {
   12291       maxFrameAverageLightLevel = maxFrameAverageLightLevel_;
   12292       return *this;
   12293     }
   12294 
   12295     operator const VkHdrMetadataEXT&() const
   12296     {
   12297       return *reinterpret_cast<const VkHdrMetadataEXT*>(this);
   12298     }
   12299 
   12300     bool operator==( HdrMetadataEXT const& rhs ) const
   12301     {
   12302       return ( sType == rhs.sType )
   12303           && ( pNext == rhs.pNext )
   12304           && ( displayPrimaryRed == rhs.displayPrimaryRed )
   12305           && ( displayPrimaryGreen == rhs.displayPrimaryGreen )
   12306           && ( displayPrimaryBlue == rhs.displayPrimaryBlue )
   12307           && ( whitePoint == rhs.whitePoint )
   12308           && ( maxLuminance == rhs.maxLuminance )
   12309           && ( minLuminance == rhs.minLuminance )
   12310           && ( maxContentLightLevel == rhs.maxContentLightLevel )
   12311           && ( maxFrameAverageLightLevel == rhs.maxFrameAverageLightLevel );
   12312     }
   12313 
   12314     bool operator!=( HdrMetadataEXT const& rhs ) const
   12315     {
   12316       return !operator==( rhs );
   12317     }
   12318 
   12319   private:
   12320     StructureType sType = StructureType::eHdrMetadataEXT;
   12321 
   12322   public:
   12323     const void* pNext = nullptr;
   12324     XYColorEXT displayPrimaryRed;
   12325     XYColorEXT displayPrimaryGreen;
   12326     XYColorEXT displayPrimaryBlue;
   12327     XYColorEXT whitePoint;
   12328     float maxLuminance;
   12329     float minLuminance;
   12330     float maxContentLightLevel;
   12331     float maxFrameAverageLightLevel;
   12332   };
   12333   static_assert( sizeof( HdrMetadataEXT ) == sizeof( VkHdrMetadataEXT ), "struct and wrapper have different size!" );
   12334 
   12335   struct PresentTimesInfoGOOGLE
   12336   {
   12337     PresentTimesInfoGOOGLE( uint32_t swapchainCount_ = 0, const PresentTimeGOOGLE* pTimes_ = nullptr )
   12338       : swapchainCount( swapchainCount_ )
   12339       , pTimes( pTimes_ )
   12340     {
   12341     }
   12342 
   12343     PresentTimesInfoGOOGLE( VkPresentTimesInfoGOOGLE const & rhs )
   12344     {
   12345       memcpy( this, &rhs, sizeof( PresentTimesInfoGOOGLE ) );
   12346     }
   12347 
   12348     PresentTimesInfoGOOGLE& operator=( VkPresentTimesInfoGOOGLE const & rhs )
   12349     {
   12350       memcpy( this, &rhs, sizeof( PresentTimesInfoGOOGLE ) );
   12351       return *this;
   12352     }
   12353     PresentTimesInfoGOOGLE& setPNext( const void* pNext_ )
   12354     {
   12355       pNext = pNext_;
   12356       return *this;
   12357     }
   12358 
   12359     PresentTimesInfoGOOGLE& setSwapchainCount( uint32_t swapchainCount_ )
   12360     {
   12361       swapchainCount = swapchainCount_;
   12362       return *this;
   12363     }
   12364 
   12365     PresentTimesInfoGOOGLE& setPTimes( const PresentTimeGOOGLE* pTimes_ )
   12366     {
   12367       pTimes = pTimes_;
   12368       return *this;
   12369     }
   12370 
   12371     operator const VkPresentTimesInfoGOOGLE&() const
   12372     {
   12373       return *reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(this);
   12374     }
   12375 
   12376     bool operator==( PresentTimesInfoGOOGLE const& rhs ) const
   12377     {
   12378       return ( sType == rhs.sType )
   12379           && ( pNext == rhs.pNext )
   12380           && ( swapchainCount == rhs.swapchainCount )
   12381           && ( pTimes == rhs.pTimes );
   12382     }
   12383 
   12384     bool operator!=( PresentTimesInfoGOOGLE const& rhs ) const
   12385     {
   12386       return !operator==( rhs );
   12387     }
   12388 
   12389   private:
   12390     StructureType sType = StructureType::ePresentTimesInfoGOOGLE;
   12391 
   12392   public:
   12393     const void* pNext = nullptr;
   12394     uint32_t swapchainCount;
   12395     const PresentTimeGOOGLE* pTimes;
   12396   };
   12397   static_assert( sizeof( PresentTimesInfoGOOGLE ) == sizeof( VkPresentTimesInfoGOOGLE ), "struct and wrapper have different size!" );
   12398 
   12399 #ifdef VK_USE_PLATFORM_IOS_MVK
   12400   struct IOSSurfaceCreateInfoMVK
   12401   {
   12402     IOSSurfaceCreateInfoMVK( IOSSurfaceCreateFlagsMVK flags_ = IOSSurfaceCreateFlagsMVK(), const void* pView_ = nullptr )
   12403       : flags( flags_ )
   12404       , pView( pView_ )
   12405     {
   12406     }
   12407 
   12408     IOSSurfaceCreateInfoMVK( VkIOSSurfaceCreateInfoMVK const & rhs )
   12409     {
   12410       memcpy( this, &rhs, sizeof( IOSSurfaceCreateInfoMVK ) );
   12411     }
   12412 
   12413     IOSSurfaceCreateInfoMVK& operator=( VkIOSSurfaceCreateInfoMVK const & rhs )
   12414     {
   12415       memcpy( this, &rhs, sizeof( IOSSurfaceCreateInfoMVK ) );
   12416       return *this;
   12417     }
   12418     IOSSurfaceCreateInfoMVK& setPNext( const void* pNext_ )
   12419     {
   12420       pNext = pNext_;
   12421       return *this;
   12422     }
   12423 
   12424     IOSSurfaceCreateInfoMVK& setFlags( IOSSurfaceCreateFlagsMVK flags_ )
   12425     {
   12426       flags = flags_;
   12427       return *this;
   12428     }
   12429 
   12430     IOSSurfaceCreateInfoMVK& setPView( const void* pView_ )
   12431     {
   12432       pView = pView_;
   12433       return *this;
   12434     }
   12435 
   12436     operator const VkIOSSurfaceCreateInfoMVK&() const
   12437     {
   12438       return *reinterpret_cast<const VkIOSSurfaceCreateInfoMVK*>(this);
   12439     }
   12440 
   12441     bool operator==( IOSSurfaceCreateInfoMVK const& rhs ) const
   12442     {
   12443       return ( sType == rhs.sType )
   12444           && ( pNext == rhs.pNext )
   12445           && ( flags == rhs.flags )
   12446           && ( pView == rhs.pView );
   12447     }
   12448 
   12449     bool operator!=( IOSSurfaceCreateInfoMVK const& rhs ) const
   12450     {
   12451       return !operator==( rhs );
   12452     }
   12453 
   12454   private:
   12455     StructureType sType = StructureType::eIosSurfaceCreateInfoMVK;
   12456 
   12457   public:
   12458     const void* pNext = nullptr;
   12459     IOSSurfaceCreateFlagsMVK flags;
   12460     const void* pView;
   12461   };
   12462   static_assert( sizeof( IOSSurfaceCreateInfoMVK ) == sizeof( VkIOSSurfaceCreateInfoMVK ), "struct and wrapper have different size!" );
   12463 #endif /*VK_USE_PLATFORM_IOS_MVK*/
   12464 
   12465 #ifdef VK_USE_PLATFORM_MACOS_MVK
   12466   struct MacOSSurfaceCreateInfoMVK
   12467   {
   12468     MacOSSurfaceCreateInfoMVK( MacOSSurfaceCreateFlagsMVK flags_ = MacOSSurfaceCreateFlagsMVK(), const void* pView_ = nullptr )
   12469       : flags( flags_ )
   12470       , pView( pView_ )
   12471     {
   12472     }
   12473 
   12474     MacOSSurfaceCreateInfoMVK( VkMacOSSurfaceCreateInfoMVK const & rhs )
   12475     {
   12476       memcpy( this, &rhs, sizeof( MacOSSurfaceCreateInfoMVK ) );
   12477     }
   12478 
   12479     MacOSSurfaceCreateInfoMVK& operator=( VkMacOSSurfaceCreateInfoMVK const & rhs )
   12480     {
   12481       memcpy( this, &rhs, sizeof( MacOSSurfaceCreateInfoMVK ) );
   12482       return *this;
   12483     }
   12484     MacOSSurfaceCreateInfoMVK& setPNext( const void* pNext_ )
   12485     {
   12486       pNext = pNext_;
   12487       return *this;
   12488     }
   12489 
   12490     MacOSSurfaceCreateInfoMVK& setFlags( MacOSSurfaceCreateFlagsMVK flags_ )
   12491     {
   12492       flags = flags_;
   12493       return *this;
   12494     }
   12495 
   12496     MacOSSurfaceCreateInfoMVK& setPView( const void* pView_ )
   12497     {
   12498       pView = pView_;
   12499       return *this;
   12500     }
   12501 
   12502     operator const VkMacOSSurfaceCreateInfoMVK&() const
   12503     {
   12504       return *reinterpret_cast<const VkMacOSSurfaceCreateInfoMVK*>(this);
   12505     }
   12506 
   12507     bool operator==( MacOSSurfaceCreateInfoMVK const& rhs ) const
   12508     {
   12509       return ( sType == rhs.sType )
   12510           && ( pNext == rhs.pNext )
   12511           && ( flags == rhs.flags )
   12512           && ( pView == rhs.pView );
   12513     }
   12514 
   12515     bool operator!=( MacOSSurfaceCreateInfoMVK const& rhs ) const
   12516     {
   12517       return !operator==( rhs );
   12518     }
   12519 
   12520   private:
   12521     StructureType sType = StructureType::eMacosSurfaceCreateInfoMVK;
   12522 
   12523   public:
   12524     const void* pNext = nullptr;
   12525     MacOSSurfaceCreateFlagsMVK flags;
   12526     const void* pView;
   12527   };
   12528   static_assert( sizeof( MacOSSurfaceCreateInfoMVK ) == sizeof( VkMacOSSurfaceCreateInfoMVK ), "struct and wrapper have different size!" );
   12529 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
   12530 
   12531   struct PipelineViewportWScalingStateCreateInfoNV
   12532   {
   12533     PipelineViewportWScalingStateCreateInfoNV( Bool32 viewportWScalingEnable_ = 0, uint32_t viewportCount_ = 0, const ViewportWScalingNV* pViewportWScalings_ = nullptr )
   12534       : viewportWScalingEnable( viewportWScalingEnable_ )
   12535       , viewportCount( viewportCount_ )
   12536       , pViewportWScalings( pViewportWScalings_ )
   12537     {
   12538     }
   12539 
   12540     PipelineViewportWScalingStateCreateInfoNV( VkPipelineViewportWScalingStateCreateInfoNV const & rhs )
   12541     {
   12542       memcpy( this, &rhs, sizeof( PipelineViewportWScalingStateCreateInfoNV ) );
   12543     }
   12544 
   12545     PipelineViewportWScalingStateCreateInfoNV& operator=( VkPipelineViewportWScalingStateCreateInfoNV const & rhs )
   12546     {
   12547       memcpy( this, &rhs, sizeof( PipelineViewportWScalingStateCreateInfoNV ) );
   12548       return *this;
   12549     }
   12550     PipelineViewportWScalingStateCreateInfoNV& setPNext( const void* pNext_ )
   12551     {
   12552       pNext = pNext_;
   12553       return *this;
   12554     }
   12555 
   12556     PipelineViewportWScalingStateCreateInfoNV& setViewportWScalingEnable( Bool32 viewportWScalingEnable_ )
   12557     {
   12558       viewportWScalingEnable = viewportWScalingEnable_;
   12559       return *this;
   12560     }
   12561 
   12562     PipelineViewportWScalingStateCreateInfoNV& setViewportCount( uint32_t viewportCount_ )
   12563     {
   12564       viewportCount = viewportCount_;
   12565       return *this;
   12566     }
   12567 
   12568     PipelineViewportWScalingStateCreateInfoNV& setPViewportWScalings( const ViewportWScalingNV* pViewportWScalings_ )
   12569     {
   12570       pViewportWScalings = pViewportWScalings_;
   12571       return *this;
   12572     }
   12573 
   12574     operator const VkPipelineViewportWScalingStateCreateInfoNV&() const
   12575     {
   12576       return *reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(this);
   12577     }
   12578 
   12579     bool operator==( PipelineViewportWScalingStateCreateInfoNV const& rhs ) const
   12580     {
   12581       return ( sType == rhs.sType )
   12582           && ( pNext == rhs.pNext )
   12583           && ( viewportWScalingEnable == rhs.viewportWScalingEnable )
   12584           && ( viewportCount == rhs.viewportCount )
   12585           && ( pViewportWScalings == rhs.pViewportWScalings );
   12586     }
   12587 
   12588     bool operator!=( PipelineViewportWScalingStateCreateInfoNV const& rhs ) const
   12589     {
   12590       return !operator==( rhs );
   12591     }
   12592 
   12593   private:
   12594     StructureType sType = StructureType::ePipelineViewportWScalingStateCreateInfoNV;
   12595 
   12596   public:
   12597     const void* pNext = nullptr;
   12598     Bool32 viewportWScalingEnable;
   12599     uint32_t viewportCount;
   12600     const ViewportWScalingNV* pViewportWScalings;
   12601   };
   12602   static_assert( sizeof( PipelineViewportWScalingStateCreateInfoNV ) == sizeof( VkPipelineViewportWScalingStateCreateInfoNV ), "struct and wrapper have different size!" );
   12603 
   12604   struct PhysicalDeviceDiscardRectanglePropertiesEXT
   12605   {
   12606     PhysicalDeviceDiscardRectanglePropertiesEXT( uint32_t maxDiscardRectangles_ = 0 )
   12607       : maxDiscardRectangles( maxDiscardRectangles_ )
   12608     {
   12609     }
   12610 
   12611     PhysicalDeviceDiscardRectanglePropertiesEXT( VkPhysicalDeviceDiscardRectanglePropertiesEXT const & rhs )
   12612     {
   12613       memcpy( this, &rhs, sizeof( PhysicalDeviceDiscardRectanglePropertiesEXT ) );
   12614     }
   12615 
   12616     PhysicalDeviceDiscardRectanglePropertiesEXT& operator=( VkPhysicalDeviceDiscardRectanglePropertiesEXT const & rhs )
   12617     {
   12618       memcpy( this, &rhs, sizeof( PhysicalDeviceDiscardRectanglePropertiesEXT ) );
   12619       return *this;
   12620     }
   12621     PhysicalDeviceDiscardRectanglePropertiesEXT& setPNext( void* pNext_ )
   12622     {
   12623       pNext = pNext_;
   12624       return *this;
   12625     }
   12626 
   12627     PhysicalDeviceDiscardRectanglePropertiesEXT& setMaxDiscardRectangles( uint32_t maxDiscardRectangles_ )
   12628     {
   12629       maxDiscardRectangles = maxDiscardRectangles_;
   12630       return *this;
   12631     }
   12632 
   12633     operator const VkPhysicalDeviceDiscardRectanglePropertiesEXT&() const
   12634     {
   12635       return *reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(this);
   12636     }
   12637 
   12638     bool operator==( PhysicalDeviceDiscardRectanglePropertiesEXT const& rhs ) const
   12639     {
   12640       return ( sType == rhs.sType )
   12641           && ( pNext == rhs.pNext )
   12642           && ( maxDiscardRectangles == rhs.maxDiscardRectangles );
   12643     }
   12644 
   12645     bool operator!=( PhysicalDeviceDiscardRectanglePropertiesEXT const& rhs ) const
   12646     {
   12647       return !operator==( rhs );
   12648     }
   12649 
   12650   private:
   12651     StructureType sType = StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT;
   12652 
   12653   public:
   12654     void* pNext = nullptr;
   12655     uint32_t maxDiscardRectangles;
   12656   };
   12657   static_assert( sizeof( PhysicalDeviceDiscardRectanglePropertiesEXT ) == sizeof( VkPhysicalDeviceDiscardRectanglePropertiesEXT ), "struct and wrapper have different size!" );
   12658 
   12659   struct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
   12660   {
   12661     operator const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX&() const
   12662     {
   12663       return *reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(this);
   12664     }
   12665 
   12666     bool operator==( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const& rhs ) const
   12667     {
   12668       return ( sType == rhs.sType )
   12669           && ( pNext == rhs.pNext )
   12670           && ( perViewPositionAllComponents == rhs.perViewPositionAllComponents );
   12671     }
   12672 
   12673     bool operator!=( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const& rhs ) const
   12674     {
   12675       return !operator==( rhs );
   12676     }
   12677 
   12678   private:
   12679     StructureType sType = StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
   12680 
   12681   public:
   12682     void* pNext = nullptr;
   12683     Bool32 perViewPositionAllComponents;
   12684   };
   12685   static_assert( sizeof( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX ) == sizeof( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX ), "struct and wrapper have different size!" );
   12686 
   12687   struct PhysicalDeviceSurfaceInfo2KHR
   12688   {
   12689     PhysicalDeviceSurfaceInfo2KHR( SurfaceKHR surface_ = SurfaceKHR() )
   12690       : surface( surface_ )
   12691     {
   12692     }
   12693 
   12694     PhysicalDeviceSurfaceInfo2KHR( VkPhysicalDeviceSurfaceInfo2KHR const & rhs )
   12695     {
   12696       memcpy( this, &rhs, sizeof( PhysicalDeviceSurfaceInfo2KHR ) );
   12697     }
   12698 
   12699     PhysicalDeviceSurfaceInfo2KHR& operator=( VkPhysicalDeviceSurfaceInfo2KHR const & rhs )
   12700     {
   12701       memcpy( this, &rhs, sizeof( PhysicalDeviceSurfaceInfo2KHR ) );
   12702       return *this;
   12703     }
   12704     PhysicalDeviceSurfaceInfo2KHR& setPNext( const void* pNext_ )
   12705     {
   12706       pNext = pNext_;
   12707       return *this;
   12708     }
   12709 
   12710     PhysicalDeviceSurfaceInfo2KHR& setSurface( SurfaceKHR surface_ )
   12711     {
   12712       surface = surface_;
   12713       return *this;
   12714     }
   12715 
   12716     operator const VkPhysicalDeviceSurfaceInfo2KHR&() const
   12717     {
   12718       return *reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR*>(this);
   12719     }
   12720 
   12721     bool operator==( PhysicalDeviceSurfaceInfo2KHR const& rhs ) const
   12722     {
   12723       return ( sType == rhs.sType )
   12724           && ( pNext == rhs.pNext )
   12725           && ( surface == rhs.surface );
   12726     }
   12727 
   12728     bool operator!=( PhysicalDeviceSurfaceInfo2KHR const& rhs ) const
   12729     {
   12730       return !operator==( rhs );
   12731     }
   12732 
   12733   private:
   12734     StructureType sType = StructureType::ePhysicalDeviceSurfaceInfo2KHR;
   12735 
   12736   public:
   12737     const void* pNext = nullptr;
   12738     SurfaceKHR surface;
   12739   };
   12740   static_assert( sizeof( PhysicalDeviceSurfaceInfo2KHR ) == sizeof( VkPhysicalDeviceSurfaceInfo2KHR ), "struct and wrapper have different size!" );
   12741 
   12742   struct PhysicalDevice16BitStorageFeaturesKHR
   12743   {
   12744     PhysicalDevice16BitStorageFeaturesKHR( Bool32 storageBuffer16BitAccess_ = 0, Bool32 uniformAndStorageBuffer16BitAccess_ = 0, Bool32 storagePushConstant16_ = 0, Bool32 storageInputOutput16_ = 0 )
   12745       : storageBuffer16BitAccess( storageBuffer16BitAccess_ )
   12746       , uniformAndStorageBuffer16BitAccess( uniformAndStorageBuffer16BitAccess_ )
   12747       , storagePushConstant16( storagePushConstant16_ )
   12748       , storageInputOutput16( storageInputOutput16_ )
   12749     {
   12750     }
   12751 
   12752     PhysicalDevice16BitStorageFeaturesKHR( VkPhysicalDevice16BitStorageFeaturesKHR const & rhs )
   12753     {
   12754       memcpy( this, &rhs, sizeof( PhysicalDevice16BitStorageFeaturesKHR ) );
   12755     }
   12756 
   12757     PhysicalDevice16BitStorageFeaturesKHR& operator=( VkPhysicalDevice16BitStorageFeaturesKHR const & rhs )
   12758     {
   12759       memcpy( this, &rhs, sizeof( PhysicalDevice16BitStorageFeaturesKHR ) );
   12760       return *this;
   12761     }
   12762     PhysicalDevice16BitStorageFeaturesKHR& setPNext( void* pNext_ )
   12763     {
   12764       pNext = pNext_;
   12765       return *this;
   12766     }
   12767 
   12768     PhysicalDevice16BitStorageFeaturesKHR& setStorageBuffer16BitAccess( Bool32 storageBuffer16BitAccess_ )
   12769     {
   12770       storageBuffer16BitAccess = storageBuffer16BitAccess_;
   12771       return *this;
   12772     }
   12773 
   12774     PhysicalDevice16BitStorageFeaturesKHR& setUniformAndStorageBuffer16BitAccess( Bool32 uniformAndStorageBuffer16BitAccess_ )
   12775     {
   12776       uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess_;
   12777       return *this;
   12778     }
   12779 
   12780     PhysicalDevice16BitStorageFeaturesKHR& setStoragePushConstant16( Bool32 storagePushConstant16_ )
   12781     {
   12782       storagePushConstant16 = storagePushConstant16_;
   12783       return *this;
   12784     }
   12785 
   12786     PhysicalDevice16BitStorageFeaturesKHR& setStorageInputOutput16( Bool32 storageInputOutput16_ )
   12787     {
   12788       storageInputOutput16 = storageInputOutput16_;
   12789       return *this;
   12790     }
   12791 
   12792     operator const VkPhysicalDevice16BitStorageFeaturesKHR&() const
   12793     {
   12794       return *reinterpret_cast<const VkPhysicalDevice16BitStorageFeaturesKHR*>(this);
   12795     }
   12796 
   12797     bool operator==( PhysicalDevice16BitStorageFeaturesKHR const& rhs ) const
   12798     {
   12799       return ( sType == rhs.sType )
   12800           && ( pNext == rhs.pNext )
   12801           && ( storageBuffer16BitAccess == rhs.storageBuffer16BitAccess )
   12802           && ( uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess )
   12803           && ( storagePushConstant16 == rhs.storagePushConstant16 )
   12804           && ( storageInputOutput16 == rhs.storageInputOutput16 );
   12805     }
   12806 
   12807     bool operator!=( PhysicalDevice16BitStorageFeaturesKHR const& rhs ) const
   12808     {
   12809       return !operator==( rhs );
   12810     }
   12811 
   12812   private:
   12813     StructureType sType = StructureType::ePhysicalDevice16BitStorageFeaturesKHR;
   12814 
   12815   public:
   12816     void* pNext = nullptr;
   12817     Bool32 storageBuffer16BitAccess;
   12818     Bool32 uniformAndStorageBuffer16BitAccess;
   12819     Bool32 storagePushConstant16;
   12820     Bool32 storageInputOutput16;
   12821   };
   12822   static_assert( sizeof( PhysicalDevice16BitStorageFeaturesKHR ) == sizeof( VkPhysicalDevice16BitStorageFeaturesKHR ), "struct and wrapper have different size!" );
   12823 
   12824   struct BufferMemoryRequirementsInfo2KHR
   12825   {
   12826     BufferMemoryRequirementsInfo2KHR( Buffer buffer_ = Buffer() )
   12827       : buffer( buffer_ )
   12828     {
   12829     }
   12830 
   12831     BufferMemoryRequirementsInfo2KHR( VkBufferMemoryRequirementsInfo2KHR const & rhs )
   12832     {
   12833       memcpy( this, &rhs, sizeof( BufferMemoryRequirementsInfo2KHR ) );
   12834     }
   12835 
   12836     BufferMemoryRequirementsInfo2KHR& operator=( VkBufferMemoryRequirementsInfo2KHR const & rhs )
   12837     {
   12838       memcpy( this, &rhs, sizeof( BufferMemoryRequirementsInfo2KHR ) );
   12839       return *this;
   12840     }
   12841     BufferMemoryRequirementsInfo2KHR& setPNext( const void* pNext_ )
   12842     {
   12843       pNext = pNext_;
   12844       return *this;
   12845     }
   12846 
   12847     BufferMemoryRequirementsInfo2KHR& setBuffer( Buffer buffer_ )
   12848     {
   12849       buffer = buffer_;
   12850       return *this;
   12851     }
   12852 
   12853     operator const VkBufferMemoryRequirementsInfo2KHR&() const
   12854     {
   12855       return *reinterpret_cast<const VkBufferMemoryRequirementsInfo2KHR*>(this);
   12856     }
   12857 
   12858     bool operator==( BufferMemoryRequirementsInfo2KHR const& rhs ) const
   12859     {
   12860       return ( sType == rhs.sType )
   12861           && ( pNext == rhs.pNext )
   12862           && ( buffer == rhs.buffer );
   12863     }
   12864 
   12865     bool operator!=( BufferMemoryRequirementsInfo2KHR const& rhs ) const
   12866     {
   12867       return !operator==( rhs );
   12868     }
   12869 
   12870   private:
   12871     StructureType sType = StructureType::eBufferMemoryRequirementsInfo2KHR;
   12872 
   12873   public:
   12874     const void* pNext = nullptr;
   12875     Buffer buffer;
   12876   };
   12877   static_assert( sizeof( BufferMemoryRequirementsInfo2KHR ) == sizeof( VkBufferMemoryRequirementsInfo2KHR ), "struct and wrapper have different size!" );
   12878 
   12879   struct ImageMemoryRequirementsInfo2KHR
   12880   {
   12881     ImageMemoryRequirementsInfo2KHR( Image image_ = Image() )
   12882       : image( image_ )
   12883     {
   12884     }
   12885 
   12886     ImageMemoryRequirementsInfo2KHR( VkImageMemoryRequirementsInfo2KHR const & rhs )
   12887     {
   12888       memcpy( this, &rhs, sizeof( ImageMemoryRequirementsInfo2KHR ) );
   12889     }
   12890 
   12891     ImageMemoryRequirementsInfo2KHR& operator=( VkImageMemoryRequirementsInfo2KHR const & rhs )
   12892     {
   12893       memcpy( this, &rhs, sizeof( ImageMemoryRequirementsInfo2KHR ) );
   12894       return *this;
   12895     }
   12896     ImageMemoryRequirementsInfo2KHR& setPNext( const void* pNext_ )
   12897     {
   12898       pNext = pNext_;
   12899       return *this;
   12900     }
   12901 
   12902     ImageMemoryRequirementsInfo2KHR& setImage( Image image_ )
   12903     {
   12904       image = image_;
   12905       return *this;
   12906     }
   12907 
   12908     operator const VkImageMemoryRequirementsInfo2KHR&() const
   12909     {
   12910       return *reinterpret_cast<const VkImageMemoryRequirementsInfo2KHR*>(this);
   12911     }
   12912 
   12913     bool operator==( ImageMemoryRequirementsInfo2KHR const& rhs ) const
   12914     {
   12915       return ( sType == rhs.sType )
   12916           && ( pNext == rhs.pNext )
   12917           && ( image == rhs.image );
   12918     }
   12919 
   12920     bool operator!=( ImageMemoryRequirementsInfo2KHR const& rhs ) const
   12921     {
   12922       return !operator==( rhs );
   12923     }
   12924 
   12925   private:
   12926     StructureType sType = StructureType::eImageMemoryRequirementsInfo2KHR;
   12927 
   12928   public:
   12929     const void* pNext = nullptr;
   12930     Image image;
   12931   };
   12932   static_assert( sizeof( ImageMemoryRequirementsInfo2KHR ) == sizeof( VkImageMemoryRequirementsInfo2KHR ), "struct and wrapper have different size!" );
   12933 
   12934   struct ImageSparseMemoryRequirementsInfo2KHR
   12935   {
   12936     ImageSparseMemoryRequirementsInfo2KHR( Image image_ = Image() )
   12937       : image( image_ )
   12938     {
   12939     }
   12940 
   12941     ImageSparseMemoryRequirementsInfo2KHR( VkImageSparseMemoryRequirementsInfo2KHR const & rhs )
   12942     {
   12943       memcpy( this, &rhs, sizeof( ImageSparseMemoryRequirementsInfo2KHR ) );
   12944     }
   12945 
   12946     ImageSparseMemoryRequirementsInfo2KHR& operator=( VkImageSparseMemoryRequirementsInfo2KHR const & rhs )
   12947     {
   12948       memcpy( this, &rhs, sizeof( ImageSparseMemoryRequirementsInfo2KHR ) );
   12949       return *this;
   12950     }
   12951     ImageSparseMemoryRequirementsInfo2KHR& setPNext( const void* pNext_ )
   12952     {
   12953       pNext = pNext_;
   12954       return *this;
   12955     }
   12956 
   12957     ImageSparseMemoryRequirementsInfo2KHR& setImage( Image image_ )
   12958     {
   12959       image = image_;
   12960       return *this;
   12961     }
   12962 
   12963     operator const VkImageSparseMemoryRequirementsInfo2KHR&() const
   12964     {
   12965       return *reinterpret_cast<const VkImageSparseMemoryRequirementsInfo2KHR*>(this);
   12966     }
   12967 
   12968     bool operator==( ImageSparseMemoryRequirementsInfo2KHR const& rhs ) const
   12969     {
   12970       return ( sType == rhs.sType )
   12971           && ( pNext == rhs.pNext )
   12972           && ( image == rhs.image );
   12973     }
   12974 
   12975     bool operator!=( ImageSparseMemoryRequirementsInfo2KHR const& rhs ) const
   12976     {
   12977       return !operator==( rhs );
   12978     }
   12979 
   12980   private:
   12981     StructureType sType = StructureType::eImageSparseMemoryRequirementsInfo2KHR;
   12982 
   12983   public:
   12984     const void* pNext = nullptr;
   12985     Image image;
   12986   };
   12987   static_assert( sizeof( ImageSparseMemoryRequirementsInfo2KHR ) == sizeof( VkImageSparseMemoryRequirementsInfo2KHR ), "struct and wrapper have different size!" );
   12988 
   12989   struct MemoryRequirements2KHR
   12990   {
   12991     operator const VkMemoryRequirements2KHR&() const
   12992     {
   12993       return *reinterpret_cast<const VkMemoryRequirements2KHR*>(this);
   12994     }
   12995 
   12996     bool operator==( MemoryRequirements2KHR const& rhs ) const
   12997     {
   12998       return ( sType == rhs.sType )
   12999           && ( pNext == rhs.pNext )
   13000           && ( memoryRequirements == rhs.memoryRequirements );
   13001     }
   13002 
   13003     bool operator!=( MemoryRequirements2KHR const& rhs ) const
   13004     {
   13005       return !operator==( rhs );
   13006     }
   13007 
   13008   private:
   13009     StructureType sType = StructureType::eMemoryRequirements2KHR;
   13010 
   13011   public:
   13012     void* pNext = nullptr;
   13013     MemoryRequirements memoryRequirements;
   13014   };
   13015   static_assert( sizeof( MemoryRequirements2KHR ) == sizeof( VkMemoryRequirements2KHR ), "struct and wrapper have different size!" );
   13016 
   13017   struct MemoryDedicatedRequirementsKHR
   13018   {
   13019     operator const VkMemoryDedicatedRequirementsKHR&() const
   13020     {
   13021       return *reinterpret_cast<const VkMemoryDedicatedRequirementsKHR*>(this);
   13022     }
   13023 
   13024     bool operator==( MemoryDedicatedRequirementsKHR const& rhs ) const
   13025     {
   13026       return ( sType == rhs.sType )
   13027           && ( pNext == rhs.pNext )
   13028           && ( prefersDedicatedAllocation == rhs.prefersDedicatedAllocation )
   13029           && ( requiresDedicatedAllocation == rhs.requiresDedicatedAllocation );
   13030     }
   13031 
   13032     bool operator!=( MemoryDedicatedRequirementsKHR const& rhs ) const
   13033     {
   13034       return !operator==( rhs );
   13035     }
   13036 
   13037   private:
   13038     StructureType sType = StructureType::eMemoryDedicatedRequirementsKHR;
   13039 
   13040   public:
   13041     void* pNext = nullptr;
   13042     Bool32 prefersDedicatedAllocation;
   13043     Bool32 requiresDedicatedAllocation;
   13044   };
   13045   static_assert( sizeof( MemoryDedicatedRequirementsKHR ) == sizeof( VkMemoryDedicatedRequirementsKHR ), "struct and wrapper have different size!" );
   13046 
   13047   struct MemoryDedicatedAllocateInfoKHR
   13048   {
   13049     MemoryDedicatedAllocateInfoKHR( Image image_ = Image(), Buffer buffer_ = Buffer() )
   13050       : image( image_ )
   13051       , buffer( buffer_ )
   13052     {
   13053     }
   13054 
   13055     MemoryDedicatedAllocateInfoKHR( VkMemoryDedicatedAllocateInfoKHR const & rhs )
   13056     {
   13057       memcpy( this, &rhs, sizeof( MemoryDedicatedAllocateInfoKHR ) );
   13058     }
   13059 
   13060     MemoryDedicatedAllocateInfoKHR& operator=( VkMemoryDedicatedAllocateInfoKHR const & rhs )
   13061     {
   13062       memcpy( this, &rhs, sizeof( MemoryDedicatedAllocateInfoKHR ) );
   13063       return *this;
   13064     }
   13065     MemoryDedicatedAllocateInfoKHR& setPNext( const void* pNext_ )
   13066     {
   13067       pNext = pNext_;
   13068       return *this;
   13069     }
   13070 
   13071     MemoryDedicatedAllocateInfoKHR& setImage( Image image_ )
   13072     {
   13073       image = image_;
   13074       return *this;
   13075     }
   13076 
   13077     MemoryDedicatedAllocateInfoKHR& setBuffer( Buffer buffer_ )
   13078     {
   13079       buffer = buffer_;
   13080       return *this;
   13081     }
   13082 
   13083     operator const VkMemoryDedicatedAllocateInfoKHR&() const
   13084     {
   13085       return *reinterpret_cast<const VkMemoryDedicatedAllocateInfoKHR*>(this);
   13086     }
   13087 
   13088     bool operator==( MemoryDedicatedAllocateInfoKHR const& rhs ) const
   13089     {
   13090       return ( sType == rhs.sType )
   13091           && ( pNext == rhs.pNext )
   13092           && ( image == rhs.image )
   13093           && ( buffer == rhs.buffer );
   13094     }
   13095 
   13096     bool operator!=( MemoryDedicatedAllocateInfoKHR const& rhs ) const
   13097     {
   13098       return !operator==( rhs );
   13099     }
   13100 
   13101   private:
   13102     StructureType sType = StructureType::eMemoryDedicatedAllocateInfoKHR;
   13103 
   13104   public:
   13105     const void* pNext = nullptr;
   13106     Image image;
   13107     Buffer buffer;
   13108   };
   13109   static_assert( sizeof( MemoryDedicatedAllocateInfoKHR ) == sizeof( VkMemoryDedicatedAllocateInfoKHR ), "struct and wrapper have different size!" );
   13110 
   13111   struct SamplerYcbcrConversionInfoKHR
   13112   {
   13113     SamplerYcbcrConversionInfoKHR( SamplerYcbcrConversionKHR conversion_ = SamplerYcbcrConversionKHR() )
   13114       : conversion( conversion_ )
   13115     {
   13116     }
   13117 
   13118     SamplerYcbcrConversionInfoKHR( VkSamplerYcbcrConversionInfoKHR const & rhs )
   13119     {
   13120       memcpy( this, &rhs, sizeof( SamplerYcbcrConversionInfoKHR ) );
   13121     }
   13122 
   13123     SamplerYcbcrConversionInfoKHR& operator=( VkSamplerYcbcrConversionInfoKHR const & rhs )
   13124     {
   13125       memcpy( this, &rhs, sizeof( SamplerYcbcrConversionInfoKHR ) );
   13126       return *this;
   13127     }
   13128     SamplerYcbcrConversionInfoKHR& setPNext( const void* pNext_ )
   13129     {
   13130       pNext = pNext_;
   13131       return *this;
   13132     }
   13133 
   13134     SamplerYcbcrConversionInfoKHR& setConversion( SamplerYcbcrConversionKHR conversion_ )
   13135     {
   13136       conversion = conversion_;
   13137       return *this;
   13138     }
   13139 
   13140     operator const VkSamplerYcbcrConversionInfoKHR&() const
   13141     {
   13142       return *reinterpret_cast<const VkSamplerYcbcrConversionInfoKHR*>(this);
   13143     }
   13144 
   13145     bool operator==( SamplerYcbcrConversionInfoKHR const& rhs ) const
   13146     {
   13147       return ( sType == rhs.sType )
   13148           && ( pNext == rhs.pNext )
   13149           && ( conversion == rhs.conversion );
   13150     }
   13151 
   13152     bool operator!=( SamplerYcbcrConversionInfoKHR const& rhs ) const
   13153     {
   13154       return !operator==( rhs );
   13155     }
   13156 
   13157   private:
   13158     StructureType sType = StructureType::eSamplerYcbcrConversionInfoKHR;
   13159 
   13160   public:
   13161     const void* pNext = nullptr;
   13162     SamplerYcbcrConversionKHR conversion;
   13163   };
   13164   static_assert( sizeof( SamplerYcbcrConversionInfoKHR ) == sizeof( VkSamplerYcbcrConversionInfoKHR ), "struct and wrapper have different size!" );
   13165 
   13166   struct PhysicalDeviceSamplerYcbcrConversionFeaturesKHR
   13167   {
   13168     PhysicalDeviceSamplerYcbcrConversionFeaturesKHR( Bool32 samplerYcbcrConversion_ = 0 )
   13169       : samplerYcbcrConversion( samplerYcbcrConversion_ )
   13170     {
   13171     }
   13172 
   13173     PhysicalDeviceSamplerYcbcrConversionFeaturesKHR( VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR const & rhs )
   13174     {
   13175       memcpy( this, &rhs, sizeof( PhysicalDeviceSamplerYcbcrConversionFeaturesKHR ) );
   13176     }
   13177 
   13178     PhysicalDeviceSamplerYcbcrConversionFeaturesKHR& operator=( VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR const & rhs )
   13179     {
   13180       memcpy( this, &rhs, sizeof( PhysicalDeviceSamplerYcbcrConversionFeaturesKHR ) );
   13181       return *this;
   13182     }
   13183     PhysicalDeviceSamplerYcbcrConversionFeaturesKHR& setPNext( void* pNext_ )
   13184     {
   13185       pNext = pNext_;
   13186       return *this;
   13187     }
   13188 
   13189     PhysicalDeviceSamplerYcbcrConversionFeaturesKHR& setSamplerYcbcrConversion( Bool32 samplerYcbcrConversion_ )
   13190     {
   13191       samplerYcbcrConversion = samplerYcbcrConversion_;
   13192       return *this;
   13193     }
   13194 
   13195     operator const VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR&() const
   13196     {
   13197       return *reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR*>(this);
   13198     }
   13199 
   13200     bool operator==( PhysicalDeviceSamplerYcbcrConversionFeaturesKHR const& rhs ) const
   13201     {
   13202       return ( sType == rhs.sType )
   13203           && ( pNext == rhs.pNext )
   13204           && ( samplerYcbcrConversion == rhs.samplerYcbcrConversion );
   13205     }
   13206 
   13207     bool operator!=( PhysicalDeviceSamplerYcbcrConversionFeaturesKHR const& rhs ) const
   13208     {
   13209       return !operator==( rhs );
   13210     }
   13211 
   13212   private:
   13213     StructureType sType = StructureType::ePhysicalDeviceSamplerYcbcrConversionFeaturesKHR;
   13214 
   13215   public:
   13216     void* pNext = nullptr;
   13217     Bool32 samplerYcbcrConversion;
   13218   };
   13219   static_assert( sizeof( PhysicalDeviceSamplerYcbcrConversionFeaturesKHR ) == sizeof( VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR ), "struct and wrapper have different size!" );
   13220 
   13221   struct SamplerYcbcrConversionImageFormatPropertiesKHR
   13222   {
   13223     operator const VkSamplerYcbcrConversionImageFormatPropertiesKHR&() const
   13224     {
   13225       return *reinterpret_cast<const VkSamplerYcbcrConversionImageFormatPropertiesKHR*>(this);
   13226     }
   13227 
   13228     bool operator==( SamplerYcbcrConversionImageFormatPropertiesKHR const& rhs ) const
   13229     {
   13230       return ( sType == rhs.sType )
   13231           && ( pNext == rhs.pNext )
   13232           && ( combinedImageSamplerDescriptorCount == rhs.combinedImageSamplerDescriptorCount );
   13233     }
   13234 
   13235     bool operator!=( SamplerYcbcrConversionImageFormatPropertiesKHR const& rhs ) const
   13236     {
   13237       return !operator==( rhs );
   13238     }
   13239 
   13240   private:
   13241     StructureType sType = StructureType::eSamplerYcbcrConversionImageFormatPropertiesKHR;
   13242 
   13243   public:
   13244     void* pNext = nullptr;
   13245     uint32_t combinedImageSamplerDescriptorCount;
   13246   };
   13247   static_assert( sizeof( SamplerYcbcrConversionImageFormatPropertiesKHR ) == sizeof( VkSamplerYcbcrConversionImageFormatPropertiesKHR ), "struct and wrapper have different size!" );
   13248 
   13249   struct TextureLODGatherFormatPropertiesAMD
   13250   {
   13251     operator const VkTextureLODGatherFormatPropertiesAMD&() const
   13252     {
   13253       return *reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(this);
   13254     }
   13255 
   13256     bool operator==( TextureLODGatherFormatPropertiesAMD const& rhs ) const
   13257     {
   13258       return ( sType == rhs.sType )
   13259           && ( pNext == rhs.pNext )
   13260           && ( supportsTextureGatherLODBiasAMD == rhs.supportsTextureGatherLODBiasAMD );
   13261     }
   13262 
   13263     bool operator!=( TextureLODGatherFormatPropertiesAMD const& rhs ) const
   13264     {
   13265       return !operator==( rhs );
   13266     }
   13267 
   13268   private:
   13269     StructureType sType = StructureType::eTextureLodGatherFormatPropertiesAMD;
   13270 
   13271   public:
   13272     void* pNext = nullptr;
   13273     Bool32 supportsTextureGatherLODBiasAMD;
   13274   };
   13275   static_assert( sizeof( TextureLODGatherFormatPropertiesAMD ) == sizeof( VkTextureLODGatherFormatPropertiesAMD ), "struct and wrapper have different size!" );
   13276 
   13277   struct PipelineCoverageToColorStateCreateInfoNV
   13278   {
   13279     PipelineCoverageToColorStateCreateInfoNV( PipelineCoverageToColorStateCreateFlagsNV flags_ = PipelineCoverageToColorStateCreateFlagsNV(), Bool32 coverageToColorEnable_ = 0, uint32_t coverageToColorLocation_ = 0 )
   13280       : flags( flags_ )
   13281       , coverageToColorEnable( coverageToColorEnable_ )
   13282       , coverageToColorLocation( coverageToColorLocation_ )
   13283     {
   13284     }
   13285 
   13286     PipelineCoverageToColorStateCreateInfoNV( VkPipelineCoverageToColorStateCreateInfoNV const & rhs )
   13287     {
   13288       memcpy( this, &rhs, sizeof( PipelineCoverageToColorStateCreateInfoNV ) );
   13289     }
   13290 
   13291     PipelineCoverageToColorStateCreateInfoNV& operator=( VkPipelineCoverageToColorStateCreateInfoNV const & rhs )
   13292     {
   13293       memcpy( this, &rhs, sizeof( PipelineCoverageToColorStateCreateInfoNV ) );
   13294       return *this;
   13295     }
   13296     PipelineCoverageToColorStateCreateInfoNV& setPNext( const void* pNext_ )
   13297     {
   13298       pNext = pNext_;
   13299       return *this;
   13300     }
   13301 
   13302     PipelineCoverageToColorStateCreateInfoNV& setFlags( PipelineCoverageToColorStateCreateFlagsNV flags_ )
   13303     {
   13304       flags = flags_;
   13305       return *this;
   13306     }
   13307 
   13308     PipelineCoverageToColorStateCreateInfoNV& setCoverageToColorEnable( Bool32 coverageToColorEnable_ )
   13309     {
   13310       coverageToColorEnable = coverageToColorEnable_;
   13311       return *this;
   13312     }
   13313 
   13314     PipelineCoverageToColorStateCreateInfoNV& setCoverageToColorLocation( uint32_t coverageToColorLocation_ )
   13315     {
   13316       coverageToColorLocation = coverageToColorLocation_;
   13317       return *this;
   13318     }
   13319 
   13320     operator const VkPipelineCoverageToColorStateCreateInfoNV&() const
   13321     {
   13322       return *reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(this);
   13323     }
   13324 
   13325     bool operator==( PipelineCoverageToColorStateCreateInfoNV const& rhs ) const
   13326     {
   13327       return ( sType == rhs.sType )
   13328           && ( pNext == rhs.pNext )
   13329           && ( flags == rhs.flags )
   13330           && ( coverageToColorEnable == rhs.coverageToColorEnable )
   13331           && ( coverageToColorLocation == rhs.coverageToColorLocation );
   13332     }
   13333 
   13334     bool operator!=( PipelineCoverageToColorStateCreateInfoNV const& rhs ) const
   13335     {
   13336       return !operator==( rhs );
   13337     }
   13338 
   13339   private:
   13340     StructureType sType = StructureType::ePipelineCoverageToColorStateCreateInfoNV;
   13341 
   13342   public:
   13343     const void* pNext = nullptr;
   13344     PipelineCoverageToColorStateCreateFlagsNV flags;
   13345     Bool32 coverageToColorEnable;
   13346     uint32_t coverageToColorLocation;
   13347   };
   13348   static_assert( sizeof( PipelineCoverageToColorStateCreateInfoNV ) == sizeof( VkPipelineCoverageToColorStateCreateInfoNV ), "struct and wrapper have different size!" );
   13349 
   13350   struct PhysicalDeviceSamplerFilterMinmaxPropertiesEXT
   13351   {
   13352     operator const VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT&() const
   13353     {
   13354       return *reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT*>(this);
   13355     }
   13356 
   13357     bool operator==( PhysicalDeviceSamplerFilterMinmaxPropertiesEXT const& rhs ) const
   13358     {
   13359       return ( sType == rhs.sType )
   13360           && ( pNext == rhs.pNext )
   13361           && ( filterMinmaxSingleComponentFormats == rhs.filterMinmaxSingleComponentFormats )
   13362           && ( filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping );
   13363     }
   13364 
   13365     bool operator!=( PhysicalDeviceSamplerFilterMinmaxPropertiesEXT const& rhs ) const
   13366     {
   13367       return !operator==( rhs );
   13368     }
   13369 
   13370   private:
   13371     StructureType sType = StructureType::ePhysicalDeviceSamplerFilterMinmaxPropertiesEXT;
   13372 
   13373   public:
   13374     void* pNext = nullptr;
   13375     Bool32 filterMinmaxSingleComponentFormats;
   13376     Bool32 filterMinmaxImageComponentMapping;
   13377   };
   13378   static_assert( sizeof( PhysicalDeviceSamplerFilterMinmaxPropertiesEXT ) == sizeof( VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT ), "struct and wrapper have different size!" );
   13379 
   13380   struct MultisamplePropertiesEXT
   13381   {
   13382     operator const VkMultisamplePropertiesEXT&() const
   13383     {
   13384       return *reinterpret_cast<const VkMultisamplePropertiesEXT*>(this);
   13385     }
   13386 
   13387     bool operator==( MultisamplePropertiesEXT const& rhs ) const
   13388     {
   13389       return ( sType == rhs.sType )
   13390           && ( pNext == rhs.pNext )
   13391           && ( maxSampleLocationGridSize == rhs.maxSampleLocationGridSize );
   13392     }
   13393 
   13394     bool operator!=( MultisamplePropertiesEXT const& rhs ) const
   13395     {
   13396       return !operator==( rhs );
   13397     }
   13398 
   13399   private:
   13400     StructureType sType = StructureType::eMultisamplePropertiesEXT;
   13401 
   13402   public:
   13403     void* pNext = nullptr;
   13404     Extent2D maxSampleLocationGridSize;
   13405   };
   13406   static_assert( sizeof( MultisamplePropertiesEXT ) == sizeof( VkMultisamplePropertiesEXT ), "struct and wrapper have different size!" );
   13407 
   13408   struct PhysicalDeviceBlendOperationAdvancedFeaturesEXT
   13409   {
   13410     PhysicalDeviceBlendOperationAdvancedFeaturesEXT( Bool32 advancedBlendCoherentOperations_ = 0 )
   13411       : advancedBlendCoherentOperations( advancedBlendCoherentOperations_ )
   13412     {
   13413     }
   13414 
   13415     PhysicalDeviceBlendOperationAdvancedFeaturesEXT( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs )
   13416     {
   13417       memcpy( this, &rhs, sizeof( PhysicalDeviceBlendOperationAdvancedFeaturesEXT ) );
   13418     }
   13419 
   13420     PhysicalDeviceBlendOperationAdvancedFeaturesEXT& operator=( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs )
   13421     {
   13422       memcpy( this, &rhs, sizeof( PhysicalDeviceBlendOperationAdvancedFeaturesEXT ) );
   13423       return *this;
   13424     }
   13425     PhysicalDeviceBlendOperationAdvancedFeaturesEXT& setPNext( void* pNext_ )
   13426     {
   13427       pNext = pNext_;
   13428       return *this;
   13429     }
   13430 
   13431     PhysicalDeviceBlendOperationAdvancedFeaturesEXT& setAdvancedBlendCoherentOperations( Bool32 advancedBlendCoherentOperations_ )
   13432     {
   13433       advancedBlendCoherentOperations = advancedBlendCoherentOperations_;
   13434       return *this;
   13435     }
   13436 
   13437     operator const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&() const
   13438     {
   13439       return *reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(this);
   13440     }
   13441 
   13442     bool operator==( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const& rhs ) const
   13443     {
   13444       return ( sType == rhs.sType )
   13445           && ( pNext == rhs.pNext )
   13446           && ( advancedBlendCoherentOperations == rhs.advancedBlendCoherentOperations );
   13447     }
   13448 
   13449     bool operator!=( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const& rhs ) const
   13450     {
   13451       return !operator==( rhs );
   13452     }
   13453 
   13454   private:
   13455     StructureType sType = StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT;
   13456 
   13457   public:
   13458     void* pNext = nullptr;
   13459     Bool32 advancedBlendCoherentOperations;
   13460   };
   13461   static_assert( sizeof( PhysicalDeviceBlendOperationAdvancedFeaturesEXT ) == sizeof( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT ), "struct and wrapper have different size!" );
   13462 
   13463   struct PhysicalDeviceBlendOperationAdvancedPropertiesEXT
   13464   {
   13465     operator const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT&() const
   13466     {
   13467       return *reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(this);
   13468     }
   13469 
   13470     bool operator==( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const& rhs ) const
   13471     {
   13472       return ( sType == rhs.sType )
   13473           && ( pNext == rhs.pNext )
   13474           && ( advancedBlendMaxColorAttachments == rhs.advancedBlendMaxColorAttachments )
   13475           && ( advancedBlendIndependentBlend == rhs.advancedBlendIndependentBlend )
   13476           && ( advancedBlendNonPremultipliedSrcColor == rhs.advancedBlendNonPremultipliedSrcColor )
   13477           && ( advancedBlendNonPremultipliedDstColor == rhs.advancedBlendNonPremultipliedDstColor )
   13478           && ( advancedBlendCorrelatedOverlap == rhs.advancedBlendCorrelatedOverlap )
   13479           && ( advancedBlendAllOperations == rhs.advancedBlendAllOperations );
   13480     }
   13481 
   13482     bool operator!=( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const& rhs ) const
   13483     {
   13484       return !operator==( rhs );
   13485     }
   13486 
   13487   private:
   13488     StructureType sType = StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT;
   13489 
   13490   public:
   13491     void* pNext = nullptr;
   13492     uint32_t advancedBlendMaxColorAttachments;
   13493     Bool32 advancedBlendIndependentBlend;
   13494     Bool32 advancedBlendNonPremultipliedSrcColor;
   13495     Bool32 advancedBlendNonPremultipliedDstColor;
   13496     Bool32 advancedBlendCorrelatedOverlap;
   13497     Bool32 advancedBlendAllOperations;
   13498   };
   13499   static_assert( sizeof( PhysicalDeviceBlendOperationAdvancedPropertiesEXT ) == sizeof( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT ), "struct and wrapper have different size!" );
   13500 
   13501   struct ImageFormatListCreateInfoKHR
   13502   {
   13503     ImageFormatListCreateInfoKHR( uint32_t viewFormatCount_ = 0, const Format* pViewFormats_ = nullptr )
   13504       : viewFormatCount( viewFormatCount_ )
   13505       , pViewFormats( pViewFormats_ )
   13506     {
   13507     }
   13508 
   13509     ImageFormatListCreateInfoKHR( VkImageFormatListCreateInfoKHR const & rhs )
   13510     {
   13511       memcpy( this, &rhs, sizeof( ImageFormatListCreateInfoKHR ) );
   13512     }
   13513 
   13514     ImageFormatListCreateInfoKHR& operator=( VkImageFormatListCreateInfoKHR const & rhs )
   13515     {
   13516       memcpy( this, &rhs, sizeof( ImageFormatListCreateInfoKHR ) );
   13517       return *this;
   13518     }
   13519     ImageFormatListCreateInfoKHR& setPNext( const void* pNext_ )
   13520     {
   13521       pNext = pNext_;
   13522       return *this;
   13523     }
   13524 
   13525     ImageFormatListCreateInfoKHR& setViewFormatCount( uint32_t viewFormatCount_ )
   13526     {
   13527       viewFormatCount = viewFormatCount_;
   13528       return *this;
   13529     }
   13530 
   13531     ImageFormatListCreateInfoKHR& setPViewFormats( const Format* pViewFormats_ )
   13532     {
   13533       pViewFormats = pViewFormats_;
   13534       return *this;
   13535     }
   13536 
   13537     operator const VkImageFormatListCreateInfoKHR&() const
   13538     {
   13539       return *reinterpret_cast<const VkImageFormatListCreateInfoKHR*>(this);
   13540     }
   13541 
   13542     bool operator==( ImageFormatListCreateInfoKHR const& rhs ) const
   13543     {
   13544       return ( sType == rhs.sType )
   13545           && ( pNext == rhs.pNext )
   13546           && ( viewFormatCount == rhs.viewFormatCount )
   13547           && ( pViewFormats == rhs.pViewFormats );
   13548     }
   13549 
   13550     bool operator!=( ImageFormatListCreateInfoKHR const& rhs ) const
   13551     {
   13552       return !operator==( rhs );
   13553     }
   13554 
   13555   private:
   13556     StructureType sType = StructureType::eImageFormatListCreateInfoKHR;
   13557 
   13558   public:
   13559     const void* pNext = nullptr;
   13560     uint32_t viewFormatCount;
   13561     const Format* pViewFormats;
   13562   };
   13563   static_assert( sizeof( ImageFormatListCreateInfoKHR ) == sizeof( VkImageFormatListCreateInfoKHR ), "struct and wrapper have different size!" );
   13564 
   13565   struct ValidationCacheCreateInfoEXT
   13566   {
   13567     ValidationCacheCreateInfoEXT( ValidationCacheCreateFlagsEXT flags_ = ValidationCacheCreateFlagsEXT(), size_t initialDataSize_ = 0, const void* pInitialData_ = nullptr )
   13568       : flags( flags_ )
   13569       , initialDataSize( initialDataSize_ )
   13570       , pInitialData( pInitialData_ )
   13571     {
   13572     }
   13573 
   13574     ValidationCacheCreateInfoEXT( VkValidationCacheCreateInfoEXT const & rhs )
   13575     {
   13576       memcpy( this, &rhs, sizeof( ValidationCacheCreateInfoEXT ) );
   13577     }
   13578 
   13579     ValidationCacheCreateInfoEXT& operator=( VkValidationCacheCreateInfoEXT const & rhs )
   13580     {
   13581       memcpy( this, &rhs, sizeof( ValidationCacheCreateInfoEXT ) );
   13582       return *this;
   13583     }
   13584     ValidationCacheCreateInfoEXT& setPNext( const void* pNext_ )
   13585     {
   13586       pNext = pNext_;
   13587       return *this;
   13588     }
   13589 
   13590     ValidationCacheCreateInfoEXT& setFlags( ValidationCacheCreateFlagsEXT flags_ )
   13591     {
   13592       flags = flags_;
   13593       return *this;
   13594     }
   13595 
   13596     ValidationCacheCreateInfoEXT& setInitialDataSize( size_t initialDataSize_ )
   13597     {
   13598       initialDataSize = initialDataSize_;
   13599       return *this;
   13600     }
   13601 
   13602     ValidationCacheCreateInfoEXT& setPInitialData( const void* pInitialData_ )
   13603     {
   13604       pInitialData = pInitialData_;
   13605       return *this;
   13606     }
   13607 
   13608     operator const VkValidationCacheCreateInfoEXT&() const
   13609     {
   13610       return *reinterpret_cast<const VkValidationCacheCreateInfoEXT*>(this);
   13611     }
   13612 
   13613     bool operator==( ValidationCacheCreateInfoEXT const& rhs ) const
   13614     {
   13615       return ( sType == rhs.sType )
   13616           && ( pNext == rhs.pNext )
   13617           && ( flags == rhs.flags )
   13618           && ( initialDataSize == rhs.initialDataSize )
   13619           && ( pInitialData == rhs.pInitialData );
   13620     }
   13621 
   13622     bool operator!=( ValidationCacheCreateInfoEXT const& rhs ) const
   13623     {
   13624       return !operator==( rhs );
   13625     }
   13626 
   13627   private:
   13628     StructureType sType = StructureType::eValidationCacheCreateInfoEXT;
   13629 
   13630   public:
   13631     const void* pNext = nullptr;
   13632     ValidationCacheCreateFlagsEXT flags;
   13633     size_t initialDataSize;
   13634     const void* pInitialData;
   13635   };
   13636   static_assert( sizeof( ValidationCacheCreateInfoEXT ) == sizeof( VkValidationCacheCreateInfoEXT ), "struct and wrapper have different size!" );
   13637 
   13638   struct ShaderModuleValidationCacheCreateInfoEXT
   13639   {
   13640     ShaderModuleValidationCacheCreateInfoEXT( ValidationCacheEXT validationCache_ = ValidationCacheEXT() )
   13641       : validationCache( validationCache_ )
   13642     {
   13643     }
   13644 
   13645     ShaderModuleValidationCacheCreateInfoEXT( VkShaderModuleValidationCacheCreateInfoEXT const & rhs )
   13646     {
   13647       memcpy( this, &rhs, sizeof( ShaderModuleValidationCacheCreateInfoEXT ) );
   13648     }
   13649 
   13650     ShaderModuleValidationCacheCreateInfoEXT& operator=( VkShaderModuleValidationCacheCreateInfoEXT const & rhs )
   13651     {
   13652       memcpy( this, &rhs, sizeof( ShaderModuleValidationCacheCreateInfoEXT ) );
   13653       return *this;
   13654     }
   13655     ShaderModuleValidationCacheCreateInfoEXT& setPNext( const void* pNext_ )
   13656     {
   13657       pNext = pNext_;
   13658       return *this;
   13659     }
   13660 
   13661     ShaderModuleValidationCacheCreateInfoEXT& setValidationCache( ValidationCacheEXT validationCache_ )
   13662     {
   13663       validationCache = validationCache_;
   13664       return *this;
   13665     }
   13666 
   13667     operator const VkShaderModuleValidationCacheCreateInfoEXT&() const
   13668     {
   13669       return *reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(this);
   13670     }
   13671 
   13672     bool operator==( ShaderModuleValidationCacheCreateInfoEXT const& rhs ) const
   13673     {
   13674       return ( sType == rhs.sType )
   13675           && ( pNext == rhs.pNext )
   13676           && ( validationCache == rhs.validationCache );
   13677     }
   13678 
   13679     bool operator!=( ShaderModuleValidationCacheCreateInfoEXT const& rhs ) const
   13680     {
   13681       return !operator==( rhs );
   13682     }
   13683 
   13684   private:
   13685     StructureType sType = StructureType::eShaderModuleValidationCacheCreateInfoEXT;
   13686 
   13687   public:
   13688     const void* pNext = nullptr;
   13689     ValidationCacheEXT validationCache;
   13690   };
   13691   static_assert( sizeof( ShaderModuleValidationCacheCreateInfoEXT ) == sizeof( VkShaderModuleValidationCacheCreateInfoEXT ), "struct and wrapper have different size!" );
   13692 
   13693   struct MemoryHostPointerPropertiesEXT
   13694   {
   13695     MemoryHostPointerPropertiesEXT( uint32_t memoryTypeBits_ = 0 )
   13696       : memoryTypeBits( memoryTypeBits_ )
   13697     {
   13698     }
   13699 
   13700     MemoryHostPointerPropertiesEXT( VkMemoryHostPointerPropertiesEXT const & rhs )
   13701     {
   13702       memcpy( this, &rhs, sizeof( MemoryHostPointerPropertiesEXT ) );
   13703     }
   13704 
   13705     MemoryHostPointerPropertiesEXT& operator=( VkMemoryHostPointerPropertiesEXT const & rhs )
   13706     {
   13707       memcpy( this, &rhs, sizeof( MemoryHostPointerPropertiesEXT ) );
   13708       return *this;
   13709     }
   13710     MemoryHostPointerPropertiesEXT& setPNext( void* pNext_ )
   13711     {
   13712       pNext = pNext_;
   13713       return *this;
   13714     }
   13715 
   13716     MemoryHostPointerPropertiesEXT& setMemoryTypeBits( uint32_t memoryTypeBits_ )
   13717     {
   13718       memoryTypeBits = memoryTypeBits_;
   13719       return *this;
   13720     }
   13721 
   13722     operator const VkMemoryHostPointerPropertiesEXT&() const
   13723     {
   13724       return *reinterpret_cast<const VkMemoryHostPointerPropertiesEXT*>(this);
   13725     }
   13726 
   13727     bool operator==( MemoryHostPointerPropertiesEXT const& rhs ) const
   13728     {
   13729       return ( sType == rhs.sType )
   13730           && ( pNext == rhs.pNext )
   13731           && ( memoryTypeBits == rhs.memoryTypeBits );
   13732     }
   13733 
   13734     bool operator!=( MemoryHostPointerPropertiesEXT const& rhs ) const
   13735     {
   13736       return !operator==( rhs );
   13737     }
   13738 
   13739   private:
   13740     StructureType sType = StructureType::eMemoryHostPointerPropertiesEXT;
   13741 
   13742   public:
   13743     void* pNext = nullptr;
   13744     uint32_t memoryTypeBits;
   13745   };
   13746   static_assert( sizeof( MemoryHostPointerPropertiesEXT ) == sizeof( VkMemoryHostPointerPropertiesEXT ), "struct and wrapper have different size!" );
   13747 
   13748   struct PhysicalDeviceExternalMemoryHostPropertiesEXT
   13749   {
   13750     PhysicalDeviceExternalMemoryHostPropertiesEXT( DeviceSize minImportedHostPointerAlignment_ = 0 )
   13751       : minImportedHostPointerAlignment( minImportedHostPointerAlignment_ )
   13752     {
   13753     }
   13754 
   13755     PhysicalDeviceExternalMemoryHostPropertiesEXT( VkPhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs )
   13756     {
   13757       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalMemoryHostPropertiesEXT ) );
   13758     }
   13759 
   13760     PhysicalDeviceExternalMemoryHostPropertiesEXT& operator=( VkPhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs )
   13761     {
   13762       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalMemoryHostPropertiesEXT ) );
   13763       return *this;
   13764     }
   13765     PhysicalDeviceExternalMemoryHostPropertiesEXT& setPNext( void* pNext_ )
   13766     {
   13767       pNext = pNext_;
   13768       return *this;
   13769     }
   13770 
   13771     PhysicalDeviceExternalMemoryHostPropertiesEXT& setMinImportedHostPointerAlignment( DeviceSize minImportedHostPointerAlignment_ )
   13772     {
   13773       minImportedHostPointerAlignment = minImportedHostPointerAlignment_;
   13774       return *this;
   13775     }
   13776 
   13777     operator const VkPhysicalDeviceExternalMemoryHostPropertiesEXT&() const
   13778     {
   13779       return *reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(this);
   13780     }
   13781 
   13782     bool operator==( PhysicalDeviceExternalMemoryHostPropertiesEXT const& rhs ) const
   13783     {
   13784       return ( sType == rhs.sType )
   13785           && ( pNext == rhs.pNext )
   13786           && ( minImportedHostPointerAlignment == rhs.minImportedHostPointerAlignment );
   13787     }
   13788 
   13789     bool operator!=( PhysicalDeviceExternalMemoryHostPropertiesEXT const& rhs ) const
   13790     {
   13791       return !operator==( rhs );
   13792     }
   13793 
   13794   private:
   13795     StructureType sType = StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT;
   13796 
   13797   public:
   13798     void* pNext = nullptr;
   13799     DeviceSize minImportedHostPointerAlignment;
   13800   };
   13801   static_assert( sizeof( PhysicalDeviceExternalMemoryHostPropertiesEXT ) == sizeof( VkPhysicalDeviceExternalMemoryHostPropertiesEXT ), "struct and wrapper have different size!" );
   13802 
   13803   struct PhysicalDeviceConservativeRasterizationPropertiesEXT
   13804   {
   13805     PhysicalDeviceConservativeRasterizationPropertiesEXT( float primitiveOverestimationSize_ = 0, float maxExtraPrimitiveOverestimationSize_ = 0, float extraPrimitiveOverestimationSizeGranularity_ = 0, Bool32 primitiveUnderestimation_ = 0, Bool32 conservativePointAndLineRasterization_ = 0, Bool32 degenerateTrianglesRasterized_ = 0, Bool32 degenerateLinesRasterized_ = 0, Bool32 fullyCoveredFragmentShaderInputVariable_ = 0, Bool32 conservativeRasterizationPostDepthCoverage_ = 0 )
   13806       : primitiveOverestimationSize( primitiveOverestimationSize_ )
   13807       , maxExtraPrimitiveOverestimationSize( maxExtraPrimitiveOverestimationSize_ )
   13808       , extraPrimitiveOverestimationSizeGranularity( extraPrimitiveOverestimationSizeGranularity_ )
   13809       , primitiveUnderestimation( primitiveUnderestimation_ )
   13810       , conservativePointAndLineRasterization( conservativePointAndLineRasterization_ )
   13811       , degenerateTrianglesRasterized( degenerateTrianglesRasterized_ )
   13812       , degenerateLinesRasterized( degenerateLinesRasterized_ )
   13813       , fullyCoveredFragmentShaderInputVariable( fullyCoveredFragmentShaderInputVariable_ )
   13814       , conservativeRasterizationPostDepthCoverage( conservativeRasterizationPostDepthCoverage_ )
   13815     {
   13816     }
   13817 
   13818     PhysicalDeviceConservativeRasterizationPropertiesEXT( VkPhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs )
   13819     {
   13820       memcpy( this, &rhs, sizeof( PhysicalDeviceConservativeRasterizationPropertiesEXT ) );
   13821     }
   13822 
   13823     PhysicalDeviceConservativeRasterizationPropertiesEXT& operator=( VkPhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs )
   13824     {
   13825       memcpy( this, &rhs, sizeof( PhysicalDeviceConservativeRasterizationPropertiesEXT ) );
   13826       return *this;
   13827     }
   13828     PhysicalDeviceConservativeRasterizationPropertiesEXT& setPNext( void* pNext_ )
   13829     {
   13830       pNext = pNext_;
   13831       return *this;
   13832     }
   13833 
   13834     PhysicalDeviceConservativeRasterizationPropertiesEXT& setPrimitiveOverestimationSize( float primitiveOverestimationSize_ )
   13835     {
   13836       primitiveOverestimationSize = primitiveOverestimationSize_;
   13837       return *this;
   13838     }
   13839 
   13840     PhysicalDeviceConservativeRasterizationPropertiesEXT& setMaxExtraPrimitiveOverestimationSize( float maxExtraPrimitiveOverestimationSize_ )
   13841     {
   13842       maxExtraPrimitiveOverestimationSize = maxExtraPrimitiveOverestimationSize_;
   13843       return *this;
   13844     }
   13845 
   13846     PhysicalDeviceConservativeRasterizationPropertiesEXT& setExtraPrimitiveOverestimationSizeGranularity( float extraPrimitiveOverestimationSizeGranularity_ )
   13847     {
   13848       extraPrimitiveOverestimationSizeGranularity = extraPrimitiveOverestimationSizeGranularity_;
   13849       return *this;
   13850     }
   13851 
   13852     PhysicalDeviceConservativeRasterizationPropertiesEXT& setPrimitiveUnderestimation( Bool32 primitiveUnderestimation_ )
   13853     {
   13854       primitiveUnderestimation = primitiveUnderestimation_;
   13855       return *this;
   13856     }
   13857 
   13858     PhysicalDeviceConservativeRasterizationPropertiesEXT& setConservativePointAndLineRasterization( Bool32 conservativePointAndLineRasterization_ )
   13859     {
   13860       conservativePointAndLineRasterization = conservativePointAndLineRasterization_;
   13861       return *this;
   13862     }
   13863 
   13864     PhysicalDeviceConservativeRasterizationPropertiesEXT& setDegenerateTrianglesRasterized( Bool32 degenerateTrianglesRasterized_ )
   13865     {
   13866       degenerateTrianglesRasterized = degenerateTrianglesRasterized_;
   13867       return *this;
   13868     }
   13869 
   13870     PhysicalDeviceConservativeRasterizationPropertiesEXT& setDegenerateLinesRasterized( Bool32 degenerateLinesRasterized_ )
   13871     {
   13872       degenerateLinesRasterized = degenerateLinesRasterized_;
   13873       return *this;
   13874     }
   13875 
   13876     PhysicalDeviceConservativeRasterizationPropertiesEXT& setFullyCoveredFragmentShaderInputVariable( Bool32 fullyCoveredFragmentShaderInputVariable_ )
   13877     {
   13878       fullyCoveredFragmentShaderInputVariable = fullyCoveredFragmentShaderInputVariable_;
   13879       return *this;
   13880     }
   13881 
   13882     PhysicalDeviceConservativeRasterizationPropertiesEXT& setConservativeRasterizationPostDepthCoverage( Bool32 conservativeRasterizationPostDepthCoverage_ )
   13883     {
   13884       conservativeRasterizationPostDepthCoverage = conservativeRasterizationPostDepthCoverage_;
   13885       return *this;
   13886     }
   13887 
   13888     operator const VkPhysicalDeviceConservativeRasterizationPropertiesEXT&() const
   13889     {
   13890       return *reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(this);
   13891     }
   13892 
   13893     bool operator==( PhysicalDeviceConservativeRasterizationPropertiesEXT const& rhs ) const
   13894     {
   13895       return ( sType == rhs.sType )
   13896           && ( pNext == rhs.pNext )
   13897           && ( primitiveOverestimationSize == rhs.primitiveOverestimationSize )
   13898           && ( maxExtraPrimitiveOverestimationSize == rhs.maxExtraPrimitiveOverestimationSize )
   13899           && ( extraPrimitiveOverestimationSizeGranularity == rhs.extraPrimitiveOverestimationSizeGranularity )
   13900           && ( primitiveUnderestimation == rhs.primitiveUnderestimation )
   13901           && ( conservativePointAndLineRasterization == rhs.conservativePointAndLineRasterization )
   13902           && ( degenerateTrianglesRasterized == rhs.degenerateTrianglesRasterized )
   13903           && ( degenerateLinesRasterized == rhs.degenerateLinesRasterized )
   13904           && ( fullyCoveredFragmentShaderInputVariable == rhs.fullyCoveredFragmentShaderInputVariable )
   13905           && ( conservativeRasterizationPostDepthCoverage == rhs.conservativeRasterizationPostDepthCoverage );
   13906     }
   13907 
   13908     bool operator!=( PhysicalDeviceConservativeRasterizationPropertiesEXT const& rhs ) const
   13909     {
   13910       return !operator==( rhs );
   13911     }
   13912 
   13913   private:
   13914     StructureType sType = StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT;
   13915 
   13916   public:
   13917     void* pNext = nullptr;
   13918     float primitiveOverestimationSize;
   13919     float maxExtraPrimitiveOverestimationSize;
   13920     float extraPrimitiveOverestimationSizeGranularity;
   13921     Bool32 primitiveUnderestimation;
   13922     Bool32 conservativePointAndLineRasterization;
   13923     Bool32 degenerateTrianglesRasterized;
   13924     Bool32 degenerateLinesRasterized;
   13925     Bool32 fullyCoveredFragmentShaderInputVariable;
   13926     Bool32 conservativeRasterizationPostDepthCoverage;
   13927   };
   13928   static_assert( sizeof( PhysicalDeviceConservativeRasterizationPropertiesEXT ) == sizeof( VkPhysicalDeviceConservativeRasterizationPropertiesEXT ), "struct and wrapper have different size!" );
   13929 
   13930   enum class SubpassContents
   13931   {
   13932     eInline = VK_SUBPASS_CONTENTS_INLINE,
   13933     eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
   13934   };
   13935 
   13936   struct PresentInfoKHR
   13937   {
   13938     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 )
   13939       : waitSemaphoreCount( waitSemaphoreCount_ )
   13940       , pWaitSemaphores( pWaitSemaphores_ )
   13941       , swapchainCount( swapchainCount_ )
   13942       , pSwapchains( pSwapchains_ )
   13943       , pImageIndices( pImageIndices_ )
   13944       , pResults( pResults_ )
   13945     {
   13946     }
   13947 
   13948     PresentInfoKHR( VkPresentInfoKHR const & rhs )
   13949     {
   13950       memcpy( this, &rhs, sizeof( PresentInfoKHR ) );
   13951     }
   13952 
   13953     PresentInfoKHR& operator=( VkPresentInfoKHR const & rhs )
   13954     {
   13955       memcpy( this, &rhs, sizeof( PresentInfoKHR ) );
   13956       return *this;
   13957     }
   13958     PresentInfoKHR& setPNext( const void* pNext_ )
   13959     {
   13960       pNext = pNext_;
   13961       return *this;
   13962     }
   13963 
   13964     PresentInfoKHR& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
   13965     {
   13966       waitSemaphoreCount = waitSemaphoreCount_;
   13967       return *this;
   13968     }
   13969 
   13970     PresentInfoKHR& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
   13971     {
   13972       pWaitSemaphores = pWaitSemaphores_;
   13973       return *this;
   13974     }
   13975 
   13976     PresentInfoKHR& setSwapchainCount( uint32_t swapchainCount_ )
   13977     {
   13978       swapchainCount = swapchainCount_;
   13979       return *this;
   13980     }
   13981 
   13982     PresentInfoKHR& setPSwapchains( const SwapchainKHR* pSwapchains_ )
   13983     {
   13984       pSwapchains = pSwapchains_;
   13985       return *this;
   13986     }
   13987 
   13988     PresentInfoKHR& setPImageIndices( const uint32_t* pImageIndices_ )
   13989     {
   13990       pImageIndices = pImageIndices_;
   13991       return *this;
   13992     }
   13993 
   13994     PresentInfoKHR& setPResults( Result* pResults_ )
   13995     {
   13996       pResults = pResults_;
   13997       return *this;
   13998     }
   13999 
   14000     operator const VkPresentInfoKHR&() const
   14001     {
   14002       return *reinterpret_cast<const VkPresentInfoKHR*>(this);
   14003     }
   14004 
   14005     bool operator==( PresentInfoKHR const& rhs ) const
   14006     {
   14007       return ( sType == rhs.sType )
   14008           && ( pNext == rhs.pNext )
   14009           && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
   14010           && ( pWaitSemaphores == rhs.pWaitSemaphores )
   14011           && ( swapchainCount == rhs.swapchainCount )
   14012           && ( pSwapchains == rhs.pSwapchains )
   14013           && ( pImageIndices == rhs.pImageIndices )
   14014           && ( pResults == rhs.pResults );
   14015     }
   14016 
   14017     bool operator!=( PresentInfoKHR const& rhs ) const
   14018     {
   14019       return !operator==( rhs );
   14020     }
   14021 
   14022   private:
   14023     StructureType sType = StructureType::ePresentInfoKHR;
   14024 
   14025   public:
   14026     const void* pNext = nullptr;
   14027     uint32_t waitSemaphoreCount;
   14028     const Semaphore* pWaitSemaphores;
   14029     uint32_t swapchainCount;
   14030     const SwapchainKHR* pSwapchains;
   14031     const uint32_t* pImageIndices;
   14032     Result* pResults;
   14033   };
   14034   static_assert( sizeof( PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" );
   14035 
   14036   enum class DynamicState
   14037   {
   14038     eViewport = VK_DYNAMIC_STATE_VIEWPORT,
   14039     eScissor = VK_DYNAMIC_STATE_SCISSOR,
   14040     eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH,
   14041     eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS,
   14042     eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS,
   14043     eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS,
   14044     eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
   14045     eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
   14046     eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
   14047     eViewportWScalingNV = VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV,
   14048     eDiscardRectangleEXT = VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT,
   14049     eSampleLocationsEXT = VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
   14050   };
   14051 
   14052   struct PipelineDynamicStateCreateInfo
   14053   {
   14054     PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateFlags flags_ = PipelineDynamicStateCreateFlags(), uint32_t dynamicStateCount_ = 0, const DynamicState* pDynamicStates_ = nullptr )
   14055       : flags( flags_ )
   14056       , dynamicStateCount( dynamicStateCount_ )
   14057       , pDynamicStates( pDynamicStates_ )
   14058     {
   14059     }
   14060 
   14061     PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs )
   14062     {
   14063       memcpy( this, &rhs, sizeof( PipelineDynamicStateCreateInfo ) );
   14064     }
   14065 
   14066     PipelineDynamicStateCreateInfo& operator=( VkPipelineDynamicStateCreateInfo const & rhs )
   14067     {
   14068       memcpy( this, &rhs, sizeof( PipelineDynamicStateCreateInfo ) );
   14069       return *this;
   14070     }
   14071     PipelineDynamicStateCreateInfo& setPNext( const void* pNext_ )
   14072     {
   14073       pNext = pNext_;
   14074       return *this;
   14075     }
   14076 
   14077     PipelineDynamicStateCreateInfo& setFlags( PipelineDynamicStateCreateFlags flags_ )
   14078     {
   14079       flags = flags_;
   14080       return *this;
   14081     }
   14082 
   14083     PipelineDynamicStateCreateInfo& setDynamicStateCount( uint32_t dynamicStateCount_ )
   14084     {
   14085       dynamicStateCount = dynamicStateCount_;
   14086       return *this;
   14087     }
   14088 
   14089     PipelineDynamicStateCreateInfo& setPDynamicStates( const DynamicState* pDynamicStates_ )
   14090     {
   14091       pDynamicStates = pDynamicStates_;
   14092       return *this;
   14093     }
   14094 
   14095     operator const VkPipelineDynamicStateCreateInfo&() const
   14096     {
   14097       return *reinterpret_cast<const VkPipelineDynamicStateCreateInfo*>(this);
   14098     }
   14099 
   14100     bool operator==( PipelineDynamicStateCreateInfo const& rhs ) const
   14101     {
   14102       return ( sType == rhs.sType )
   14103           && ( pNext == rhs.pNext )
   14104           && ( flags == rhs.flags )
   14105           && ( dynamicStateCount == rhs.dynamicStateCount )
   14106           && ( pDynamicStates == rhs.pDynamicStates );
   14107     }
   14108 
   14109     bool operator!=( PipelineDynamicStateCreateInfo const& rhs ) const
   14110     {
   14111       return !operator==( rhs );
   14112     }
   14113 
   14114   private:
   14115     StructureType sType = StructureType::ePipelineDynamicStateCreateInfo;
   14116 
   14117   public:
   14118     const void* pNext = nullptr;
   14119     PipelineDynamicStateCreateFlags flags;
   14120     uint32_t dynamicStateCount;
   14121     const DynamicState* pDynamicStates;
   14122   };
   14123   static_assert( sizeof( PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ), "struct and wrapper have different size!" );
   14124 
   14125   enum class DescriptorUpdateTemplateTypeKHR
   14126   {
   14127     eDescriptorSet = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR,
   14128     ePushDescriptors = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
   14129   };
   14130 
   14131   struct DescriptorUpdateTemplateCreateInfoKHR
   14132   {
   14133     DescriptorUpdateTemplateCreateInfoKHR( DescriptorUpdateTemplateCreateFlagsKHR flags_ = DescriptorUpdateTemplateCreateFlagsKHR(), uint32_t descriptorUpdateEntryCount_ = 0, const DescriptorUpdateTemplateEntryKHR* pDescriptorUpdateEntries_ = nullptr, DescriptorUpdateTemplateTypeKHR templateType_ = DescriptorUpdateTemplateTypeKHR::eDescriptorSet, DescriptorSetLayout descriptorSetLayout_ = DescriptorSetLayout(), PipelineBindPoint pipelineBindPoint_ = PipelineBindPoint::eGraphics, PipelineLayout pipelineLayout_ = PipelineLayout(), uint32_t set_ = 0 )
   14134       : flags( flags_ )
   14135       , descriptorUpdateEntryCount( descriptorUpdateEntryCount_ )
   14136       , pDescriptorUpdateEntries( pDescriptorUpdateEntries_ )
   14137       , templateType( templateType_ )
   14138       , descriptorSetLayout( descriptorSetLayout_ )
   14139       , pipelineBindPoint( pipelineBindPoint_ )
   14140       , pipelineLayout( pipelineLayout_ )
   14141       , set( set_ )
   14142     {
   14143     }
   14144 
   14145     DescriptorUpdateTemplateCreateInfoKHR( VkDescriptorUpdateTemplateCreateInfoKHR const & rhs )
   14146     {
   14147       memcpy( this, &rhs, sizeof( DescriptorUpdateTemplateCreateInfoKHR ) );
   14148     }
   14149 
   14150     DescriptorUpdateTemplateCreateInfoKHR& operator=( VkDescriptorUpdateTemplateCreateInfoKHR const & rhs )
   14151     {
   14152       memcpy( this, &rhs, sizeof( DescriptorUpdateTemplateCreateInfoKHR ) );
   14153       return *this;
   14154     }
   14155     DescriptorUpdateTemplateCreateInfoKHR& setPNext( void* pNext_ )
   14156     {
   14157       pNext = pNext_;
   14158       return *this;
   14159     }
   14160 
   14161     DescriptorUpdateTemplateCreateInfoKHR& setFlags( DescriptorUpdateTemplateCreateFlagsKHR flags_ )
   14162     {
   14163       flags = flags_;
   14164       return *this;
   14165     }
   14166 
   14167     DescriptorUpdateTemplateCreateInfoKHR& setDescriptorUpdateEntryCount( uint32_t descriptorUpdateEntryCount_ )
   14168     {
   14169       descriptorUpdateEntryCount = descriptorUpdateEntryCount_;
   14170       return *this;
   14171     }
   14172 
   14173     DescriptorUpdateTemplateCreateInfoKHR& setPDescriptorUpdateEntries( const DescriptorUpdateTemplateEntryKHR* pDescriptorUpdateEntries_ )
   14174     {
   14175       pDescriptorUpdateEntries = pDescriptorUpdateEntries_;
   14176       return *this;
   14177     }
   14178 
   14179     DescriptorUpdateTemplateCreateInfoKHR& setTemplateType( DescriptorUpdateTemplateTypeKHR templateType_ )
   14180     {
   14181       templateType = templateType_;
   14182       return *this;
   14183     }
   14184 
   14185     DescriptorUpdateTemplateCreateInfoKHR& setDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout_ )
   14186     {
   14187       descriptorSetLayout = descriptorSetLayout_;
   14188       return *this;
   14189     }
   14190 
   14191     DescriptorUpdateTemplateCreateInfoKHR& setPipelineBindPoint( PipelineBindPoint pipelineBindPoint_ )
   14192     {
   14193       pipelineBindPoint = pipelineBindPoint_;
   14194       return *this;
   14195     }
   14196 
   14197     DescriptorUpdateTemplateCreateInfoKHR& setPipelineLayout( PipelineLayout pipelineLayout_ )
   14198     {
   14199       pipelineLayout = pipelineLayout_;
   14200       return *this;
   14201     }
   14202 
   14203     DescriptorUpdateTemplateCreateInfoKHR& setSet( uint32_t set_ )
   14204     {
   14205       set = set_;
   14206       return *this;
   14207     }
   14208 
   14209     operator const VkDescriptorUpdateTemplateCreateInfoKHR&() const
   14210     {
   14211       return *reinterpret_cast<const VkDescriptorUpdateTemplateCreateInfoKHR*>(this);
   14212     }
   14213 
   14214     bool operator==( DescriptorUpdateTemplateCreateInfoKHR const& rhs ) const
   14215     {
   14216       return ( sType == rhs.sType )
   14217           && ( pNext == rhs.pNext )
   14218           && ( flags == rhs.flags )
   14219           && ( descriptorUpdateEntryCount == rhs.descriptorUpdateEntryCount )
   14220           && ( pDescriptorUpdateEntries == rhs.pDescriptorUpdateEntries )
   14221           && ( templateType == rhs.templateType )
   14222           && ( descriptorSetLayout == rhs.descriptorSetLayout )
   14223           && ( pipelineBindPoint == rhs.pipelineBindPoint )
   14224           && ( pipelineLayout == rhs.pipelineLayout )
   14225           && ( set == rhs.set );
   14226     }
   14227 
   14228     bool operator!=( DescriptorUpdateTemplateCreateInfoKHR const& rhs ) const
   14229     {
   14230       return !operator==( rhs );
   14231     }
   14232 
   14233   private:
   14234     StructureType sType = StructureType::eDescriptorUpdateTemplateCreateInfoKHR;
   14235 
   14236   public:
   14237     void* pNext = nullptr;
   14238     DescriptorUpdateTemplateCreateFlagsKHR flags;
   14239     uint32_t descriptorUpdateEntryCount;
   14240     const DescriptorUpdateTemplateEntryKHR* pDescriptorUpdateEntries;
   14241     DescriptorUpdateTemplateTypeKHR templateType;
   14242     DescriptorSetLayout descriptorSetLayout;
   14243     PipelineBindPoint pipelineBindPoint;
   14244     PipelineLayout pipelineLayout;
   14245     uint32_t set;
   14246   };
   14247   static_assert( sizeof( DescriptorUpdateTemplateCreateInfoKHR ) == sizeof( VkDescriptorUpdateTemplateCreateInfoKHR ), "struct and wrapper have different size!" );
   14248 
   14249   enum class ObjectType
   14250   {
   14251     eUnknown = VK_OBJECT_TYPE_UNKNOWN,
   14252     eInstance = VK_OBJECT_TYPE_INSTANCE,
   14253     ePhysicalDevice = VK_OBJECT_TYPE_PHYSICAL_DEVICE,
   14254     eDevice = VK_OBJECT_TYPE_DEVICE,
   14255     eQueue = VK_OBJECT_TYPE_QUEUE,
   14256     eSemaphore = VK_OBJECT_TYPE_SEMAPHORE,
   14257     eCommandBuffer = VK_OBJECT_TYPE_COMMAND_BUFFER,
   14258     eFence = VK_OBJECT_TYPE_FENCE,
   14259     eDeviceMemory = VK_OBJECT_TYPE_DEVICE_MEMORY,
   14260     eBuffer = VK_OBJECT_TYPE_BUFFER,
   14261     eImage = VK_OBJECT_TYPE_IMAGE,
   14262     eEvent = VK_OBJECT_TYPE_EVENT,
   14263     eQueryPool = VK_OBJECT_TYPE_QUERY_POOL,
   14264     eBufferView = VK_OBJECT_TYPE_BUFFER_VIEW,
   14265     eImageView = VK_OBJECT_TYPE_IMAGE_VIEW,
   14266     eShaderModule = VK_OBJECT_TYPE_SHADER_MODULE,
   14267     ePipelineCache = VK_OBJECT_TYPE_PIPELINE_CACHE,
   14268     ePipelineLayout = VK_OBJECT_TYPE_PIPELINE_LAYOUT,
   14269     eRenderPass = VK_OBJECT_TYPE_RENDER_PASS,
   14270     ePipeline = VK_OBJECT_TYPE_PIPELINE,
   14271     eDescriptorSetLayout = VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
   14272     eSampler = VK_OBJECT_TYPE_SAMPLER,
   14273     eDescriptorPool = VK_OBJECT_TYPE_DESCRIPTOR_POOL,
   14274     eDescriptorSet = VK_OBJECT_TYPE_DESCRIPTOR_SET,
   14275     eFramebuffer = VK_OBJECT_TYPE_FRAMEBUFFER,
   14276     eCommandPool = VK_OBJECT_TYPE_COMMAND_POOL,
   14277     eSurfaceKHR = VK_OBJECT_TYPE_SURFACE_KHR,
   14278     eSwapchainKHR = VK_OBJECT_TYPE_SWAPCHAIN_KHR,
   14279     eDisplayKHR = VK_OBJECT_TYPE_DISPLAY_KHR,
   14280     eDisplayModeKHR = VK_OBJECT_TYPE_DISPLAY_MODE_KHR,
   14281     eDebugReportCallbackEXT = VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT,
   14282     eDescriptorUpdateTemplateKHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR,
   14283     eObjectTableNVX = VK_OBJECT_TYPE_OBJECT_TABLE_NVX,
   14284     eIndirectCommandsLayoutNVX = VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX,
   14285     eSamplerYcbcrConversionKHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR,
   14286     eValidationCacheEXT = VK_OBJECT_TYPE_VALIDATION_CACHE_EXT
   14287   };
   14288 
   14289   enum class QueueFlagBits
   14290   {
   14291     eGraphics = VK_QUEUE_GRAPHICS_BIT,
   14292     eCompute = VK_QUEUE_COMPUTE_BIT,
   14293     eTransfer = VK_QUEUE_TRANSFER_BIT,
   14294     eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT
   14295   };
   14296 
   14297   using QueueFlags = Flags<QueueFlagBits, VkQueueFlags>;
   14298 
   14299   VULKAN_HPP_INLINE QueueFlags operator|( QueueFlagBits bit0, QueueFlagBits bit1 )
   14300   {
   14301     return QueueFlags( bit0 ) | bit1;
   14302   }
   14303 
   14304   VULKAN_HPP_INLINE QueueFlags operator~( QueueFlagBits bits )
   14305   {
   14306     return ~( QueueFlags( bits ) );
   14307   }
   14308 
   14309   template <> struct FlagTraits<QueueFlagBits>
   14310   {
   14311     enum
   14312     {
   14313       allFlags = VkFlags(QueueFlagBits::eGraphics) | VkFlags(QueueFlagBits::eCompute) | VkFlags(QueueFlagBits::eTransfer) | VkFlags(QueueFlagBits::eSparseBinding)
   14314     };
   14315   };
   14316 
   14317   struct QueueFamilyProperties
   14318   {
   14319     operator const VkQueueFamilyProperties&() const
   14320     {
   14321       return *reinterpret_cast<const VkQueueFamilyProperties*>(this);
   14322     }
   14323 
   14324     bool operator==( QueueFamilyProperties const& rhs ) const
   14325     {
   14326       return ( queueFlags == rhs.queueFlags )
   14327           && ( queueCount == rhs.queueCount )
   14328           && ( timestampValidBits == rhs.timestampValidBits )
   14329           && ( minImageTransferGranularity == rhs.minImageTransferGranularity );
   14330     }
   14331 
   14332     bool operator!=( QueueFamilyProperties const& rhs ) const
   14333     {
   14334       return !operator==( rhs );
   14335     }
   14336 
   14337     QueueFlags queueFlags;
   14338     uint32_t queueCount;
   14339     uint32_t timestampValidBits;
   14340     Extent3D minImageTransferGranularity;
   14341   };
   14342   static_assert( sizeof( QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ), "struct and wrapper have different size!" );
   14343 
   14344   struct QueueFamilyProperties2KHR
   14345   {
   14346     operator const VkQueueFamilyProperties2KHR&() const
   14347     {
   14348       return *reinterpret_cast<const VkQueueFamilyProperties2KHR*>(this);
   14349     }
   14350 
   14351     bool operator==( QueueFamilyProperties2KHR const& rhs ) const
   14352     {
   14353       return ( sType == rhs.sType )
   14354           && ( pNext == rhs.pNext )
   14355           && ( queueFamilyProperties == rhs.queueFamilyProperties );
   14356     }
   14357 
   14358     bool operator!=( QueueFamilyProperties2KHR const& rhs ) const
   14359     {
   14360       return !operator==( rhs );
   14361     }
   14362 
   14363   private:
   14364     StructureType sType = StructureType::eQueueFamilyProperties2KHR;
   14365 
   14366   public:
   14367     void* pNext = nullptr;
   14368     QueueFamilyProperties queueFamilyProperties;
   14369   };
   14370   static_assert( sizeof( QueueFamilyProperties2KHR ) == sizeof( VkQueueFamilyProperties2KHR ), "struct and wrapper have different size!" );
   14371 
   14372   enum class MemoryPropertyFlagBits
   14373   {
   14374     eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
   14375     eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
   14376     eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
   14377     eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
   14378     eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
   14379   };
   14380 
   14381   using MemoryPropertyFlags = Flags<MemoryPropertyFlagBits, VkMemoryPropertyFlags>;
   14382 
   14383   VULKAN_HPP_INLINE MemoryPropertyFlags operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 )
   14384   {
   14385     return MemoryPropertyFlags( bit0 ) | bit1;
   14386   }
   14387 
   14388   VULKAN_HPP_INLINE MemoryPropertyFlags operator~( MemoryPropertyFlagBits bits )
   14389   {
   14390     return ~( MemoryPropertyFlags( bits ) );
   14391   }
   14392 
   14393   template <> struct FlagTraits<MemoryPropertyFlagBits>
   14394   {
   14395     enum
   14396     {
   14397       allFlags = VkFlags(MemoryPropertyFlagBits::eDeviceLocal) | VkFlags(MemoryPropertyFlagBits::eHostVisible) | VkFlags(MemoryPropertyFlagBits::eHostCoherent) | VkFlags(MemoryPropertyFlagBits::eHostCached) | VkFlags(MemoryPropertyFlagBits::eLazilyAllocated)
   14398     };
   14399   };
   14400 
   14401   struct MemoryType
   14402   {
   14403     operator const VkMemoryType&() const
   14404     {
   14405       return *reinterpret_cast<const VkMemoryType*>(this);
   14406     }
   14407 
   14408     bool operator==( MemoryType const& rhs ) const
   14409     {
   14410       return ( propertyFlags == rhs.propertyFlags )
   14411           && ( heapIndex == rhs.heapIndex );
   14412     }
   14413 
   14414     bool operator!=( MemoryType const& rhs ) const
   14415     {
   14416       return !operator==( rhs );
   14417     }
   14418 
   14419     MemoryPropertyFlags propertyFlags;
   14420     uint32_t heapIndex;
   14421   };
   14422   static_assert( sizeof( MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" );
   14423 
   14424   enum class MemoryHeapFlagBits
   14425   {
   14426     eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT,
   14427     eMultiInstanceKHX = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHX
   14428   };
   14429 
   14430   using MemoryHeapFlags = Flags<MemoryHeapFlagBits, VkMemoryHeapFlags>;
   14431 
   14432   VULKAN_HPP_INLINE MemoryHeapFlags operator|( MemoryHeapFlagBits bit0, MemoryHeapFlagBits bit1 )
   14433   {
   14434     return MemoryHeapFlags( bit0 ) | bit1;
   14435   }
   14436 
   14437   VULKAN_HPP_INLINE MemoryHeapFlags operator~( MemoryHeapFlagBits bits )
   14438   {
   14439     return ~( MemoryHeapFlags( bits ) );
   14440   }
   14441 
   14442   template <> struct FlagTraits<MemoryHeapFlagBits>
   14443   {
   14444     enum
   14445     {
   14446       allFlags = VkFlags(MemoryHeapFlagBits::eDeviceLocal) | VkFlags(MemoryHeapFlagBits::eMultiInstanceKHX)
   14447     };
   14448   };
   14449 
   14450   struct MemoryHeap
   14451   {
   14452     operator const VkMemoryHeap&() const
   14453     {
   14454       return *reinterpret_cast<const VkMemoryHeap*>(this);
   14455     }
   14456 
   14457     bool operator==( MemoryHeap const& rhs ) const
   14458     {
   14459       return ( size == rhs.size )
   14460           && ( flags == rhs.flags );
   14461     }
   14462 
   14463     bool operator!=( MemoryHeap const& rhs ) const
   14464     {
   14465       return !operator==( rhs );
   14466     }
   14467 
   14468     DeviceSize size;
   14469     MemoryHeapFlags flags;
   14470   };
   14471   static_assert( sizeof( MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" );
   14472 
   14473   struct PhysicalDeviceMemoryProperties
   14474   {
   14475     operator const VkPhysicalDeviceMemoryProperties&() const
   14476     {
   14477       return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties*>(this);
   14478     }
   14479 
   14480     bool operator==( PhysicalDeviceMemoryProperties const& rhs ) const
   14481     {
   14482       return ( memoryTypeCount == rhs.memoryTypeCount )
   14483           && ( memcmp( memoryTypes, rhs.memoryTypes, VK_MAX_MEMORY_TYPES * sizeof( MemoryType ) ) == 0 )
   14484           && ( memoryHeapCount == rhs.memoryHeapCount )
   14485           && ( memcmp( memoryHeaps, rhs.memoryHeaps, VK_MAX_MEMORY_HEAPS * sizeof( MemoryHeap ) ) == 0 );
   14486     }
   14487 
   14488     bool operator!=( PhysicalDeviceMemoryProperties const& rhs ) const
   14489     {
   14490       return !operator==( rhs );
   14491     }
   14492 
   14493     uint32_t memoryTypeCount;
   14494     MemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
   14495     uint32_t memoryHeapCount;
   14496     MemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
   14497   };
   14498   static_assert( sizeof( PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ), "struct and wrapper have different size!" );
   14499 
   14500   struct PhysicalDeviceMemoryProperties2KHR
   14501   {
   14502     operator const VkPhysicalDeviceMemoryProperties2KHR&() const
   14503     {
   14504       return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties2KHR*>(this);
   14505     }
   14506 
   14507     bool operator==( PhysicalDeviceMemoryProperties2KHR const& rhs ) const
   14508     {
   14509       return ( sType == rhs.sType )
   14510           && ( pNext == rhs.pNext )
   14511           && ( memoryProperties == rhs.memoryProperties );
   14512     }
   14513 
   14514     bool operator!=( PhysicalDeviceMemoryProperties2KHR const& rhs ) const
   14515     {
   14516       return !operator==( rhs );
   14517     }
   14518 
   14519   private:
   14520     StructureType sType = StructureType::ePhysicalDeviceMemoryProperties2KHR;
   14521 
   14522   public:
   14523     void* pNext = nullptr;
   14524     PhysicalDeviceMemoryProperties memoryProperties;
   14525   };
   14526   static_assert( sizeof( PhysicalDeviceMemoryProperties2KHR ) == sizeof( VkPhysicalDeviceMemoryProperties2KHR ), "struct and wrapper have different size!" );
   14527 
   14528   enum class AccessFlagBits
   14529   {
   14530     eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
   14531     eIndexRead = VK_ACCESS_INDEX_READ_BIT,
   14532     eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
   14533     eUniformRead = VK_ACCESS_UNIFORM_READ_BIT,
   14534     eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
   14535     eShaderRead = VK_ACCESS_SHADER_READ_BIT,
   14536     eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT,
   14537     eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
   14538     eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
   14539     eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
   14540     eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
   14541     eTransferRead = VK_ACCESS_TRANSFER_READ_BIT,
   14542     eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT,
   14543     eHostRead = VK_ACCESS_HOST_READ_BIT,
   14544     eHostWrite = VK_ACCESS_HOST_WRITE_BIT,
   14545     eMemoryRead = VK_ACCESS_MEMORY_READ_BIT,
   14546     eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT,
   14547     eCommandProcessReadNVX = VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX,
   14548     eCommandProcessWriteNVX = VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX,
   14549     eColorAttachmentReadNoncoherentEXT = VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT
   14550   };
   14551 
   14552   using AccessFlags = Flags<AccessFlagBits, VkAccessFlags>;
   14553 
   14554   VULKAN_HPP_INLINE AccessFlags operator|( AccessFlagBits bit0, AccessFlagBits bit1 )
   14555   {
   14556     return AccessFlags( bit0 ) | bit1;
   14557   }
   14558 
   14559   VULKAN_HPP_INLINE AccessFlags operator~( AccessFlagBits bits )
   14560   {
   14561     return ~( AccessFlags( bits ) );
   14562   }
   14563 
   14564   template <> struct FlagTraits<AccessFlagBits>
   14565   {
   14566     enum
   14567     {
   14568       allFlags = VkFlags(AccessFlagBits::eIndirectCommandRead) | VkFlags(AccessFlagBits::eIndexRead) | VkFlags(AccessFlagBits::eVertexAttributeRead) | VkFlags(AccessFlagBits::eUniformRead) | VkFlags(AccessFlagBits::eInputAttachmentRead) | VkFlags(AccessFlagBits::eShaderRead) | VkFlags(AccessFlagBits::eShaderWrite) | VkFlags(AccessFlagBits::eColorAttachmentRead) | VkFlags(AccessFlagBits::eColorAttachmentWrite) | VkFlags(AccessFlagBits::eDepthStencilAttachmentRead) | VkFlags(AccessFlagBits::eDepthStencilAttachmentWrite) | VkFlags(AccessFlagBits::eTransferRead) | VkFlags(AccessFlagBits::eTransferWrite) | VkFlags(AccessFlagBits::eHostRead) | VkFlags(AccessFlagBits::eHostWrite) | VkFlags(AccessFlagBits::eMemoryRead) | VkFlags(AccessFlagBits::eMemoryWrite) | VkFlags(AccessFlagBits::eCommandProcessReadNVX) | VkFlags(AccessFlagBits::eCommandProcessWriteNVX) | VkFlags(AccessFlagBits::eColorAttachmentReadNoncoherentEXT)
   14569     };
   14570   };
   14571 
   14572   struct MemoryBarrier
   14573   {
   14574     MemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags() )
   14575       : srcAccessMask( srcAccessMask_ )
   14576       , dstAccessMask( dstAccessMask_ )
   14577     {
   14578     }
   14579 
   14580     MemoryBarrier( VkMemoryBarrier const & rhs )
   14581     {
   14582       memcpy( this, &rhs, sizeof( MemoryBarrier ) );
   14583     }
   14584 
   14585     MemoryBarrier& operator=( VkMemoryBarrier const & rhs )
   14586     {
   14587       memcpy( this, &rhs, sizeof( MemoryBarrier ) );
   14588       return *this;
   14589     }
   14590     MemoryBarrier& setPNext( const void* pNext_ )
   14591     {
   14592       pNext = pNext_;
   14593       return *this;
   14594     }
   14595 
   14596     MemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
   14597     {
   14598       srcAccessMask = srcAccessMask_;
   14599       return *this;
   14600     }
   14601 
   14602     MemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
   14603     {
   14604       dstAccessMask = dstAccessMask_;
   14605       return *this;
   14606     }
   14607 
   14608     operator const VkMemoryBarrier&() const
   14609     {
   14610       return *reinterpret_cast<const VkMemoryBarrier*>(this);
   14611     }
   14612 
   14613     bool operator==( MemoryBarrier const& rhs ) const
   14614     {
   14615       return ( sType == rhs.sType )
   14616           && ( pNext == rhs.pNext )
   14617           && ( srcAccessMask == rhs.srcAccessMask )
   14618           && ( dstAccessMask == rhs.dstAccessMask );
   14619     }
   14620 
   14621     bool operator!=( MemoryBarrier const& rhs ) const
   14622     {
   14623       return !operator==( rhs );
   14624     }
   14625 
   14626   private:
   14627     StructureType sType = StructureType::eMemoryBarrier;
   14628 
   14629   public:
   14630     const void* pNext = nullptr;
   14631     AccessFlags srcAccessMask;
   14632     AccessFlags dstAccessMask;
   14633   };
   14634   static_assert( sizeof( MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" );
   14635 
   14636   struct BufferMemoryBarrier
   14637   {
   14638     BufferMemoryBarrier( AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), uint32_t srcQueueFamilyIndex_ = 0, uint32_t dstQueueFamilyIndex_ = 0, Buffer buffer_ = Buffer(), DeviceSize offset_ = 0, DeviceSize size_ = 0 )
   14639       : srcAccessMask( srcAccessMask_ )
   14640       , dstAccessMask( dstAccessMask_ )
   14641       , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
   14642       , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
   14643       , buffer( buffer_ )
   14644       , offset( offset_ )
   14645       , size( size_ )
   14646     {
   14647     }
   14648 
   14649     BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs )
   14650     {
   14651       memcpy( this, &rhs, sizeof( BufferMemoryBarrier ) );
   14652     }
   14653 
   14654     BufferMemoryBarrier& operator=( VkBufferMemoryBarrier const & rhs )
   14655     {
   14656       memcpy( this, &rhs, sizeof( BufferMemoryBarrier ) );
   14657       return *this;
   14658     }
   14659     BufferMemoryBarrier& setPNext( const void* pNext_ )
   14660     {
   14661       pNext = pNext_;
   14662       return *this;
   14663     }
   14664 
   14665     BufferMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
   14666     {
   14667       srcAccessMask = srcAccessMask_;
   14668       return *this;
   14669     }
   14670 
   14671     BufferMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
   14672     {
   14673       dstAccessMask = dstAccessMask_;
   14674       return *this;
   14675     }
   14676 
   14677     BufferMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
   14678     {
   14679       srcQueueFamilyIndex = srcQueueFamilyIndex_;
   14680       return *this;
   14681     }
   14682 
   14683     BufferMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
   14684     {
   14685       dstQueueFamilyIndex = dstQueueFamilyIndex_;
   14686       return *this;
   14687     }
   14688 
   14689     BufferMemoryBarrier& setBuffer( Buffer buffer_ )
   14690     {
   14691       buffer = buffer_;
   14692       return *this;
   14693     }
   14694 
   14695     BufferMemoryBarrier& setOffset( DeviceSize offset_ )
   14696     {
   14697       offset = offset_;
   14698       return *this;
   14699     }
   14700 
   14701     BufferMemoryBarrier& setSize( DeviceSize size_ )
   14702     {
   14703       size = size_;
   14704       return *this;
   14705     }
   14706 
   14707     operator const VkBufferMemoryBarrier&() const
   14708     {
   14709       return *reinterpret_cast<const VkBufferMemoryBarrier*>(this);
   14710     }
   14711 
   14712     bool operator==( BufferMemoryBarrier const& rhs ) const
   14713     {
   14714       return ( sType == rhs.sType )
   14715           && ( pNext == rhs.pNext )
   14716           && ( srcAccessMask == rhs.srcAccessMask )
   14717           && ( dstAccessMask == rhs.dstAccessMask )
   14718           && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
   14719           && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
   14720           && ( buffer == rhs.buffer )
   14721           && ( offset == rhs.offset )
   14722           && ( size == rhs.size );
   14723     }
   14724 
   14725     bool operator!=( BufferMemoryBarrier const& rhs ) const
   14726     {
   14727       return !operator==( rhs );
   14728     }
   14729 
   14730   private:
   14731     StructureType sType = StructureType::eBufferMemoryBarrier;
   14732 
   14733   public:
   14734     const void* pNext = nullptr;
   14735     AccessFlags srcAccessMask;
   14736     AccessFlags dstAccessMask;
   14737     uint32_t srcQueueFamilyIndex;
   14738     uint32_t dstQueueFamilyIndex;
   14739     Buffer buffer;
   14740     DeviceSize offset;
   14741     DeviceSize size;
   14742   };
   14743   static_assert( sizeof( BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ), "struct and wrapper have different size!" );
   14744 
   14745   enum class BufferUsageFlagBits
   14746   {
   14747     eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
   14748     eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT,
   14749     eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,
   14750     eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,
   14751     eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
   14752     eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
   14753     eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
   14754     eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
   14755     eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
   14756   };
   14757 
   14758   using BufferUsageFlags = Flags<BufferUsageFlagBits, VkBufferUsageFlags>;
   14759 
   14760   VULKAN_HPP_INLINE BufferUsageFlags operator|( BufferUsageFlagBits bit0, BufferUsageFlagBits bit1 )
   14761   {
   14762     return BufferUsageFlags( bit0 ) | bit1;
   14763   }
   14764 
   14765   VULKAN_HPP_INLINE BufferUsageFlags operator~( BufferUsageFlagBits bits )
   14766   {
   14767     return ~( BufferUsageFlags( bits ) );
   14768   }
   14769 
   14770   template <> struct FlagTraits<BufferUsageFlagBits>
   14771   {
   14772     enum
   14773     {
   14774       allFlags = VkFlags(BufferUsageFlagBits::eTransferSrc) | VkFlags(BufferUsageFlagBits::eTransferDst) | VkFlags(BufferUsageFlagBits::eUniformTexelBuffer) | VkFlags(BufferUsageFlagBits::eStorageTexelBuffer) | VkFlags(BufferUsageFlagBits::eUniformBuffer) | VkFlags(BufferUsageFlagBits::eStorageBuffer) | VkFlags(BufferUsageFlagBits::eIndexBuffer) | VkFlags(BufferUsageFlagBits::eVertexBuffer) | VkFlags(BufferUsageFlagBits::eIndirectBuffer)
   14775     };
   14776   };
   14777 
   14778   enum class BufferCreateFlagBits
   14779   {
   14780     eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
   14781     eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
   14782     eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
   14783   };
   14784 
   14785   using BufferCreateFlags = Flags<BufferCreateFlagBits, VkBufferCreateFlags>;
   14786 
   14787   VULKAN_HPP_INLINE BufferCreateFlags operator|( BufferCreateFlagBits bit0, BufferCreateFlagBits bit1 )
   14788   {
   14789     return BufferCreateFlags( bit0 ) | bit1;
   14790   }
   14791 
   14792   VULKAN_HPP_INLINE BufferCreateFlags operator~( BufferCreateFlagBits bits )
   14793   {
   14794     return ~( BufferCreateFlags( bits ) );
   14795   }
   14796 
   14797   template <> struct FlagTraits<BufferCreateFlagBits>
   14798   {
   14799     enum
   14800     {
   14801       allFlags = VkFlags(BufferCreateFlagBits::eSparseBinding) | VkFlags(BufferCreateFlagBits::eSparseResidency) | VkFlags(BufferCreateFlagBits::eSparseAliased)
   14802     };
   14803   };
   14804 
   14805   struct BufferCreateInfo
   14806   {
   14807     BufferCreateInfo( BufferCreateFlags flags_ = BufferCreateFlags(), DeviceSize size_ = 0, BufferUsageFlags usage_ = BufferUsageFlags(), SharingMode sharingMode_ = SharingMode::eExclusive, uint32_t queueFamilyIndexCount_ = 0, const uint32_t* pQueueFamilyIndices_ = nullptr )
   14808       : flags( flags_ )
   14809       , size( size_ )
   14810       , usage( usage_ )
   14811       , sharingMode( sharingMode_ )
   14812       , queueFamilyIndexCount( queueFamilyIndexCount_ )
   14813       , pQueueFamilyIndices( pQueueFamilyIndices_ )
   14814     {
   14815     }
   14816 
   14817     BufferCreateInfo( VkBufferCreateInfo const & rhs )
   14818     {
   14819       memcpy( this, &rhs, sizeof( BufferCreateInfo ) );
   14820     }
   14821 
   14822     BufferCreateInfo& operator=( VkBufferCreateInfo const & rhs )
   14823     {
   14824       memcpy( this, &rhs, sizeof( BufferCreateInfo ) );
   14825       return *this;
   14826     }
   14827     BufferCreateInfo& setPNext( const void* pNext_ )
   14828     {
   14829       pNext = pNext_;
   14830       return *this;
   14831     }
   14832 
   14833     BufferCreateInfo& setFlags( BufferCreateFlags flags_ )
   14834     {
   14835       flags = flags_;
   14836       return *this;
   14837     }
   14838 
   14839     BufferCreateInfo& setSize( DeviceSize size_ )
   14840     {
   14841       size = size_;
   14842       return *this;
   14843     }
   14844 
   14845     BufferCreateInfo& setUsage( BufferUsageFlags usage_ )
   14846     {
   14847       usage = usage_;
   14848       return *this;
   14849     }
   14850 
   14851     BufferCreateInfo& setSharingMode( SharingMode sharingMode_ )
   14852     {
   14853       sharingMode = sharingMode_;
   14854       return *this;
   14855     }
   14856 
   14857     BufferCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
   14858     {
   14859       queueFamilyIndexCount = queueFamilyIndexCount_;
   14860       return *this;
   14861     }
   14862 
   14863     BufferCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
   14864     {
   14865       pQueueFamilyIndices = pQueueFamilyIndices_;
   14866       return *this;
   14867     }
   14868 
   14869     operator const VkBufferCreateInfo&() const
   14870     {
   14871       return *reinterpret_cast<const VkBufferCreateInfo*>(this);
   14872     }
   14873 
   14874     bool operator==( BufferCreateInfo const& rhs ) const
   14875     {
   14876       return ( sType == rhs.sType )
   14877           && ( pNext == rhs.pNext )
   14878           && ( flags == rhs.flags )
   14879           && ( size == rhs.size )
   14880           && ( usage == rhs.usage )
   14881           && ( sharingMode == rhs.sharingMode )
   14882           && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
   14883           && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
   14884     }
   14885 
   14886     bool operator!=( BufferCreateInfo const& rhs ) const
   14887     {
   14888       return !operator==( rhs );
   14889     }
   14890 
   14891   private:
   14892     StructureType sType = StructureType::eBufferCreateInfo;
   14893 
   14894   public:
   14895     const void* pNext = nullptr;
   14896     BufferCreateFlags flags;
   14897     DeviceSize size;
   14898     BufferUsageFlags usage;
   14899     SharingMode sharingMode;
   14900     uint32_t queueFamilyIndexCount;
   14901     const uint32_t* pQueueFamilyIndices;
   14902   };
   14903   static_assert( sizeof( BufferCreateInfo ) == sizeof( VkBufferCreateInfo ), "struct and wrapper have different size!" );
   14904 
   14905   enum class ShaderStageFlagBits
   14906   {
   14907     eVertex = VK_SHADER_STAGE_VERTEX_BIT,
   14908     eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
   14909     eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
   14910     eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT,
   14911     eFragment = VK_SHADER_STAGE_FRAGMENT_BIT,
   14912     eCompute = VK_SHADER_STAGE_COMPUTE_BIT,
   14913     eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS,
   14914     eAll = VK_SHADER_STAGE_ALL
   14915   };
   14916 
   14917   using ShaderStageFlags = Flags<ShaderStageFlagBits, VkShaderStageFlags>;
   14918 
   14919   VULKAN_HPP_INLINE ShaderStageFlags operator|( ShaderStageFlagBits bit0, ShaderStageFlagBits bit1 )
   14920   {
   14921     return ShaderStageFlags( bit0 ) | bit1;
   14922   }
   14923 
   14924   VULKAN_HPP_INLINE ShaderStageFlags operator~( ShaderStageFlagBits bits )
   14925   {
   14926     return ~( ShaderStageFlags( bits ) );
   14927   }
   14928 
   14929   template <> struct FlagTraits<ShaderStageFlagBits>
   14930   {
   14931     enum
   14932     {
   14933       allFlags = VkFlags(ShaderStageFlagBits::eVertex) | VkFlags(ShaderStageFlagBits::eTessellationControl) | VkFlags(ShaderStageFlagBits::eTessellationEvaluation) | VkFlags(ShaderStageFlagBits::eGeometry) | VkFlags(ShaderStageFlagBits::eFragment) | VkFlags(ShaderStageFlagBits::eCompute) | VkFlags(ShaderStageFlagBits::eAllGraphics) | VkFlags(ShaderStageFlagBits::eAll)
   14934     };
   14935   };
   14936 
   14937   struct DescriptorSetLayoutBinding
   14938   {
   14939     DescriptorSetLayoutBinding( uint32_t binding_ = 0, DescriptorType descriptorType_ = DescriptorType::eSampler, uint32_t descriptorCount_ = 0, ShaderStageFlags stageFlags_ = ShaderStageFlags(), const Sampler* pImmutableSamplers_ = nullptr )
   14940       : binding( binding_ )
   14941       , descriptorType( descriptorType_ )
   14942       , descriptorCount( descriptorCount_ )
   14943       , stageFlags( stageFlags_ )
   14944       , pImmutableSamplers( pImmutableSamplers_ )
   14945     {
   14946     }
   14947 
   14948     DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs )
   14949     {
   14950       memcpy( this, &rhs, sizeof( DescriptorSetLayoutBinding ) );
   14951     }
   14952 
   14953     DescriptorSetLayoutBinding& operator=( VkDescriptorSetLayoutBinding const & rhs )
   14954     {
   14955       memcpy( this, &rhs, sizeof( DescriptorSetLayoutBinding ) );
   14956       return *this;
   14957     }
   14958     DescriptorSetLayoutBinding& setBinding( uint32_t binding_ )
   14959     {
   14960       binding = binding_;
   14961       return *this;
   14962     }
   14963 
   14964     DescriptorSetLayoutBinding& setDescriptorType( DescriptorType descriptorType_ )
   14965     {
   14966       descriptorType = descriptorType_;
   14967       return *this;
   14968     }
   14969 
   14970     DescriptorSetLayoutBinding& setDescriptorCount( uint32_t descriptorCount_ )
   14971     {
   14972       descriptorCount = descriptorCount_;
   14973       return *this;
   14974     }
   14975 
   14976     DescriptorSetLayoutBinding& setStageFlags( ShaderStageFlags stageFlags_ )
   14977     {
   14978       stageFlags = stageFlags_;
   14979       return *this;
   14980     }
   14981 
   14982     DescriptorSetLayoutBinding& setPImmutableSamplers( const Sampler* pImmutableSamplers_ )
   14983     {
   14984       pImmutableSamplers = pImmutableSamplers_;
   14985       return *this;
   14986     }
   14987 
   14988     operator const VkDescriptorSetLayoutBinding&() const
   14989     {
   14990       return *reinterpret_cast<const VkDescriptorSetLayoutBinding*>(this);
   14991     }
   14992 
   14993     bool operator==( DescriptorSetLayoutBinding const& rhs ) const
   14994     {
   14995       return ( binding == rhs.binding )
   14996           && ( descriptorType == rhs.descriptorType )
   14997           && ( descriptorCount == rhs.descriptorCount )
   14998           && ( stageFlags == rhs.stageFlags )
   14999           && ( pImmutableSamplers == rhs.pImmutableSamplers );
   15000     }
   15001 
   15002     bool operator!=( DescriptorSetLayoutBinding const& rhs ) const
   15003     {
   15004       return !operator==( rhs );
   15005     }
   15006 
   15007     uint32_t binding;
   15008     DescriptorType descriptorType;
   15009     uint32_t descriptorCount;
   15010     ShaderStageFlags stageFlags;
   15011     const Sampler* pImmutableSamplers;
   15012   };
   15013   static_assert( sizeof( DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ), "struct and wrapper have different size!" );
   15014 
   15015   struct PipelineShaderStageCreateInfo
   15016   {
   15017     PipelineShaderStageCreateInfo( PipelineShaderStageCreateFlags flags_ = PipelineShaderStageCreateFlags(), ShaderStageFlagBits stage_ = ShaderStageFlagBits::eVertex, ShaderModule module_ = ShaderModule(), const char* pName_ = nullptr, const SpecializationInfo* pSpecializationInfo_ = nullptr )
   15018       : flags( flags_ )
   15019       , stage( stage_ )
   15020       , module( module_ )
   15021       , pName( pName_ )
   15022       , pSpecializationInfo( pSpecializationInfo_ )
   15023     {
   15024     }
   15025 
   15026     PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs )
   15027     {
   15028       memcpy( this, &rhs, sizeof( PipelineShaderStageCreateInfo ) );
   15029     }
   15030 
   15031     PipelineShaderStageCreateInfo& operator=( VkPipelineShaderStageCreateInfo const & rhs )
   15032     {
   15033       memcpy( this, &rhs, sizeof( PipelineShaderStageCreateInfo ) );
   15034       return *this;
   15035     }
   15036     PipelineShaderStageCreateInfo& setPNext( const void* pNext_ )
   15037     {
   15038       pNext = pNext_;
   15039       return *this;
   15040     }
   15041 
   15042     PipelineShaderStageCreateInfo& setFlags( PipelineShaderStageCreateFlags flags_ )
   15043     {
   15044       flags = flags_;
   15045       return *this;
   15046     }
   15047 
   15048     PipelineShaderStageCreateInfo& setStage( ShaderStageFlagBits stage_ )
   15049     {
   15050       stage = stage_;
   15051       return *this;
   15052     }
   15053 
   15054     PipelineShaderStageCreateInfo& setModule( ShaderModule module_ )
   15055     {
   15056       module = module_;
   15057       return *this;
   15058     }
   15059 
   15060     PipelineShaderStageCreateInfo& setPName( const char* pName_ )
   15061     {
   15062       pName = pName_;
   15063       return *this;
   15064     }
   15065 
   15066     PipelineShaderStageCreateInfo& setPSpecializationInfo( const SpecializationInfo* pSpecializationInfo_ )
   15067     {
   15068       pSpecializationInfo = pSpecializationInfo_;
   15069       return *this;
   15070     }
   15071 
   15072     operator const VkPipelineShaderStageCreateInfo&() const
   15073     {
   15074       return *reinterpret_cast<const VkPipelineShaderStageCreateInfo*>(this);
   15075     }
   15076 
   15077     bool operator==( PipelineShaderStageCreateInfo const& rhs ) const
   15078     {
   15079       return ( sType == rhs.sType )
   15080           && ( pNext == rhs.pNext )
   15081           && ( flags == rhs.flags )
   15082           && ( stage == rhs.stage )
   15083           && ( module == rhs.module )
   15084           && ( pName == rhs.pName )
   15085           && ( pSpecializationInfo == rhs.pSpecializationInfo );
   15086     }
   15087 
   15088     bool operator!=( PipelineShaderStageCreateInfo const& rhs ) const
   15089     {
   15090       return !operator==( rhs );
   15091     }
   15092 
   15093   private:
   15094     StructureType sType = StructureType::ePipelineShaderStageCreateInfo;
   15095 
   15096   public:
   15097     const void* pNext = nullptr;
   15098     PipelineShaderStageCreateFlags flags;
   15099     ShaderStageFlagBits stage;
   15100     ShaderModule module;
   15101     const char* pName;
   15102     const SpecializationInfo* pSpecializationInfo;
   15103   };
   15104   static_assert( sizeof( PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ), "struct and wrapper have different size!" );
   15105 
   15106   struct PushConstantRange
   15107   {
   15108     PushConstantRange( ShaderStageFlags stageFlags_ = ShaderStageFlags(), uint32_t offset_ = 0, uint32_t size_ = 0 )
   15109       : stageFlags( stageFlags_ )
   15110       , offset( offset_ )
   15111       , size( size_ )
   15112     {
   15113     }
   15114 
   15115     PushConstantRange( VkPushConstantRange const & rhs )
   15116     {
   15117       memcpy( this, &rhs, sizeof( PushConstantRange ) );
   15118     }
   15119 
   15120     PushConstantRange& operator=( VkPushConstantRange const & rhs )
   15121     {
   15122       memcpy( this, &rhs, sizeof( PushConstantRange ) );
   15123       return *this;
   15124     }
   15125     PushConstantRange& setStageFlags( ShaderStageFlags stageFlags_ )
   15126     {
   15127       stageFlags = stageFlags_;
   15128       return *this;
   15129     }
   15130 
   15131     PushConstantRange& setOffset( uint32_t offset_ )
   15132     {
   15133       offset = offset_;
   15134       return *this;
   15135     }
   15136 
   15137     PushConstantRange& setSize( uint32_t size_ )
   15138     {
   15139       size = size_;
   15140       return *this;
   15141     }
   15142 
   15143     operator const VkPushConstantRange&() const
   15144     {
   15145       return *reinterpret_cast<const VkPushConstantRange*>(this);
   15146     }
   15147 
   15148     bool operator==( PushConstantRange const& rhs ) const
   15149     {
   15150       return ( stageFlags == rhs.stageFlags )
   15151           && ( offset == rhs.offset )
   15152           && ( size == rhs.size );
   15153     }
   15154 
   15155     bool operator!=( PushConstantRange const& rhs ) const
   15156     {
   15157       return !operator==( rhs );
   15158     }
   15159 
   15160     ShaderStageFlags stageFlags;
   15161     uint32_t offset;
   15162     uint32_t size;
   15163   };
   15164   static_assert( sizeof( PushConstantRange ) == sizeof( VkPushConstantRange ), "struct and wrapper have different size!" );
   15165 
   15166   struct PipelineLayoutCreateInfo
   15167   {
   15168     PipelineLayoutCreateInfo( PipelineLayoutCreateFlags flags_ = PipelineLayoutCreateFlags(), uint32_t setLayoutCount_ = 0, const DescriptorSetLayout* pSetLayouts_ = nullptr, uint32_t pushConstantRangeCount_ = 0, const PushConstantRange* pPushConstantRanges_ = nullptr )
   15169       : flags( flags_ )
   15170       , setLayoutCount( setLayoutCount_ )
   15171       , pSetLayouts( pSetLayouts_ )
   15172       , pushConstantRangeCount( pushConstantRangeCount_ )
   15173       , pPushConstantRanges( pPushConstantRanges_ )
   15174     {
   15175     }
   15176 
   15177     PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs )
   15178     {
   15179       memcpy( this, &rhs, sizeof( PipelineLayoutCreateInfo ) );
   15180     }
   15181 
   15182     PipelineLayoutCreateInfo& operator=( VkPipelineLayoutCreateInfo const & rhs )
   15183     {
   15184       memcpy( this, &rhs, sizeof( PipelineLayoutCreateInfo ) );
   15185       return *this;
   15186     }
   15187     PipelineLayoutCreateInfo& setPNext( const void* pNext_ )
   15188     {
   15189       pNext = pNext_;
   15190       return *this;
   15191     }
   15192 
   15193     PipelineLayoutCreateInfo& setFlags( PipelineLayoutCreateFlags flags_ )
   15194     {
   15195       flags = flags_;
   15196       return *this;
   15197     }
   15198 
   15199     PipelineLayoutCreateInfo& setSetLayoutCount( uint32_t setLayoutCount_ )
   15200     {
   15201       setLayoutCount = setLayoutCount_;
   15202       return *this;
   15203     }
   15204 
   15205     PipelineLayoutCreateInfo& setPSetLayouts( const DescriptorSetLayout* pSetLayouts_ )
   15206     {
   15207       pSetLayouts = pSetLayouts_;
   15208       return *this;
   15209     }
   15210 
   15211     PipelineLayoutCreateInfo& setPushConstantRangeCount( uint32_t pushConstantRangeCount_ )
   15212     {
   15213       pushConstantRangeCount = pushConstantRangeCount_;
   15214       return *this;
   15215     }
   15216 
   15217     PipelineLayoutCreateInfo& setPPushConstantRanges( const PushConstantRange* pPushConstantRanges_ )
   15218     {
   15219       pPushConstantRanges = pPushConstantRanges_;
   15220       return *this;
   15221     }
   15222 
   15223     operator const VkPipelineLayoutCreateInfo&() const
   15224     {
   15225       return *reinterpret_cast<const VkPipelineLayoutCreateInfo*>(this);
   15226     }
   15227 
   15228     bool operator==( PipelineLayoutCreateInfo const& rhs ) const
   15229     {
   15230       return ( sType == rhs.sType )
   15231           && ( pNext == rhs.pNext )
   15232           && ( flags == rhs.flags )
   15233           && ( setLayoutCount == rhs.setLayoutCount )
   15234           && ( pSetLayouts == rhs.pSetLayouts )
   15235           && ( pushConstantRangeCount == rhs.pushConstantRangeCount )
   15236           && ( pPushConstantRanges == rhs.pPushConstantRanges );
   15237     }
   15238 
   15239     bool operator!=( PipelineLayoutCreateInfo const& rhs ) const
   15240     {
   15241       return !operator==( rhs );
   15242     }
   15243 
   15244   private:
   15245     StructureType sType = StructureType::ePipelineLayoutCreateInfo;
   15246 
   15247   public:
   15248     const void* pNext = nullptr;
   15249     PipelineLayoutCreateFlags flags;
   15250     uint32_t setLayoutCount;
   15251     const DescriptorSetLayout* pSetLayouts;
   15252     uint32_t pushConstantRangeCount;
   15253     const PushConstantRange* pPushConstantRanges;
   15254   };
   15255   static_assert( sizeof( PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ), "struct and wrapper have different size!" );
   15256 
   15257   struct ShaderStatisticsInfoAMD
   15258   {
   15259     operator const VkShaderStatisticsInfoAMD&() const
   15260     {
   15261       return *reinterpret_cast<const VkShaderStatisticsInfoAMD*>(this);
   15262     }
   15263 
   15264     bool operator==( ShaderStatisticsInfoAMD const& rhs ) const
   15265     {
   15266       return ( shaderStageMask == rhs.shaderStageMask )
   15267           && ( resourceUsage == rhs.resourceUsage )
   15268           && ( numPhysicalVgprs == rhs.numPhysicalVgprs )
   15269           && ( numPhysicalSgprs == rhs.numPhysicalSgprs )
   15270           && ( numAvailableVgprs == rhs.numAvailableVgprs )
   15271           && ( numAvailableSgprs == rhs.numAvailableSgprs )
   15272           && ( memcmp( computeWorkGroupSize, rhs.computeWorkGroupSize, 3 * sizeof( uint32_t ) ) == 0 );
   15273     }
   15274 
   15275     bool operator!=( ShaderStatisticsInfoAMD const& rhs ) const
   15276     {
   15277       return !operator==( rhs );
   15278     }
   15279 
   15280     ShaderStageFlags shaderStageMask;
   15281     ShaderResourceUsageAMD resourceUsage;
   15282     uint32_t numPhysicalVgprs;
   15283     uint32_t numPhysicalSgprs;
   15284     uint32_t numAvailableVgprs;
   15285     uint32_t numAvailableSgprs;
   15286     uint32_t computeWorkGroupSize[3];
   15287   };
   15288   static_assert( sizeof( ShaderStatisticsInfoAMD ) == sizeof( VkShaderStatisticsInfoAMD ), "struct and wrapper have different size!" );
   15289 
   15290   enum class ImageUsageFlagBits
   15291   {
   15292     eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
   15293     eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT,
   15294     eSampled = VK_IMAGE_USAGE_SAMPLED_BIT,
   15295     eStorage = VK_IMAGE_USAGE_STORAGE_BIT,
   15296     eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
   15297     eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
   15298     eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
   15299     eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
   15300   };
   15301 
   15302   using ImageUsageFlags = Flags<ImageUsageFlagBits, VkImageUsageFlags>;
   15303 
   15304   VULKAN_HPP_INLINE ImageUsageFlags operator|( ImageUsageFlagBits bit0, ImageUsageFlagBits bit1 )
   15305   {
   15306     return ImageUsageFlags( bit0 ) | bit1;
   15307   }
   15308 
   15309   VULKAN_HPP_INLINE ImageUsageFlags operator~( ImageUsageFlagBits bits )
   15310   {
   15311     return ~( ImageUsageFlags( bits ) );
   15312   }
   15313 
   15314   template <> struct FlagTraits<ImageUsageFlagBits>
   15315   {
   15316     enum
   15317     {
   15318       allFlags = VkFlags(ImageUsageFlagBits::eTransferSrc) | VkFlags(ImageUsageFlagBits::eTransferDst) | VkFlags(ImageUsageFlagBits::eSampled) | VkFlags(ImageUsageFlagBits::eStorage) | VkFlags(ImageUsageFlagBits::eColorAttachment) | VkFlags(ImageUsageFlagBits::eDepthStencilAttachment) | VkFlags(ImageUsageFlagBits::eTransientAttachment) | VkFlags(ImageUsageFlagBits::eInputAttachment)
   15319     };
   15320   };
   15321 
   15322   struct SharedPresentSurfaceCapabilitiesKHR
   15323   {
   15324     operator const VkSharedPresentSurfaceCapabilitiesKHR&() const
   15325     {
   15326       return *reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(this);
   15327     }
   15328 
   15329     bool operator==( SharedPresentSurfaceCapabilitiesKHR const& rhs ) const
   15330     {
   15331       return ( sType == rhs.sType )
   15332           && ( pNext == rhs.pNext )
   15333           && ( sharedPresentSupportedUsageFlags == rhs.sharedPresentSupportedUsageFlags );
   15334     }
   15335 
   15336     bool operator!=( SharedPresentSurfaceCapabilitiesKHR const& rhs ) const
   15337     {
   15338       return !operator==( rhs );
   15339     }
   15340 
   15341   private:
   15342     StructureType sType = StructureType::eSharedPresentSurfaceCapabilitiesKHR;
   15343 
   15344   public:
   15345     void* pNext = nullptr;
   15346     ImageUsageFlags sharedPresentSupportedUsageFlags;
   15347   };
   15348   static_assert( sizeof( SharedPresentSurfaceCapabilitiesKHR ) == sizeof( VkSharedPresentSurfaceCapabilitiesKHR ), "struct and wrapper have different size!" );
   15349 
   15350   struct ImageViewUsageCreateInfoKHR
   15351   {
   15352     ImageViewUsageCreateInfoKHR( ImageUsageFlags usage_ = ImageUsageFlags() )
   15353       : usage( usage_ )
   15354     {
   15355     }
   15356 
   15357     ImageViewUsageCreateInfoKHR( VkImageViewUsageCreateInfoKHR const & rhs )
   15358     {
   15359       memcpy( this, &rhs, sizeof( ImageViewUsageCreateInfoKHR ) );
   15360     }
   15361 
   15362     ImageViewUsageCreateInfoKHR& operator=( VkImageViewUsageCreateInfoKHR const & rhs )
   15363     {
   15364       memcpy( this, &rhs, sizeof( ImageViewUsageCreateInfoKHR ) );
   15365       return *this;
   15366     }
   15367     ImageViewUsageCreateInfoKHR& setPNext( const void* pNext_ )
   15368     {
   15369       pNext = pNext_;
   15370       return *this;
   15371     }
   15372 
   15373     ImageViewUsageCreateInfoKHR& setUsage( ImageUsageFlags usage_ )
   15374     {
   15375       usage = usage_;
   15376       return *this;
   15377     }
   15378 
   15379     operator const VkImageViewUsageCreateInfoKHR&() const
   15380     {
   15381       return *reinterpret_cast<const VkImageViewUsageCreateInfoKHR*>(this);
   15382     }
   15383 
   15384     bool operator==( ImageViewUsageCreateInfoKHR const& rhs ) const
   15385     {
   15386       return ( sType == rhs.sType )
   15387           && ( pNext == rhs.pNext )
   15388           && ( usage == rhs.usage );
   15389     }
   15390 
   15391     bool operator!=( ImageViewUsageCreateInfoKHR const& rhs ) const
   15392     {
   15393       return !operator==( rhs );
   15394     }
   15395 
   15396   private:
   15397     StructureType sType = StructureType::eImageViewUsageCreateInfoKHR;
   15398 
   15399   public:
   15400     const void* pNext = nullptr;
   15401     ImageUsageFlags usage;
   15402   };
   15403   static_assert( sizeof( ImageViewUsageCreateInfoKHR ) == sizeof( VkImageViewUsageCreateInfoKHR ), "struct and wrapper have different size!" );
   15404 
   15405   enum class ImageCreateFlagBits
   15406   {
   15407     eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
   15408     eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,
   15409     eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,
   15410     eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
   15411     eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,
   15412     eBindSfrKHX = VK_IMAGE_CREATE_BIND_SFR_BIT_KHX,
   15413     e2DArrayCompatibleKHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR,
   15414     eBlockTexelViewCompatibleKHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR,
   15415     eExtendedUsageKHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR,
   15416     eSampleLocationsCompatibleDepthEXT = VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT,
   15417     eDisjointKHR = VK_IMAGE_CREATE_DISJOINT_BIT_KHR,
   15418     eAliasKHR = VK_IMAGE_CREATE_ALIAS_BIT_KHR
   15419   };
   15420 
   15421   using ImageCreateFlags = Flags<ImageCreateFlagBits, VkImageCreateFlags>;
   15422 
   15423   VULKAN_HPP_INLINE ImageCreateFlags operator|( ImageCreateFlagBits bit0, ImageCreateFlagBits bit1 )
   15424   {
   15425     return ImageCreateFlags( bit0 ) | bit1;
   15426   }
   15427 
   15428   VULKAN_HPP_INLINE ImageCreateFlags operator~( ImageCreateFlagBits bits )
   15429   {
   15430     return ~( ImageCreateFlags( bits ) );
   15431   }
   15432 
   15433   template <> struct FlagTraits<ImageCreateFlagBits>
   15434   {
   15435     enum
   15436     {
   15437       allFlags = VkFlags(ImageCreateFlagBits::eSparseBinding) | VkFlags(ImageCreateFlagBits::eSparseResidency) | VkFlags(ImageCreateFlagBits::eSparseAliased) | VkFlags(ImageCreateFlagBits::eMutableFormat) | VkFlags(ImageCreateFlagBits::eCubeCompatible) | VkFlags(ImageCreateFlagBits::eBindSfrKHX) | VkFlags(ImageCreateFlagBits::e2DArrayCompatibleKHR) | VkFlags(ImageCreateFlagBits::eBlockTexelViewCompatibleKHR) | VkFlags(ImageCreateFlagBits::eExtendedUsageKHR) | VkFlags(ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT) | VkFlags(ImageCreateFlagBits::eDisjointKHR) | VkFlags(ImageCreateFlagBits::eAliasKHR)
   15438     };
   15439   };
   15440 
   15441   struct PhysicalDeviceImageFormatInfo2KHR
   15442   {
   15443     PhysicalDeviceImageFormatInfo2KHR( Format format_ = Format::eUndefined, ImageType type_ = ImageType::e1D, ImageTiling tiling_ = ImageTiling::eOptimal, ImageUsageFlags usage_ = ImageUsageFlags(), ImageCreateFlags flags_ = ImageCreateFlags() )
   15444       : format( format_ )
   15445       , type( type_ )
   15446       , tiling( tiling_ )
   15447       , usage( usage_ )
   15448       , flags( flags_ )
   15449     {
   15450     }
   15451 
   15452     PhysicalDeviceImageFormatInfo2KHR( VkPhysicalDeviceImageFormatInfo2KHR const & rhs )
   15453     {
   15454       memcpy( this, &rhs, sizeof( PhysicalDeviceImageFormatInfo2KHR ) );
   15455     }
   15456 
   15457     PhysicalDeviceImageFormatInfo2KHR& operator=( VkPhysicalDeviceImageFormatInfo2KHR const & rhs )
   15458     {
   15459       memcpy( this, &rhs, sizeof( PhysicalDeviceImageFormatInfo2KHR ) );
   15460       return *this;
   15461     }
   15462     PhysicalDeviceImageFormatInfo2KHR& setPNext( const void* pNext_ )
   15463     {
   15464       pNext = pNext_;
   15465       return *this;
   15466     }
   15467 
   15468     PhysicalDeviceImageFormatInfo2KHR& setFormat( Format format_ )
   15469     {
   15470       format = format_;
   15471       return *this;
   15472     }
   15473 
   15474     PhysicalDeviceImageFormatInfo2KHR& setType( ImageType type_ )
   15475     {
   15476       type = type_;
   15477       return *this;
   15478     }
   15479 
   15480     PhysicalDeviceImageFormatInfo2KHR& setTiling( ImageTiling tiling_ )
   15481     {
   15482       tiling = tiling_;
   15483       return *this;
   15484     }
   15485 
   15486     PhysicalDeviceImageFormatInfo2KHR& setUsage( ImageUsageFlags usage_ )
   15487     {
   15488       usage = usage_;
   15489       return *this;
   15490     }
   15491 
   15492     PhysicalDeviceImageFormatInfo2KHR& setFlags( ImageCreateFlags flags_ )
   15493     {
   15494       flags = flags_;
   15495       return *this;
   15496     }
   15497 
   15498     operator const VkPhysicalDeviceImageFormatInfo2KHR&() const
   15499     {
   15500       return *reinterpret_cast<const VkPhysicalDeviceImageFormatInfo2KHR*>(this);
   15501     }
   15502 
   15503     bool operator==( PhysicalDeviceImageFormatInfo2KHR const& rhs ) const
   15504     {
   15505       return ( sType == rhs.sType )
   15506           && ( pNext == rhs.pNext )
   15507           && ( format == rhs.format )
   15508           && ( type == rhs.type )
   15509           && ( tiling == rhs.tiling )
   15510           && ( usage == rhs.usage )
   15511           && ( flags == rhs.flags );
   15512     }
   15513 
   15514     bool operator!=( PhysicalDeviceImageFormatInfo2KHR const& rhs ) const
   15515     {
   15516       return !operator==( rhs );
   15517     }
   15518 
   15519   private:
   15520     StructureType sType = StructureType::ePhysicalDeviceImageFormatInfo2KHR;
   15521 
   15522   public:
   15523     const void* pNext = nullptr;
   15524     Format format;
   15525     ImageType type;
   15526     ImageTiling tiling;
   15527     ImageUsageFlags usage;
   15528     ImageCreateFlags flags;
   15529   };
   15530   static_assert( sizeof( PhysicalDeviceImageFormatInfo2KHR ) == sizeof( VkPhysicalDeviceImageFormatInfo2KHR ), "struct and wrapper have different size!" );
   15531 
   15532   enum class PipelineCreateFlagBits
   15533   {
   15534     eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
   15535     eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
   15536     eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT,
   15537     eViewIndexFromDeviceIndexKHX = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHX,
   15538     eDispatchBaseKHX = VK_PIPELINE_CREATE_DISPATCH_BASE_KHX
   15539   };
   15540 
   15541   using PipelineCreateFlags = Flags<PipelineCreateFlagBits, VkPipelineCreateFlags>;
   15542 
   15543   VULKAN_HPP_INLINE PipelineCreateFlags operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 )
   15544   {
   15545     return PipelineCreateFlags( bit0 ) | bit1;
   15546   }
   15547 
   15548   VULKAN_HPP_INLINE PipelineCreateFlags operator~( PipelineCreateFlagBits bits )
   15549   {
   15550     return ~( PipelineCreateFlags( bits ) );
   15551   }
   15552 
   15553   template <> struct FlagTraits<PipelineCreateFlagBits>
   15554   {
   15555     enum
   15556     {
   15557       allFlags = VkFlags(PipelineCreateFlagBits::eDisableOptimization) | VkFlags(PipelineCreateFlagBits::eAllowDerivatives) | VkFlags(PipelineCreateFlagBits::eDerivative) | VkFlags(PipelineCreateFlagBits::eViewIndexFromDeviceIndexKHX) | VkFlags(PipelineCreateFlagBits::eDispatchBaseKHX)
   15558     };
   15559   };
   15560 
   15561   struct ComputePipelineCreateInfo
   15562   {
   15563     ComputePipelineCreateInfo( PipelineCreateFlags flags_ = PipelineCreateFlags(), PipelineShaderStageCreateInfo stage_ = PipelineShaderStageCreateInfo(), PipelineLayout layout_ = PipelineLayout(), Pipeline basePipelineHandle_ = Pipeline(), int32_t basePipelineIndex_ = 0 )
   15564       : flags( flags_ )
   15565       , stage( stage_ )
   15566       , layout( layout_ )
   15567       , basePipelineHandle( basePipelineHandle_ )
   15568       , basePipelineIndex( basePipelineIndex_ )
   15569     {
   15570     }
   15571 
   15572     ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs )
   15573     {
   15574       memcpy( this, &rhs, sizeof( ComputePipelineCreateInfo ) );
   15575     }
   15576 
   15577     ComputePipelineCreateInfo& operator=( VkComputePipelineCreateInfo const & rhs )
   15578     {
   15579       memcpy( this, &rhs, sizeof( ComputePipelineCreateInfo ) );
   15580       return *this;
   15581     }
   15582     ComputePipelineCreateInfo& setPNext( const void* pNext_ )
   15583     {
   15584       pNext = pNext_;
   15585       return *this;
   15586     }
   15587 
   15588     ComputePipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
   15589     {
   15590       flags = flags_;
   15591       return *this;
   15592     }
   15593 
   15594     ComputePipelineCreateInfo& setStage( PipelineShaderStageCreateInfo stage_ )
   15595     {
   15596       stage = stage_;
   15597       return *this;
   15598     }
   15599 
   15600     ComputePipelineCreateInfo& setLayout( PipelineLayout layout_ )
   15601     {
   15602       layout = layout_;
   15603       return *this;
   15604     }
   15605 
   15606     ComputePipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
   15607     {
   15608       basePipelineHandle = basePipelineHandle_;
   15609       return *this;
   15610     }
   15611 
   15612     ComputePipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
   15613     {
   15614       basePipelineIndex = basePipelineIndex_;
   15615       return *this;
   15616     }
   15617 
   15618     operator const VkComputePipelineCreateInfo&() const
   15619     {
   15620       return *reinterpret_cast<const VkComputePipelineCreateInfo*>(this);
   15621     }
   15622 
   15623     bool operator==( ComputePipelineCreateInfo const& rhs ) const
   15624     {
   15625       return ( sType == rhs.sType )
   15626           && ( pNext == rhs.pNext )
   15627           && ( flags == rhs.flags )
   15628           && ( stage == rhs.stage )
   15629           && ( layout == rhs.layout )
   15630           && ( basePipelineHandle == rhs.basePipelineHandle )
   15631           && ( basePipelineIndex == rhs.basePipelineIndex );
   15632     }
   15633 
   15634     bool operator!=( ComputePipelineCreateInfo const& rhs ) const
   15635     {
   15636       return !operator==( rhs );
   15637     }
   15638 
   15639   private:
   15640     StructureType sType = StructureType::eComputePipelineCreateInfo;
   15641 
   15642   public:
   15643     const void* pNext = nullptr;
   15644     PipelineCreateFlags flags;
   15645     PipelineShaderStageCreateInfo stage;
   15646     PipelineLayout layout;
   15647     Pipeline basePipelineHandle;
   15648     int32_t basePipelineIndex;
   15649   };
   15650   static_assert( sizeof( ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ), "struct and wrapper have different size!" );
   15651 
   15652   enum class ColorComponentFlagBits
   15653   {
   15654     eR = VK_COLOR_COMPONENT_R_BIT,
   15655     eG = VK_COLOR_COMPONENT_G_BIT,
   15656     eB = VK_COLOR_COMPONENT_B_BIT,
   15657     eA = VK_COLOR_COMPONENT_A_BIT
   15658   };
   15659 
   15660   using ColorComponentFlags = Flags<ColorComponentFlagBits, VkColorComponentFlags>;
   15661 
   15662   VULKAN_HPP_INLINE ColorComponentFlags operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 )
   15663   {
   15664     return ColorComponentFlags( bit0 ) | bit1;
   15665   }
   15666 
   15667   VULKAN_HPP_INLINE ColorComponentFlags operator~( ColorComponentFlagBits bits )
   15668   {
   15669     return ~( ColorComponentFlags( bits ) );
   15670   }
   15671 
   15672   template <> struct FlagTraits<ColorComponentFlagBits>
   15673   {
   15674     enum
   15675     {
   15676       allFlags = VkFlags(ColorComponentFlagBits::eR) | VkFlags(ColorComponentFlagBits::eG) | VkFlags(ColorComponentFlagBits::eB) | VkFlags(ColorComponentFlagBits::eA)
   15677     };
   15678   };
   15679 
   15680   struct PipelineColorBlendAttachmentState
   15681   {
   15682     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() )
   15683       : blendEnable( blendEnable_ )
   15684       , srcColorBlendFactor( srcColorBlendFactor_ )
   15685       , dstColorBlendFactor( dstColorBlendFactor_ )
   15686       , colorBlendOp( colorBlendOp_ )
   15687       , srcAlphaBlendFactor( srcAlphaBlendFactor_ )
   15688       , dstAlphaBlendFactor( dstAlphaBlendFactor_ )
   15689       , alphaBlendOp( alphaBlendOp_ )
   15690       , colorWriteMask( colorWriteMask_ )
   15691     {
   15692     }
   15693 
   15694     PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs )
   15695     {
   15696       memcpy( this, &rhs, sizeof( PipelineColorBlendAttachmentState ) );
   15697     }
   15698 
   15699     PipelineColorBlendAttachmentState& operator=( VkPipelineColorBlendAttachmentState const & rhs )
   15700     {
   15701       memcpy( this, &rhs, sizeof( PipelineColorBlendAttachmentState ) );
   15702       return *this;
   15703     }
   15704     PipelineColorBlendAttachmentState& setBlendEnable( Bool32 blendEnable_ )
   15705     {
   15706       blendEnable = blendEnable_;
   15707       return *this;
   15708     }
   15709 
   15710     PipelineColorBlendAttachmentState& setSrcColorBlendFactor( BlendFactor srcColorBlendFactor_ )
   15711     {
   15712       srcColorBlendFactor = srcColorBlendFactor_;
   15713       return *this;
   15714     }
   15715 
   15716     PipelineColorBlendAttachmentState& setDstColorBlendFactor( BlendFactor dstColorBlendFactor_ )
   15717     {
   15718       dstColorBlendFactor = dstColorBlendFactor_;
   15719       return *this;
   15720     }
   15721 
   15722     PipelineColorBlendAttachmentState& setColorBlendOp( BlendOp colorBlendOp_ )
   15723     {
   15724       colorBlendOp = colorBlendOp_;
   15725       return *this;
   15726     }
   15727 
   15728     PipelineColorBlendAttachmentState& setSrcAlphaBlendFactor( BlendFactor srcAlphaBlendFactor_ )
   15729     {
   15730       srcAlphaBlendFactor = srcAlphaBlendFactor_;
   15731       return *this;
   15732     }
   15733 
   15734     PipelineColorBlendAttachmentState& setDstAlphaBlendFactor( BlendFactor dstAlphaBlendFactor_ )
   15735     {
   15736       dstAlphaBlendFactor = dstAlphaBlendFactor_;
   15737       return *this;
   15738     }
   15739 
   15740     PipelineColorBlendAttachmentState& setAlphaBlendOp( BlendOp alphaBlendOp_ )
   15741     {
   15742       alphaBlendOp = alphaBlendOp_;
   15743       return *this;
   15744     }
   15745 
   15746     PipelineColorBlendAttachmentState& setColorWriteMask( ColorComponentFlags colorWriteMask_ )
   15747     {
   15748       colorWriteMask = colorWriteMask_;
   15749       return *this;
   15750     }
   15751 
   15752     operator const VkPipelineColorBlendAttachmentState&() const
   15753     {
   15754       return *reinterpret_cast<const VkPipelineColorBlendAttachmentState*>(this);
   15755     }
   15756 
   15757     bool operator==( PipelineColorBlendAttachmentState const& rhs ) const
   15758     {
   15759       return ( blendEnable == rhs.blendEnable )
   15760           && ( srcColorBlendFactor == rhs.srcColorBlendFactor )
   15761           && ( dstColorBlendFactor == rhs.dstColorBlendFactor )
   15762           && ( colorBlendOp == rhs.colorBlendOp )
   15763           && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor )
   15764           && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor )
   15765           && ( alphaBlendOp == rhs.alphaBlendOp )
   15766           && ( colorWriteMask == rhs.colorWriteMask );
   15767     }
   15768 
   15769     bool operator!=( PipelineColorBlendAttachmentState const& rhs ) const
   15770     {
   15771       return !operator==( rhs );
   15772     }
   15773 
   15774     Bool32 blendEnable;
   15775     BlendFactor srcColorBlendFactor;
   15776     BlendFactor dstColorBlendFactor;
   15777     BlendOp colorBlendOp;
   15778     BlendFactor srcAlphaBlendFactor;
   15779     BlendFactor dstAlphaBlendFactor;
   15780     BlendOp alphaBlendOp;
   15781     ColorComponentFlags colorWriteMask;
   15782   };
   15783   static_assert( sizeof( PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ), "struct and wrapper have different size!" );
   15784 
   15785   struct PipelineColorBlendStateCreateInfo
   15786   {
   15787     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 } } )
   15788       : flags( flags_ )
   15789       , logicOpEnable( logicOpEnable_ )
   15790       , logicOp( logicOp_ )
   15791       , attachmentCount( attachmentCount_ )
   15792       , pAttachments( pAttachments_ )
   15793     {
   15794       memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
   15795     }
   15796 
   15797     PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs )
   15798     {
   15799       memcpy( this, &rhs, sizeof( PipelineColorBlendStateCreateInfo ) );
   15800     }
   15801 
   15802     PipelineColorBlendStateCreateInfo& operator=( VkPipelineColorBlendStateCreateInfo const & rhs )
   15803     {
   15804       memcpy( this, &rhs, sizeof( PipelineColorBlendStateCreateInfo ) );
   15805       return *this;
   15806     }
   15807     PipelineColorBlendStateCreateInfo& setPNext( const void* pNext_ )
   15808     {
   15809       pNext = pNext_;
   15810       return *this;
   15811     }
   15812 
   15813     PipelineColorBlendStateCreateInfo& setFlags( PipelineColorBlendStateCreateFlags flags_ )
   15814     {
   15815       flags = flags_;
   15816       return *this;
   15817     }
   15818 
   15819     PipelineColorBlendStateCreateInfo& setLogicOpEnable( Bool32 logicOpEnable_ )
   15820     {
   15821       logicOpEnable = logicOpEnable_;
   15822       return *this;
   15823     }
   15824 
   15825     PipelineColorBlendStateCreateInfo& setLogicOp( LogicOp logicOp_ )
   15826     {
   15827       logicOp = logicOp_;
   15828       return *this;
   15829     }
   15830 
   15831     PipelineColorBlendStateCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
   15832     {
   15833       attachmentCount = attachmentCount_;
   15834       return *this;
   15835     }
   15836 
   15837     PipelineColorBlendStateCreateInfo& setPAttachments( const PipelineColorBlendAttachmentState* pAttachments_ )
   15838     {
   15839       pAttachments = pAttachments_;
   15840       return *this;
   15841     }
   15842 
   15843     PipelineColorBlendStateCreateInfo& setBlendConstants( std::array<float,4> blendConstants_ )
   15844     {
   15845       memcpy( &blendConstants, blendConstants_.data(), 4 * sizeof( float ) );
   15846       return *this;
   15847     }
   15848 
   15849     operator const VkPipelineColorBlendStateCreateInfo&() const
   15850     {
   15851       return *reinterpret_cast<const VkPipelineColorBlendStateCreateInfo*>(this);
   15852     }
   15853 
   15854     bool operator==( PipelineColorBlendStateCreateInfo const& rhs ) const
   15855     {
   15856       return ( sType == rhs.sType )
   15857           && ( pNext == rhs.pNext )
   15858           && ( flags == rhs.flags )
   15859           && ( logicOpEnable == rhs.logicOpEnable )
   15860           && ( logicOp == rhs.logicOp )
   15861           && ( attachmentCount == rhs.attachmentCount )
   15862           && ( pAttachments == rhs.pAttachments )
   15863           && ( memcmp( blendConstants, rhs.blendConstants, 4 * sizeof( float ) ) == 0 );
   15864     }
   15865 
   15866     bool operator!=( PipelineColorBlendStateCreateInfo const& rhs ) const
   15867     {
   15868       return !operator==( rhs );
   15869     }
   15870 
   15871   private:
   15872     StructureType sType = StructureType::ePipelineColorBlendStateCreateInfo;
   15873 
   15874   public:
   15875     const void* pNext = nullptr;
   15876     PipelineColorBlendStateCreateFlags flags;
   15877     Bool32 logicOpEnable;
   15878     LogicOp logicOp;
   15879     uint32_t attachmentCount;
   15880     const PipelineColorBlendAttachmentState* pAttachments;
   15881     float blendConstants[4];
   15882   };
   15883   static_assert( sizeof( PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ), "struct and wrapper have different size!" );
   15884 
   15885   enum class FenceCreateFlagBits
   15886   {
   15887     eSignaled = VK_FENCE_CREATE_SIGNALED_BIT
   15888   };
   15889 
   15890   using FenceCreateFlags = Flags<FenceCreateFlagBits, VkFenceCreateFlags>;
   15891 
   15892   VULKAN_HPP_INLINE FenceCreateFlags operator|( FenceCreateFlagBits bit0, FenceCreateFlagBits bit1 )
   15893   {
   15894     return FenceCreateFlags( bit0 ) | bit1;
   15895   }
   15896 
   15897   VULKAN_HPP_INLINE FenceCreateFlags operator~( FenceCreateFlagBits bits )
   15898   {
   15899     return ~( FenceCreateFlags( bits ) );
   15900   }
   15901 
   15902   template <> struct FlagTraits<FenceCreateFlagBits>
   15903   {
   15904     enum
   15905     {
   15906       allFlags = VkFlags(FenceCreateFlagBits::eSignaled)
   15907     };
   15908   };
   15909 
   15910   struct FenceCreateInfo
   15911   {
   15912     FenceCreateInfo( FenceCreateFlags flags_ = FenceCreateFlags() )
   15913       : flags( flags_ )
   15914     {
   15915     }
   15916 
   15917     FenceCreateInfo( VkFenceCreateInfo const & rhs )
   15918     {
   15919       memcpy( this, &rhs, sizeof( FenceCreateInfo ) );
   15920     }
   15921 
   15922     FenceCreateInfo& operator=( VkFenceCreateInfo const & rhs )
   15923     {
   15924       memcpy( this, &rhs, sizeof( FenceCreateInfo ) );
   15925       return *this;
   15926     }
   15927     FenceCreateInfo& setPNext( const void* pNext_ )
   15928     {
   15929       pNext = pNext_;
   15930       return *this;
   15931     }
   15932 
   15933     FenceCreateInfo& setFlags( FenceCreateFlags flags_ )
   15934     {
   15935       flags = flags_;
   15936       return *this;
   15937     }
   15938 
   15939     operator const VkFenceCreateInfo&() const
   15940     {
   15941       return *reinterpret_cast<const VkFenceCreateInfo*>(this);
   15942     }
   15943 
   15944     bool operator==( FenceCreateInfo const& rhs ) const
   15945     {
   15946       return ( sType == rhs.sType )
   15947           && ( pNext == rhs.pNext )
   15948           && ( flags == rhs.flags );
   15949     }
   15950 
   15951     bool operator!=( FenceCreateInfo const& rhs ) const
   15952     {
   15953       return !operator==( rhs );
   15954     }
   15955 
   15956   private:
   15957     StructureType sType = StructureType::eFenceCreateInfo;
   15958 
   15959   public:
   15960     const void* pNext = nullptr;
   15961     FenceCreateFlags flags;
   15962   };
   15963   static_assert( sizeof( FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" );
   15964 
   15965   enum class FormatFeatureFlagBits
   15966   {
   15967     eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
   15968     eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
   15969     eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,
   15970     eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,
   15971     eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,
   15972     eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,
   15973     eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,
   15974     eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
   15975     eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,
   15976     eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,
   15977     eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT,
   15978     eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT,
   15979     eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
   15980     eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,
   15981     eTransferSrcKHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR,
   15982     eTransferDstKHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR,
   15983     eSampledImageFilterMinmaxEXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT,
   15984     eMidpointChromaSamplesKHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR,
   15985     eSampledImageYcbcrConversionLinearFilterKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR,
   15986     eSampledImageYcbcrConversionSeparateReconstructionFilterKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR,
   15987     eSampledImageYcbcrConversionChromaReconstructionExplicitKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR,
   15988     eSampledImageYcbcrConversionChromaReconstructionExplicitForceableKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR,
   15989     eDisjointKHR = VK_FORMAT_FEATURE_DISJOINT_BIT_KHR,
   15990     eCositedChromaSamplesKHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR
   15991   };
   15992 
   15993   using FormatFeatureFlags = Flags<FormatFeatureFlagBits, VkFormatFeatureFlags>;
   15994 
   15995   VULKAN_HPP_INLINE FormatFeatureFlags operator|( FormatFeatureFlagBits bit0, FormatFeatureFlagBits bit1 )
   15996   {
   15997     return FormatFeatureFlags( bit0 ) | bit1;
   15998   }
   15999 
   16000   VULKAN_HPP_INLINE FormatFeatureFlags operator~( FormatFeatureFlagBits bits )
   16001   {
   16002     return ~( FormatFeatureFlags( bits ) );
   16003   }
   16004 
   16005   template <> struct FlagTraits<FormatFeatureFlagBits>
   16006   {
   16007     enum
   16008     {
   16009       allFlags = VkFlags(FormatFeatureFlagBits::eSampledImage) | VkFlags(FormatFeatureFlagBits::eStorageImage) | VkFlags(FormatFeatureFlagBits::eStorageImageAtomic) | VkFlags(FormatFeatureFlagBits::eUniformTexelBuffer) | VkFlags(FormatFeatureFlagBits::eStorageTexelBuffer) | VkFlags(FormatFeatureFlagBits::eStorageTexelBufferAtomic) | VkFlags(FormatFeatureFlagBits::eVertexBuffer) | VkFlags(FormatFeatureFlagBits::eColorAttachment) | VkFlags(FormatFeatureFlagBits::eColorAttachmentBlend) | VkFlags(FormatFeatureFlagBits::eDepthStencilAttachment) | VkFlags(FormatFeatureFlagBits::eBlitSrc) | VkFlags(FormatFeatureFlagBits::eBlitDst) | VkFlags(FormatFeatureFlagBits::eSampledImageFilterLinear) | VkFlags(FormatFeatureFlagBits::eSampledImageFilterCubicIMG) | VkFlags(FormatFeatureFlagBits::eTransferSrcKHR) | VkFlags(FormatFeatureFlagBits::eTransferDstKHR) | VkFlags(FormatFeatureFlagBits::eSampledImageFilterMinmaxEXT) | VkFlags(FormatFeatureFlagBits::eMidpointChromaSamplesKHR) | VkFlags(FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilterKHR) | VkFlags(FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilterKHR) | VkFlags(FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitKHR) | VkFlags(FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceableKHR) | VkFlags(FormatFeatureFlagBits::eDisjointKHR) | VkFlags(FormatFeatureFlagBits::eCositedChromaSamplesKHR)
   16010     };
   16011   };
   16012 
   16013   struct FormatProperties
   16014   {
   16015     operator const VkFormatProperties&() const
   16016     {
   16017       return *reinterpret_cast<const VkFormatProperties*>(this);
   16018     }
   16019 
   16020     bool operator==( FormatProperties const& rhs ) const
   16021     {
   16022       return ( linearTilingFeatures == rhs.linearTilingFeatures )
   16023           && ( optimalTilingFeatures == rhs.optimalTilingFeatures )
   16024           && ( bufferFeatures == rhs.bufferFeatures );
   16025     }
   16026 
   16027     bool operator!=( FormatProperties const& rhs ) const
   16028     {
   16029       return !operator==( rhs );
   16030     }
   16031 
   16032     FormatFeatureFlags linearTilingFeatures;
   16033     FormatFeatureFlags optimalTilingFeatures;
   16034     FormatFeatureFlags bufferFeatures;
   16035   };
   16036   static_assert( sizeof( FormatProperties ) == sizeof( VkFormatProperties ), "struct and wrapper have different size!" );
   16037 
   16038   struct FormatProperties2KHR
   16039   {
   16040     operator const VkFormatProperties2KHR&() const
   16041     {
   16042       return *reinterpret_cast<const VkFormatProperties2KHR*>(this);
   16043     }
   16044 
   16045     bool operator==( FormatProperties2KHR const& rhs ) const
   16046     {
   16047       return ( sType == rhs.sType )
   16048           && ( pNext == rhs.pNext )
   16049           && ( formatProperties == rhs.formatProperties );
   16050     }
   16051 
   16052     bool operator!=( FormatProperties2KHR const& rhs ) const
   16053     {
   16054       return !operator==( rhs );
   16055     }
   16056 
   16057   private:
   16058     StructureType sType = StructureType::eFormatProperties2KHR;
   16059 
   16060   public:
   16061     void* pNext = nullptr;
   16062     FormatProperties formatProperties;
   16063   };
   16064   static_assert( sizeof( FormatProperties2KHR ) == sizeof( VkFormatProperties2KHR ), "struct and wrapper have different size!" );
   16065 
   16066   enum class QueryControlFlagBits
   16067   {
   16068     ePrecise = VK_QUERY_CONTROL_PRECISE_BIT
   16069   };
   16070 
   16071   using QueryControlFlags = Flags<QueryControlFlagBits, VkQueryControlFlags>;
   16072 
   16073   VULKAN_HPP_INLINE QueryControlFlags operator|( QueryControlFlagBits bit0, QueryControlFlagBits bit1 )
   16074   {
   16075     return QueryControlFlags( bit0 ) | bit1;
   16076   }
   16077 
   16078   VULKAN_HPP_INLINE QueryControlFlags operator~( QueryControlFlagBits bits )
   16079   {
   16080     return ~( QueryControlFlags( bits ) );
   16081   }
   16082 
   16083   template <> struct FlagTraits<QueryControlFlagBits>
   16084   {
   16085     enum
   16086     {
   16087       allFlags = VkFlags(QueryControlFlagBits::ePrecise)
   16088     };
   16089   };
   16090 
   16091   enum class QueryResultFlagBits
   16092   {
   16093     e64 = VK_QUERY_RESULT_64_BIT,
   16094     eWait = VK_QUERY_RESULT_WAIT_BIT,
   16095     eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,
   16096     ePartial = VK_QUERY_RESULT_PARTIAL_BIT
   16097   };
   16098 
   16099   using QueryResultFlags = Flags<QueryResultFlagBits, VkQueryResultFlags>;
   16100 
   16101   VULKAN_HPP_INLINE QueryResultFlags operator|( QueryResultFlagBits bit0, QueryResultFlagBits bit1 )
   16102   {
   16103     return QueryResultFlags( bit0 ) | bit1;
   16104   }
   16105 
   16106   VULKAN_HPP_INLINE QueryResultFlags operator~( QueryResultFlagBits bits )
   16107   {
   16108     return ~( QueryResultFlags( bits ) );
   16109   }
   16110 
   16111   template <> struct FlagTraits<QueryResultFlagBits>
   16112   {
   16113     enum
   16114     {
   16115       allFlags = VkFlags(QueryResultFlagBits::e64) | VkFlags(QueryResultFlagBits::eWait) | VkFlags(QueryResultFlagBits::eWithAvailability) | VkFlags(QueryResultFlagBits::ePartial)
   16116     };
   16117   };
   16118 
   16119   enum class CommandBufferUsageFlagBits
   16120   {
   16121     eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
   16122     eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
   16123     eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
   16124   };
   16125 
   16126   using CommandBufferUsageFlags = Flags<CommandBufferUsageFlagBits, VkCommandBufferUsageFlags>;
   16127 
   16128   VULKAN_HPP_INLINE CommandBufferUsageFlags operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 )
   16129   {
   16130     return CommandBufferUsageFlags( bit0 ) | bit1;
   16131   }
   16132 
   16133   VULKAN_HPP_INLINE CommandBufferUsageFlags operator~( CommandBufferUsageFlagBits bits )
   16134   {
   16135     return ~( CommandBufferUsageFlags( bits ) );
   16136   }
   16137 
   16138   template <> struct FlagTraits<CommandBufferUsageFlagBits>
   16139   {
   16140     enum
   16141     {
   16142       allFlags = VkFlags(CommandBufferUsageFlagBits::eOneTimeSubmit) | VkFlags(CommandBufferUsageFlagBits::eRenderPassContinue) | VkFlags(CommandBufferUsageFlagBits::eSimultaneousUse)
   16143     };
   16144   };
   16145 
   16146   enum class QueryPipelineStatisticFlagBits
   16147   {
   16148     eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,
   16149     eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,
   16150     eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,
   16151     eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,
   16152     eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,
   16153     eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,
   16154     eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,
   16155     eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,
   16156     eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,
   16157     eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,
   16158     eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
   16159   };
   16160 
   16161   using QueryPipelineStatisticFlags = Flags<QueryPipelineStatisticFlagBits, VkQueryPipelineStatisticFlags>;
   16162 
   16163   VULKAN_HPP_INLINE QueryPipelineStatisticFlags operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 )
   16164   {
   16165     return QueryPipelineStatisticFlags( bit0 ) | bit1;
   16166   }
   16167 
   16168   VULKAN_HPP_INLINE QueryPipelineStatisticFlags operator~( QueryPipelineStatisticFlagBits bits )
   16169   {
   16170     return ~( QueryPipelineStatisticFlags( bits ) );
   16171   }
   16172 
   16173   template <> struct FlagTraits<QueryPipelineStatisticFlagBits>
   16174   {
   16175     enum
   16176     {
   16177       allFlags = VkFlags(QueryPipelineStatisticFlagBits::eInputAssemblyVertices) | VkFlags(QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives) | VkFlags(QueryPipelineStatisticFlagBits::eVertexShaderInvocations) | VkFlags(QueryPipelineStatisticFlagBits::eGeometryShaderInvocations) | VkFlags(QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives) | VkFlags(QueryPipelineStatisticFlagBits::eClippingInvocations) | VkFlags(QueryPipelineStatisticFlagBits::eClippingPrimitives) | VkFlags(QueryPipelineStatisticFlagBits::eFragmentShaderInvocations) | VkFlags(QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches) | VkFlags(QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations) | VkFlags(QueryPipelineStatisticFlagBits::eComputeShaderInvocations)
   16178     };
   16179   };
   16180 
   16181   struct CommandBufferInheritanceInfo
   16182   {
   16183     CommandBufferInheritanceInfo( RenderPass renderPass_ = RenderPass(), uint32_t subpass_ = 0, Framebuffer framebuffer_ = Framebuffer(), Bool32 occlusionQueryEnable_ = 0, QueryControlFlags queryFlags_ = QueryControlFlags(), QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
   16184       : renderPass( renderPass_ )
   16185       , subpass( subpass_ )
   16186       , framebuffer( framebuffer_ )
   16187       , occlusionQueryEnable( occlusionQueryEnable_ )
   16188       , queryFlags( queryFlags_ )
   16189       , pipelineStatistics( pipelineStatistics_ )
   16190     {
   16191     }
   16192 
   16193     CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs )
   16194     {
   16195       memcpy( this, &rhs, sizeof( CommandBufferInheritanceInfo ) );
   16196     }
   16197 
   16198     CommandBufferInheritanceInfo& operator=( VkCommandBufferInheritanceInfo const & rhs )
   16199     {
   16200       memcpy( this, &rhs, sizeof( CommandBufferInheritanceInfo ) );
   16201       return *this;
   16202     }
   16203     CommandBufferInheritanceInfo& setPNext( const void* pNext_ )
   16204     {
   16205       pNext = pNext_;
   16206       return *this;
   16207     }
   16208 
   16209     CommandBufferInheritanceInfo& setRenderPass( RenderPass renderPass_ )
   16210     {
   16211       renderPass = renderPass_;
   16212       return *this;
   16213     }
   16214 
   16215     CommandBufferInheritanceInfo& setSubpass( uint32_t subpass_ )
   16216     {
   16217       subpass = subpass_;
   16218       return *this;
   16219     }
   16220 
   16221     CommandBufferInheritanceInfo& setFramebuffer( Framebuffer framebuffer_ )
   16222     {
   16223       framebuffer = framebuffer_;
   16224       return *this;
   16225     }
   16226 
   16227     CommandBufferInheritanceInfo& setOcclusionQueryEnable( Bool32 occlusionQueryEnable_ )
   16228     {
   16229       occlusionQueryEnable = occlusionQueryEnable_;
   16230       return *this;
   16231     }
   16232 
   16233     CommandBufferInheritanceInfo& setQueryFlags( QueryControlFlags queryFlags_ )
   16234     {
   16235       queryFlags = queryFlags_;
   16236       return *this;
   16237     }
   16238 
   16239     CommandBufferInheritanceInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
   16240     {
   16241       pipelineStatistics = pipelineStatistics_;
   16242       return *this;
   16243     }
   16244 
   16245     operator const VkCommandBufferInheritanceInfo&() const
   16246     {
   16247       return *reinterpret_cast<const VkCommandBufferInheritanceInfo*>(this);
   16248     }
   16249 
   16250     bool operator==( CommandBufferInheritanceInfo const& rhs ) const
   16251     {
   16252       return ( sType == rhs.sType )
   16253           && ( pNext == rhs.pNext )
   16254           && ( renderPass == rhs.renderPass )
   16255           && ( subpass == rhs.subpass )
   16256           && ( framebuffer == rhs.framebuffer )
   16257           && ( occlusionQueryEnable == rhs.occlusionQueryEnable )
   16258           && ( queryFlags == rhs.queryFlags )
   16259           && ( pipelineStatistics == rhs.pipelineStatistics );
   16260     }
   16261 
   16262     bool operator!=( CommandBufferInheritanceInfo const& rhs ) const
   16263     {
   16264       return !operator==( rhs );
   16265     }
   16266 
   16267   private:
   16268     StructureType sType = StructureType::eCommandBufferInheritanceInfo;
   16269 
   16270   public:
   16271     const void* pNext = nullptr;
   16272     RenderPass renderPass;
   16273     uint32_t subpass;
   16274     Framebuffer framebuffer;
   16275     Bool32 occlusionQueryEnable;
   16276     QueryControlFlags queryFlags;
   16277     QueryPipelineStatisticFlags pipelineStatistics;
   16278   };
   16279   static_assert( sizeof( CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ), "struct and wrapper have different size!" );
   16280 
   16281   struct CommandBufferBeginInfo
   16282   {
   16283     CommandBufferBeginInfo( CommandBufferUsageFlags flags_ = CommandBufferUsageFlags(), const CommandBufferInheritanceInfo* pInheritanceInfo_ = nullptr )
   16284       : flags( flags_ )
   16285       , pInheritanceInfo( pInheritanceInfo_ )
   16286     {
   16287     }
   16288 
   16289     CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs )
   16290     {
   16291       memcpy( this, &rhs, sizeof( CommandBufferBeginInfo ) );
   16292     }
   16293 
   16294     CommandBufferBeginInfo& operator=( VkCommandBufferBeginInfo const & rhs )
   16295     {
   16296       memcpy( this, &rhs, sizeof( CommandBufferBeginInfo ) );
   16297       return *this;
   16298     }
   16299     CommandBufferBeginInfo& setPNext( const void* pNext_ )
   16300     {
   16301       pNext = pNext_;
   16302       return *this;
   16303     }
   16304 
   16305     CommandBufferBeginInfo& setFlags( CommandBufferUsageFlags flags_ )
   16306     {
   16307       flags = flags_;
   16308       return *this;
   16309     }
   16310 
   16311     CommandBufferBeginInfo& setPInheritanceInfo( const CommandBufferInheritanceInfo* pInheritanceInfo_ )
   16312     {
   16313       pInheritanceInfo = pInheritanceInfo_;
   16314       return *this;
   16315     }
   16316 
   16317     operator const VkCommandBufferBeginInfo&() const
   16318     {
   16319       return *reinterpret_cast<const VkCommandBufferBeginInfo*>(this);
   16320     }
   16321 
   16322     bool operator==( CommandBufferBeginInfo const& rhs ) const
   16323     {
   16324       return ( sType == rhs.sType )
   16325           && ( pNext == rhs.pNext )
   16326           && ( flags == rhs.flags )
   16327           && ( pInheritanceInfo == rhs.pInheritanceInfo );
   16328     }
   16329 
   16330     bool operator!=( CommandBufferBeginInfo const& rhs ) const
   16331     {
   16332       return !operator==( rhs );
   16333     }
   16334 
   16335   private:
   16336     StructureType sType = StructureType::eCommandBufferBeginInfo;
   16337 
   16338   public:
   16339     const void* pNext = nullptr;
   16340     CommandBufferUsageFlags flags;
   16341     const CommandBufferInheritanceInfo* pInheritanceInfo;
   16342   };
   16343   static_assert( sizeof( CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ), "struct and wrapper have different size!" );
   16344 
   16345   struct QueryPoolCreateInfo
   16346   {
   16347     QueryPoolCreateInfo( QueryPoolCreateFlags flags_ = QueryPoolCreateFlags(), QueryType queryType_ = QueryType::eOcclusion, uint32_t queryCount_ = 0, QueryPipelineStatisticFlags pipelineStatistics_ = QueryPipelineStatisticFlags() )
   16348       : flags( flags_ )
   16349       , queryType( queryType_ )
   16350       , queryCount( queryCount_ )
   16351       , pipelineStatistics( pipelineStatistics_ )
   16352     {
   16353     }
   16354 
   16355     QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs )
   16356     {
   16357       memcpy( this, &rhs, sizeof( QueryPoolCreateInfo ) );
   16358     }
   16359 
   16360     QueryPoolCreateInfo& operator=( VkQueryPoolCreateInfo const & rhs )
   16361     {
   16362       memcpy( this, &rhs, sizeof( QueryPoolCreateInfo ) );
   16363       return *this;
   16364     }
   16365     QueryPoolCreateInfo& setPNext( const void* pNext_ )
   16366     {
   16367       pNext = pNext_;
   16368       return *this;
   16369     }
   16370 
   16371     QueryPoolCreateInfo& setFlags( QueryPoolCreateFlags flags_ )
   16372     {
   16373       flags = flags_;
   16374       return *this;
   16375     }
   16376 
   16377     QueryPoolCreateInfo& setQueryType( QueryType queryType_ )
   16378     {
   16379       queryType = queryType_;
   16380       return *this;
   16381     }
   16382 
   16383     QueryPoolCreateInfo& setQueryCount( uint32_t queryCount_ )
   16384     {
   16385       queryCount = queryCount_;
   16386       return *this;
   16387     }
   16388 
   16389     QueryPoolCreateInfo& setPipelineStatistics( QueryPipelineStatisticFlags pipelineStatistics_ )
   16390     {
   16391       pipelineStatistics = pipelineStatistics_;
   16392       return *this;
   16393     }
   16394 
   16395     operator const VkQueryPoolCreateInfo&() const
   16396     {
   16397       return *reinterpret_cast<const VkQueryPoolCreateInfo*>(this);
   16398     }
   16399 
   16400     bool operator==( QueryPoolCreateInfo const& rhs ) const
   16401     {
   16402       return ( sType == rhs.sType )
   16403           && ( pNext == rhs.pNext )
   16404           && ( flags == rhs.flags )
   16405           && ( queryType == rhs.queryType )
   16406           && ( queryCount == rhs.queryCount )
   16407           && ( pipelineStatistics == rhs.pipelineStatistics );
   16408     }
   16409 
   16410     bool operator!=( QueryPoolCreateInfo const& rhs ) const
   16411     {
   16412       return !operator==( rhs );
   16413     }
   16414 
   16415   private:
   16416     StructureType sType = StructureType::eQueryPoolCreateInfo;
   16417 
   16418   public:
   16419     const void* pNext = nullptr;
   16420     QueryPoolCreateFlags flags;
   16421     QueryType queryType;
   16422     uint32_t queryCount;
   16423     QueryPipelineStatisticFlags pipelineStatistics;
   16424   };
   16425   static_assert( sizeof( QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ), "struct and wrapper have different size!" );
   16426 
   16427   enum class ImageAspectFlagBits
   16428   {
   16429     eColor = VK_IMAGE_ASPECT_COLOR_BIT,
   16430     eDepth = VK_IMAGE_ASPECT_DEPTH_BIT,
   16431     eStencil = VK_IMAGE_ASPECT_STENCIL_BIT,
   16432     eMetadata = VK_IMAGE_ASPECT_METADATA_BIT,
   16433     ePlane0KHR = VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
   16434     ePlane1KHR = VK_IMAGE_ASPECT_PLANE_1_BIT_KHR,
   16435     ePlane2KHR = VK_IMAGE_ASPECT_PLANE_2_BIT_KHR
   16436   };
   16437 
   16438   using ImageAspectFlags = Flags<ImageAspectFlagBits, VkImageAspectFlags>;
   16439 
   16440   VULKAN_HPP_INLINE ImageAspectFlags operator|( ImageAspectFlagBits bit0, ImageAspectFlagBits bit1 )
   16441   {
   16442     return ImageAspectFlags( bit0 ) | bit1;
   16443   }
   16444 
   16445   VULKAN_HPP_INLINE ImageAspectFlags operator~( ImageAspectFlagBits bits )
   16446   {
   16447     return ~( ImageAspectFlags( bits ) );
   16448   }
   16449 
   16450   template <> struct FlagTraits<ImageAspectFlagBits>
   16451   {
   16452     enum
   16453     {
   16454       allFlags = VkFlags(ImageAspectFlagBits::eColor) | VkFlags(ImageAspectFlagBits::eDepth) | VkFlags(ImageAspectFlagBits::eStencil) | VkFlags(ImageAspectFlagBits::eMetadata) | VkFlags(ImageAspectFlagBits::ePlane0KHR) | VkFlags(ImageAspectFlagBits::ePlane1KHR) | VkFlags(ImageAspectFlagBits::ePlane2KHR)
   16455     };
   16456   };
   16457 
   16458   struct ImageSubresource
   16459   {
   16460     ImageSubresource( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t arrayLayer_ = 0 )
   16461       : aspectMask( aspectMask_ )
   16462       , mipLevel( mipLevel_ )
   16463       , arrayLayer( arrayLayer_ )
   16464     {
   16465     }
   16466 
   16467     ImageSubresource( VkImageSubresource const & rhs )
   16468     {
   16469       memcpy( this, &rhs, sizeof( ImageSubresource ) );
   16470     }
   16471 
   16472     ImageSubresource& operator=( VkImageSubresource const & rhs )
   16473     {
   16474       memcpy( this, &rhs, sizeof( ImageSubresource ) );
   16475       return *this;
   16476     }
   16477     ImageSubresource& setAspectMask( ImageAspectFlags aspectMask_ )
   16478     {
   16479       aspectMask = aspectMask_;
   16480       return *this;
   16481     }
   16482 
   16483     ImageSubresource& setMipLevel( uint32_t mipLevel_ )
   16484     {
   16485       mipLevel = mipLevel_;
   16486       return *this;
   16487     }
   16488 
   16489     ImageSubresource& setArrayLayer( uint32_t arrayLayer_ )
   16490     {
   16491       arrayLayer = arrayLayer_;
   16492       return *this;
   16493     }
   16494 
   16495     operator const VkImageSubresource&() const
   16496     {
   16497       return *reinterpret_cast<const VkImageSubresource*>(this);
   16498     }
   16499 
   16500     bool operator==( ImageSubresource const& rhs ) const
   16501     {
   16502       return ( aspectMask == rhs.aspectMask )
   16503           && ( mipLevel == rhs.mipLevel )
   16504           && ( arrayLayer == rhs.arrayLayer );
   16505     }
   16506 
   16507     bool operator!=( ImageSubresource const& rhs ) const
   16508     {
   16509       return !operator==( rhs );
   16510     }
   16511 
   16512     ImageAspectFlags aspectMask;
   16513     uint32_t mipLevel;
   16514     uint32_t arrayLayer;
   16515   };
   16516   static_assert( sizeof( ImageSubresource ) == sizeof( VkImageSubresource ), "struct and wrapper have different size!" );
   16517 
   16518   struct ImageSubresourceLayers
   16519   {
   16520     ImageSubresourceLayers( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t mipLevel_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
   16521       : aspectMask( aspectMask_ )
   16522       , mipLevel( mipLevel_ )
   16523       , baseArrayLayer( baseArrayLayer_ )
   16524       , layerCount( layerCount_ )
   16525     {
   16526     }
   16527 
   16528     ImageSubresourceLayers( VkImageSubresourceLayers const & rhs )
   16529     {
   16530       memcpy( this, &rhs, sizeof( ImageSubresourceLayers ) );
   16531     }
   16532 
   16533     ImageSubresourceLayers& operator=( VkImageSubresourceLayers const & rhs )
   16534     {
   16535       memcpy( this, &rhs, sizeof( ImageSubresourceLayers ) );
   16536       return *this;
   16537     }
   16538     ImageSubresourceLayers& setAspectMask( ImageAspectFlags aspectMask_ )
   16539     {
   16540       aspectMask = aspectMask_;
   16541       return *this;
   16542     }
   16543 
   16544     ImageSubresourceLayers& setMipLevel( uint32_t mipLevel_ )
   16545     {
   16546       mipLevel = mipLevel_;
   16547       return *this;
   16548     }
   16549 
   16550     ImageSubresourceLayers& setBaseArrayLayer( uint32_t baseArrayLayer_ )
   16551     {
   16552       baseArrayLayer = baseArrayLayer_;
   16553       return *this;
   16554     }
   16555 
   16556     ImageSubresourceLayers& setLayerCount( uint32_t layerCount_ )
   16557     {
   16558       layerCount = layerCount_;
   16559       return *this;
   16560     }
   16561 
   16562     operator const VkImageSubresourceLayers&() const
   16563     {
   16564       return *reinterpret_cast<const VkImageSubresourceLayers*>(this);
   16565     }
   16566 
   16567     bool operator==( ImageSubresourceLayers const& rhs ) const
   16568     {
   16569       return ( aspectMask == rhs.aspectMask )
   16570           && ( mipLevel == rhs.mipLevel )
   16571           && ( baseArrayLayer == rhs.baseArrayLayer )
   16572           && ( layerCount == rhs.layerCount );
   16573     }
   16574 
   16575     bool operator!=( ImageSubresourceLayers const& rhs ) const
   16576     {
   16577       return !operator==( rhs );
   16578     }
   16579 
   16580     ImageAspectFlags aspectMask;
   16581     uint32_t mipLevel;
   16582     uint32_t baseArrayLayer;
   16583     uint32_t layerCount;
   16584   };
   16585   static_assert( sizeof( ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ), "struct and wrapper have different size!" );
   16586 
   16587   struct ImageSubresourceRange
   16588   {
   16589     ImageSubresourceRange( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t baseMipLevel_ = 0, uint32_t levelCount_ = 0, uint32_t baseArrayLayer_ = 0, uint32_t layerCount_ = 0 )
   16590       : aspectMask( aspectMask_ )
   16591       , baseMipLevel( baseMipLevel_ )
   16592       , levelCount( levelCount_ )
   16593       , baseArrayLayer( baseArrayLayer_ )
   16594       , layerCount( layerCount_ )
   16595     {
   16596     }
   16597 
   16598     ImageSubresourceRange( VkImageSubresourceRange const & rhs )
   16599     {
   16600       memcpy( this, &rhs, sizeof( ImageSubresourceRange ) );
   16601     }
   16602 
   16603     ImageSubresourceRange& operator=( VkImageSubresourceRange const & rhs )
   16604     {
   16605       memcpy( this, &rhs, sizeof( ImageSubresourceRange ) );
   16606       return *this;
   16607     }
   16608     ImageSubresourceRange& setAspectMask( ImageAspectFlags aspectMask_ )
   16609     {
   16610       aspectMask = aspectMask_;
   16611       return *this;
   16612     }
   16613 
   16614     ImageSubresourceRange& setBaseMipLevel( uint32_t baseMipLevel_ )
   16615     {
   16616       baseMipLevel = baseMipLevel_;
   16617       return *this;
   16618     }
   16619 
   16620     ImageSubresourceRange& setLevelCount( uint32_t levelCount_ )
   16621     {
   16622       levelCount = levelCount_;
   16623       return *this;
   16624     }
   16625 
   16626     ImageSubresourceRange& setBaseArrayLayer( uint32_t baseArrayLayer_ )
   16627     {
   16628       baseArrayLayer = baseArrayLayer_;
   16629       return *this;
   16630     }
   16631 
   16632     ImageSubresourceRange& setLayerCount( uint32_t layerCount_ )
   16633     {
   16634       layerCount = layerCount_;
   16635       return *this;
   16636     }
   16637 
   16638     operator const VkImageSubresourceRange&() const
   16639     {
   16640       return *reinterpret_cast<const VkImageSubresourceRange*>(this);
   16641     }
   16642 
   16643     bool operator==( ImageSubresourceRange const& rhs ) const
   16644     {
   16645       return ( aspectMask == rhs.aspectMask )
   16646           && ( baseMipLevel == rhs.baseMipLevel )
   16647           && ( levelCount == rhs.levelCount )
   16648           && ( baseArrayLayer == rhs.baseArrayLayer )
   16649           && ( layerCount == rhs.layerCount );
   16650     }
   16651 
   16652     bool operator!=( ImageSubresourceRange const& rhs ) const
   16653     {
   16654       return !operator==( rhs );
   16655     }
   16656 
   16657     ImageAspectFlags aspectMask;
   16658     uint32_t baseMipLevel;
   16659     uint32_t levelCount;
   16660     uint32_t baseArrayLayer;
   16661     uint32_t layerCount;
   16662   };
   16663   static_assert( sizeof( ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ), "struct and wrapper have different size!" );
   16664 
   16665   struct ImageMemoryBarrier
   16666   {
   16667     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() )
   16668       : srcAccessMask( srcAccessMask_ )
   16669       , dstAccessMask( dstAccessMask_ )
   16670       , oldLayout( oldLayout_ )
   16671       , newLayout( newLayout_ )
   16672       , srcQueueFamilyIndex( srcQueueFamilyIndex_ )
   16673       , dstQueueFamilyIndex( dstQueueFamilyIndex_ )
   16674       , image( image_ )
   16675       , subresourceRange( subresourceRange_ )
   16676     {
   16677     }
   16678 
   16679     ImageMemoryBarrier( VkImageMemoryBarrier const & rhs )
   16680     {
   16681       memcpy( this, &rhs, sizeof( ImageMemoryBarrier ) );
   16682     }
   16683 
   16684     ImageMemoryBarrier& operator=( VkImageMemoryBarrier const & rhs )
   16685     {
   16686       memcpy( this, &rhs, sizeof( ImageMemoryBarrier ) );
   16687       return *this;
   16688     }
   16689     ImageMemoryBarrier& setPNext( const void* pNext_ )
   16690     {
   16691       pNext = pNext_;
   16692       return *this;
   16693     }
   16694 
   16695     ImageMemoryBarrier& setSrcAccessMask( AccessFlags srcAccessMask_ )
   16696     {
   16697       srcAccessMask = srcAccessMask_;
   16698       return *this;
   16699     }
   16700 
   16701     ImageMemoryBarrier& setDstAccessMask( AccessFlags dstAccessMask_ )
   16702     {
   16703       dstAccessMask = dstAccessMask_;
   16704       return *this;
   16705     }
   16706 
   16707     ImageMemoryBarrier& setOldLayout( ImageLayout oldLayout_ )
   16708     {
   16709       oldLayout = oldLayout_;
   16710       return *this;
   16711     }
   16712 
   16713     ImageMemoryBarrier& setNewLayout( ImageLayout newLayout_ )
   16714     {
   16715       newLayout = newLayout_;
   16716       return *this;
   16717     }
   16718 
   16719     ImageMemoryBarrier& setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ )
   16720     {
   16721       srcQueueFamilyIndex = srcQueueFamilyIndex_;
   16722       return *this;
   16723     }
   16724 
   16725     ImageMemoryBarrier& setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ )
   16726     {
   16727       dstQueueFamilyIndex = dstQueueFamilyIndex_;
   16728       return *this;
   16729     }
   16730 
   16731     ImageMemoryBarrier& setImage( Image image_ )
   16732     {
   16733       image = image_;
   16734       return *this;
   16735     }
   16736 
   16737     ImageMemoryBarrier& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
   16738     {
   16739       subresourceRange = subresourceRange_;
   16740       return *this;
   16741     }
   16742 
   16743     operator const VkImageMemoryBarrier&() const
   16744     {
   16745       return *reinterpret_cast<const VkImageMemoryBarrier*>(this);
   16746     }
   16747 
   16748     bool operator==( ImageMemoryBarrier const& rhs ) const
   16749     {
   16750       return ( sType == rhs.sType )
   16751           && ( pNext == rhs.pNext )
   16752           && ( srcAccessMask == rhs.srcAccessMask )
   16753           && ( dstAccessMask == rhs.dstAccessMask )
   16754           && ( oldLayout == rhs.oldLayout )
   16755           && ( newLayout == rhs.newLayout )
   16756           && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex )
   16757           && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex )
   16758           && ( image == rhs.image )
   16759           && ( subresourceRange == rhs.subresourceRange );
   16760     }
   16761 
   16762     bool operator!=( ImageMemoryBarrier const& rhs ) const
   16763     {
   16764       return !operator==( rhs );
   16765     }
   16766 
   16767   private:
   16768     StructureType sType = StructureType::eImageMemoryBarrier;
   16769 
   16770   public:
   16771     const void* pNext = nullptr;
   16772     AccessFlags srcAccessMask;
   16773     AccessFlags dstAccessMask;
   16774     ImageLayout oldLayout;
   16775     ImageLayout newLayout;
   16776     uint32_t srcQueueFamilyIndex;
   16777     uint32_t dstQueueFamilyIndex;
   16778     Image image;
   16779     ImageSubresourceRange subresourceRange;
   16780   };
   16781   static_assert( sizeof( ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ), "struct and wrapper have different size!" );
   16782 
   16783   struct ImageViewCreateInfo
   16784   {
   16785     ImageViewCreateInfo( ImageViewCreateFlags flags_ = ImageViewCreateFlags(), Image image_ = Image(), ImageViewType viewType_ = ImageViewType::e1D, Format format_ = Format::eUndefined, ComponentMapping components_ = ComponentMapping(), ImageSubresourceRange subresourceRange_ = ImageSubresourceRange() )
   16786       : flags( flags_ )
   16787       , image( image_ )
   16788       , viewType( viewType_ )
   16789       , format( format_ )
   16790       , components( components_ )
   16791       , subresourceRange( subresourceRange_ )
   16792     {
   16793     }
   16794 
   16795     ImageViewCreateInfo( VkImageViewCreateInfo const & rhs )
   16796     {
   16797       memcpy( this, &rhs, sizeof( ImageViewCreateInfo ) );
   16798     }
   16799 
   16800     ImageViewCreateInfo& operator=( VkImageViewCreateInfo const & rhs )
   16801     {
   16802       memcpy( this, &rhs, sizeof( ImageViewCreateInfo ) );
   16803       return *this;
   16804     }
   16805     ImageViewCreateInfo& setPNext( const void* pNext_ )
   16806     {
   16807       pNext = pNext_;
   16808       return *this;
   16809     }
   16810 
   16811     ImageViewCreateInfo& setFlags( ImageViewCreateFlags flags_ )
   16812     {
   16813       flags = flags_;
   16814       return *this;
   16815     }
   16816 
   16817     ImageViewCreateInfo& setImage( Image image_ )
   16818     {
   16819       image = image_;
   16820       return *this;
   16821     }
   16822 
   16823     ImageViewCreateInfo& setViewType( ImageViewType viewType_ )
   16824     {
   16825       viewType = viewType_;
   16826       return *this;
   16827     }
   16828 
   16829     ImageViewCreateInfo& setFormat( Format format_ )
   16830     {
   16831       format = format_;
   16832       return *this;
   16833     }
   16834 
   16835     ImageViewCreateInfo& setComponents( ComponentMapping components_ )
   16836     {
   16837       components = components_;
   16838       return *this;
   16839     }
   16840 
   16841     ImageViewCreateInfo& setSubresourceRange( ImageSubresourceRange subresourceRange_ )
   16842     {
   16843       subresourceRange = subresourceRange_;
   16844       return *this;
   16845     }
   16846 
   16847     operator const VkImageViewCreateInfo&() const
   16848     {
   16849       return *reinterpret_cast<const VkImageViewCreateInfo*>(this);
   16850     }
   16851 
   16852     bool operator==( ImageViewCreateInfo const& rhs ) const
   16853     {
   16854       return ( sType == rhs.sType )
   16855           && ( pNext == rhs.pNext )
   16856           && ( flags == rhs.flags )
   16857           && ( image == rhs.image )
   16858           && ( viewType == rhs.viewType )
   16859           && ( format == rhs.format )
   16860           && ( components == rhs.components )
   16861           && ( subresourceRange == rhs.subresourceRange );
   16862     }
   16863 
   16864     bool operator!=( ImageViewCreateInfo const& rhs ) const
   16865     {
   16866       return !operator==( rhs );
   16867     }
   16868 
   16869   private:
   16870     StructureType sType = StructureType::eImageViewCreateInfo;
   16871 
   16872   public:
   16873     const void* pNext = nullptr;
   16874     ImageViewCreateFlags flags;
   16875     Image image;
   16876     ImageViewType viewType;
   16877     Format format;
   16878     ComponentMapping components;
   16879     ImageSubresourceRange subresourceRange;
   16880   };
   16881   static_assert( sizeof( ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ), "struct and wrapper have different size!" );
   16882 
   16883   struct ImageCopy
   16884   {
   16885     ImageCopy( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
   16886       : srcSubresource( srcSubresource_ )
   16887       , srcOffset( srcOffset_ )
   16888       , dstSubresource( dstSubresource_ )
   16889       , dstOffset( dstOffset_ )
   16890       , extent( extent_ )
   16891     {
   16892     }
   16893 
   16894     ImageCopy( VkImageCopy const & rhs )
   16895     {
   16896       memcpy( this, &rhs, sizeof( ImageCopy ) );
   16897     }
   16898 
   16899     ImageCopy& operator=( VkImageCopy const & rhs )
   16900     {
   16901       memcpy( this, &rhs, sizeof( ImageCopy ) );
   16902       return *this;
   16903     }
   16904     ImageCopy& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
   16905     {
   16906       srcSubresource = srcSubresource_;
   16907       return *this;
   16908     }
   16909 
   16910     ImageCopy& setSrcOffset( Offset3D srcOffset_ )
   16911     {
   16912       srcOffset = srcOffset_;
   16913       return *this;
   16914     }
   16915 
   16916     ImageCopy& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
   16917     {
   16918       dstSubresource = dstSubresource_;
   16919       return *this;
   16920     }
   16921 
   16922     ImageCopy& setDstOffset( Offset3D dstOffset_ )
   16923     {
   16924       dstOffset = dstOffset_;
   16925       return *this;
   16926     }
   16927 
   16928     ImageCopy& setExtent( Extent3D extent_ )
   16929     {
   16930       extent = extent_;
   16931       return *this;
   16932     }
   16933 
   16934     operator const VkImageCopy&() const
   16935     {
   16936       return *reinterpret_cast<const VkImageCopy*>(this);
   16937     }
   16938 
   16939     bool operator==( ImageCopy const& rhs ) const
   16940     {
   16941       return ( srcSubresource == rhs.srcSubresource )
   16942           && ( srcOffset == rhs.srcOffset )
   16943           && ( dstSubresource == rhs.dstSubresource )
   16944           && ( dstOffset == rhs.dstOffset )
   16945           && ( extent == rhs.extent );
   16946     }
   16947 
   16948     bool operator!=( ImageCopy const& rhs ) const
   16949     {
   16950       return !operator==( rhs );
   16951     }
   16952 
   16953     ImageSubresourceLayers srcSubresource;
   16954     Offset3D srcOffset;
   16955     ImageSubresourceLayers dstSubresource;
   16956     Offset3D dstOffset;
   16957     Extent3D extent;
   16958   };
   16959   static_assert( sizeof( ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" );
   16960 
   16961   struct ImageBlit
   16962   {
   16963     ImageBlit( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& srcOffsets_ = { { Offset3D(), Offset3D() } }, ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), std::array<Offset3D,2> const& dstOffsets_ = { { Offset3D(), Offset3D() } } )
   16964       : srcSubresource( srcSubresource_ )
   16965       , dstSubresource( dstSubresource_ )
   16966     {
   16967       memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
   16968       memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
   16969     }
   16970 
   16971     ImageBlit( VkImageBlit const & rhs )
   16972     {
   16973       memcpy( this, &rhs, sizeof( ImageBlit ) );
   16974     }
   16975 
   16976     ImageBlit& operator=( VkImageBlit const & rhs )
   16977     {
   16978       memcpy( this, &rhs, sizeof( ImageBlit ) );
   16979       return *this;
   16980     }
   16981     ImageBlit& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
   16982     {
   16983       srcSubresource = srcSubresource_;
   16984       return *this;
   16985     }
   16986 
   16987     ImageBlit& setSrcOffsets( std::array<Offset3D,2> srcOffsets_ )
   16988     {
   16989       memcpy( &srcOffsets, srcOffsets_.data(), 2 * sizeof( Offset3D ) );
   16990       return *this;
   16991     }
   16992 
   16993     ImageBlit& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
   16994     {
   16995       dstSubresource = dstSubresource_;
   16996       return *this;
   16997     }
   16998 
   16999     ImageBlit& setDstOffsets( std::array<Offset3D,2> dstOffsets_ )
   17000     {
   17001       memcpy( &dstOffsets, dstOffsets_.data(), 2 * sizeof( Offset3D ) );
   17002       return *this;
   17003     }
   17004 
   17005     operator const VkImageBlit&() const
   17006     {
   17007       return *reinterpret_cast<const VkImageBlit*>(this);
   17008     }
   17009 
   17010     bool operator==( ImageBlit const& rhs ) const
   17011     {
   17012       return ( srcSubresource == rhs.srcSubresource )
   17013           && ( memcmp( srcOffsets, rhs.srcOffsets, 2 * sizeof( Offset3D ) ) == 0 )
   17014           && ( dstSubresource == rhs.dstSubresource )
   17015           && ( memcmp( dstOffsets, rhs.dstOffsets, 2 * sizeof( Offset3D ) ) == 0 );
   17016     }
   17017 
   17018     bool operator!=( ImageBlit const& rhs ) const
   17019     {
   17020       return !operator==( rhs );
   17021     }
   17022 
   17023     ImageSubresourceLayers srcSubresource;
   17024     Offset3D srcOffsets[2];
   17025     ImageSubresourceLayers dstSubresource;
   17026     Offset3D dstOffsets[2];
   17027   };
   17028   static_assert( sizeof( ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" );
   17029 
   17030   struct BufferImageCopy
   17031   {
   17032     BufferImageCopy( DeviceSize bufferOffset_ = 0, uint32_t bufferRowLength_ = 0, uint32_t bufferImageHeight_ = 0, ImageSubresourceLayers imageSubresource_ = ImageSubresourceLayers(), Offset3D imageOffset_ = Offset3D(), Extent3D imageExtent_ = Extent3D() )
   17033       : bufferOffset( bufferOffset_ )
   17034       , bufferRowLength( bufferRowLength_ )
   17035       , bufferImageHeight( bufferImageHeight_ )
   17036       , imageSubresource( imageSubresource_ )
   17037       , imageOffset( imageOffset_ )
   17038       , imageExtent( imageExtent_ )
   17039     {
   17040     }
   17041 
   17042     BufferImageCopy( VkBufferImageCopy const & rhs )
   17043     {
   17044       memcpy( this, &rhs, sizeof( BufferImageCopy ) );
   17045     }
   17046 
   17047     BufferImageCopy& operator=( VkBufferImageCopy const & rhs )
   17048     {
   17049       memcpy( this, &rhs, sizeof( BufferImageCopy ) );
   17050       return *this;
   17051     }
   17052     BufferImageCopy& setBufferOffset( DeviceSize bufferOffset_ )
   17053     {
   17054       bufferOffset = bufferOffset_;
   17055       return *this;
   17056     }
   17057 
   17058     BufferImageCopy& setBufferRowLength( uint32_t bufferRowLength_ )
   17059     {
   17060       bufferRowLength = bufferRowLength_;
   17061       return *this;
   17062     }
   17063 
   17064     BufferImageCopy& setBufferImageHeight( uint32_t bufferImageHeight_ )
   17065     {
   17066       bufferImageHeight = bufferImageHeight_;
   17067       return *this;
   17068     }
   17069 
   17070     BufferImageCopy& setImageSubresource( ImageSubresourceLayers imageSubresource_ )
   17071     {
   17072       imageSubresource = imageSubresource_;
   17073       return *this;
   17074     }
   17075 
   17076     BufferImageCopy& setImageOffset( Offset3D imageOffset_ )
   17077     {
   17078       imageOffset = imageOffset_;
   17079       return *this;
   17080     }
   17081 
   17082     BufferImageCopy& setImageExtent( Extent3D imageExtent_ )
   17083     {
   17084       imageExtent = imageExtent_;
   17085       return *this;
   17086     }
   17087 
   17088     operator const VkBufferImageCopy&() const
   17089     {
   17090       return *reinterpret_cast<const VkBufferImageCopy*>(this);
   17091     }
   17092 
   17093     bool operator==( BufferImageCopy const& rhs ) const
   17094     {
   17095       return ( bufferOffset == rhs.bufferOffset )
   17096           && ( bufferRowLength == rhs.bufferRowLength )
   17097           && ( bufferImageHeight == rhs.bufferImageHeight )
   17098           && ( imageSubresource == rhs.imageSubresource )
   17099           && ( imageOffset == rhs.imageOffset )
   17100           && ( imageExtent == rhs.imageExtent );
   17101     }
   17102 
   17103     bool operator!=( BufferImageCopy const& rhs ) const
   17104     {
   17105       return !operator==( rhs );
   17106     }
   17107 
   17108     DeviceSize bufferOffset;
   17109     uint32_t bufferRowLength;
   17110     uint32_t bufferImageHeight;
   17111     ImageSubresourceLayers imageSubresource;
   17112     Offset3D imageOffset;
   17113     Extent3D imageExtent;
   17114   };
   17115   static_assert( sizeof( BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" );
   17116 
   17117   struct ImageResolve
   17118   {
   17119     ImageResolve( ImageSubresourceLayers srcSubresource_ = ImageSubresourceLayers(), Offset3D srcOffset_ = Offset3D(), ImageSubresourceLayers dstSubresource_ = ImageSubresourceLayers(), Offset3D dstOffset_ = Offset3D(), Extent3D extent_ = Extent3D() )
   17120       : srcSubresource( srcSubresource_ )
   17121       , srcOffset( srcOffset_ )
   17122       , dstSubresource( dstSubresource_ )
   17123       , dstOffset( dstOffset_ )
   17124       , extent( extent_ )
   17125     {
   17126     }
   17127 
   17128     ImageResolve( VkImageResolve const & rhs )
   17129     {
   17130       memcpy( this, &rhs, sizeof( ImageResolve ) );
   17131     }
   17132 
   17133     ImageResolve& operator=( VkImageResolve const & rhs )
   17134     {
   17135       memcpy( this, &rhs, sizeof( ImageResolve ) );
   17136       return *this;
   17137     }
   17138     ImageResolve& setSrcSubresource( ImageSubresourceLayers srcSubresource_ )
   17139     {
   17140       srcSubresource = srcSubresource_;
   17141       return *this;
   17142     }
   17143 
   17144     ImageResolve& setSrcOffset( Offset3D srcOffset_ )
   17145     {
   17146       srcOffset = srcOffset_;
   17147       return *this;
   17148     }
   17149 
   17150     ImageResolve& setDstSubresource( ImageSubresourceLayers dstSubresource_ )
   17151     {
   17152       dstSubresource = dstSubresource_;
   17153       return *this;
   17154     }
   17155 
   17156     ImageResolve& setDstOffset( Offset3D dstOffset_ )
   17157     {
   17158       dstOffset = dstOffset_;
   17159       return *this;
   17160     }
   17161 
   17162     ImageResolve& setExtent( Extent3D extent_ )
   17163     {
   17164       extent = extent_;
   17165       return *this;
   17166     }
   17167 
   17168     operator const VkImageResolve&() const
   17169     {
   17170       return *reinterpret_cast<const VkImageResolve*>(this);
   17171     }
   17172 
   17173     bool operator==( ImageResolve const& rhs ) const
   17174     {
   17175       return ( srcSubresource == rhs.srcSubresource )
   17176           && ( srcOffset == rhs.srcOffset )
   17177           && ( dstSubresource == rhs.dstSubresource )
   17178           && ( dstOffset == rhs.dstOffset )
   17179           && ( extent == rhs.extent );
   17180     }
   17181 
   17182     bool operator!=( ImageResolve const& rhs ) const
   17183     {
   17184       return !operator==( rhs );
   17185     }
   17186 
   17187     ImageSubresourceLayers srcSubresource;
   17188     Offset3D srcOffset;
   17189     ImageSubresourceLayers dstSubresource;
   17190     Offset3D dstOffset;
   17191     Extent3D extent;
   17192   };
   17193   static_assert( sizeof( ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" );
   17194 
   17195   struct ClearAttachment
   17196   {
   17197     ClearAttachment( ImageAspectFlags aspectMask_ = ImageAspectFlags(), uint32_t colorAttachment_ = 0, ClearValue clearValue_ = ClearValue() )
   17198       : aspectMask( aspectMask_ )
   17199       , colorAttachment( colorAttachment_ )
   17200       , clearValue( clearValue_ )
   17201     {
   17202     }
   17203 
   17204     ClearAttachment( VkClearAttachment const & rhs )
   17205     {
   17206       memcpy( this, &rhs, sizeof( ClearAttachment ) );
   17207     }
   17208 
   17209     ClearAttachment& operator=( VkClearAttachment const & rhs )
   17210     {
   17211       memcpy( this, &rhs, sizeof( ClearAttachment ) );
   17212       return *this;
   17213     }
   17214     ClearAttachment& setAspectMask( ImageAspectFlags aspectMask_ )
   17215     {
   17216       aspectMask = aspectMask_;
   17217       return *this;
   17218     }
   17219 
   17220     ClearAttachment& setColorAttachment( uint32_t colorAttachment_ )
   17221     {
   17222       colorAttachment = colorAttachment_;
   17223       return *this;
   17224     }
   17225 
   17226     ClearAttachment& setClearValue( ClearValue clearValue_ )
   17227     {
   17228       clearValue = clearValue_;
   17229       return *this;
   17230     }
   17231 
   17232     operator const VkClearAttachment&() const
   17233     {
   17234       return *reinterpret_cast<const VkClearAttachment*>(this);
   17235     }
   17236 
   17237     ImageAspectFlags aspectMask;
   17238     uint32_t colorAttachment;
   17239     ClearValue clearValue;
   17240   };
   17241   static_assert( sizeof( ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" );
   17242 
   17243   struct InputAttachmentAspectReferenceKHR
   17244   {
   17245     InputAttachmentAspectReferenceKHR( uint32_t subpass_ = 0, uint32_t inputAttachmentIndex_ = 0, ImageAspectFlags aspectMask_ = ImageAspectFlags() )
   17246       : subpass( subpass_ )
   17247       , inputAttachmentIndex( inputAttachmentIndex_ )
   17248       , aspectMask( aspectMask_ )
   17249     {
   17250     }
   17251 
   17252     InputAttachmentAspectReferenceKHR( VkInputAttachmentAspectReferenceKHR const & rhs )
   17253     {
   17254       memcpy( this, &rhs, sizeof( InputAttachmentAspectReferenceKHR ) );
   17255     }
   17256 
   17257     InputAttachmentAspectReferenceKHR& operator=( VkInputAttachmentAspectReferenceKHR const & rhs )
   17258     {
   17259       memcpy( this, &rhs, sizeof( InputAttachmentAspectReferenceKHR ) );
   17260       return *this;
   17261     }
   17262     InputAttachmentAspectReferenceKHR& setSubpass( uint32_t subpass_ )
   17263     {
   17264       subpass = subpass_;
   17265       return *this;
   17266     }
   17267 
   17268     InputAttachmentAspectReferenceKHR& setInputAttachmentIndex( uint32_t inputAttachmentIndex_ )
   17269     {
   17270       inputAttachmentIndex = inputAttachmentIndex_;
   17271       return *this;
   17272     }
   17273 
   17274     InputAttachmentAspectReferenceKHR& setAspectMask( ImageAspectFlags aspectMask_ )
   17275     {
   17276       aspectMask = aspectMask_;
   17277       return *this;
   17278     }
   17279 
   17280     operator const VkInputAttachmentAspectReferenceKHR&() const
   17281     {
   17282       return *reinterpret_cast<const VkInputAttachmentAspectReferenceKHR*>(this);
   17283     }
   17284 
   17285     bool operator==( InputAttachmentAspectReferenceKHR const& rhs ) const
   17286     {
   17287       return ( subpass == rhs.subpass )
   17288           && ( inputAttachmentIndex == rhs.inputAttachmentIndex )
   17289           && ( aspectMask == rhs.aspectMask );
   17290     }
   17291 
   17292     bool operator!=( InputAttachmentAspectReferenceKHR const& rhs ) const
   17293     {
   17294       return !operator==( rhs );
   17295     }
   17296 
   17297     uint32_t subpass;
   17298     uint32_t inputAttachmentIndex;
   17299     ImageAspectFlags aspectMask;
   17300   };
   17301   static_assert( sizeof( InputAttachmentAspectReferenceKHR ) == sizeof( VkInputAttachmentAspectReferenceKHR ), "struct and wrapper have different size!" );
   17302 
   17303   struct RenderPassInputAttachmentAspectCreateInfoKHR
   17304   {
   17305     RenderPassInputAttachmentAspectCreateInfoKHR( uint32_t aspectReferenceCount_ = 0, const InputAttachmentAspectReferenceKHR* pAspectReferences_ = nullptr )
   17306       : aspectReferenceCount( aspectReferenceCount_ )
   17307       , pAspectReferences( pAspectReferences_ )
   17308     {
   17309     }
   17310 
   17311     RenderPassInputAttachmentAspectCreateInfoKHR( VkRenderPassInputAttachmentAspectCreateInfoKHR const & rhs )
   17312     {
   17313       memcpy( this, &rhs, sizeof( RenderPassInputAttachmentAspectCreateInfoKHR ) );
   17314     }
   17315 
   17316     RenderPassInputAttachmentAspectCreateInfoKHR& operator=( VkRenderPassInputAttachmentAspectCreateInfoKHR const & rhs )
   17317     {
   17318       memcpy( this, &rhs, sizeof( RenderPassInputAttachmentAspectCreateInfoKHR ) );
   17319       return *this;
   17320     }
   17321     RenderPassInputAttachmentAspectCreateInfoKHR& setPNext( const void* pNext_ )
   17322     {
   17323       pNext = pNext_;
   17324       return *this;
   17325     }
   17326 
   17327     RenderPassInputAttachmentAspectCreateInfoKHR& setAspectReferenceCount( uint32_t aspectReferenceCount_ )
   17328     {
   17329       aspectReferenceCount = aspectReferenceCount_;
   17330       return *this;
   17331     }
   17332 
   17333     RenderPassInputAttachmentAspectCreateInfoKHR& setPAspectReferences( const InputAttachmentAspectReferenceKHR* pAspectReferences_ )
   17334     {
   17335       pAspectReferences = pAspectReferences_;
   17336       return *this;
   17337     }
   17338 
   17339     operator const VkRenderPassInputAttachmentAspectCreateInfoKHR&() const
   17340     {
   17341       return *reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfoKHR*>(this);
   17342     }
   17343 
   17344     bool operator==( RenderPassInputAttachmentAspectCreateInfoKHR const& rhs ) const
   17345     {
   17346       return ( sType == rhs.sType )
   17347           && ( pNext == rhs.pNext )
   17348           && ( aspectReferenceCount == rhs.aspectReferenceCount )
   17349           && ( pAspectReferences == rhs.pAspectReferences );
   17350     }
   17351 
   17352     bool operator!=( RenderPassInputAttachmentAspectCreateInfoKHR const& rhs ) const
   17353     {
   17354       return !operator==( rhs );
   17355     }
   17356 
   17357   private:
   17358     StructureType sType = StructureType::eRenderPassInputAttachmentAspectCreateInfoKHR;
   17359 
   17360   public:
   17361     const void* pNext = nullptr;
   17362     uint32_t aspectReferenceCount;
   17363     const InputAttachmentAspectReferenceKHR* pAspectReferences;
   17364   };
   17365   static_assert( sizeof( RenderPassInputAttachmentAspectCreateInfoKHR ) == sizeof( VkRenderPassInputAttachmentAspectCreateInfoKHR ), "struct and wrapper have different size!" );
   17366 
   17367   struct BindImagePlaneMemoryInfoKHR
   17368   {
   17369     BindImagePlaneMemoryInfoKHR( ImageAspectFlagBits planeAspect_ = ImageAspectFlagBits::eColor )
   17370       : planeAspect( planeAspect_ )
   17371     {
   17372     }
   17373 
   17374     BindImagePlaneMemoryInfoKHR( VkBindImagePlaneMemoryInfoKHR const & rhs )
   17375     {
   17376       memcpy( this, &rhs, sizeof( BindImagePlaneMemoryInfoKHR ) );
   17377     }
   17378 
   17379     BindImagePlaneMemoryInfoKHR& operator=( VkBindImagePlaneMemoryInfoKHR const & rhs )
   17380     {
   17381       memcpy( this, &rhs, sizeof( BindImagePlaneMemoryInfoKHR ) );
   17382       return *this;
   17383     }
   17384     BindImagePlaneMemoryInfoKHR& setPNext( const void* pNext_ )
   17385     {
   17386       pNext = pNext_;
   17387       return *this;
   17388     }
   17389 
   17390     BindImagePlaneMemoryInfoKHR& setPlaneAspect( ImageAspectFlagBits planeAspect_ )
   17391     {
   17392       planeAspect = planeAspect_;
   17393       return *this;
   17394     }
   17395 
   17396     operator const VkBindImagePlaneMemoryInfoKHR&() const
   17397     {
   17398       return *reinterpret_cast<const VkBindImagePlaneMemoryInfoKHR*>(this);
   17399     }
   17400 
   17401     bool operator==( BindImagePlaneMemoryInfoKHR const& rhs ) const
   17402     {
   17403       return ( sType == rhs.sType )
   17404           && ( pNext == rhs.pNext )
   17405           && ( planeAspect == rhs.planeAspect );
   17406     }
   17407 
   17408     bool operator!=( BindImagePlaneMemoryInfoKHR const& rhs ) const
   17409     {
   17410       return !operator==( rhs );
   17411     }
   17412 
   17413   private:
   17414     StructureType sType = StructureType::eBindImagePlaneMemoryInfoKHR;
   17415 
   17416   public:
   17417     const void* pNext = nullptr;
   17418     ImageAspectFlagBits planeAspect;
   17419   };
   17420   static_assert( sizeof( BindImagePlaneMemoryInfoKHR ) == sizeof( VkBindImagePlaneMemoryInfoKHR ), "struct and wrapper have different size!" );
   17421 
   17422   struct ImagePlaneMemoryRequirementsInfoKHR
   17423   {
   17424     ImagePlaneMemoryRequirementsInfoKHR( ImageAspectFlagBits planeAspect_ = ImageAspectFlagBits::eColor )
   17425       : planeAspect( planeAspect_ )
   17426     {
   17427     }
   17428 
   17429     ImagePlaneMemoryRequirementsInfoKHR( VkImagePlaneMemoryRequirementsInfoKHR const & rhs )
   17430     {
   17431       memcpy( this, &rhs, sizeof( ImagePlaneMemoryRequirementsInfoKHR ) );
   17432     }
   17433 
   17434     ImagePlaneMemoryRequirementsInfoKHR& operator=( VkImagePlaneMemoryRequirementsInfoKHR const & rhs )
   17435     {
   17436       memcpy( this, &rhs, sizeof( ImagePlaneMemoryRequirementsInfoKHR ) );
   17437       return *this;
   17438     }
   17439     ImagePlaneMemoryRequirementsInfoKHR& setPNext( const void* pNext_ )
   17440     {
   17441       pNext = pNext_;
   17442       return *this;
   17443     }
   17444 
   17445     ImagePlaneMemoryRequirementsInfoKHR& setPlaneAspect( ImageAspectFlagBits planeAspect_ )
   17446     {
   17447       planeAspect = planeAspect_;
   17448       return *this;
   17449     }
   17450 
   17451     operator const VkImagePlaneMemoryRequirementsInfoKHR&() const
   17452     {
   17453       return *reinterpret_cast<const VkImagePlaneMemoryRequirementsInfoKHR*>(this);
   17454     }
   17455 
   17456     bool operator==( ImagePlaneMemoryRequirementsInfoKHR const& rhs ) const
   17457     {
   17458       return ( sType == rhs.sType )
   17459           && ( pNext == rhs.pNext )
   17460           && ( planeAspect == rhs.planeAspect );
   17461     }
   17462 
   17463     bool operator!=( ImagePlaneMemoryRequirementsInfoKHR const& rhs ) const
   17464     {
   17465       return !operator==( rhs );
   17466     }
   17467 
   17468   private:
   17469     StructureType sType = StructureType::eImagePlaneMemoryRequirementsInfoKHR;
   17470 
   17471   public:
   17472     const void* pNext = nullptr;
   17473     ImageAspectFlagBits planeAspect;
   17474   };
   17475   static_assert( sizeof( ImagePlaneMemoryRequirementsInfoKHR ) == sizeof( VkImagePlaneMemoryRequirementsInfoKHR ), "struct and wrapper have different size!" );
   17476 
   17477   enum class SparseImageFormatFlagBits
   17478   {
   17479     eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,
   17480     eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,
   17481     eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
   17482   };
   17483 
   17484   using SparseImageFormatFlags = Flags<SparseImageFormatFlagBits, VkSparseImageFormatFlags>;
   17485 
   17486   VULKAN_HPP_INLINE SparseImageFormatFlags operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 )
   17487   {
   17488     return SparseImageFormatFlags( bit0 ) | bit1;
   17489   }
   17490 
   17491   VULKAN_HPP_INLINE SparseImageFormatFlags operator~( SparseImageFormatFlagBits bits )
   17492   {
   17493     return ~( SparseImageFormatFlags( bits ) );
   17494   }
   17495 
   17496   template <> struct FlagTraits<SparseImageFormatFlagBits>
   17497   {
   17498     enum
   17499     {
   17500       allFlags = VkFlags(SparseImageFormatFlagBits::eSingleMiptail) | VkFlags(SparseImageFormatFlagBits::eAlignedMipSize) | VkFlags(SparseImageFormatFlagBits::eNonstandardBlockSize)
   17501     };
   17502   };
   17503 
   17504   struct SparseImageFormatProperties
   17505   {
   17506     operator const VkSparseImageFormatProperties&() const
   17507     {
   17508       return *reinterpret_cast<const VkSparseImageFormatProperties*>(this);
   17509     }
   17510 
   17511     bool operator==( SparseImageFormatProperties const& rhs ) const
   17512     {
   17513       return ( aspectMask == rhs.aspectMask )
   17514           && ( imageGranularity == rhs.imageGranularity )
   17515           && ( flags == rhs.flags );
   17516     }
   17517 
   17518     bool operator!=( SparseImageFormatProperties const& rhs ) const
   17519     {
   17520       return !operator==( rhs );
   17521     }
   17522 
   17523     ImageAspectFlags aspectMask;
   17524     Extent3D imageGranularity;
   17525     SparseImageFormatFlags flags;
   17526   };
   17527   static_assert( sizeof( SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ), "struct and wrapper have different size!" );
   17528 
   17529   struct SparseImageMemoryRequirements
   17530   {
   17531     operator const VkSparseImageMemoryRequirements&() const
   17532     {
   17533       return *reinterpret_cast<const VkSparseImageMemoryRequirements*>(this);
   17534     }
   17535 
   17536     bool operator==( SparseImageMemoryRequirements const& rhs ) const
   17537     {
   17538       return ( formatProperties == rhs.formatProperties )
   17539           && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod )
   17540           && ( imageMipTailSize == rhs.imageMipTailSize )
   17541           && ( imageMipTailOffset == rhs.imageMipTailOffset )
   17542           && ( imageMipTailStride == rhs.imageMipTailStride );
   17543     }
   17544 
   17545     bool operator!=( SparseImageMemoryRequirements const& rhs ) const
   17546     {
   17547       return !operator==( rhs );
   17548     }
   17549 
   17550     SparseImageFormatProperties formatProperties;
   17551     uint32_t imageMipTailFirstLod;
   17552     DeviceSize imageMipTailSize;
   17553     DeviceSize imageMipTailOffset;
   17554     DeviceSize imageMipTailStride;
   17555   };
   17556   static_assert( sizeof( SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ), "struct and wrapper have different size!" );
   17557 
   17558   struct SparseImageFormatProperties2KHR
   17559   {
   17560     operator const VkSparseImageFormatProperties2KHR&() const
   17561     {
   17562       return *reinterpret_cast<const VkSparseImageFormatProperties2KHR*>(this);
   17563     }
   17564 
   17565     bool operator==( SparseImageFormatProperties2KHR const& rhs ) const
   17566     {
   17567       return ( sType == rhs.sType )
   17568           && ( pNext == rhs.pNext )
   17569           && ( properties == rhs.properties );
   17570     }
   17571 
   17572     bool operator!=( SparseImageFormatProperties2KHR const& rhs ) const
   17573     {
   17574       return !operator==( rhs );
   17575     }
   17576 
   17577   private:
   17578     StructureType sType = StructureType::eSparseImageFormatProperties2KHR;
   17579 
   17580   public:
   17581     void* pNext = nullptr;
   17582     SparseImageFormatProperties properties;
   17583   };
   17584   static_assert( sizeof( SparseImageFormatProperties2KHR ) == sizeof( VkSparseImageFormatProperties2KHR ), "struct and wrapper have different size!" );
   17585 
   17586   struct SparseImageMemoryRequirements2KHR
   17587   {
   17588     operator const VkSparseImageMemoryRequirements2KHR&() const
   17589     {
   17590       return *reinterpret_cast<const VkSparseImageMemoryRequirements2KHR*>(this);
   17591     }
   17592 
   17593     bool operator==( SparseImageMemoryRequirements2KHR const& rhs ) const
   17594     {
   17595       return ( sType == rhs.sType )
   17596           && ( pNext == rhs.pNext )
   17597           && ( memoryRequirements == rhs.memoryRequirements );
   17598     }
   17599 
   17600     bool operator!=( SparseImageMemoryRequirements2KHR const& rhs ) const
   17601     {
   17602       return !operator==( rhs );
   17603     }
   17604 
   17605   private:
   17606     StructureType sType = StructureType::eSparseImageMemoryRequirements2KHR;
   17607 
   17608   public:
   17609     void* pNext = nullptr;
   17610     SparseImageMemoryRequirements memoryRequirements;
   17611   };
   17612   static_assert( sizeof( SparseImageMemoryRequirements2KHR ) == sizeof( VkSparseImageMemoryRequirements2KHR ), "struct and wrapper have different size!" );
   17613 
   17614   enum class SparseMemoryBindFlagBits
   17615   {
   17616     eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT
   17617   };
   17618 
   17619   using SparseMemoryBindFlags = Flags<SparseMemoryBindFlagBits, VkSparseMemoryBindFlags>;
   17620 
   17621   VULKAN_HPP_INLINE SparseMemoryBindFlags operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 )
   17622   {
   17623     return SparseMemoryBindFlags( bit0 ) | bit1;
   17624   }
   17625 
   17626   VULKAN_HPP_INLINE SparseMemoryBindFlags operator~( SparseMemoryBindFlagBits bits )
   17627   {
   17628     return ~( SparseMemoryBindFlags( bits ) );
   17629   }
   17630 
   17631   template <> struct FlagTraits<SparseMemoryBindFlagBits>
   17632   {
   17633     enum
   17634     {
   17635       allFlags = VkFlags(SparseMemoryBindFlagBits::eMetadata)
   17636     };
   17637   };
   17638 
   17639   struct SparseMemoryBind
   17640   {
   17641     SparseMemoryBind( DeviceSize resourceOffset_ = 0, DeviceSize size_ = 0, DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
   17642       : resourceOffset( resourceOffset_ )
   17643       , size( size_ )
   17644       , memory( memory_ )
   17645       , memoryOffset( memoryOffset_ )
   17646       , flags( flags_ )
   17647     {
   17648     }
   17649 
   17650     SparseMemoryBind( VkSparseMemoryBind const & rhs )
   17651     {
   17652       memcpy( this, &rhs, sizeof( SparseMemoryBind ) );
   17653     }
   17654 
   17655     SparseMemoryBind& operator=( VkSparseMemoryBind const & rhs )
   17656     {
   17657       memcpy( this, &rhs, sizeof( SparseMemoryBind ) );
   17658       return *this;
   17659     }
   17660     SparseMemoryBind& setResourceOffset( DeviceSize resourceOffset_ )
   17661     {
   17662       resourceOffset = resourceOffset_;
   17663       return *this;
   17664     }
   17665 
   17666     SparseMemoryBind& setSize( DeviceSize size_ )
   17667     {
   17668       size = size_;
   17669       return *this;
   17670     }
   17671 
   17672     SparseMemoryBind& setMemory( DeviceMemory memory_ )
   17673     {
   17674       memory = memory_;
   17675       return *this;
   17676     }
   17677 
   17678     SparseMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
   17679     {
   17680       memoryOffset = memoryOffset_;
   17681       return *this;
   17682     }
   17683 
   17684     SparseMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
   17685     {
   17686       flags = flags_;
   17687       return *this;
   17688     }
   17689 
   17690     operator const VkSparseMemoryBind&() const
   17691     {
   17692       return *reinterpret_cast<const VkSparseMemoryBind*>(this);
   17693     }
   17694 
   17695     bool operator==( SparseMemoryBind const& rhs ) const
   17696     {
   17697       return ( resourceOffset == rhs.resourceOffset )
   17698           && ( size == rhs.size )
   17699           && ( memory == rhs.memory )
   17700           && ( memoryOffset == rhs.memoryOffset )
   17701           && ( flags == rhs.flags );
   17702     }
   17703 
   17704     bool operator!=( SparseMemoryBind const& rhs ) const
   17705     {
   17706       return !operator==( rhs );
   17707     }
   17708 
   17709     DeviceSize resourceOffset;
   17710     DeviceSize size;
   17711     DeviceMemory memory;
   17712     DeviceSize memoryOffset;
   17713     SparseMemoryBindFlags flags;
   17714   };
   17715   static_assert( sizeof( SparseMemoryBind ) == sizeof( VkSparseMemoryBind ), "struct and wrapper have different size!" );
   17716 
   17717   struct SparseImageMemoryBind
   17718   {
   17719     SparseImageMemoryBind( ImageSubresource subresource_ = ImageSubresource(), Offset3D offset_ = Offset3D(), Extent3D extent_ = Extent3D(), DeviceMemory memory_ = DeviceMemory(), DeviceSize memoryOffset_ = 0, SparseMemoryBindFlags flags_ = SparseMemoryBindFlags() )
   17720       : subresource( subresource_ )
   17721       , offset( offset_ )
   17722       , extent( extent_ )
   17723       , memory( memory_ )
   17724       , memoryOffset( memoryOffset_ )
   17725       , flags( flags_ )
   17726     {
   17727     }
   17728 
   17729     SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs )
   17730     {
   17731       memcpy( this, &rhs, sizeof( SparseImageMemoryBind ) );
   17732     }
   17733 
   17734     SparseImageMemoryBind& operator=( VkSparseImageMemoryBind const & rhs )
   17735     {
   17736       memcpy( this, &rhs, sizeof( SparseImageMemoryBind ) );
   17737       return *this;
   17738     }
   17739     SparseImageMemoryBind& setSubresource( ImageSubresource subresource_ )
   17740     {
   17741       subresource = subresource_;
   17742       return *this;
   17743     }
   17744 
   17745     SparseImageMemoryBind& setOffset( Offset3D offset_ )
   17746     {
   17747       offset = offset_;
   17748       return *this;
   17749     }
   17750 
   17751     SparseImageMemoryBind& setExtent( Extent3D extent_ )
   17752     {
   17753       extent = extent_;
   17754       return *this;
   17755     }
   17756 
   17757     SparseImageMemoryBind& setMemory( DeviceMemory memory_ )
   17758     {
   17759       memory = memory_;
   17760       return *this;
   17761     }
   17762 
   17763     SparseImageMemoryBind& setMemoryOffset( DeviceSize memoryOffset_ )
   17764     {
   17765       memoryOffset = memoryOffset_;
   17766       return *this;
   17767     }
   17768 
   17769     SparseImageMemoryBind& setFlags( SparseMemoryBindFlags flags_ )
   17770     {
   17771       flags = flags_;
   17772       return *this;
   17773     }
   17774 
   17775     operator const VkSparseImageMemoryBind&() const
   17776     {
   17777       return *reinterpret_cast<const VkSparseImageMemoryBind*>(this);
   17778     }
   17779 
   17780     bool operator==( SparseImageMemoryBind const& rhs ) const
   17781     {
   17782       return ( subresource == rhs.subresource )
   17783           && ( offset == rhs.offset )
   17784           && ( extent == rhs.extent )
   17785           && ( memory == rhs.memory )
   17786           && ( memoryOffset == rhs.memoryOffset )
   17787           && ( flags == rhs.flags );
   17788     }
   17789 
   17790     bool operator!=( SparseImageMemoryBind const& rhs ) const
   17791     {
   17792       return !operator==( rhs );
   17793     }
   17794 
   17795     ImageSubresource subresource;
   17796     Offset3D offset;
   17797     Extent3D extent;
   17798     DeviceMemory memory;
   17799     DeviceSize memoryOffset;
   17800     SparseMemoryBindFlags flags;
   17801   };
   17802   static_assert( sizeof( SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ), "struct and wrapper have different size!" );
   17803 
   17804   struct SparseBufferMemoryBindInfo
   17805   {
   17806     SparseBufferMemoryBindInfo( Buffer buffer_ = Buffer(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
   17807       : buffer( buffer_ )
   17808       , bindCount( bindCount_ )
   17809       , pBinds( pBinds_ )
   17810     {
   17811     }
   17812 
   17813     SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs )
   17814     {
   17815       memcpy( this, &rhs, sizeof( SparseBufferMemoryBindInfo ) );
   17816     }
   17817 
   17818     SparseBufferMemoryBindInfo& operator=( VkSparseBufferMemoryBindInfo const & rhs )
   17819     {
   17820       memcpy( this, &rhs, sizeof( SparseBufferMemoryBindInfo ) );
   17821       return *this;
   17822     }
   17823     SparseBufferMemoryBindInfo& setBuffer( Buffer buffer_ )
   17824     {
   17825       buffer = buffer_;
   17826       return *this;
   17827     }
   17828 
   17829     SparseBufferMemoryBindInfo& setBindCount( uint32_t bindCount_ )
   17830     {
   17831       bindCount = bindCount_;
   17832       return *this;
   17833     }
   17834 
   17835     SparseBufferMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
   17836     {
   17837       pBinds = pBinds_;
   17838       return *this;
   17839     }
   17840 
   17841     operator const VkSparseBufferMemoryBindInfo&() const
   17842     {
   17843       return *reinterpret_cast<const VkSparseBufferMemoryBindInfo*>(this);
   17844     }
   17845 
   17846     bool operator==( SparseBufferMemoryBindInfo const& rhs ) const
   17847     {
   17848       return ( buffer == rhs.buffer )
   17849           && ( bindCount == rhs.bindCount )
   17850           && ( pBinds == rhs.pBinds );
   17851     }
   17852 
   17853     bool operator!=( SparseBufferMemoryBindInfo const& rhs ) const
   17854     {
   17855       return !operator==( rhs );
   17856     }
   17857 
   17858     Buffer buffer;
   17859     uint32_t bindCount;
   17860     const SparseMemoryBind* pBinds;
   17861   };
   17862   static_assert( sizeof( SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ), "struct and wrapper have different size!" );
   17863 
   17864   struct SparseImageOpaqueMemoryBindInfo
   17865   {
   17866     SparseImageOpaqueMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseMemoryBind* pBinds_ = nullptr )
   17867       : image( image_ )
   17868       , bindCount( bindCount_ )
   17869       , pBinds( pBinds_ )
   17870     {
   17871     }
   17872 
   17873     SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs )
   17874     {
   17875       memcpy( this, &rhs, sizeof( SparseImageOpaqueMemoryBindInfo ) );
   17876     }
   17877 
   17878     SparseImageOpaqueMemoryBindInfo& operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs )
   17879     {
   17880       memcpy( this, &rhs, sizeof( SparseImageOpaqueMemoryBindInfo ) );
   17881       return *this;
   17882     }
   17883     SparseImageOpaqueMemoryBindInfo& setImage( Image image_ )
   17884     {
   17885       image = image_;
   17886       return *this;
   17887     }
   17888 
   17889     SparseImageOpaqueMemoryBindInfo& setBindCount( uint32_t bindCount_ )
   17890     {
   17891       bindCount = bindCount_;
   17892       return *this;
   17893     }
   17894 
   17895     SparseImageOpaqueMemoryBindInfo& setPBinds( const SparseMemoryBind* pBinds_ )
   17896     {
   17897       pBinds = pBinds_;
   17898       return *this;
   17899     }
   17900 
   17901     operator const VkSparseImageOpaqueMemoryBindInfo&() const
   17902     {
   17903       return *reinterpret_cast<const VkSparseImageOpaqueMemoryBindInfo*>(this);
   17904     }
   17905 
   17906     bool operator==( SparseImageOpaqueMemoryBindInfo const& rhs ) const
   17907     {
   17908       return ( image == rhs.image )
   17909           && ( bindCount == rhs.bindCount )
   17910           && ( pBinds == rhs.pBinds );
   17911     }
   17912 
   17913     bool operator!=( SparseImageOpaqueMemoryBindInfo const& rhs ) const
   17914     {
   17915       return !operator==( rhs );
   17916     }
   17917 
   17918     Image image;
   17919     uint32_t bindCount;
   17920     const SparseMemoryBind* pBinds;
   17921   };
   17922   static_assert( sizeof( SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ), "struct and wrapper have different size!" );
   17923 
   17924   struct SparseImageMemoryBindInfo
   17925   {
   17926     SparseImageMemoryBindInfo( Image image_ = Image(), uint32_t bindCount_ = 0, const SparseImageMemoryBind* pBinds_ = nullptr )
   17927       : image( image_ )
   17928       , bindCount( bindCount_ )
   17929       , pBinds( pBinds_ )
   17930     {
   17931     }
   17932 
   17933     SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs )
   17934     {
   17935       memcpy( this, &rhs, sizeof( SparseImageMemoryBindInfo ) );
   17936     }
   17937 
   17938     SparseImageMemoryBindInfo& operator=( VkSparseImageMemoryBindInfo const & rhs )
   17939     {
   17940       memcpy( this, &rhs, sizeof( SparseImageMemoryBindInfo ) );
   17941       return *this;
   17942     }
   17943     SparseImageMemoryBindInfo& setImage( Image image_ )
   17944     {
   17945       image = image_;
   17946       return *this;
   17947     }
   17948 
   17949     SparseImageMemoryBindInfo& setBindCount( uint32_t bindCount_ )
   17950     {
   17951       bindCount = bindCount_;
   17952       return *this;
   17953     }
   17954 
   17955     SparseImageMemoryBindInfo& setPBinds( const SparseImageMemoryBind* pBinds_ )
   17956     {
   17957       pBinds = pBinds_;
   17958       return *this;
   17959     }
   17960 
   17961     operator const VkSparseImageMemoryBindInfo&() const
   17962     {
   17963       return *reinterpret_cast<const VkSparseImageMemoryBindInfo*>(this);
   17964     }
   17965 
   17966     bool operator==( SparseImageMemoryBindInfo const& rhs ) const
   17967     {
   17968       return ( image == rhs.image )
   17969           && ( bindCount == rhs.bindCount )
   17970           && ( pBinds == rhs.pBinds );
   17971     }
   17972 
   17973     bool operator!=( SparseImageMemoryBindInfo const& rhs ) const
   17974     {
   17975       return !operator==( rhs );
   17976     }
   17977 
   17978     Image image;
   17979     uint32_t bindCount;
   17980     const SparseImageMemoryBind* pBinds;
   17981   };
   17982   static_assert( sizeof( SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ), "struct and wrapper have different size!" );
   17983 
   17984   struct BindSparseInfo
   17985   {
   17986     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 )
   17987       : waitSemaphoreCount( waitSemaphoreCount_ )
   17988       , pWaitSemaphores( pWaitSemaphores_ )
   17989       , bufferBindCount( bufferBindCount_ )
   17990       , pBufferBinds( pBufferBinds_ )
   17991       , imageOpaqueBindCount( imageOpaqueBindCount_ )
   17992       , pImageOpaqueBinds( pImageOpaqueBinds_ )
   17993       , imageBindCount( imageBindCount_ )
   17994       , pImageBinds( pImageBinds_ )
   17995       , signalSemaphoreCount( signalSemaphoreCount_ )
   17996       , pSignalSemaphores( pSignalSemaphores_ )
   17997     {
   17998     }
   17999 
   18000     BindSparseInfo( VkBindSparseInfo const & rhs )
   18001     {
   18002       memcpy( this, &rhs, sizeof( BindSparseInfo ) );
   18003     }
   18004 
   18005     BindSparseInfo& operator=( VkBindSparseInfo const & rhs )
   18006     {
   18007       memcpy( this, &rhs, sizeof( BindSparseInfo ) );
   18008       return *this;
   18009     }
   18010     BindSparseInfo& setPNext( const void* pNext_ )
   18011     {
   18012       pNext = pNext_;
   18013       return *this;
   18014     }
   18015 
   18016     BindSparseInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
   18017     {
   18018       waitSemaphoreCount = waitSemaphoreCount_;
   18019       return *this;
   18020     }
   18021 
   18022     BindSparseInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
   18023     {
   18024       pWaitSemaphores = pWaitSemaphores_;
   18025       return *this;
   18026     }
   18027 
   18028     BindSparseInfo& setBufferBindCount( uint32_t bufferBindCount_ )
   18029     {
   18030       bufferBindCount = bufferBindCount_;
   18031       return *this;
   18032     }
   18033 
   18034     BindSparseInfo& setPBufferBinds( const SparseBufferMemoryBindInfo* pBufferBinds_ )
   18035     {
   18036       pBufferBinds = pBufferBinds_;
   18037       return *this;
   18038     }
   18039 
   18040     BindSparseInfo& setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ )
   18041     {
   18042       imageOpaqueBindCount = imageOpaqueBindCount_;
   18043       return *this;
   18044     }
   18045 
   18046     BindSparseInfo& setPImageOpaqueBinds( const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds_ )
   18047     {
   18048       pImageOpaqueBinds = pImageOpaqueBinds_;
   18049       return *this;
   18050     }
   18051 
   18052     BindSparseInfo& setImageBindCount( uint32_t imageBindCount_ )
   18053     {
   18054       imageBindCount = imageBindCount_;
   18055       return *this;
   18056     }
   18057 
   18058     BindSparseInfo& setPImageBinds( const SparseImageMemoryBindInfo* pImageBinds_ )
   18059     {
   18060       pImageBinds = pImageBinds_;
   18061       return *this;
   18062     }
   18063 
   18064     BindSparseInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
   18065     {
   18066       signalSemaphoreCount = signalSemaphoreCount_;
   18067       return *this;
   18068     }
   18069 
   18070     BindSparseInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
   18071     {
   18072       pSignalSemaphores = pSignalSemaphores_;
   18073       return *this;
   18074     }
   18075 
   18076     operator const VkBindSparseInfo&() const
   18077     {
   18078       return *reinterpret_cast<const VkBindSparseInfo*>(this);
   18079     }
   18080 
   18081     bool operator==( BindSparseInfo const& rhs ) const
   18082     {
   18083       return ( sType == rhs.sType )
   18084           && ( pNext == rhs.pNext )
   18085           && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
   18086           && ( pWaitSemaphores == rhs.pWaitSemaphores )
   18087           && ( bufferBindCount == rhs.bufferBindCount )
   18088           && ( pBufferBinds == rhs.pBufferBinds )
   18089           && ( imageOpaqueBindCount == rhs.imageOpaqueBindCount )
   18090           && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds )
   18091           && ( imageBindCount == rhs.imageBindCount )
   18092           && ( pImageBinds == rhs.pImageBinds )
   18093           && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
   18094           && ( pSignalSemaphores == rhs.pSignalSemaphores );
   18095     }
   18096 
   18097     bool operator!=( BindSparseInfo const& rhs ) const
   18098     {
   18099       return !operator==( rhs );
   18100     }
   18101 
   18102   private:
   18103     StructureType sType = StructureType::eBindSparseInfo;
   18104 
   18105   public:
   18106     const void* pNext = nullptr;
   18107     uint32_t waitSemaphoreCount;
   18108     const Semaphore* pWaitSemaphores;
   18109     uint32_t bufferBindCount;
   18110     const SparseBufferMemoryBindInfo* pBufferBinds;
   18111     uint32_t imageOpaqueBindCount;
   18112     const SparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
   18113     uint32_t imageBindCount;
   18114     const SparseImageMemoryBindInfo* pImageBinds;
   18115     uint32_t signalSemaphoreCount;
   18116     const Semaphore* pSignalSemaphores;
   18117   };
   18118   static_assert( sizeof( BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" );
   18119 
   18120   enum class PipelineStageFlagBits
   18121   {
   18122     eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
   18123     eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
   18124     eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
   18125     eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
   18126     eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
   18127     eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,
   18128     eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,
   18129     eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
   18130     eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
   18131     eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
   18132     eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
   18133     eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
   18134     eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT,
   18135     eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
   18136     eHost = VK_PIPELINE_STAGE_HOST_BIT,
   18137     eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
   18138     eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
   18139     eCommandProcessNVX = VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX
   18140   };
   18141 
   18142   using PipelineStageFlags = Flags<PipelineStageFlagBits, VkPipelineStageFlags>;
   18143 
   18144   VULKAN_HPP_INLINE PipelineStageFlags operator|( PipelineStageFlagBits bit0, PipelineStageFlagBits bit1 )
   18145   {
   18146     return PipelineStageFlags( bit0 ) | bit1;
   18147   }
   18148 
   18149   VULKAN_HPP_INLINE PipelineStageFlags operator~( PipelineStageFlagBits bits )
   18150   {
   18151     return ~( PipelineStageFlags( bits ) );
   18152   }
   18153 
   18154   template <> struct FlagTraits<PipelineStageFlagBits>
   18155   {
   18156     enum
   18157     {
   18158       allFlags = VkFlags(PipelineStageFlagBits::eTopOfPipe) | VkFlags(PipelineStageFlagBits::eDrawIndirect) | VkFlags(PipelineStageFlagBits::eVertexInput) | VkFlags(PipelineStageFlagBits::eVertexShader) | VkFlags(PipelineStageFlagBits::eTessellationControlShader) | VkFlags(PipelineStageFlagBits::eTessellationEvaluationShader) | VkFlags(PipelineStageFlagBits::eGeometryShader) | VkFlags(PipelineStageFlagBits::eFragmentShader) | VkFlags(PipelineStageFlagBits::eEarlyFragmentTests) | VkFlags(PipelineStageFlagBits::eLateFragmentTests) | VkFlags(PipelineStageFlagBits::eColorAttachmentOutput) | VkFlags(PipelineStageFlagBits::eComputeShader) | VkFlags(PipelineStageFlagBits::eTransfer) | VkFlags(PipelineStageFlagBits::eBottomOfPipe) | VkFlags(PipelineStageFlagBits::eHost) | VkFlags(PipelineStageFlagBits::eAllGraphics) | VkFlags(PipelineStageFlagBits::eAllCommands) | VkFlags(PipelineStageFlagBits::eCommandProcessNVX)
   18159     };
   18160   };
   18161 
   18162   enum class CommandPoolCreateFlagBits
   18163   {
   18164     eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,
   18165     eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
   18166   };
   18167 
   18168   using CommandPoolCreateFlags = Flags<CommandPoolCreateFlagBits, VkCommandPoolCreateFlags>;
   18169 
   18170   VULKAN_HPP_INLINE CommandPoolCreateFlags operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 )
   18171   {
   18172     return CommandPoolCreateFlags( bit0 ) | bit1;
   18173   }
   18174 
   18175   VULKAN_HPP_INLINE CommandPoolCreateFlags operator~( CommandPoolCreateFlagBits bits )
   18176   {
   18177     return ~( CommandPoolCreateFlags( bits ) );
   18178   }
   18179 
   18180   template <> struct FlagTraits<CommandPoolCreateFlagBits>
   18181   {
   18182     enum
   18183     {
   18184       allFlags = VkFlags(CommandPoolCreateFlagBits::eTransient) | VkFlags(CommandPoolCreateFlagBits::eResetCommandBuffer)
   18185     };
   18186   };
   18187 
   18188   struct CommandPoolCreateInfo
   18189   {
   18190     CommandPoolCreateInfo( CommandPoolCreateFlags flags_ = CommandPoolCreateFlags(), uint32_t queueFamilyIndex_ = 0 )
   18191       : flags( flags_ )
   18192       , queueFamilyIndex( queueFamilyIndex_ )
   18193     {
   18194     }
   18195 
   18196     CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs )
   18197     {
   18198       memcpy( this, &rhs, sizeof( CommandPoolCreateInfo ) );
   18199     }
   18200 
   18201     CommandPoolCreateInfo& operator=( VkCommandPoolCreateInfo const & rhs )
   18202     {
   18203       memcpy( this, &rhs, sizeof( CommandPoolCreateInfo ) );
   18204       return *this;
   18205     }
   18206     CommandPoolCreateInfo& setPNext( const void* pNext_ )
   18207     {
   18208       pNext = pNext_;
   18209       return *this;
   18210     }
   18211 
   18212     CommandPoolCreateInfo& setFlags( CommandPoolCreateFlags flags_ )
   18213     {
   18214       flags = flags_;
   18215       return *this;
   18216     }
   18217 
   18218     CommandPoolCreateInfo& setQueueFamilyIndex( uint32_t queueFamilyIndex_ )
   18219     {
   18220       queueFamilyIndex = queueFamilyIndex_;
   18221       return *this;
   18222     }
   18223 
   18224     operator const VkCommandPoolCreateInfo&() const
   18225     {
   18226       return *reinterpret_cast<const VkCommandPoolCreateInfo*>(this);
   18227     }
   18228 
   18229     bool operator==( CommandPoolCreateInfo const& rhs ) const
   18230     {
   18231       return ( sType == rhs.sType )
   18232           && ( pNext == rhs.pNext )
   18233           && ( flags == rhs.flags )
   18234           && ( queueFamilyIndex == rhs.queueFamilyIndex );
   18235     }
   18236 
   18237     bool operator!=( CommandPoolCreateInfo const& rhs ) const
   18238     {
   18239       return !operator==( rhs );
   18240     }
   18241 
   18242   private:
   18243     StructureType sType = StructureType::eCommandPoolCreateInfo;
   18244 
   18245   public:
   18246     const void* pNext = nullptr;
   18247     CommandPoolCreateFlags flags;
   18248     uint32_t queueFamilyIndex;
   18249   };
   18250   static_assert( sizeof( CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ), "struct and wrapper have different size!" );
   18251 
   18252   enum class CommandPoolResetFlagBits
   18253   {
   18254     eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
   18255   };
   18256 
   18257   using CommandPoolResetFlags = Flags<CommandPoolResetFlagBits, VkCommandPoolResetFlags>;
   18258 
   18259   VULKAN_HPP_INLINE CommandPoolResetFlags operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 )
   18260   {
   18261     return CommandPoolResetFlags( bit0 ) | bit1;
   18262   }
   18263 
   18264   VULKAN_HPP_INLINE CommandPoolResetFlags operator~( CommandPoolResetFlagBits bits )
   18265   {
   18266     return ~( CommandPoolResetFlags( bits ) );
   18267   }
   18268 
   18269   template <> struct FlagTraits<CommandPoolResetFlagBits>
   18270   {
   18271     enum
   18272     {
   18273       allFlags = VkFlags(CommandPoolResetFlagBits::eReleaseResources)
   18274     };
   18275   };
   18276 
   18277   enum class CommandBufferResetFlagBits
   18278   {
   18279     eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
   18280   };
   18281 
   18282   using CommandBufferResetFlags = Flags<CommandBufferResetFlagBits, VkCommandBufferResetFlags>;
   18283 
   18284   VULKAN_HPP_INLINE CommandBufferResetFlags operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 )
   18285   {
   18286     return CommandBufferResetFlags( bit0 ) | bit1;
   18287   }
   18288 
   18289   VULKAN_HPP_INLINE CommandBufferResetFlags operator~( CommandBufferResetFlagBits bits )
   18290   {
   18291     return ~( CommandBufferResetFlags( bits ) );
   18292   }
   18293 
   18294   template <> struct FlagTraits<CommandBufferResetFlagBits>
   18295   {
   18296     enum
   18297     {
   18298       allFlags = VkFlags(CommandBufferResetFlagBits::eReleaseResources)
   18299     };
   18300   };
   18301 
   18302   enum class SampleCountFlagBits
   18303   {
   18304     e1 = VK_SAMPLE_COUNT_1_BIT,
   18305     e2 = VK_SAMPLE_COUNT_2_BIT,
   18306     e4 = VK_SAMPLE_COUNT_4_BIT,
   18307     e8 = VK_SAMPLE_COUNT_8_BIT,
   18308     e16 = VK_SAMPLE_COUNT_16_BIT,
   18309     e32 = VK_SAMPLE_COUNT_32_BIT,
   18310     e64 = VK_SAMPLE_COUNT_64_BIT
   18311   };
   18312 
   18313   using SampleCountFlags = Flags<SampleCountFlagBits, VkSampleCountFlags>;
   18314 
   18315   VULKAN_HPP_INLINE SampleCountFlags operator|( SampleCountFlagBits bit0, SampleCountFlagBits bit1 )
   18316   {
   18317     return SampleCountFlags( bit0 ) | bit1;
   18318   }
   18319 
   18320   VULKAN_HPP_INLINE SampleCountFlags operator~( SampleCountFlagBits bits )
   18321   {
   18322     return ~( SampleCountFlags( bits ) );
   18323   }
   18324 
   18325   template <> struct FlagTraits<SampleCountFlagBits>
   18326   {
   18327     enum
   18328     {
   18329       allFlags = VkFlags(SampleCountFlagBits::e1) | VkFlags(SampleCountFlagBits::e2) | VkFlags(SampleCountFlagBits::e4) | VkFlags(SampleCountFlagBits::e8) | VkFlags(SampleCountFlagBits::e16) | VkFlags(SampleCountFlagBits::e32) | VkFlags(SampleCountFlagBits::e64)
   18330     };
   18331   };
   18332 
   18333   struct ImageFormatProperties
   18334   {
   18335     operator const VkImageFormatProperties&() const
   18336     {
   18337       return *reinterpret_cast<const VkImageFormatProperties*>(this);
   18338     }
   18339 
   18340     bool operator==( ImageFormatProperties const& rhs ) const
   18341     {
   18342       return ( maxExtent == rhs.maxExtent )
   18343           && ( maxMipLevels == rhs.maxMipLevels )
   18344           && ( maxArrayLayers == rhs.maxArrayLayers )
   18345           && ( sampleCounts == rhs.sampleCounts )
   18346           && ( maxResourceSize == rhs.maxResourceSize );
   18347     }
   18348 
   18349     bool operator!=( ImageFormatProperties const& rhs ) const
   18350     {
   18351       return !operator==( rhs );
   18352     }
   18353 
   18354     Extent3D maxExtent;
   18355     uint32_t maxMipLevels;
   18356     uint32_t maxArrayLayers;
   18357     SampleCountFlags sampleCounts;
   18358     DeviceSize maxResourceSize;
   18359   };
   18360   static_assert( sizeof( ImageFormatProperties ) == sizeof( VkImageFormatProperties ), "struct and wrapper have different size!" );
   18361 
   18362   struct ImageCreateInfo
   18363   {
   18364     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 )
   18365       : flags( flags_ )
   18366       , imageType( imageType_ )
   18367       , format( format_ )
   18368       , extent( extent_ )
   18369       , mipLevels( mipLevels_ )
   18370       , arrayLayers( arrayLayers_ )
   18371       , samples( samples_ )
   18372       , tiling( tiling_ )
   18373       , usage( usage_ )
   18374       , sharingMode( sharingMode_ )
   18375       , queueFamilyIndexCount( queueFamilyIndexCount_ )
   18376       , pQueueFamilyIndices( pQueueFamilyIndices_ )
   18377       , initialLayout( initialLayout_ )
   18378     {
   18379     }
   18380 
   18381     ImageCreateInfo( VkImageCreateInfo const & rhs )
   18382     {
   18383       memcpy( this, &rhs, sizeof( ImageCreateInfo ) );
   18384     }
   18385 
   18386     ImageCreateInfo& operator=( VkImageCreateInfo const & rhs )
   18387     {
   18388       memcpy( this, &rhs, sizeof( ImageCreateInfo ) );
   18389       return *this;
   18390     }
   18391     ImageCreateInfo& setPNext( const void* pNext_ )
   18392     {
   18393       pNext = pNext_;
   18394       return *this;
   18395     }
   18396 
   18397     ImageCreateInfo& setFlags( ImageCreateFlags flags_ )
   18398     {
   18399       flags = flags_;
   18400       return *this;
   18401     }
   18402 
   18403     ImageCreateInfo& setImageType( ImageType imageType_ )
   18404     {
   18405       imageType = imageType_;
   18406       return *this;
   18407     }
   18408 
   18409     ImageCreateInfo& setFormat( Format format_ )
   18410     {
   18411       format = format_;
   18412       return *this;
   18413     }
   18414 
   18415     ImageCreateInfo& setExtent( Extent3D extent_ )
   18416     {
   18417       extent = extent_;
   18418       return *this;
   18419     }
   18420 
   18421     ImageCreateInfo& setMipLevels( uint32_t mipLevels_ )
   18422     {
   18423       mipLevels = mipLevels_;
   18424       return *this;
   18425     }
   18426 
   18427     ImageCreateInfo& setArrayLayers( uint32_t arrayLayers_ )
   18428     {
   18429       arrayLayers = arrayLayers_;
   18430       return *this;
   18431     }
   18432 
   18433     ImageCreateInfo& setSamples( SampleCountFlagBits samples_ )
   18434     {
   18435       samples = samples_;
   18436       return *this;
   18437     }
   18438 
   18439     ImageCreateInfo& setTiling( ImageTiling tiling_ )
   18440     {
   18441       tiling = tiling_;
   18442       return *this;
   18443     }
   18444 
   18445     ImageCreateInfo& setUsage( ImageUsageFlags usage_ )
   18446     {
   18447       usage = usage_;
   18448       return *this;
   18449     }
   18450 
   18451     ImageCreateInfo& setSharingMode( SharingMode sharingMode_ )
   18452     {
   18453       sharingMode = sharingMode_;
   18454       return *this;
   18455     }
   18456 
   18457     ImageCreateInfo& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
   18458     {
   18459       queueFamilyIndexCount = queueFamilyIndexCount_;
   18460       return *this;
   18461     }
   18462 
   18463     ImageCreateInfo& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
   18464     {
   18465       pQueueFamilyIndices = pQueueFamilyIndices_;
   18466       return *this;
   18467     }
   18468 
   18469     ImageCreateInfo& setInitialLayout( ImageLayout initialLayout_ )
   18470     {
   18471       initialLayout = initialLayout_;
   18472       return *this;
   18473     }
   18474 
   18475     operator const VkImageCreateInfo&() const
   18476     {
   18477       return *reinterpret_cast<const VkImageCreateInfo*>(this);
   18478     }
   18479 
   18480     bool operator==( ImageCreateInfo const& rhs ) const
   18481     {
   18482       return ( sType == rhs.sType )
   18483           && ( pNext == rhs.pNext )
   18484           && ( flags == rhs.flags )
   18485           && ( imageType == rhs.imageType )
   18486           && ( format == rhs.format )
   18487           && ( extent == rhs.extent )
   18488           && ( mipLevels == rhs.mipLevels )
   18489           && ( arrayLayers == rhs.arrayLayers )
   18490           && ( samples == rhs.samples )
   18491           && ( tiling == rhs.tiling )
   18492           && ( usage == rhs.usage )
   18493           && ( sharingMode == rhs.sharingMode )
   18494           && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
   18495           && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
   18496           && ( initialLayout == rhs.initialLayout );
   18497     }
   18498 
   18499     bool operator!=( ImageCreateInfo const& rhs ) const
   18500     {
   18501       return !operator==( rhs );
   18502     }
   18503 
   18504   private:
   18505     StructureType sType = StructureType::eImageCreateInfo;
   18506 
   18507   public:
   18508     const void* pNext = nullptr;
   18509     ImageCreateFlags flags;
   18510     ImageType imageType;
   18511     Format format;
   18512     Extent3D extent;
   18513     uint32_t mipLevels;
   18514     uint32_t arrayLayers;
   18515     SampleCountFlagBits samples;
   18516     ImageTiling tiling;
   18517     ImageUsageFlags usage;
   18518     SharingMode sharingMode;
   18519     uint32_t queueFamilyIndexCount;
   18520     const uint32_t* pQueueFamilyIndices;
   18521     ImageLayout initialLayout;
   18522   };
   18523   static_assert( sizeof( ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" );
   18524 
   18525   struct PipelineMultisampleStateCreateInfo
   18526   {
   18527     PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateFlags flags_ = PipelineMultisampleStateCreateFlags(), SampleCountFlagBits rasterizationSamples_ = SampleCountFlagBits::e1, Bool32 sampleShadingEnable_ = 0, float minSampleShading_ = 0, const SampleMask* pSampleMask_ = nullptr, Bool32 alphaToCoverageEnable_ = 0, Bool32 alphaToOneEnable_ = 0 )
   18528       : flags( flags_ )
   18529       , rasterizationSamples( rasterizationSamples_ )
   18530       , sampleShadingEnable( sampleShadingEnable_ )
   18531       , minSampleShading( minSampleShading_ )
   18532       , pSampleMask( pSampleMask_ )
   18533       , alphaToCoverageEnable( alphaToCoverageEnable_ )
   18534       , alphaToOneEnable( alphaToOneEnable_ )
   18535     {
   18536     }
   18537 
   18538     PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs )
   18539     {
   18540       memcpy( this, &rhs, sizeof( PipelineMultisampleStateCreateInfo ) );
   18541     }
   18542 
   18543     PipelineMultisampleStateCreateInfo& operator=( VkPipelineMultisampleStateCreateInfo const & rhs )
   18544     {
   18545       memcpy( this, &rhs, sizeof( PipelineMultisampleStateCreateInfo ) );
   18546       return *this;
   18547     }
   18548     PipelineMultisampleStateCreateInfo& setPNext( const void* pNext_ )
   18549     {
   18550       pNext = pNext_;
   18551       return *this;
   18552     }
   18553 
   18554     PipelineMultisampleStateCreateInfo& setFlags( PipelineMultisampleStateCreateFlags flags_ )
   18555     {
   18556       flags = flags_;
   18557       return *this;
   18558     }
   18559 
   18560     PipelineMultisampleStateCreateInfo& setRasterizationSamples( SampleCountFlagBits rasterizationSamples_ )
   18561     {
   18562       rasterizationSamples = rasterizationSamples_;
   18563       return *this;
   18564     }
   18565 
   18566     PipelineMultisampleStateCreateInfo& setSampleShadingEnable( Bool32 sampleShadingEnable_ )
   18567     {
   18568       sampleShadingEnable = sampleShadingEnable_;
   18569       return *this;
   18570     }
   18571 
   18572     PipelineMultisampleStateCreateInfo& setMinSampleShading( float minSampleShading_ )
   18573     {
   18574       minSampleShading = minSampleShading_;
   18575       return *this;
   18576     }
   18577 
   18578     PipelineMultisampleStateCreateInfo& setPSampleMask( const SampleMask* pSampleMask_ )
   18579     {
   18580       pSampleMask = pSampleMask_;
   18581       return *this;
   18582     }
   18583 
   18584     PipelineMultisampleStateCreateInfo& setAlphaToCoverageEnable( Bool32 alphaToCoverageEnable_ )
   18585     {
   18586       alphaToCoverageEnable = alphaToCoverageEnable_;
   18587       return *this;
   18588     }
   18589 
   18590     PipelineMultisampleStateCreateInfo& setAlphaToOneEnable( Bool32 alphaToOneEnable_ )
   18591     {
   18592       alphaToOneEnable = alphaToOneEnable_;
   18593       return *this;
   18594     }
   18595 
   18596     operator const VkPipelineMultisampleStateCreateInfo&() const
   18597     {
   18598       return *reinterpret_cast<const VkPipelineMultisampleStateCreateInfo*>(this);
   18599     }
   18600 
   18601     bool operator==( PipelineMultisampleStateCreateInfo const& rhs ) const
   18602     {
   18603       return ( sType == rhs.sType )
   18604           && ( pNext == rhs.pNext )
   18605           && ( flags == rhs.flags )
   18606           && ( rasterizationSamples == rhs.rasterizationSamples )
   18607           && ( sampleShadingEnable == rhs.sampleShadingEnable )
   18608           && ( minSampleShading == rhs.minSampleShading )
   18609           && ( pSampleMask == rhs.pSampleMask )
   18610           && ( alphaToCoverageEnable == rhs.alphaToCoverageEnable )
   18611           && ( alphaToOneEnable == rhs.alphaToOneEnable );
   18612     }
   18613 
   18614     bool operator!=( PipelineMultisampleStateCreateInfo const& rhs ) const
   18615     {
   18616       return !operator==( rhs );
   18617     }
   18618 
   18619   private:
   18620     StructureType sType = StructureType::ePipelineMultisampleStateCreateInfo;
   18621 
   18622   public:
   18623     const void* pNext = nullptr;
   18624     PipelineMultisampleStateCreateFlags flags;
   18625     SampleCountFlagBits rasterizationSamples;
   18626     Bool32 sampleShadingEnable;
   18627     float minSampleShading;
   18628     const SampleMask* pSampleMask;
   18629     Bool32 alphaToCoverageEnable;
   18630     Bool32 alphaToOneEnable;
   18631   };
   18632   static_assert( sizeof( PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ), "struct and wrapper have different size!" );
   18633 
   18634   struct GraphicsPipelineCreateInfo
   18635   {
   18636     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 )
   18637       : flags( flags_ )
   18638       , stageCount( stageCount_ )
   18639       , pStages( pStages_ )
   18640       , pVertexInputState( pVertexInputState_ )
   18641       , pInputAssemblyState( pInputAssemblyState_ )
   18642       , pTessellationState( pTessellationState_ )
   18643       , pViewportState( pViewportState_ )
   18644       , pRasterizationState( pRasterizationState_ )
   18645       , pMultisampleState( pMultisampleState_ )
   18646       , pDepthStencilState( pDepthStencilState_ )
   18647       , pColorBlendState( pColorBlendState_ )
   18648       , pDynamicState( pDynamicState_ )
   18649       , layout( layout_ )
   18650       , renderPass( renderPass_ )
   18651       , subpass( subpass_ )
   18652       , basePipelineHandle( basePipelineHandle_ )
   18653       , basePipelineIndex( basePipelineIndex_ )
   18654     {
   18655     }
   18656 
   18657     GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs )
   18658     {
   18659       memcpy( this, &rhs, sizeof( GraphicsPipelineCreateInfo ) );
   18660     }
   18661 
   18662     GraphicsPipelineCreateInfo& operator=( VkGraphicsPipelineCreateInfo const & rhs )
   18663     {
   18664       memcpy( this, &rhs, sizeof( GraphicsPipelineCreateInfo ) );
   18665       return *this;
   18666     }
   18667     GraphicsPipelineCreateInfo& setPNext( const void* pNext_ )
   18668     {
   18669       pNext = pNext_;
   18670       return *this;
   18671     }
   18672 
   18673     GraphicsPipelineCreateInfo& setFlags( PipelineCreateFlags flags_ )
   18674     {
   18675       flags = flags_;
   18676       return *this;
   18677     }
   18678 
   18679     GraphicsPipelineCreateInfo& setStageCount( uint32_t stageCount_ )
   18680     {
   18681       stageCount = stageCount_;
   18682       return *this;
   18683     }
   18684 
   18685     GraphicsPipelineCreateInfo& setPStages( const PipelineShaderStageCreateInfo* pStages_ )
   18686     {
   18687       pStages = pStages_;
   18688       return *this;
   18689     }
   18690 
   18691     GraphicsPipelineCreateInfo& setPVertexInputState( const PipelineVertexInputStateCreateInfo* pVertexInputState_ )
   18692     {
   18693       pVertexInputState = pVertexInputState_;
   18694       return *this;
   18695     }
   18696 
   18697     GraphicsPipelineCreateInfo& setPInputAssemblyState( const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState_ )
   18698     {
   18699       pInputAssemblyState = pInputAssemblyState_;
   18700       return *this;
   18701     }
   18702 
   18703     GraphicsPipelineCreateInfo& setPTessellationState( const PipelineTessellationStateCreateInfo* pTessellationState_ )
   18704     {
   18705       pTessellationState = pTessellationState_;
   18706       return *this;
   18707     }
   18708 
   18709     GraphicsPipelineCreateInfo& setPViewportState( const PipelineViewportStateCreateInfo* pViewportState_ )
   18710     {
   18711       pViewportState = pViewportState_;
   18712       return *this;
   18713     }
   18714 
   18715     GraphicsPipelineCreateInfo& setPRasterizationState( const PipelineRasterizationStateCreateInfo* pRasterizationState_ )
   18716     {
   18717       pRasterizationState = pRasterizationState_;
   18718       return *this;
   18719     }
   18720 
   18721     GraphicsPipelineCreateInfo& setPMultisampleState( const PipelineMultisampleStateCreateInfo* pMultisampleState_ )
   18722     {
   18723       pMultisampleState = pMultisampleState_;
   18724       return *this;
   18725     }
   18726 
   18727     GraphicsPipelineCreateInfo& setPDepthStencilState( const PipelineDepthStencilStateCreateInfo* pDepthStencilState_ )
   18728     {
   18729       pDepthStencilState = pDepthStencilState_;
   18730       return *this;
   18731     }
   18732 
   18733     GraphicsPipelineCreateInfo& setPColorBlendState( const PipelineColorBlendStateCreateInfo* pColorBlendState_ )
   18734     {
   18735       pColorBlendState = pColorBlendState_;
   18736       return *this;
   18737     }
   18738 
   18739     GraphicsPipelineCreateInfo& setPDynamicState( const PipelineDynamicStateCreateInfo* pDynamicState_ )
   18740     {
   18741       pDynamicState = pDynamicState_;
   18742       return *this;
   18743     }
   18744 
   18745     GraphicsPipelineCreateInfo& setLayout( PipelineLayout layout_ )
   18746     {
   18747       layout = layout_;
   18748       return *this;
   18749     }
   18750 
   18751     GraphicsPipelineCreateInfo& setRenderPass( RenderPass renderPass_ )
   18752     {
   18753       renderPass = renderPass_;
   18754       return *this;
   18755     }
   18756 
   18757     GraphicsPipelineCreateInfo& setSubpass( uint32_t subpass_ )
   18758     {
   18759       subpass = subpass_;
   18760       return *this;
   18761     }
   18762 
   18763     GraphicsPipelineCreateInfo& setBasePipelineHandle( Pipeline basePipelineHandle_ )
   18764     {
   18765       basePipelineHandle = basePipelineHandle_;
   18766       return *this;
   18767     }
   18768 
   18769     GraphicsPipelineCreateInfo& setBasePipelineIndex( int32_t basePipelineIndex_ )
   18770     {
   18771       basePipelineIndex = basePipelineIndex_;
   18772       return *this;
   18773     }
   18774 
   18775     operator const VkGraphicsPipelineCreateInfo&() const
   18776     {
   18777       return *reinterpret_cast<const VkGraphicsPipelineCreateInfo*>(this);
   18778     }
   18779 
   18780     bool operator==( GraphicsPipelineCreateInfo const& rhs ) const
   18781     {
   18782       return ( sType == rhs.sType )
   18783           && ( pNext == rhs.pNext )
   18784           && ( flags == rhs.flags )
   18785           && ( stageCount == rhs.stageCount )
   18786           && ( pStages == rhs.pStages )
   18787           && ( pVertexInputState == rhs.pVertexInputState )
   18788           && ( pInputAssemblyState == rhs.pInputAssemblyState )
   18789           && ( pTessellationState == rhs.pTessellationState )
   18790           && ( pViewportState == rhs.pViewportState )
   18791           && ( pRasterizationState == rhs.pRasterizationState )
   18792           && ( pMultisampleState == rhs.pMultisampleState )
   18793           && ( pDepthStencilState == rhs.pDepthStencilState )
   18794           && ( pColorBlendState == rhs.pColorBlendState )
   18795           && ( pDynamicState == rhs.pDynamicState )
   18796           && ( layout == rhs.layout )
   18797           && ( renderPass == rhs.renderPass )
   18798           && ( subpass == rhs.subpass )
   18799           && ( basePipelineHandle == rhs.basePipelineHandle )
   18800           && ( basePipelineIndex == rhs.basePipelineIndex );
   18801     }
   18802 
   18803     bool operator!=( GraphicsPipelineCreateInfo const& rhs ) const
   18804     {
   18805       return !operator==( rhs );
   18806     }
   18807 
   18808   private:
   18809     StructureType sType = StructureType::eGraphicsPipelineCreateInfo;
   18810 
   18811   public:
   18812     const void* pNext = nullptr;
   18813     PipelineCreateFlags flags;
   18814     uint32_t stageCount;
   18815     const PipelineShaderStageCreateInfo* pStages;
   18816     const PipelineVertexInputStateCreateInfo* pVertexInputState;
   18817     const PipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
   18818     const PipelineTessellationStateCreateInfo* pTessellationState;
   18819     const PipelineViewportStateCreateInfo* pViewportState;
   18820     const PipelineRasterizationStateCreateInfo* pRasterizationState;
   18821     const PipelineMultisampleStateCreateInfo* pMultisampleState;
   18822     const PipelineDepthStencilStateCreateInfo* pDepthStencilState;
   18823     const PipelineColorBlendStateCreateInfo* pColorBlendState;
   18824     const PipelineDynamicStateCreateInfo* pDynamicState;
   18825     PipelineLayout layout;
   18826     RenderPass renderPass;
   18827     uint32_t subpass;
   18828     Pipeline basePipelineHandle;
   18829     int32_t basePipelineIndex;
   18830   };
   18831   static_assert( sizeof( GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ), "struct and wrapper have different size!" );
   18832 
   18833   struct PhysicalDeviceLimits
   18834   {
   18835     operator const VkPhysicalDeviceLimits&() const
   18836     {
   18837       return *reinterpret_cast<const VkPhysicalDeviceLimits*>(this);
   18838     }
   18839 
   18840     bool operator==( PhysicalDeviceLimits const& rhs ) const
   18841     {
   18842       return ( maxImageDimension1D == rhs.maxImageDimension1D )
   18843           && ( maxImageDimension2D == rhs.maxImageDimension2D )
   18844           && ( maxImageDimension3D == rhs.maxImageDimension3D )
   18845           && ( maxImageDimensionCube == rhs.maxImageDimensionCube )
   18846           && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
   18847           && ( maxTexelBufferElements == rhs.maxTexelBufferElements )
   18848           && ( maxUniformBufferRange == rhs.maxUniformBufferRange )
   18849           && ( maxStorageBufferRange == rhs.maxStorageBufferRange )
   18850           && ( maxPushConstantsSize == rhs.maxPushConstantsSize )
   18851           && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount )
   18852           && ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount )
   18853           && ( bufferImageGranularity == rhs.bufferImageGranularity )
   18854           && ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize )
   18855           && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets )
   18856           && ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers )
   18857           && ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers )
   18858           && ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers )
   18859           && ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages )
   18860           && ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages )
   18861           && ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments )
   18862           && ( maxPerStageResources == rhs.maxPerStageResources )
   18863           && ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers )
   18864           && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers )
   18865           && ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic )
   18866           && ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers )
   18867           && ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic )
   18868           && ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages )
   18869           && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages )
   18870           && ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments )
   18871           && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes )
   18872           && ( maxVertexInputBindings == rhs.maxVertexInputBindings )
   18873           && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset )
   18874           && ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride )
   18875           && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents )
   18876           && ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel )
   18877           && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize )
   18878           && ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents )
   18879           && ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents )
   18880           && ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents )
   18881           && ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents )
   18882           && ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents )
   18883           && ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents )
   18884           && ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations )
   18885           && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents )
   18886           && ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents )
   18887           && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices )
   18888           && ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents )
   18889           && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents )
   18890           && ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments )
   18891           && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments )
   18892           && ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources )
   18893           && ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize )
   18894           && ( memcmp( maxComputeWorkGroupCount, rhs.maxComputeWorkGroupCount, 3 * sizeof( uint32_t ) ) == 0 )
   18895           && ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations )
   18896           && ( memcmp( maxComputeWorkGroupSize, rhs.maxComputeWorkGroupSize, 3 * sizeof( uint32_t ) ) == 0 )
   18897           && ( subPixelPrecisionBits == rhs.subPixelPrecisionBits )
   18898           && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits )
   18899           && ( mipmapPrecisionBits == rhs.mipmapPrecisionBits )
   18900           && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue )
   18901           && ( maxDrawIndirectCount == rhs.maxDrawIndirectCount )
   18902           && ( maxSamplerLodBias == rhs.maxSamplerLodBias )
   18903           && ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy )
   18904           && ( maxViewports == rhs.maxViewports )
   18905           && ( memcmp( maxViewportDimensions, rhs.maxViewportDimensions, 2 * sizeof( uint32_t ) ) == 0 )
   18906           && ( memcmp( viewportBoundsRange, rhs.viewportBoundsRange, 2 * sizeof( float ) ) == 0 )
   18907           && ( viewportSubPixelBits == rhs.viewportSubPixelBits )
   18908           && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment )
   18909           && ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment )
   18910           && ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment )
   18911           && ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment )
   18912           && ( minTexelOffset == rhs.minTexelOffset )
   18913           && ( maxTexelOffset == rhs.maxTexelOffset )
   18914           && ( minTexelGatherOffset == rhs.minTexelGatherOffset )
   18915           && ( maxTexelGatherOffset == rhs.maxTexelGatherOffset )
   18916           && ( minInterpolationOffset == rhs.minInterpolationOffset )
   18917           && ( maxInterpolationOffset == rhs.maxInterpolationOffset )
   18918           && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits )
   18919           && ( maxFramebufferWidth == rhs.maxFramebufferWidth )
   18920           && ( maxFramebufferHeight == rhs.maxFramebufferHeight )
   18921           && ( maxFramebufferLayers == rhs.maxFramebufferLayers )
   18922           && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts )
   18923           && ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts )
   18924           && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts )
   18925           && ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts )
   18926           && ( maxColorAttachments == rhs.maxColorAttachments )
   18927           && ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts )
   18928           && ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts )
   18929           && ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts )
   18930           && ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts )
   18931           && ( storageImageSampleCounts == rhs.storageImageSampleCounts )
   18932           && ( maxSampleMaskWords == rhs.maxSampleMaskWords )
   18933           && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics )
   18934           && ( timestampPeriod == rhs.timestampPeriod )
   18935           && ( maxClipDistances == rhs.maxClipDistances )
   18936           && ( maxCullDistances == rhs.maxCullDistances )
   18937           && ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances )
   18938           && ( discreteQueuePriorities == rhs.discreteQueuePriorities )
   18939           && ( memcmp( pointSizeRange, rhs.pointSizeRange, 2 * sizeof( float ) ) == 0 )
   18940           && ( memcmp( lineWidthRange, rhs.lineWidthRange, 2 * sizeof( float ) ) == 0 )
   18941           && ( pointSizeGranularity == rhs.pointSizeGranularity )
   18942           && ( lineWidthGranularity == rhs.lineWidthGranularity )
   18943           && ( strictLines == rhs.strictLines )
   18944           && ( standardSampleLocations == rhs.standardSampleLocations )
   18945           && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment )
   18946           && ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment )
   18947           && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize );
   18948     }
   18949 
   18950     bool operator!=( PhysicalDeviceLimits const& rhs ) const
   18951     {
   18952       return !operator==( rhs );
   18953     }
   18954 
   18955     uint32_t maxImageDimension1D;
   18956     uint32_t maxImageDimension2D;
   18957     uint32_t maxImageDimension3D;
   18958     uint32_t maxImageDimensionCube;
   18959     uint32_t maxImageArrayLayers;
   18960     uint32_t maxTexelBufferElements;
   18961     uint32_t maxUniformBufferRange;
   18962     uint32_t maxStorageBufferRange;
   18963     uint32_t maxPushConstantsSize;
   18964     uint32_t maxMemoryAllocationCount;
   18965     uint32_t maxSamplerAllocationCount;
   18966     DeviceSize bufferImageGranularity;
   18967     DeviceSize sparseAddressSpaceSize;
   18968     uint32_t maxBoundDescriptorSets;
   18969     uint32_t maxPerStageDescriptorSamplers;
   18970     uint32_t maxPerStageDescriptorUniformBuffers;
   18971     uint32_t maxPerStageDescriptorStorageBuffers;
   18972     uint32_t maxPerStageDescriptorSampledImages;
   18973     uint32_t maxPerStageDescriptorStorageImages;
   18974     uint32_t maxPerStageDescriptorInputAttachments;
   18975     uint32_t maxPerStageResources;
   18976     uint32_t maxDescriptorSetSamplers;
   18977     uint32_t maxDescriptorSetUniformBuffers;
   18978     uint32_t maxDescriptorSetUniformBuffersDynamic;
   18979     uint32_t maxDescriptorSetStorageBuffers;
   18980     uint32_t maxDescriptorSetStorageBuffersDynamic;
   18981     uint32_t maxDescriptorSetSampledImages;
   18982     uint32_t maxDescriptorSetStorageImages;
   18983     uint32_t maxDescriptorSetInputAttachments;
   18984     uint32_t maxVertexInputAttributes;
   18985     uint32_t maxVertexInputBindings;
   18986     uint32_t maxVertexInputAttributeOffset;
   18987     uint32_t maxVertexInputBindingStride;
   18988     uint32_t maxVertexOutputComponents;
   18989     uint32_t maxTessellationGenerationLevel;
   18990     uint32_t maxTessellationPatchSize;
   18991     uint32_t maxTessellationControlPerVertexInputComponents;
   18992     uint32_t maxTessellationControlPerVertexOutputComponents;
   18993     uint32_t maxTessellationControlPerPatchOutputComponents;
   18994     uint32_t maxTessellationControlTotalOutputComponents;
   18995     uint32_t maxTessellationEvaluationInputComponents;
   18996     uint32_t maxTessellationEvaluationOutputComponents;
   18997     uint32_t maxGeometryShaderInvocations;
   18998     uint32_t maxGeometryInputComponents;
   18999     uint32_t maxGeometryOutputComponents;
   19000     uint32_t maxGeometryOutputVertices;
   19001     uint32_t maxGeometryTotalOutputComponents;
   19002     uint32_t maxFragmentInputComponents;
   19003     uint32_t maxFragmentOutputAttachments;
   19004     uint32_t maxFragmentDualSrcAttachments;
   19005     uint32_t maxFragmentCombinedOutputResources;
   19006     uint32_t maxComputeSharedMemorySize;
   19007     uint32_t maxComputeWorkGroupCount[3];
   19008     uint32_t maxComputeWorkGroupInvocations;
   19009     uint32_t maxComputeWorkGroupSize[3];
   19010     uint32_t subPixelPrecisionBits;
   19011     uint32_t subTexelPrecisionBits;
   19012     uint32_t mipmapPrecisionBits;
   19013     uint32_t maxDrawIndexedIndexValue;
   19014     uint32_t maxDrawIndirectCount;
   19015     float maxSamplerLodBias;
   19016     float maxSamplerAnisotropy;
   19017     uint32_t maxViewports;
   19018     uint32_t maxViewportDimensions[2];
   19019     float viewportBoundsRange[2];
   19020     uint32_t viewportSubPixelBits;
   19021     size_t minMemoryMapAlignment;
   19022     DeviceSize minTexelBufferOffsetAlignment;
   19023     DeviceSize minUniformBufferOffsetAlignment;
   19024     DeviceSize minStorageBufferOffsetAlignment;
   19025     int32_t minTexelOffset;
   19026     uint32_t maxTexelOffset;
   19027     int32_t minTexelGatherOffset;
   19028     uint32_t maxTexelGatherOffset;
   19029     float minInterpolationOffset;
   19030     float maxInterpolationOffset;
   19031     uint32_t subPixelInterpolationOffsetBits;
   19032     uint32_t maxFramebufferWidth;
   19033     uint32_t maxFramebufferHeight;
   19034     uint32_t maxFramebufferLayers;
   19035     SampleCountFlags framebufferColorSampleCounts;
   19036     SampleCountFlags framebufferDepthSampleCounts;
   19037     SampleCountFlags framebufferStencilSampleCounts;
   19038     SampleCountFlags framebufferNoAttachmentsSampleCounts;
   19039     uint32_t maxColorAttachments;
   19040     SampleCountFlags sampledImageColorSampleCounts;
   19041     SampleCountFlags sampledImageIntegerSampleCounts;
   19042     SampleCountFlags sampledImageDepthSampleCounts;
   19043     SampleCountFlags sampledImageStencilSampleCounts;
   19044     SampleCountFlags storageImageSampleCounts;
   19045     uint32_t maxSampleMaskWords;
   19046     Bool32 timestampComputeAndGraphics;
   19047     float timestampPeriod;
   19048     uint32_t maxClipDistances;
   19049     uint32_t maxCullDistances;
   19050     uint32_t maxCombinedClipAndCullDistances;
   19051     uint32_t discreteQueuePriorities;
   19052     float pointSizeRange[2];
   19053     float lineWidthRange[2];
   19054     float pointSizeGranularity;
   19055     float lineWidthGranularity;
   19056     Bool32 strictLines;
   19057     Bool32 standardSampleLocations;
   19058     DeviceSize optimalBufferCopyOffsetAlignment;
   19059     DeviceSize optimalBufferCopyRowPitchAlignment;
   19060     DeviceSize nonCoherentAtomSize;
   19061   };
   19062   static_assert( sizeof( PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ), "struct and wrapper have different size!" );
   19063 
   19064   struct PhysicalDeviceProperties
   19065   {
   19066     operator const VkPhysicalDeviceProperties&() const
   19067     {
   19068       return *reinterpret_cast<const VkPhysicalDeviceProperties*>(this);
   19069     }
   19070 
   19071     bool operator==( PhysicalDeviceProperties const& rhs ) const
   19072     {
   19073       return ( apiVersion == rhs.apiVersion )
   19074           && ( driverVersion == rhs.driverVersion )
   19075           && ( vendorID == rhs.vendorID )
   19076           && ( deviceID == rhs.deviceID )
   19077           && ( deviceType == rhs.deviceType )
   19078           && ( memcmp( deviceName, rhs.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof( char ) ) == 0 )
   19079           && ( memcmp( pipelineCacheUUID, rhs.pipelineCacheUUID, VK_UUID_SIZE * sizeof( uint8_t ) ) == 0 )
   19080           && ( limits == rhs.limits )
   19081           && ( sparseProperties == rhs.sparseProperties );
   19082     }
   19083 
   19084     bool operator!=( PhysicalDeviceProperties const& rhs ) const
   19085     {
   19086       return !operator==( rhs );
   19087     }
   19088 
   19089     uint32_t apiVersion;
   19090     uint32_t driverVersion;
   19091     uint32_t vendorID;
   19092     uint32_t deviceID;
   19093     PhysicalDeviceType deviceType;
   19094     char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
   19095     uint8_t pipelineCacheUUID[VK_UUID_SIZE];
   19096     PhysicalDeviceLimits limits;
   19097     PhysicalDeviceSparseProperties sparseProperties;
   19098   };
   19099   static_assert( sizeof( PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ), "struct and wrapper have different size!" );
   19100 
   19101   struct PhysicalDeviceProperties2KHR
   19102   {
   19103     operator const VkPhysicalDeviceProperties2KHR&() const
   19104     {
   19105       return *reinterpret_cast<const VkPhysicalDeviceProperties2KHR*>(this);
   19106     }
   19107 
   19108     bool operator==( PhysicalDeviceProperties2KHR const& rhs ) const
   19109     {
   19110       return ( sType == rhs.sType )
   19111           && ( pNext == rhs.pNext )
   19112           && ( properties == rhs.properties );
   19113     }
   19114 
   19115     bool operator!=( PhysicalDeviceProperties2KHR const& rhs ) const
   19116     {
   19117       return !operator==( rhs );
   19118     }
   19119 
   19120   private:
   19121     StructureType sType = StructureType::ePhysicalDeviceProperties2KHR;
   19122 
   19123   public:
   19124     void* pNext = nullptr;
   19125     PhysicalDeviceProperties properties;
   19126   };
   19127   static_assert( sizeof( PhysicalDeviceProperties2KHR ) == sizeof( VkPhysicalDeviceProperties2KHR ), "struct and wrapper have different size!" );
   19128 
   19129   struct ImageFormatProperties2KHR
   19130   {
   19131     operator const VkImageFormatProperties2KHR&() const
   19132     {
   19133       return *reinterpret_cast<const VkImageFormatProperties2KHR*>(this);
   19134     }
   19135 
   19136     bool operator==( ImageFormatProperties2KHR const& rhs ) const
   19137     {
   19138       return ( sType == rhs.sType )
   19139           && ( pNext == rhs.pNext )
   19140           && ( imageFormatProperties == rhs.imageFormatProperties );
   19141     }
   19142 
   19143     bool operator!=( ImageFormatProperties2KHR const& rhs ) const
   19144     {
   19145       return !operator==( rhs );
   19146     }
   19147 
   19148   private:
   19149     StructureType sType = StructureType::eImageFormatProperties2KHR;
   19150 
   19151   public:
   19152     void* pNext = nullptr;
   19153     ImageFormatProperties imageFormatProperties;
   19154   };
   19155   static_assert( sizeof( ImageFormatProperties2KHR ) == sizeof( VkImageFormatProperties2KHR ), "struct and wrapper have different size!" );
   19156 
   19157   struct PhysicalDeviceSparseImageFormatInfo2KHR
   19158   {
   19159     PhysicalDeviceSparseImageFormatInfo2KHR( Format format_ = Format::eUndefined, ImageType type_ = ImageType::e1D, SampleCountFlagBits samples_ = SampleCountFlagBits::e1, ImageUsageFlags usage_ = ImageUsageFlags(), ImageTiling tiling_ = ImageTiling::eOptimal )
   19160       : format( format_ )
   19161       , type( type_ )
   19162       , samples( samples_ )
   19163       , usage( usage_ )
   19164       , tiling( tiling_ )
   19165     {
   19166     }
   19167 
   19168     PhysicalDeviceSparseImageFormatInfo2KHR( VkPhysicalDeviceSparseImageFormatInfo2KHR const & rhs )
   19169     {
   19170       memcpy( this, &rhs, sizeof( PhysicalDeviceSparseImageFormatInfo2KHR ) );
   19171     }
   19172 
   19173     PhysicalDeviceSparseImageFormatInfo2KHR& operator=( VkPhysicalDeviceSparseImageFormatInfo2KHR const & rhs )
   19174     {
   19175       memcpy( this, &rhs, sizeof( PhysicalDeviceSparseImageFormatInfo2KHR ) );
   19176       return *this;
   19177     }
   19178     PhysicalDeviceSparseImageFormatInfo2KHR& setPNext( const void* pNext_ )
   19179     {
   19180       pNext = pNext_;
   19181       return *this;
   19182     }
   19183 
   19184     PhysicalDeviceSparseImageFormatInfo2KHR& setFormat( Format format_ )
   19185     {
   19186       format = format_;
   19187       return *this;
   19188     }
   19189 
   19190     PhysicalDeviceSparseImageFormatInfo2KHR& setType( ImageType type_ )
   19191     {
   19192       type = type_;
   19193       return *this;
   19194     }
   19195 
   19196     PhysicalDeviceSparseImageFormatInfo2KHR& setSamples( SampleCountFlagBits samples_ )
   19197     {
   19198       samples = samples_;
   19199       return *this;
   19200     }
   19201 
   19202     PhysicalDeviceSparseImageFormatInfo2KHR& setUsage( ImageUsageFlags usage_ )
   19203     {
   19204       usage = usage_;
   19205       return *this;
   19206     }
   19207 
   19208     PhysicalDeviceSparseImageFormatInfo2KHR& setTiling( ImageTiling tiling_ )
   19209     {
   19210       tiling = tiling_;
   19211       return *this;
   19212     }
   19213 
   19214     operator const VkPhysicalDeviceSparseImageFormatInfo2KHR&() const
   19215     {
   19216       return *reinterpret_cast<const VkPhysicalDeviceSparseImageFormatInfo2KHR*>(this);
   19217     }
   19218 
   19219     bool operator==( PhysicalDeviceSparseImageFormatInfo2KHR const& rhs ) const
   19220     {
   19221       return ( sType == rhs.sType )
   19222           && ( pNext == rhs.pNext )
   19223           && ( format == rhs.format )
   19224           && ( type == rhs.type )
   19225           && ( samples == rhs.samples )
   19226           && ( usage == rhs.usage )
   19227           && ( tiling == rhs.tiling );
   19228     }
   19229 
   19230     bool operator!=( PhysicalDeviceSparseImageFormatInfo2KHR const& rhs ) const
   19231     {
   19232       return !operator==( rhs );
   19233     }
   19234 
   19235   private:
   19236     StructureType sType = StructureType::ePhysicalDeviceSparseImageFormatInfo2KHR;
   19237 
   19238   public:
   19239     const void* pNext = nullptr;
   19240     Format format;
   19241     ImageType type;
   19242     SampleCountFlagBits samples;
   19243     ImageUsageFlags usage;
   19244     ImageTiling tiling;
   19245   };
   19246   static_assert( sizeof( PhysicalDeviceSparseImageFormatInfo2KHR ) == sizeof( VkPhysicalDeviceSparseImageFormatInfo2KHR ), "struct and wrapper have different size!" );
   19247 
   19248   struct SampleLocationsInfoEXT
   19249   {
   19250     SampleLocationsInfoEXT( SampleCountFlagBits sampleLocationsPerPixel_ = SampleCountFlagBits::e1, Extent2D sampleLocationGridSize_ = Extent2D(), uint32_t sampleLocationsCount_ = 0, const SampleLocationEXT* pSampleLocations_ = nullptr )
   19251       : sampleLocationsPerPixel( sampleLocationsPerPixel_ )
   19252       , sampleLocationGridSize( sampleLocationGridSize_ )
   19253       , sampleLocationsCount( sampleLocationsCount_ )
   19254       , pSampleLocations( pSampleLocations_ )
   19255     {
   19256     }
   19257 
   19258     SampleLocationsInfoEXT( VkSampleLocationsInfoEXT const & rhs )
   19259     {
   19260       memcpy( this, &rhs, sizeof( SampleLocationsInfoEXT ) );
   19261     }
   19262 
   19263     SampleLocationsInfoEXT& operator=( VkSampleLocationsInfoEXT const & rhs )
   19264     {
   19265       memcpy( this, &rhs, sizeof( SampleLocationsInfoEXT ) );
   19266       return *this;
   19267     }
   19268     SampleLocationsInfoEXT& setPNext( const void* pNext_ )
   19269     {
   19270       pNext = pNext_;
   19271       return *this;
   19272     }
   19273 
   19274     SampleLocationsInfoEXT& setSampleLocationsPerPixel( SampleCountFlagBits sampleLocationsPerPixel_ )
   19275     {
   19276       sampleLocationsPerPixel = sampleLocationsPerPixel_;
   19277       return *this;
   19278     }
   19279 
   19280     SampleLocationsInfoEXT& setSampleLocationGridSize( Extent2D sampleLocationGridSize_ )
   19281     {
   19282       sampleLocationGridSize = sampleLocationGridSize_;
   19283       return *this;
   19284     }
   19285 
   19286     SampleLocationsInfoEXT& setSampleLocationsCount( uint32_t sampleLocationsCount_ )
   19287     {
   19288       sampleLocationsCount = sampleLocationsCount_;
   19289       return *this;
   19290     }
   19291 
   19292     SampleLocationsInfoEXT& setPSampleLocations( const SampleLocationEXT* pSampleLocations_ )
   19293     {
   19294       pSampleLocations = pSampleLocations_;
   19295       return *this;
   19296     }
   19297 
   19298     operator const VkSampleLocationsInfoEXT&() const
   19299     {
   19300       return *reinterpret_cast<const VkSampleLocationsInfoEXT*>(this);
   19301     }
   19302 
   19303     bool operator==( SampleLocationsInfoEXT const& rhs ) const
   19304     {
   19305       return ( sType == rhs.sType )
   19306           && ( pNext == rhs.pNext )
   19307           && ( sampleLocationsPerPixel == rhs.sampleLocationsPerPixel )
   19308           && ( sampleLocationGridSize == rhs.sampleLocationGridSize )
   19309           && ( sampleLocationsCount == rhs.sampleLocationsCount )
   19310           && ( pSampleLocations == rhs.pSampleLocations );
   19311     }
   19312 
   19313     bool operator!=( SampleLocationsInfoEXT const& rhs ) const
   19314     {
   19315       return !operator==( rhs );
   19316     }
   19317 
   19318   private:
   19319     StructureType sType = StructureType::eSampleLocationsInfoEXT;
   19320 
   19321   public:
   19322     const void* pNext = nullptr;
   19323     SampleCountFlagBits sampleLocationsPerPixel;
   19324     Extent2D sampleLocationGridSize;
   19325     uint32_t sampleLocationsCount;
   19326     const SampleLocationEXT* pSampleLocations;
   19327   };
   19328   static_assert( sizeof( SampleLocationsInfoEXT ) == sizeof( VkSampleLocationsInfoEXT ), "struct and wrapper have different size!" );
   19329 
   19330   struct AttachmentSampleLocationsEXT
   19331   {
   19332     AttachmentSampleLocationsEXT( uint32_t attachmentIndex_ = 0, SampleLocationsInfoEXT sampleLocationsInfo_ = SampleLocationsInfoEXT() )
   19333       : attachmentIndex( attachmentIndex_ )
   19334       , sampleLocationsInfo( sampleLocationsInfo_ )
   19335     {
   19336     }
   19337 
   19338     AttachmentSampleLocationsEXT( VkAttachmentSampleLocationsEXT const & rhs )
   19339     {
   19340       memcpy( this, &rhs, sizeof( AttachmentSampleLocationsEXT ) );
   19341     }
   19342 
   19343     AttachmentSampleLocationsEXT& operator=( VkAttachmentSampleLocationsEXT const & rhs )
   19344     {
   19345       memcpy( this, &rhs, sizeof( AttachmentSampleLocationsEXT ) );
   19346       return *this;
   19347     }
   19348     AttachmentSampleLocationsEXT& setAttachmentIndex( uint32_t attachmentIndex_ )
   19349     {
   19350       attachmentIndex = attachmentIndex_;
   19351       return *this;
   19352     }
   19353 
   19354     AttachmentSampleLocationsEXT& setSampleLocationsInfo( SampleLocationsInfoEXT sampleLocationsInfo_ )
   19355     {
   19356       sampleLocationsInfo = sampleLocationsInfo_;
   19357       return *this;
   19358     }
   19359 
   19360     operator const VkAttachmentSampleLocationsEXT&() const
   19361     {
   19362       return *reinterpret_cast<const VkAttachmentSampleLocationsEXT*>(this);
   19363     }
   19364 
   19365     bool operator==( AttachmentSampleLocationsEXT const& rhs ) const
   19366     {
   19367       return ( attachmentIndex == rhs.attachmentIndex )
   19368           && ( sampleLocationsInfo == rhs.sampleLocationsInfo );
   19369     }
   19370 
   19371     bool operator!=( AttachmentSampleLocationsEXT const& rhs ) const
   19372     {
   19373       return !operator==( rhs );
   19374     }
   19375 
   19376     uint32_t attachmentIndex;
   19377     SampleLocationsInfoEXT sampleLocationsInfo;
   19378   };
   19379   static_assert( sizeof( AttachmentSampleLocationsEXT ) == sizeof( VkAttachmentSampleLocationsEXT ), "struct and wrapper have different size!" );
   19380 
   19381   struct SubpassSampleLocationsEXT
   19382   {
   19383     SubpassSampleLocationsEXT( uint32_t subpassIndex_ = 0, SampleLocationsInfoEXT sampleLocationsInfo_ = SampleLocationsInfoEXT() )
   19384       : subpassIndex( subpassIndex_ )
   19385       , sampleLocationsInfo( sampleLocationsInfo_ )
   19386     {
   19387     }
   19388 
   19389     SubpassSampleLocationsEXT( VkSubpassSampleLocationsEXT const & rhs )
   19390     {
   19391       memcpy( this, &rhs, sizeof( SubpassSampleLocationsEXT ) );
   19392     }
   19393 
   19394     SubpassSampleLocationsEXT& operator=( VkSubpassSampleLocationsEXT const & rhs )
   19395     {
   19396       memcpy( this, &rhs, sizeof( SubpassSampleLocationsEXT ) );
   19397       return *this;
   19398     }
   19399     SubpassSampleLocationsEXT& setSubpassIndex( uint32_t subpassIndex_ )
   19400     {
   19401       subpassIndex = subpassIndex_;
   19402       return *this;
   19403     }
   19404 
   19405     SubpassSampleLocationsEXT& setSampleLocationsInfo( SampleLocationsInfoEXT sampleLocationsInfo_ )
   19406     {
   19407       sampleLocationsInfo = sampleLocationsInfo_;
   19408       return *this;
   19409     }
   19410 
   19411     operator const VkSubpassSampleLocationsEXT&() const
   19412     {
   19413       return *reinterpret_cast<const VkSubpassSampleLocationsEXT*>(this);
   19414     }
   19415 
   19416     bool operator==( SubpassSampleLocationsEXT const& rhs ) const
   19417     {
   19418       return ( subpassIndex == rhs.subpassIndex )
   19419           && ( sampleLocationsInfo == rhs.sampleLocationsInfo );
   19420     }
   19421 
   19422     bool operator!=( SubpassSampleLocationsEXT const& rhs ) const
   19423     {
   19424       return !operator==( rhs );
   19425     }
   19426 
   19427     uint32_t subpassIndex;
   19428     SampleLocationsInfoEXT sampleLocationsInfo;
   19429   };
   19430   static_assert( sizeof( SubpassSampleLocationsEXT ) == sizeof( VkSubpassSampleLocationsEXT ), "struct and wrapper have different size!" );
   19431 
   19432   struct RenderPassSampleLocationsBeginInfoEXT
   19433   {
   19434     RenderPassSampleLocationsBeginInfoEXT( uint32_t attachmentInitialSampleLocationsCount_ = 0, const AttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations_ = nullptr, uint32_t postSubpassSampleLocationsCount_ = 0, const SubpassSampleLocationsEXT* pPostSubpassSampleLocations_ = nullptr )
   19435       : attachmentInitialSampleLocationsCount( attachmentInitialSampleLocationsCount_ )
   19436       , pAttachmentInitialSampleLocations( pAttachmentInitialSampleLocations_ )
   19437       , postSubpassSampleLocationsCount( postSubpassSampleLocationsCount_ )
   19438       , pPostSubpassSampleLocations( pPostSubpassSampleLocations_ )
   19439     {
   19440     }
   19441 
   19442     RenderPassSampleLocationsBeginInfoEXT( VkRenderPassSampleLocationsBeginInfoEXT const & rhs )
   19443     {
   19444       memcpy( this, &rhs, sizeof( RenderPassSampleLocationsBeginInfoEXT ) );
   19445     }
   19446 
   19447     RenderPassSampleLocationsBeginInfoEXT& operator=( VkRenderPassSampleLocationsBeginInfoEXT const & rhs )
   19448     {
   19449       memcpy( this, &rhs, sizeof( RenderPassSampleLocationsBeginInfoEXT ) );
   19450       return *this;
   19451     }
   19452     RenderPassSampleLocationsBeginInfoEXT& setPNext( const void* pNext_ )
   19453     {
   19454       pNext = pNext_;
   19455       return *this;
   19456     }
   19457 
   19458     RenderPassSampleLocationsBeginInfoEXT& setAttachmentInitialSampleLocationsCount( uint32_t attachmentInitialSampleLocationsCount_ )
   19459     {
   19460       attachmentInitialSampleLocationsCount = attachmentInitialSampleLocationsCount_;
   19461       return *this;
   19462     }
   19463 
   19464     RenderPassSampleLocationsBeginInfoEXT& setPAttachmentInitialSampleLocations( const AttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations_ )
   19465     {
   19466       pAttachmentInitialSampleLocations = pAttachmentInitialSampleLocations_;
   19467       return *this;
   19468     }
   19469 
   19470     RenderPassSampleLocationsBeginInfoEXT& setPostSubpassSampleLocationsCount( uint32_t postSubpassSampleLocationsCount_ )
   19471     {
   19472       postSubpassSampleLocationsCount = postSubpassSampleLocationsCount_;
   19473       return *this;
   19474     }
   19475 
   19476     RenderPassSampleLocationsBeginInfoEXT& setPPostSubpassSampleLocations( const SubpassSampleLocationsEXT* pPostSubpassSampleLocations_ )
   19477     {
   19478       pPostSubpassSampleLocations = pPostSubpassSampleLocations_;
   19479       return *this;
   19480     }
   19481 
   19482     operator const VkRenderPassSampleLocationsBeginInfoEXT&() const
   19483     {
   19484       return *reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(this);
   19485     }
   19486 
   19487     bool operator==( RenderPassSampleLocationsBeginInfoEXT const& rhs ) const
   19488     {
   19489       return ( sType == rhs.sType )
   19490           && ( pNext == rhs.pNext )
   19491           && ( attachmentInitialSampleLocationsCount == rhs.attachmentInitialSampleLocationsCount )
   19492           && ( pAttachmentInitialSampleLocations == rhs.pAttachmentInitialSampleLocations )
   19493           && ( postSubpassSampleLocationsCount == rhs.postSubpassSampleLocationsCount )
   19494           && ( pPostSubpassSampleLocations == rhs.pPostSubpassSampleLocations );
   19495     }
   19496 
   19497     bool operator!=( RenderPassSampleLocationsBeginInfoEXT const& rhs ) const
   19498     {
   19499       return !operator==( rhs );
   19500     }
   19501 
   19502   private:
   19503     StructureType sType = StructureType::eRenderPassSampleLocationsBeginInfoEXT;
   19504 
   19505   public:
   19506     const void* pNext = nullptr;
   19507     uint32_t attachmentInitialSampleLocationsCount;
   19508     const AttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations;
   19509     uint32_t postSubpassSampleLocationsCount;
   19510     const SubpassSampleLocationsEXT* pPostSubpassSampleLocations;
   19511   };
   19512   static_assert( sizeof( RenderPassSampleLocationsBeginInfoEXT ) == sizeof( VkRenderPassSampleLocationsBeginInfoEXT ), "struct and wrapper have different size!" );
   19513 
   19514   struct PipelineSampleLocationsStateCreateInfoEXT
   19515   {
   19516     PipelineSampleLocationsStateCreateInfoEXT( Bool32 sampleLocationsEnable_ = 0, SampleLocationsInfoEXT sampleLocationsInfo_ = SampleLocationsInfoEXT() )
   19517       : sampleLocationsEnable( sampleLocationsEnable_ )
   19518       , sampleLocationsInfo( sampleLocationsInfo_ )
   19519     {
   19520     }
   19521 
   19522     PipelineSampleLocationsStateCreateInfoEXT( VkPipelineSampleLocationsStateCreateInfoEXT const & rhs )
   19523     {
   19524       memcpy( this, &rhs, sizeof( PipelineSampleLocationsStateCreateInfoEXT ) );
   19525     }
   19526 
   19527     PipelineSampleLocationsStateCreateInfoEXT& operator=( VkPipelineSampleLocationsStateCreateInfoEXT const & rhs )
   19528     {
   19529       memcpy( this, &rhs, sizeof( PipelineSampleLocationsStateCreateInfoEXT ) );
   19530       return *this;
   19531     }
   19532     PipelineSampleLocationsStateCreateInfoEXT& setPNext( const void* pNext_ )
   19533     {
   19534       pNext = pNext_;
   19535       return *this;
   19536     }
   19537 
   19538     PipelineSampleLocationsStateCreateInfoEXT& setSampleLocationsEnable( Bool32 sampleLocationsEnable_ )
   19539     {
   19540       sampleLocationsEnable = sampleLocationsEnable_;
   19541       return *this;
   19542     }
   19543 
   19544     PipelineSampleLocationsStateCreateInfoEXT& setSampleLocationsInfo( SampleLocationsInfoEXT sampleLocationsInfo_ )
   19545     {
   19546       sampleLocationsInfo = sampleLocationsInfo_;
   19547       return *this;
   19548     }
   19549 
   19550     operator const VkPipelineSampleLocationsStateCreateInfoEXT&() const
   19551     {
   19552       return *reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(this);
   19553     }
   19554 
   19555     bool operator==( PipelineSampleLocationsStateCreateInfoEXT const& rhs ) const
   19556     {
   19557       return ( sType == rhs.sType )
   19558           && ( pNext == rhs.pNext )
   19559           && ( sampleLocationsEnable == rhs.sampleLocationsEnable )
   19560           && ( sampleLocationsInfo == rhs.sampleLocationsInfo );
   19561     }
   19562 
   19563     bool operator!=( PipelineSampleLocationsStateCreateInfoEXT const& rhs ) const
   19564     {
   19565       return !operator==( rhs );
   19566     }
   19567 
   19568   private:
   19569     StructureType sType = StructureType::ePipelineSampleLocationsStateCreateInfoEXT;
   19570 
   19571   public:
   19572     const void* pNext = nullptr;
   19573     Bool32 sampleLocationsEnable;
   19574     SampleLocationsInfoEXT sampleLocationsInfo;
   19575   };
   19576   static_assert( sizeof( PipelineSampleLocationsStateCreateInfoEXT ) == sizeof( VkPipelineSampleLocationsStateCreateInfoEXT ), "struct and wrapper have different size!" );
   19577 
   19578   struct PhysicalDeviceSampleLocationsPropertiesEXT
   19579   {
   19580     operator const VkPhysicalDeviceSampleLocationsPropertiesEXT&() const
   19581     {
   19582       return *reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(this);
   19583     }
   19584 
   19585     bool operator==( PhysicalDeviceSampleLocationsPropertiesEXT const& rhs ) const
   19586     {
   19587       return ( sType == rhs.sType )
   19588           && ( pNext == rhs.pNext )
   19589           && ( sampleLocationSampleCounts == rhs.sampleLocationSampleCounts )
   19590           && ( maxSampleLocationGridSize == rhs.maxSampleLocationGridSize )
   19591           && ( memcmp( sampleLocationCoordinateRange, rhs.sampleLocationCoordinateRange, 2 * sizeof( float ) ) == 0 )
   19592           && ( sampleLocationSubPixelBits == rhs.sampleLocationSubPixelBits )
   19593           && ( variableSampleLocations == rhs.variableSampleLocations );
   19594     }
   19595 
   19596     bool operator!=( PhysicalDeviceSampleLocationsPropertiesEXT const& rhs ) const
   19597     {
   19598       return !operator==( rhs );
   19599     }
   19600 
   19601   private:
   19602     StructureType sType = StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT;
   19603 
   19604   public:
   19605     void* pNext = nullptr;
   19606     SampleCountFlags sampleLocationSampleCounts;
   19607     Extent2D maxSampleLocationGridSize;
   19608     float sampleLocationCoordinateRange[2];
   19609     uint32_t sampleLocationSubPixelBits;
   19610     Bool32 variableSampleLocations;
   19611   };
   19612   static_assert( sizeof( PhysicalDeviceSampleLocationsPropertiesEXT ) == sizeof( VkPhysicalDeviceSampleLocationsPropertiesEXT ), "struct and wrapper have different size!" );
   19613 
   19614   enum class AttachmentDescriptionFlagBits
   19615   {
   19616     eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
   19617   };
   19618 
   19619   using AttachmentDescriptionFlags = Flags<AttachmentDescriptionFlagBits, VkAttachmentDescriptionFlags>;
   19620 
   19621   VULKAN_HPP_INLINE AttachmentDescriptionFlags operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 )
   19622   {
   19623     return AttachmentDescriptionFlags( bit0 ) | bit1;
   19624   }
   19625 
   19626   VULKAN_HPP_INLINE AttachmentDescriptionFlags operator~( AttachmentDescriptionFlagBits bits )
   19627   {
   19628     return ~( AttachmentDescriptionFlags( bits ) );
   19629   }
   19630 
   19631   template <> struct FlagTraits<AttachmentDescriptionFlagBits>
   19632   {
   19633     enum
   19634     {
   19635       allFlags = VkFlags(AttachmentDescriptionFlagBits::eMayAlias)
   19636     };
   19637   };
   19638 
   19639   struct AttachmentDescription
   19640   {
   19641     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 )
   19642       : flags( flags_ )
   19643       , format( format_ )
   19644       , samples( samples_ )
   19645       , loadOp( loadOp_ )
   19646       , storeOp( storeOp_ )
   19647       , stencilLoadOp( stencilLoadOp_ )
   19648       , stencilStoreOp( stencilStoreOp_ )
   19649       , initialLayout( initialLayout_ )
   19650       , finalLayout( finalLayout_ )
   19651     {
   19652     }
   19653 
   19654     AttachmentDescription( VkAttachmentDescription const & rhs )
   19655     {
   19656       memcpy( this, &rhs, sizeof( AttachmentDescription ) );
   19657     }
   19658 
   19659     AttachmentDescription& operator=( VkAttachmentDescription const & rhs )
   19660     {
   19661       memcpy( this, &rhs, sizeof( AttachmentDescription ) );
   19662       return *this;
   19663     }
   19664     AttachmentDescription& setFlags( AttachmentDescriptionFlags flags_ )
   19665     {
   19666       flags = flags_;
   19667       return *this;
   19668     }
   19669 
   19670     AttachmentDescription& setFormat( Format format_ )
   19671     {
   19672       format = format_;
   19673       return *this;
   19674     }
   19675 
   19676     AttachmentDescription& setSamples( SampleCountFlagBits samples_ )
   19677     {
   19678       samples = samples_;
   19679       return *this;
   19680     }
   19681 
   19682     AttachmentDescription& setLoadOp( AttachmentLoadOp loadOp_ )
   19683     {
   19684       loadOp = loadOp_;
   19685       return *this;
   19686     }
   19687 
   19688     AttachmentDescription& setStoreOp( AttachmentStoreOp storeOp_ )
   19689     {
   19690       storeOp = storeOp_;
   19691       return *this;
   19692     }
   19693 
   19694     AttachmentDescription& setStencilLoadOp( AttachmentLoadOp stencilLoadOp_ )
   19695     {
   19696       stencilLoadOp = stencilLoadOp_;
   19697       return *this;
   19698     }
   19699 
   19700     AttachmentDescription& setStencilStoreOp( AttachmentStoreOp stencilStoreOp_ )
   19701     {
   19702       stencilStoreOp = stencilStoreOp_;
   19703       return *this;
   19704     }
   19705 
   19706     AttachmentDescription& setInitialLayout( ImageLayout initialLayout_ )
   19707     {
   19708       initialLayout = initialLayout_;
   19709       return *this;
   19710     }
   19711 
   19712     AttachmentDescription& setFinalLayout( ImageLayout finalLayout_ )
   19713     {
   19714       finalLayout = finalLayout_;
   19715       return *this;
   19716     }
   19717 
   19718     operator const VkAttachmentDescription&() const
   19719     {
   19720       return *reinterpret_cast<const VkAttachmentDescription*>(this);
   19721     }
   19722 
   19723     bool operator==( AttachmentDescription const& rhs ) const
   19724     {
   19725       return ( flags == rhs.flags )
   19726           && ( format == rhs.format )
   19727           && ( samples == rhs.samples )
   19728           && ( loadOp == rhs.loadOp )
   19729           && ( storeOp == rhs.storeOp )
   19730           && ( stencilLoadOp == rhs.stencilLoadOp )
   19731           && ( stencilStoreOp == rhs.stencilStoreOp )
   19732           && ( initialLayout == rhs.initialLayout )
   19733           && ( finalLayout == rhs.finalLayout );
   19734     }
   19735 
   19736     bool operator!=( AttachmentDescription const& rhs ) const
   19737     {
   19738       return !operator==( rhs );
   19739     }
   19740 
   19741     AttachmentDescriptionFlags flags;
   19742     Format format;
   19743     SampleCountFlagBits samples;
   19744     AttachmentLoadOp loadOp;
   19745     AttachmentStoreOp storeOp;
   19746     AttachmentLoadOp stencilLoadOp;
   19747     AttachmentStoreOp stencilStoreOp;
   19748     ImageLayout initialLayout;
   19749     ImageLayout finalLayout;
   19750   };
   19751   static_assert( sizeof( AttachmentDescription ) == sizeof( VkAttachmentDescription ), "struct and wrapper have different size!" );
   19752 
   19753   enum class StencilFaceFlagBits
   19754   {
   19755     eFront = VK_STENCIL_FACE_FRONT_BIT,
   19756     eBack = VK_STENCIL_FACE_BACK_BIT,
   19757     eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK
   19758   };
   19759 
   19760   using StencilFaceFlags = Flags<StencilFaceFlagBits, VkStencilFaceFlags>;
   19761 
   19762   VULKAN_HPP_INLINE StencilFaceFlags operator|( StencilFaceFlagBits bit0, StencilFaceFlagBits bit1 )
   19763   {
   19764     return StencilFaceFlags( bit0 ) | bit1;
   19765   }
   19766 
   19767   VULKAN_HPP_INLINE StencilFaceFlags operator~( StencilFaceFlagBits bits )
   19768   {
   19769     return ~( StencilFaceFlags( bits ) );
   19770   }
   19771 
   19772   template <> struct FlagTraits<StencilFaceFlagBits>
   19773   {
   19774     enum
   19775     {
   19776       allFlags = VkFlags(StencilFaceFlagBits::eFront) | VkFlags(StencilFaceFlagBits::eBack) | VkFlags(StencilFaceFlagBits::eVkStencilFrontAndBack)
   19777     };
   19778   };
   19779 
   19780   enum class DescriptorPoolCreateFlagBits
   19781   {
   19782     eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
   19783   };
   19784 
   19785   using DescriptorPoolCreateFlags = Flags<DescriptorPoolCreateFlagBits, VkDescriptorPoolCreateFlags>;
   19786 
   19787   VULKAN_HPP_INLINE DescriptorPoolCreateFlags operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 )
   19788   {
   19789     return DescriptorPoolCreateFlags( bit0 ) | bit1;
   19790   }
   19791 
   19792   VULKAN_HPP_INLINE DescriptorPoolCreateFlags operator~( DescriptorPoolCreateFlagBits bits )
   19793   {
   19794     return ~( DescriptorPoolCreateFlags( bits ) );
   19795   }
   19796 
   19797   template <> struct FlagTraits<DescriptorPoolCreateFlagBits>
   19798   {
   19799     enum
   19800     {
   19801       allFlags = VkFlags(DescriptorPoolCreateFlagBits::eFreeDescriptorSet)
   19802     };
   19803   };
   19804 
   19805   struct DescriptorPoolCreateInfo
   19806   {
   19807     DescriptorPoolCreateInfo( DescriptorPoolCreateFlags flags_ = DescriptorPoolCreateFlags(), uint32_t maxSets_ = 0, uint32_t poolSizeCount_ = 0, const DescriptorPoolSize* pPoolSizes_ = nullptr )
   19808       : flags( flags_ )
   19809       , maxSets( maxSets_ )
   19810       , poolSizeCount( poolSizeCount_ )
   19811       , pPoolSizes( pPoolSizes_ )
   19812     {
   19813     }
   19814 
   19815     DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs )
   19816     {
   19817       memcpy( this, &rhs, sizeof( DescriptorPoolCreateInfo ) );
   19818     }
   19819 
   19820     DescriptorPoolCreateInfo& operator=( VkDescriptorPoolCreateInfo const & rhs )
   19821     {
   19822       memcpy( this, &rhs, sizeof( DescriptorPoolCreateInfo ) );
   19823       return *this;
   19824     }
   19825     DescriptorPoolCreateInfo& setPNext( const void* pNext_ )
   19826     {
   19827       pNext = pNext_;
   19828       return *this;
   19829     }
   19830 
   19831     DescriptorPoolCreateInfo& setFlags( DescriptorPoolCreateFlags flags_ )
   19832     {
   19833       flags = flags_;
   19834       return *this;
   19835     }
   19836 
   19837     DescriptorPoolCreateInfo& setMaxSets( uint32_t maxSets_ )
   19838     {
   19839       maxSets = maxSets_;
   19840       return *this;
   19841     }
   19842 
   19843     DescriptorPoolCreateInfo& setPoolSizeCount( uint32_t poolSizeCount_ )
   19844     {
   19845       poolSizeCount = poolSizeCount_;
   19846       return *this;
   19847     }
   19848 
   19849     DescriptorPoolCreateInfo& setPPoolSizes( const DescriptorPoolSize* pPoolSizes_ )
   19850     {
   19851       pPoolSizes = pPoolSizes_;
   19852       return *this;
   19853     }
   19854 
   19855     operator const VkDescriptorPoolCreateInfo&() const
   19856     {
   19857       return *reinterpret_cast<const VkDescriptorPoolCreateInfo*>(this);
   19858     }
   19859 
   19860     bool operator==( DescriptorPoolCreateInfo const& rhs ) const
   19861     {
   19862       return ( sType == rhs.sType )
   19863           && ( pNext == rhs.pNext )
   19864           && ( flags == rhs.flags )
   19865           && ( maxSets == rhs.maxSets )
   19866           && ( poolSizeCount == rhs.poolSizeCount )
   19867           && ( pPoolSizes == rhs.pPoolSizes );
   19868     }
   19869 
   19870     bool operator!=( DescriptorPoolCreateInfo const& rhs ) const
   19871     {
   19872       return !operator==( rhs );
   19873     }
   19874 
   19875   private:
   19876     StructureType sType = StructureType::eDescriptorPoolCreateInfo;
   19877 
   19878   public:
   19879     const void* pNext = nullptr;
   19880     DescriptorPoolCreateFlags flags;
   19881     uint32_t maxSets;
   19882     uint32_t poolSizeCount;
   19883     const DescriptorPoolSize* pPoolSizes;
   19884   };
   19885   static_assert( sizeof( DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ), "struct and wrapper have different size!" );
   19886 
   19887   enum class DependencyFlagBits
   19888   {
   19889     eByRegion = VK_DEPENDENCY_BY_REGION_BIT,
   19890     eViewLocalKHX = VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX,
   19891     eDeviceGroupKHX = VK_DEPENDENCY_DEVICE_GROUP_BIT_KHX
   19892   };
   19893 
   19894   using DependencyFlags = Flags<DependencyFlagBits, VkDependencyFlags>;
   19895 
   19896   VULKAN_HPP_INLINE DependencyFlags operator|( DependencyFlagBits bit0, DependencyFlagBits bit1 )
   19897   {
   19898     return DependencyFlags( bit0 ) | bit1;
   19899   }
   19900 
   19901   VULKAN_HPP_INLINE DependencyFlags operator~( DependencyFlagBits bits )
   19902   {
   19903     return ~( DependencyFlags( bits ) );
   19904   }
   19905 
   19906   template <> struct FlagTraits<DependencyFlagBits>
   19907   {
   19908     enum
   19909     {
   19910       allFlags = VkFlags(DependencyFlagBits::eByRegion) | VkFlags(DependencyFlagBits::eViewLocalKHX) | VkFlags(DependencyFlagBits::eDeviceGroupKHX)
   19911     };
   19912   };
   19913 
   19914   struct SubpassDependency
   19915   {
   19916     SubpassDependency( uint32_t srcSubpass_ = 0, uint32_t dstSubpass_ = 0, PipelineStageFlags srcStageMask_ = PipelineStageFlags(), PipelineStageFlags dstStageMask_ = PipelineStageFlags(), AccessFlags srcAccessMask_ = AccessFlags(), AccessFlags dstAccessMask_ = AccessFlags(), DependencyFlags dependencyFlags_ = DependencyFlags() )
   19917       : srcSubpass( srcSubpass_ )
   19918       , dstSubpass( dstSubpass_ )
   19919       , srcStageMask( srcStageMask_ )
   19920       , dstStageMask( dstStageMask_ )
   19921       , srcAccessMask( srcAccessMask_ )
   19922       , dstAccessMask( dstAccessMask_ )
   19923       , dependencyFlags( dependencyFlags_ )
   19924     {
   19925     }
   19926 
   19927     SubpassDependency( VkSubpassDependency const & rhs )
   19928     {
   19929       memcpy( this, &rhs, sizeof( SubpassDependency ) );
   19930     }
   19931 
   19932     SubpassDependency& operator=( VkSubpassDependency const & rhs )
   19933     {
   19934       memcpy( this, &rhs, sizeof( SubpassDependency ) );
   19935       return *this;
   19936     }
   19937     SubpassDependency& setSrcSubpass( uint32_t srcSubpass_ )
   19938     {
   19939       srcSubpass = srcSubpass_;
   19940       return *this;
   19941     }
   19942 
   19943     SubpassDependency& setDstSubpass( uint32_t dstSubpass_ )
   19944     {
   19945       dstSubpass = dstSubpass_;
   19946       return *this;
   19947     }
   19948 
   19949     SubpassDependency& setSrcStageMask( PipelineStageFlags srcStageMask_ )
   19950     {
   19951       srcStageMask = srcStageMask_;
   19952       return *this;
   19953     }
   19954 
   19955     SubpassDependency& setDstStageMask( PipelineStageFlags dstStageMask_ )
   19956     {
   19957       dstStageMask = dstStageMask_;
   19958       return *this;
   19959     }
   19960 
   19961     SubpassDependency& setSrcAccessMask( AccessFlags srcAccessMask_ )
   19962     {
   19963       srcAccessMask = srcAccessMask_;
   19964       return *this;
   19965     }
   19966 
   19967     SubpassDependency& setDstAccessMask( AccessFlags dstAccessMask_ )
   19968     {
   19969       dstAccessMask = dstAccessMask_;
   19970       return *this;
   19971     }
   19972 
   19973     SubpassDependency& setDependencyFlags( DependencyFlags dependencyFlags_ )
   19974     {
   19975       dependencyFlags = dependencyFlags_;
   19976       return *this;
   19977     }
   19978 
   19979     operator const VkSubpassDependency&() const
   19980     {
   19981       return *reinterpret_cast<const VkSubpassDependency*>(this);
   19982     }
   19983 
   19984     bool operator==( SubpassDependency const& rhs ) const
   19985     {
   19986       return ( srcSubpass == rhs.srcSubpass )
   19987           && ( dstSubpass == rhs.dstSubpass )
   19988           && ( srcStageMask == rhs.srcStageMask )
   19989           && ( dstStageMask == rhs.dstStageMask )
   19990           && ( srcAccessMask == rhs.srcAccessMask )
   19991           && ( dstAccessMask == rhs.dstAccessMask )
   19992           && ( dependencyFlags == rhs.dependencyFlags );
   19993     }
   19994 
   19995     bool operator!=( SubpassDependency const& rhs ) const
   19996     {
   19997       return !operator==( rhs );
   19998     }
   19999 
   20000     uint32_t srcSubpass;
   20001     uint32_t dstSubpass;
   20002     PipelineStageFlags srcStageMask;
   20003     PipelineStageFlags dstStageMask;
   20004     AccessFlags srcAccessMask;
   20005     AccessFlags dstAccessMask;
   20006     DependencyFlags dependencyFlags;
   20007   };
   20008   static_assert( sizeof( SubpassDependency ) == sizeof( VkSubpassDependency ), "struct and wrapper have different size!" );
   20009 
   20010   enum class PresentModeKHR
   20011   {
   20012     eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR,
   20013     eMailbox = VK_PRESENT_MODE_MAILBOX_KHR,
   20014     eFifo = VK_PRESENT_MODE_FIFO_KHR,
   20015     eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
   20016     eSharedDemandRefresh = VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR,
   20017     eSharedContinuousRefresh = VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
   20018   };
   20019 
   20020   enum class ColorSpaceKHR
   20021   {
   20022     eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
   20023     eDisplayP3NonlinearEXT = VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT,
   20024     eExtendedSrgbLinearEXT = VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT,
   20025     eDciP3LinearEXT = VK_COLOR_SPACE_DCI_P3_LINEAR_EXT,
   20026     eDciP3NonlinearEXT = VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT,
   20027     eBt709LinearEXT = VK_COLOR_SPACE_BT709_LINEAR_EXT,
   20028     eBt709NonlinearEXT = VK_COLOR_SPACE_BT709_NONLINEAR_EXT,
   20029     eBt2020LinearEXT = VK_COLOR_SPACE_BT2020_LINEAR_EXT,
   20030     eHdr10St2084EXT = VK_COLOR_SPACE_HDR10_ST2084_EXT,
   20031     eDolbyvisionEXT = VK_COLOR_SPACE_DOLBYVISION_EXT,
   20032     eHdr10HlgEXT = VK_COLOR_SPACE_HDR10_HLG_EXT,
   20033     eAdobergbLinearEXT = VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT,
   20034     eAdobergbNonlinearEXT = VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT,
   20035     ePassThroughEXT = VK_COLOR_SPACE_PASS_THROUGH_EXT,
   20036     eExtendedSrgbNonlinearEXT = VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT
   20037   };
   20038 
   20039   struct SurfaceFormatKHR
   20040   {
   20041     operator const VkSurfaceFormatKHR&() const
   20042     {
   20043       return *reinterpret_cast<const VkSurfaceFormatKHR*>(this);
   20044     }
   20045 
   20046     bool operator==( SurfaceFormatKHR const& rhs ) const
   20047     {
   20048       return ( format == rhs.format )
   20049           && ( colorSpace == rhs.colorSpace );
   20050     }
   20051 
   20052     bool operator!=( SurfaceFormatKHR const& rhs ) const
   20053     {
   20054       return !operator==( rhs );
   20055     }
   20056 
   20057     Format format;
   20058     ColorSpaceKHR colorSpace;
   20059   };
   20060   static_assert( sizeof( SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ), "struct and wrapper have different size!" );
   20061 
   20062   struct SurfaceFormat2KHR
   20063   {
   20064     operator const VkSurfaceFormat2KHR&() const
   20065     {
   20066       return *reinterpret_cast<const VkSurfaceFormat2KHR*>(this);
   20067     }
   20068 
   20069     bool operator==( SurfaceFormat2KHR const& rhs ) const
   20070     {
   20071       return ( sType == rhs.sType )
   20072           && ( pNext == rhs.pNext )
   20073           && ( surfaceFormat == rhs.surfaceFormat );
   20074     }
   20075 
   20076     bool operator!=( SurfaceFormat2KHR const& rhs ) const
   20077     {
   20078       return !operator==( rhs );
   20079     }
   20080 
   20081   private:
   20082     StructureType sType = StructureType::eSurfaceFormat2KHR;
   20083 
   20084   public:
   20085     void* pNext = nullptr;
   20086     SurfaceFormatKHR surfaceFormat;
   20087   };
   20088   static_assert( sizeof( SurfaceFormat2KHR ) == sizeof( VkSurfaceFormat2KHR ), "struct and wrapper have different size!" );
   20089 
   20090   enum class DisplayPlaneAlphaFlagBitsKHR
   20091   {
   20092     eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,
   20093     eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,
   20094     ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,
   20095     ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
   20096   };
   20097 
   20098   using DisplayPlaneAlphaFlagsKHR = Flags<DisplayPlaneAlphaFlagBitsKHR, VkDisplayPlaneAlphaFlagsKHR>;
   20099 
   20100   VULKAN_HPP_INLINE DisplayPlaneAlphaFlagsKHR operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 )
   20101   {
   20102     return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1;
   20103   }
   20104 
   20105   VULKAN_HPP_INLINE DisplayPlaneAlphaFlagsKHR operator~( DisplayPlaneAlphaFlagBitsKHR bits )
   20106   {
   20107     return ~( DisplayPlaneAlphaFlagsKHR( bits ) );
   20108   }
   20109 
   20110   template <> struct FlagTraits<DisplayPlaneAlphaFlagBitsKHR>
   20111   {
   20112     enum
   20113     {
   20114       allFlags = VkFlags(DisplayPlaneAlphaFlagBitsKHR::eOpaque) | VkFlags(DisplayPlaneAlphaFlagBitsKHR::eGlobal) | VkFlags(DisplayPlaneAlphaFlagBitsKHR::ePerPixel) | VkFlags(DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied)
   20115     };
   20116   };
   20117 
   20118   struct DisplayPlaneCapabilitiesKHR
   20119   {
   20120     operator const VkDisplayPlaneCapabilitiesKHR&() const
   20121     {
   20122       return *reinterpret_cast<const VkDisplayPlaneCapabilitiesKHR*>(this);
   20123     }
   20124 
   20125     bool operator==( DisplayPlaneCapabilitiesKHR const& rhs ) const
   20126     {
   20127       return ( supportedAlpha == rhs.supportedAlpha )
   20128           && ( minSrcPosition == rhs.minSrcPosition )
   20129           && ( maxSrcPosition == rhs.maxSrcPosition )
   20130           && ( minSrcExtent == rhs.minSrcExtent )
   20131           && ( maxSrcExtent == rhs.maxSrcExtent )
   20132           && ( minDstPosition == rhs.minDstPosition )
   20133           && ( maxDstPosition == rhs.maxDstPosition )
   20134           && ( minDstExtent == rhs.minDstExtent )
   20135           && ( maxDstExtent == rhs.maxDstExtent );
   20136     }
   20137 
   20138     bool operator!=( DisplayPlaneCapabilitiesKHR const& rhs ) const
   20139     {
   20140       return !operator==( rhs );
   20141     }
   20142 
   20143     DisplayPlaneAlphaFlagsKHR supportedAlpha;
   20144     Offset2D minSrcPosition;
   20145     Offset2D maxSrcPosition;
   20146     Extent2D minSrcExtent;
   20147     Extent2D maxSrcExtent;
   20148     Offset2D minDstPosition;
   20149     Offset2D maxDstPosition;
   20150     Extent2D minDstExtent;
   20151     Extent2D maxDstExtent;
   20152   };
   20153   static_assert( sizeof( DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ), "struct and wrapper have different size!" );
   20154 
   20155   enum class CompositeAlphaFlagBitsKHR
   20156   {
   20157     eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
   20158     ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
   20159     ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
   20160     eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
   20161   };
   20162 
   20163   using CompositeAlphaFlagsKHR = Flags<CompositeAlphaFlagBitsKHR, VkCompositeAlphaFlagsKHR>;
   20164 
   20165   VULKAN_HPP_INLINE CompositeAlphaFlagsKHR operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 )
   20166   {
   20167     return CompositeAlphaFlagsKHR( bit0 ) | bit1;
   20168   }
   20169 
   20170   VULKAN_HPP_INLINE CompositeAlphaFlagsKHR operator~( CompositeAlphaFlagBitsKHR bits )
   20171   {
   20172     return ~( CompositeAlphaFlagsKHR( bits ) );
   20173   }
   20174 
   20175   template <> struct FlagTraits<CompositeAlphaFlagBitsKHR>
   20176   {
   20177     enum
   20178     {
   20179       allFlags = VkFlags(CompositeAlphaFlagBitsKHR::eOpaque) | VkFlags(CompositeAlphaFlagBitsKHR::ePreMultiplied) | VkFlags(CompositeAlphaFlagBitsKHR::ePostMultiplied) | VkFlags(CompositeAlphaFlagBitsKHR::eInherit)
   20180     };
   20181   };
   20182 
   20183   enum class SurfaceTransformFlagBitsKHR
   20184   {
   20185     eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
   20186     eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,
   20187     eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,
   20188     eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,
   20189     eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,
   20190     eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,
   20191     eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,
   20192     eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,
   20193     eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
   20194   };
   20195 
   20196   using SurfaceTransformFlagsKHR = Flags<SurfaceTransformFlagBitsKHR, VkSurfaceTransformFlagsKHR>;
   20197 
   20198   VULKAN_HPP_INLINE SurfaceTransformFlagsKHR operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 )
   20199   {
   20200     return SurfaceTransformFlagsKHR( bit0 ) | bit1;
   20201   }
   20202 
   20203   VULKAN_HPP_INLINE SurfaceTransformFlagsKHR operator~( SurfaceTransformFlagBitsKHR bits )
   20204   {
   20205     return ~( SurfaceTransformFlagsKHR( bits ) );
   20206   }
   20207 
   20208   template <> struct FlagTraits<SurfaceTransformFlagBitsKHR>
   20209   {
   20210     enum
   20211     {
   20212       allFlags = VkFlags(SurfaceTransformFlagBitsKHR::eIdentity) | VkFlags(SurfaceTransformFlagBitsKHR::eRotate90) | VkFlags(SurfaceTransformFlagBitsKHR::eRotate180) | VkFlags(SurfaceTransformFlagBitsKHR::eRotate270) | VkFlags(SurfaceTransformFlagBitsKHR::eHorizontalMirror) | VkFlags(SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90) | VkFlags(SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180) | VkFlags(SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270) | VkFlags(SurfaceTransformFlagBitsKHR::eInherit)
   20213     };
   20214   };
   20215 
   20216   struct DisplayPropertiesKHR
   20217   {
   20218     operator const VkDisplayPropertiesKHR&() const
   20219     {
   20220       return *reinterpret_cast<const VkDisplayPropertiesKHR*>(this);
   20221     }
   20222 
   20223     bool operator==( DisplayPropertiesKHR const& rhs ) const
   20224     {
   20225       return ( display == rhs.display )
   20226           && ( displayName == rhs.displayName )
   20227           && ( physicalDimensions == rhs.physicalDimensions )
   20228           && ( physicalResolution == rhs.physicalResolution )
   20229           && ( supportedTransforms == rhs.supportedTransforms )
   20230           && ( planeReorderPossible == rhs.planeReorderPossible )
   20231           && ( persistentContent == rhs.persistentContent );
   20232     }
   20233 
   20234     bool operator!=( DisplayPropertiesKHR const& rhs ) const
   20235     {
   20236       return !operator==( rhs );
   20237     }
   20238 
   20239     DisplayKHR display;
   20240     const char* displayName;
   20241     Extent2D physicalDimensions;
   20242     Extent2D physicalResolution;
   20243     SurfaceTransformFlagsKHR supportedTransforms;
   20244     Bool32 planeReorderPossible;
   20245     Bool32 persistentContent;
   20246   };
   20247   static_assert( sizeof( DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ), "struct and wrapper have different size!" );
   20248 
   20249   struct DisplaySurfaceCreateInfoKHR
   20250   {
   20251     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() )
   20252       : flags( flags_ )
   20253       , displayMode( displayMode_ )
   20254       , planeIndex( planeIndex_ )
   20255       , planeStackIndex( planeStackIndex_ )
   20256       , transform( transform_ )
   20257       , globalAlpha( globalAlpha_ )
   20258       , alphaMode( alphaMode_ )
   20259       , imageExtent( imageExtent_ )
   20260     {
   20261     }
   20262 
   20263     DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs )
   20264     {
   20265       memcpy( this, &rhs, sizeof( DisplaySurfaceCreateInfoKHR ) );
   20266     }
   20267 
   20268     DisplaySurfaceCreateInfoKHR& operator=( VkDisplaySurfaceCreateInfoKHR const & rhs )
   20269     {
   20270       memcpy( this, &rhs, sizeof( DisplaySurfaceCreateInfoKHR ) );
   20271       return *this;
   20272     }
   20273     DisplaySurfaceCreateInfoKHR& setPNext( const void* pNext_ )
   20274     {
   20275       pNext = pNext_;
   20276       return *this;
   20277     }
   20278 
   20279     DisplaySurfaceCreateInfoKHR& setFlags( DisplaySurfaceCreateFlagsKHR flags_ )
   20280     {
   20281       flags = flags_;
   20282       return *this;
   20283     }
   20284 
   20285     DisplaySurfaceCreateInfoKHR& setDisplayMode( DisplayModeKHR displayMode_ )
   20286     {
   20287       displayMode = displayMode_;
   20288       return *this;
   20289     }
   20290 
   20291     DisplaySurfaceCreateInfoKHR& setPlaneIndex( uint32_t planeIndex_ )
   20292     {
   20293       planeIndex = planeIndex_;
   20294       return *this;
   20295     }
   20296 
   20297     DisplaySurfaceCreateInfoKHR& setPlaneStackIndex( uint32_t planeStackIndex_ )
   20298     {
   20299       planeStackIndex = planeStackIndex_;
   20300       return *this;
   20301     }
   20302 
   20303     DisplaySurfaceCreateInfoKHR& setTransform( SurfaceTransformFlagBitsKHR transform_ )
   20304     {
   20305       transform = transform_;
   20306       return *this;
   20307     }
   20308 
   20309     DisplaySurfaceCreateInfoKHR& setGlobalAlpha( float globalAlpha_ )
   20310     {
   20311       globalAlpha = globalAlpha_;
   20312       return *this;
   20313     }
   20314 
   20315     DisplaySurfaceCreateInfoKHR& setAlphaMode( DisplayPlaneAlphaFlagBitsKHR alphaMode_ )
   20316     {
   20317       alphaMode = alphaMode_;
   20318       return *this;
   20319     }
   20320 
   20321     DisplaySurfaceCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
   20322     {
   20323       imageExtent = imageExtent_;
   20324       return *this;
   20325     }
   20326 
   20327     operator const VkDisplaySurfaceCreateInfoKHR&() const
   20328     {
   20329       return *reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>(this);
   20330     }
   20331 
   20332     bool operator==( DisplaySurfaceCreateInfoKHR const& rhs ) const
   20333     {
   20334       return ( sType == rhs.sType )
   20335           && ( pNext == rhs.pNext )
   20336           && ( flags == rhs.flags )
   20337           && ( displayMode == rhs.displayMode )
   20338           && ( planeIndex == rhs.planeIndex )
   20339           && ( planeStackIndex == rhs.planeStackIndex )
   20340           && ( transform == rhs.transform )
   20341           && ( globalAlpha == rhs.globalAlpha )
   20342           && ( alphaMode == rhs.alphaMode )
   20343           && ( imageExtent == rhs.imageExtent );
   20344     }
   20345 
   20346     bool operator!=( DisplaySurfaceCreateInfoKHR const& rhs ) const
   20347     {
   20348       return !operator==( rhs );
   20349     }
   20350 
   20351   private:
   20352     StructureType sType = StructureType::eDisplaySurfaceCreateInfoKHR;
   20353 
   20354   public:
   20355     const void* pNext = nullptr;
   20356     DisplaySurfaceCreateFlagsKHR flags;
   20357     DisplayModeKHR displayMode;
   20358     uint32_t planeIndex;
   20359     uint32_t planeStackIndex;
   20360     SurfaceTransformFlagBitsKHR transform;
   20361     float globalAlpha;
   20362     DisplayPlaneAlphaFlagBitsKHR alphaMode;
   20363     Extent2D imageExtent;
   20364   };
   20365   static_assert( sizeof( DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
   20366 
   20367   struct SurfaceCapabilitiesKHR
   20368   {
   20369     operator const VkSurfaceCapabilitiesKHR&() const
   20370     {
   20371       return *reinterpret_cast<const VkSurfaceCapabilitiesKHR*>(this);
   20372     }
   20373 
   20374     bool operator==( SurfaceCapabilitiesKHR const& rhs ) const
   20375     {
   20376       return ( minImageCount == rhs.minImageCount )
   20377           && ( maxImageCount == rhs.maxImageCount )
   20378           && ( currentExtent == rhs.currentExtent )
   20379           && ( minImageExtent == rhs.minImageExtent )
   20380           && ( maxImageExtent == rhs.maxImageExtent )
   20381           && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
   20382           && ( supportedTransforms == rhs.supportedTransforms )
   20383           && ( currentTransform == rhs.currentTransform )
   20384           && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha )
   20385           && ( supportedUsageFlags == rhs.supportedUsageFlags );
   20386     }
   20387 
   20388     bool operator!=( SurfaceCapabilitiesKHR const& rhs ) const
   20389     {
   20390       return !operator==( rhs );
   20391     }
   20392 
   20393     uint32_t minImageCount;
   20394     uint32_t maxImageCount;
   20395     Extent2D currentExtent;
   20396     Extent2D minImageExtent;
   20397     Extent2D maxImageExtent;
   20398     uint32_t maxImageArrayLayers;
   20399     SurfaceTransformFlagsKHR supportedTransforms;
   20400     SurfaceTransformFlagBitsKHR currentTransform;
   20401     CompositeAlphaFlagsKHR supportedCompositeAlpha;
   20402     ImageUsageFlags supportedUsageFlags;
   20403   };
   20404   static_assert( sizeof( SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ), "struct and wrapper have different size!" );
   20405 
   20406   struct SurfaceCapabilities2KHR
   20407   {
   20408     operator const VkSurfaceCapabilities2KHR&() const
   20409     {
   20410       return *reinterpret_cast<const VkSurfaceCapabilities2KHR*>(this);
   20411     }
   20412 
   20413     bool operator==( SurfaceCapabilities2KHR const& rhs ) const
   20414     {
   20415       return ( sType == rhs.sType )
   20416           && ( pNext == rhs.pNext )
   20417           && ( surfaceCapabilities == rhs.surfaceCapabilities );
   20418     }
   20419 
   20420     bool operator!=( SurfaceCapabilities2KHR const& rhs ) const
   20421     {
   20422       return !operator==( rhs );
   20423     }
   20424 
   20425   private:
   20426     StructureType sType = StructureType::eSurfaceCapabilities2KHR;
   20427 
   20428   public:
   20429     void* pNext = nullptr;
   20430     SurfaceCapabilitiesKHR surfaceCapabilities;
   20431   };
   20432   static_assert( sizeof( SurfaceCapabilities2KHR ) == sizeof( VkSurfaceCapabilities2KHR ), "struct and wrapper have different size!" );
   20433 
   20434   enum class DebugReportFlagBitsEXT
   20435   {
   20436     eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT,
   20437     eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT,
   20438     ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
   20439     eError = VK_DEBUG_REPORT_ERROR_BIT_EXT,
   20440     eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT
   20441   };
   20442 
   20443   using DebugReportFlagsEXT = Flags<DebugReportFlagBitsEXT, VkDebugReportFlagsEXT>;
   20444 
   20445   VULKAN_HPP_INLINE DebugReportFlagsEXT operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 )
   20446   {
   20447     return DebugReportFlagsEXT( bit0 ) | bit1;
   20448   }
   20449 
   20450   VULKAN_HPP_INLINE DebugReportFlagsEXT operator~( DebugReportFlagBitsEXT bits )
   20451   {
   20452     return ~( DebugReportFlagsEXT( bits ) );
   20453   }
   20454 
   20455   template <> struct FlagTraits<DebugReportFlagBitsEXT>
   20456   {
   20457     enum
   20458     {
   20459       allFlags = VkFlags(DebugReportFlagBitsEXT::eInformation) | VkFlags(DebugReportFlagBitsEXT::eWarning) | VkFlags(DebugReportFlagBitsEXT::ePerformanceWarning) | VkFlags(DebugReportFlagBitsEXT::eError) | VkFlags(DebugReportFlagBitsEXT::eDebug)
   20460     };
   20461   };
   20462 
   20463   struct DebugReportCallbackCreateInfoEXT
   20464   {
   20465     DebugReportCallbackCreateInfoEXT( DebugReportFlagsEXT flags_ = DebugReportFlagsEXT(), PFN_vkDebugReportCallbackEXT pfnCallback_ = nullptr, void* pUserData_ = nullptr )
   20466       : flags( flags_ )
   20467       , pfnCallback( pfnCallback_ )
   20468       , pUserData( pUserData_ )
   20469     {
   20470     }
   20471 
   20472     DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs )
   20473     {
   20474       memcpy( this, &rhs, sizeof( DebugReportCallbackCreateInfoEXT ) );
   20475     }
   20476 
   20477     DebugReportCallbackCreateInfoEXT& operator=( VkDebugReportCallbackCreateInfoEXT const & rhs )
   20478     {
   20479       memcpy( this, &rhs, sizeof( DebugReportCallbackCreateInfoEXT ) );
   20480       return *this;
   20481     }
   20482     DebugReportCallbackCreateInfoEXT& setPNext( const void* pNext_ )
   20483     {
   20484       pNext = pNext_;
   20485       return *this;
   20486     }
   20487 
   20488     DebugReportCallbackCreateInfoEXT& setFlags( DebugReportFlagsEXT flags_ )
   20489     {
   20490       flags = flags_;
   20491       return *this;
   20492     }
   20493 
   20494     DebugReportCallbackCreateInfoEXT& setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ )
   20495     {
   20496       pfnCallback = pfnCallback_;
   20497       return *this;
   20498     }
   20499 
   20500     DebugReportCallbackCreateInfoEXT& setPUserData( void* pUserData_ )
   20501     {
   20502       pUserData = pUserData_;
   20503       return *this;
   20504     }
   20505 
   20506     operator const VkDebugReportCallbackCreateInfoEXT&() const
   20507     {
   20508       return *reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(this);
   20509     }
   20510 
   20511     bool operator==( DebugReportCallbackCreateInfoEXT const& rhs ) const
   20512     {
   20513       return ( sType == rhs.sType )
   20514           && ( pNext == rhs.pNext )
   20515           && ( flags == rhs.flags )
   20516           && ( pfnCallback == rhs.pfnCallback )
   20517           && ( pUserData == rhs.pUserData );
   20518     }
   20519 
   20520     bool operator!=( DebugReportCallbackCreateInfoEXT const& rhs ) const
   20521     {
   20522       return !operator==( rhs );
   20523     }
   20524 
   20525   private:
   20526     StructureType sType = StructureType::eDebugReportCallbackCreateInfoEXT;
   20527 
   20528   public:
   20529     const void* pNext = nullptr;
   20530     DebugReportFlagsEXT flags;
   20531     PFN_vkDebugReportCallbackEXT pfnCallback;
   20532     void* pUserData;
   20533   };
   20534   static_assert( sizeof( DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ), "struct and wrapper have different size!" );
   20535 
   20536   enum class DebugReportObjectTypeEXT
   20537   {
   20538     eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
   20539     eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
   20540     ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
   20541     eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
   20542     eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
   20543     eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
   20544     eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
   20545     eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
   20546     eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
   20547     eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
   20548     eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
   20549     eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
   20550     eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
   20551     eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
   20552     eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
   20553     eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
   20554     ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
   20555     ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
   20556     eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
   20557     ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
   20558     eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
   20559     eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
   20560     eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
   20561     eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
   20562     eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
   20563     eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
   20564     eSurfaceKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
   20565     eSwapchainKhr = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
   20566     eDebugReportCallbackExt = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
   20567     eDisplayKhr = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT,
   20568     eDisplayModeKhr = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT,
   20569     eObjectTableNvx = VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT,
   20570     eIndirectCommandsLayoutNvx = VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT,
   20571     eValidationCacheExt = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
   20572     eDescriptorUpdateTemplateKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT,
   20573     eSamplerYcbcrConversionKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT
   20574   };
   20575 
   20576   struct DebugMarkerObjectNameInfoEXT
   20577   {
   20578     DebugMarkerObjectNameInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, const char* pObjectName_ = nullptr )
   20579       : objectType( objectType_ )
   20580       , object( object_ )
   20581       , pObjectName( pObjectName_ )
   20582     {
   20583     }
   20584 
   20585     DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs )
   20586     {
   20587       memcpy( this, &rhs, sizeof( DebugMarkerObjectNameInfoEXT ) );
   20588     }
   20589 
   20590     DebugMarkerObjectNameInfoEXT& operator=( VkDebugMarkerObjectNameInfoEXT const & rhs )
   20591     {
   20592       memcpy( this, &rhs, sizeof( DebugMarkerObjectNameInfoEXT ) );
   20593       return *this;
   20594     }
   20595     DebugMarkerObjectNameInfoEXT& setPNext( const void* pNext_ )
   20596     {
   20597       pNext = pNext_;
   20598       return *this;
   20599     }
   20600 
   20601     DebugMarkerObjectNameInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
   20602     {
   20603       objectType = objectType_;
   20604       return *this;
   20605     }
   20606 
   20607     DebugMarkerObjectNameInfoEXT& setObject( uint64_t object_ )
   20608     {
   20609       object = object_;
   20610       return *this;
   20611     }
   20612 
   20613     DebugMarkerObjectNameInfoEXT& setPObjectName( const char* pObjectName_ )
   20614     {
   20615       pObjectName = pObjectName_;
   20616       return *this;
   20617     }
   20618 
   20619     operator const VkDebugMarkerObjectNameInfoEXT&() const
   20620     {
   20621       return *reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>(this);
   20622     }
   20623 
   20624     bool operator==( DebugMarkerObjectNameInfoEXT const& rhs ) const
   20625     {
   20626       return ( sType == rhs.sType )
   20627           && ( pNext == rhs.pNext )
   20628           && ( objectType == rhs.objectType )
   20629           && ( object == rhs.object )
   20630           && ( pObjectName == rhs.pObjectName );
   20631     }
   20632 
   20633     bool operator!=( DebugMarkerObjectNameInfoEXT const& rhs ) const
   20634     {
   20635       return !operator==( rhs );
   20636     }
   20637 
   20638   private:
   20639     StructureType sType = StructureType::eDebugMarkerObjectNameInfoEXT;
   20640 
   20641   public:
   20642     const void* pNext = nullptr;
   20643     DebugReportObjectTypeEXT objectType;
   20644     uint64_t object;
   20645     const char* pObjectName;
   20646   };
   20647   static_assert( sizeof( DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ), "struct and wrapper have different size!" );
   20648 
   20649   struct DebugMarkerObjectTagInfoEXT
   20650   {
   20651     DebugMarkerObjectTagInfoEXT( DebugReportObjectTypeEXT objectType_ = DebugReportObjectTypeEXT::eUnknown, uint64_t object_ = 0, uint64_t tagName_ = 0, size_t tagSize_ = 0, const void* pTag_ = nullptr )
   20652       : objectType( objectType_ )
   20653       , object( object_ )
   20654       , tagName( tagName_ )
   20655       , tagSize( tagSize_ )
   20656       , pTag( pTag_ )
   20657     {
   20658     }
   20659 
   20660     DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs )
   20661     {
   20662       memcpy( this, &rhs, sizeof( DebugMarkerObjectTagInfoEXT ) );
   20663     }
   20664 
   20665     DebugMarkerObjectTagInfoEXT& operator=( VkDebugMarkerObjectTagInfoEXT const & rhs )
   20666     {
   20667       memcpy( this, &rhs, sizeof( DebugMarkerObjectTagInfoEXT ) );
   20668       return *this;
   20669     }
   20670     DebugMarkerObjectTagInfoEXT& setPNext( const void* pNext_ )
   20671     {
   20672       pNext = pNext_;
   20673       return *this;
   20674     }
   20675 
   20676     DebugMarkerObjectTagInfoEXT& setObjectType( DebugReportObjectTypeEXT objectType_ )
   20677     {
   20678       objectType = objectType_;
   20679       return *this;
   20680     }
   20681 
   20682     DebugMarkerObjectTagInfoEXT& setObject( uint64_t object_ )
   20683     {
   20684       object = object_;
   20685       return *this;
   20686     }
   20687 
   20688     DebugMarkerObjectTagInfoEXT& setTagName( uint64_t tagName_ )
   20689     {
   20690       tagName = tagName_;
   20691       return *this;
   20692     }
   20693 
   20694     DebugMarkerObjectTagInfoEXT& setTagSize( size_t tagSize_ )
   20695     {
   20696       tagSize = tagSize_;
   20697       return *this;
   20698     }
   20699 
   20700     DebugMarkerObjectTagInfoEXT& setPTag( const void* pTag_ )
   20701     {
   20702       pTag = pTag_;
   20703       return *this;
   20704     }
   20705 
   20706     operator const VkDebugMarkerObjectTagInfoEXT&() const
   20707     {
   20708       return *reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>(this);
   20709     }
   20710 
   20711     bool operator==( DebugMarkerObjectTagInfoEXT const& rhs ) const
   20712     {
   20713       return ( sType == rhs.sType )
   20714           && ( pNext == rhs.pNext )
   20715           && ( objectType == rhs.objectType )
   20716           && ( object == rhs.object )
   20717           && ( tagName == rhs.tagName )
   20718           && ( tagSize == rhs.tagSize )
   20719           && ( pTag == rhs.pTag );
   20720     }
   20721 
   20722     bool operator!=( DebugMarkerObjectTagInfoEXT const& rhs ) const
   20723     {
   20724       return !operator==( rhs );
   20725     }
   20726 
   20727   private:
   20728     StructureType sType = StructureType::eDebugMarkerObjectTagInfoEXT;
   20729 
   20730   public:
   20731     const void* pNext = nullptr;
   20732     DebugReportObjectTypeEXT objectType;
   20733     uint64_t object;
   20734     uint64_t tagName;
   20735     size_t tagSize;
   20736     const void* pTag;
   20737   };
   20738   static_assert( sizeof( DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ), "struct and wrapper have different size!" );
   20739 
   20740   enum class RasterizationOrderAMD
   20741   {
   20742     eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD,
   20743     eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD
   20744   };
   20745 
   20746   struct PipelineRasterizationStateRasterizationOrderAMD
   20747   {
   20748     PipelineRasterizationStateRasterizationOrderAMD( RasterizationOrderAMD rasterizationOrder_ = RasterizationOrderAMD::eStrict )
   20749       : rasterizationOrder( rasterizationOrder_ )
   20750     {
   20751     }
   20752 
   20753     PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
   20754     {
   20755       memcpy( this, &rhs, sizeof( PipelineRasterizationStateRasterizationOrderAMD ) );
   20756     }
   20757 
   20758     PipelineRasterizationStateRasterizationOrderAMD& operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs )
   20759     {
   20760       memcpy( this, &rhs, sizeof( PipelineRasterizationStateRasterizationOrderAMD ) );
   20761       return *this;
   20762     }
   20763     PipelineRasterizationStateRasterizationOrderAMD& setPNext( const void* pNext_ )
   20764     {
   20765       pNext = pNext_;
   20766       return *this;
   20767     }
   20768 
   20769     PipelineRasterizationStateRasterizationOrderAMD& setRasterizationOrder( RasterizationOrderAMD rasterizationOrder_ )
   20770     {
   20771       rasterizationOrder = rasterizationOrder_;
   20772       return *this;
   20773     }
   20774 
   20775     operator const VkPipelineRasterizationStateRasterizationOrderAMD&() const
   20776     {
   20777       return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(this);
   20778     }
   20779 
   20780     bool operator==( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
   20781     {
   20782       return ( sType == rhs.sType )
   20783           && ( pNext == rhs.pNext )
   20784           && ( rasterizationOrder == rhs.rasterizationOrder );
   20785     }
   20786 
   20787     bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const& rhs ) const
   20788     {
   20789       return !operator==( rhs );
   20790     }
   20791 
   20792   private:
   20793     StructureType sType = StructureType::ePipelineRasterizationStateRasterizationOrderAMD;
   20794 
   20795   public:
   20796     const void* pNext = nullptr;
   20797     RasterizationOrderAMD rasterizationOrder;
   20798   };
   20799   static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) == sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), "struct and wrapper have different size!" );
   20800 
   20801   enum class ExternalMemoryHandleTypeFlagBitsNV
   20802   {
   20803     eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV,
   20804     eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV,
   20805     eD3D11Image = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV,
   20806     eD3D11ImageKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
   20807   };
   20808 
   20809   using ExternalMemoryHandleTypeFlagsNV = Flags<ExternalMemoryHandleTypeFlagBitsNV, VkExternalMemoryHandleTypeFlagsNV>;
   20810 
   20811   VULKAN_HPP_INLINE ExternalMemoryHandleTypeFlagsNV operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 )
   20812   {
   20813     return ExternalMemoryHandleTypeFlagsNV( bit0 ) | bit1;
   20814   }
   20815 
   20816   VULKAN_HPP_INLINE ExternalMemoryHandleTypeFlagsNV operator~( ExternalMemoryHandleTypeFlagBitsNV bits )
   20817   {
   20818     return ~( ExternalMemoryHandleTypeFlagsNV( bits ) );
   20819   }
   20820 
   20821   template <> struct FlagTraits<ExternalMemoryHandleTypeFlagBitsNV>
   20822   {
   20823     enum
   20824     {
   20825       allFlags = VkFlags(ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32) | VkFlags(ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt) | VkFlags(ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image) | VkFlags(ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt)
   20826     };
   20827   };
   20828 
   20829   struct ExternalMemoryImageCreateInfoNV
   20830   {
   20831     ExternalMemoryImageCreateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
   20832       : handleTypes( handleTypes_ )
   20833     {
   20834     }
   20835 
   20836     ExternalMemoryImageCreateInfoNV( VkExternalMemoryImageCreateInfoNV const & rhs )
   20837     {
   20838       memcpy( this, &rhs, sizeof( ExternalMemoryImageCreateInfoNV ) );
   20839     }
   20840 
   20841     ExternalMemoryImageCreateInfoNV& operator=( VkExternalMemoryImageCreateInfoNV const & rhs )
   20842     {
   20843       memcpy( this, &rhs, sizeof( ExternalMemoryImageCreateInfoNV ) );
   20844       return *this;
   20845     }
   20846     ExternalMemoryImageCreateInfoNV& setPNext( const void* pNext_ )
   20847     {
   20848       pNext = pNext_;
   20849       return *this;
   20850     }
   20851 
   20852     ExternalMemoryImageCreateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
   20853     {
   20854       handleTypes = handleTypes_;
   20855       return *this;
   20856     }
   20857 
   20858     operator const VkExternalMemoryImageCreateInfoNV&() const
   20859     {
   20860       return *reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(this);
   20861     }
   20862 
   20863     bool operator==( ExternalMemoryImageCreateInfoNV const& rhs ) const
   20864     {
   20865       return ( sType == rhs.sType )
   20866           && ( pNext == rhs.pNext )
   20867           && ( handleTypes == rhs.handleTypes );
   20868     }
   20869 
   20870     bool operator!=( ExternalMemoryImageCreateInfoNV const& rhs ) const
   20871     {
   20872       return !operator==( rhs );
   20873     }
   20874 
   20875   private:
   20876     StructureType sType = StructureType::eExternalMemoryImageCreateInfoNV;
   20877 
   20878   public:
   20879     const void* pNext = nullptr;
   20880     ExternalMemoryHandleTypeFlagsNV handleTypes;
   20881   };
   20882   static_assert( sizeof( ExternalMemoryImageCreateInfoNV ) == sizeof( VkExternalMemoryImageCreateInfoNV ), "struct and wrapper have different size!" );
   20883 
   20884   struct ExportMemoryAllocateInfoNV
   20885   {
   20886     ExportMemoryAllocateInfoNV( ExternalMemoryHandleTypeFlagsNV handleTypes_ = ExternalMemoryHandleTypeFlagsNV() )
   20887       : handleTypes( handleTypes_ )
   20888     {
   20889     }
   20890 
   20891     ExportMemoryAllocateInfoNV( VkExportMemoryAllocateInfoNV const & rhs )
   20892     {
   20893       memcpy( this, &rhs, sizeof( ExportMemoryAllocateInfoNV ) );
   20894     }
   20895 
   20896     ExportMemoryAllocateInfoNV& operator=( VkExportMemoryAllocateInfoNV const & rhs )
   20897     {
   20898       memcpy( this, &rhs, sizeof( ExportMemoryAllocateInfoNV ) );
   20899       return *this;
   20900     }
   20901     ExportMemoryAllocateInfoNV& setPNext( const void* pNext_ )
   20902     {
   20903       pNext = pNext_;
   20904       return *this;
   20905     }
   20906 
   20907     ExportMemoryAllocateInfoNV& setHandleTypes( ExternalMemoryHandleTypeFlagsNV handleTypes_ )
   20908     {
   20909       handleTypes = handleTypes_;
   20910       return *this;
   20911     }
   20912 
   20913     operator const VkExportMemoryAllocateInfoNV&() const
   20914     {
   20915       return *reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(this);
   20916     }
   20917 
   20918     bool operator==( ExportMemoryAllocateInfoNV const& rhs ) const
   20919     {
   20920       return ( sType == rhs.sType )
   20921           && ( pNext == rhs.pNext )
   20922           && ( handleTypes == rhs.handleTypes );
   20923     }
   20924 
   20925     bool operator!=( ExportMemoryAllocateInfoNV const& rhs ) const
   20926     {
   20927       return !operator==( rhs );
   20928     }
   20929 
   20930   private:
   20931     StructureType sType = StructureType::eExportMemoryAllocateInfoNV;
   20932 
   20933   public:
   20934     const void* pNext = nullptr;
   20935     ExternalMemoryHandleTypeFlagsNV handleTypes;
   20936   };
   20937   static_assert( sizeof( ExportMemoryAllocateInfoNV ) == sizeof( VkExportMemoryAllocateInfoNV ), "struct and wrapper have different size!" );
   20938 
   20939 #ifdef VK_USE_PLATFORM_WIN32_KHR
   20940   struct ImportMemoryWin32HandleInfoNV
   20941   {
   20942     ImportMemoryWin32HandleInfoNV( ExternalMemoryHandleTypeFlagsNV handleType_ = ExternalMemoryHandleTypeFlagsNV(), HANDLE handle_ = 0 )
   20943       : handleType( handleType_ )
   20944       , handle( handle_ )
   20945     {
   20946     }
   20947 
   20948     ImportMemoryWin32HandleInfoNV( VkImportMemoryWin32HandleInfoNV const & rhs )
   20949     {
   20950       memcpy( this, &rhs, sizeof( ImportMemoryWin32HandleInfoNV ) );
   20951     }
   20952 
   20953     ImportMemoryWin32HandleInfoNV& operator=( VkImportMemoryWin32HandleInfoNV const & rhs )
   20954     {
   20955       memcpy( this, &rhs, sizeof( ImportMemoryWin32HandleInfoNV ) );
   20956       return *this;
   20957     }
   20958     ImportMemoryWin32HandleInfoNV& setPNext( const void* pNext_ )
   20959     {
   20960       pNext = pNext_;
   20961       return *this;
   20962     }
   20963 
   20964     ImportMemoryWin32HandleInfoNV& setHandleType( ExternalMemoryHandleTypeFlagsNV handleType_ )
   20965     {
   20966       handleType = handleType_;
   20967       return *this;
   20968     }
   20969 
   20970     ImportMemoryWin32HandleInfoNV& setHandle( HANDLE handle_ )
   20971     {
   20972       handle = handle_;
   20973       return *this;
   20974     }
   20975 
   20976     operator const VkImportMemoryWin32HandleInfoNV&() const
   20977     {
   20978       return *reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(this);
   20979     }
   20980 
   20981     bool operator==( ImportMemoryWin32HandleInfoNV const& rhs ) const
   20982     {
   20983       return ( sType == rhs.sType )
   20984           && ( pNext == rhs.pNext )
   20985           && ( handleType == rhs.handleType )
   20986           && ( handle == rhs.handle );
   20987     }
   20988 
   20989     bool operator!=( ImportMemoryWin32HandleInfoNV const& rhs ) const
   20990     {
   20991       return !operator==( rhs );
   20992     }
   20993 
   20994   private:
   20995     StructureType sType = StructureType::eImportMemoryWin32HandleInfoNV;
   20996 
   20997   public:
   20998     const void* pNext = nullptr;
   20999     ExternalMemoryHandleTypeFlagsNV handleType;
   21000     HANDLE handle;
   21001   };
   21002   static_assert( sizeof( ImportMemoryWin32HandleInfoNV ) == sizeof( VkImportMemoryWin32HandleInfoNV ), "struct and wrapper have different size!" );
   21003 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   21004 
   21005   enum class ExternalMemoryFeatureFlagBitsNV
   21006   {
   21007     eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV,
   21008     eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV,
   21009     eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
   21010   };
   21011 
   21012   using ExternalMemoryFeatureFlagsNV = Flags<ExternalMemoryFeatureFlagBitsNV, VkExternalMemoryFeatureFlagsNV>;
   21013 
   21014   VULKAN_HPP_INLINE ExternalMemoryFeatureFlagsNV operator|( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 )
   21015   {
   21016     return ExternalMemoryFeatureFlagsNV( bit0 ) | bit1;
   21017   }
   21018 
   21019   VULKAN_HPP_INLINE ExternalMemoryFeatureFlagsNV operator~( ExternalMemoryFeatureFlagBitsNV bits )
   21020   {
   21021     return ~( ExternalMemoryFeatureFlagsNV( bits ) );
   21022   }
   21023 
   21024   template <> struct FlagTraits<ExternalMemoryFeatureFlagBitsNV>
   21025   {
   21026     enum
   21027     {
   21028       allFlags = VkFlags(ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly) | VkFlags(ExternalMemoryFeatureFlagBitsNV::eExportable) | VkFlags(ExternalMemoryFeatureFlagBitsNV::eImportable)
   21029     };
   21030   };
   21031 
   21032   struct ExternalImageFormatPropertiesNV
   21033   {
   21034     operator const VkExternalImageFormatPropertiesNV&() const
   21035     {
   21036       return *reinterpret_cast<const VkExternalImageFormatPropertiesNV*>(this);
   21037     }
   21038 
   21039     bool operator==( ExternalImageFormatPropertiesNV const& rhs ) const
   21040     {
   21041       return ( imageFormatProperties == rhs.imageFormatProperties )
   21042           && ( externalMemoryFeatures == rhs.externalMemoryFeatures )
   21043           && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
   21044           && ( compatibleHandleTypes == rhs.compatibleHandleTypes );
   21045     }
   21046 
   21047     bool operator!=( ExternalImageFormatPropertiesNV const& rhs ) const
   21048     {
   21049       return !operator==( rhs );
   21050     }
   21051 
   21052     ImageFormatProperties imageFormatProperties;
   21053     ExternalMemoryFeatureFlagsNV externalMemoryFeatures;
   21054     ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
   21055     ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
   21056   };
   21057   static_assert( sizeof( ExternalImageFormatPropertiesNV ) == sizeof( VkExternalImageFormatPropertiesNV ), "struct and wrapper have different size!" );
   21058 
   21059   enum class ValidationCheckEXT
   21060   {
   21061     eAll = VK_VALIDATION_CHECK_ALL_EXT,
   21062     eShaders = VK_VALIDATION_CHECK_SHADERS_EXT
   21063   };
   21064 
   21065   struct ValidationFlagsEXT
   21066   {
   21067     ValidationFlagsEXT( uint32_t disabledValidationCheckCount_ = 0, ValidationCheckEXT* pDisabledValidationChecks_ = nullptr )
   21068       : disabledValidationCheckCount( disabledValidationCheckCount_ )
   21069       , pDisabledValidationChecks( pDisabledValidationChecks_ )
   21070     {
   21071     }
   21072 
   21073     ValidationFlagsEXT( VkValidationFlagsEXT const & rhs )
   21074     {
   21075       memcpy( this, &rhs, sizeof( ValidationFlagsEXT ) );
   21076     }
   21077 
   21078     ValidationFlagsEXT& operator=( VkValidationFlagsEXT const & rhs )
   21079     {
   21080       memcpy( this, &rhs, sizeof( ValidationFlagsEXT ) );
   21081       return *this;
   21082     }
   21083     ValidationFlagsEXT& setPNext( const void* pNext_ )
   21084     {
   21085       pNext = pNext_;
   21086       return *this;
   21087     }
   21088 
   21089     ValidationFlagsEXT& setDisabledValidationCheckCount( uint32_t disabledValidationCheckCount_ )
   21090     {
   21091       disabledValidationCheckCount = disabledValidationCheckCount_;
   21092       return *this;
   21093     }
   21094 
   21095     ValidationFlagsEXT& setPDisabledValidationChecks( ValidationCheckEXT* pDisabledValidationChecks_ )
   21096     {
   21097       pDisabledValidationChecks = pDisabledValidationChecks_;
   21098       return *this;
   21099     }
   21100 
   21101     operator const VkValidationFlagsEXT&() const
   21102     {
   21103       return *reinterpret_cast<const VkValidationFlagsEXT*>(this);
   21104     }
   21105 
   21106     bool operator==( ValidationFlagsEXT const& rhs ) const
   21107     {
   21108       return ( sType == rhs.sType )
   21109           && ( pNext == rhs.pNext )
   21110           && ( disabledValidationCheckCount == rhs.disabledValidationCheckCount )
   21111           && ( pDisabledValidationChecks == rhs.pDisabledValidationChecks );
   21112     }
   21113 
   21114     bool operator!=( ValidationFlagsEXT const& rhs ) const
   21115     {
   21116       return !operator==( rhs );
   21117     }
   21118 
   21119   private:
   21120     StructureType sType = StructureType::eValidationFlagsEXT;
   21121 
   21122   public:
   21123     const void* pNext = nullptr;
   21124     uint32_t disabledValidationCheckCount;
   21125     ValidationCheckEXT* pDisabledValidationChecks;
   21126   };
   21127   static_assert( sizeof( ValidationFlagsEXT ) == sizeof( VkValidationFlagsEXT ), "struct and wrapper have different size!" );
   21128 
   21129   enum class IndirectCommandsLayoutUsageFlagBitsNVX
   21130   {
   21131     eUnorderedSequences = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX,
   21132     eSparseSequences = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX,
   21133     eEmptyExecutions = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX,
   21134     eIndexedSequences = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX
   21135   };
   21136 
   21137   using IndirectCommandsLayoutUsageFlagsNVX = Flags<IndirectCommandsLayoutUsageFlagBitsNVX, VkIndirectCommandsLayoutUsageFlagsNVX>;
   21138 
   21139   VULKAN_HPP_INLINE IndirectCommandsLayoutUsageFlagsNVX operator|( IndirectCommandsLayoutUsageFlagBitsNVX bit0, IndirectCommandsLayoutUsageFlagBitsNVX bit1 )
   21140   {
   21141     return IndirectCommandsLayoutUsageFlagsNVX( bit0 ) | bit1;
   21142   }
   21143 
   21144   VULKAN_HPP_INLINE IndirectCommandsLayoutUsageFlagsNVX operator~( IndirectCommandsLayoutUsageFlagBitsNVX bits )
   21145   {
   21146     return ~( IndirectCommandsLayoutUsageFlagsNVX( bits ) );
   21147   }
   21148 
   21149   template <> struct FlagTraits<IndirectCommandsLayoutUsageFlagBitsNVX>
   21150   {
   21151     enum
   21152     {
   21153       allFlags = VkFlags(IndirectCommandsLayoutUsageFlagBitsNVX::eUnorderedSequences) | VkFlags(IndirectCommandsLayoutUsageFlagBitsNVX::eSparseSequences) | VkFlags(IndirectCommandsLayoutUsageFlagBitsNVX::eEmptyExecutions) | VkFlags(IndirectCommandsLayoutUsageFlagBitsNVX::eIndexedSequences)
   21154     };
   21155   };
   21156 
   21157   enum class ObjectEntryUsageFlagBitsNVX
   21158   {
   21159     eGraphics = VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX,
   21160     eCompute = VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX
   21161   };
   21162 
   21163   using ObjectEntryUsageFlagsNVX = Flags<ObjectEntryUsageFlagBitsNVX, VkObjectEntryUsageFlagsNVX>;
   21164 
   21165   VULKAN_HPP_INLINE ObjectEntryUsageFlagsNVX operator|( ObjectEntryUsageFlagBitsNVX bit0, ObjectEntryUsageFlagBitsNVX bit1 )
   21166   {
   21167     return ObjectEntryUsageFlagsNVX( bit0 ) | bit1;
   21168   }
   21169 
   21170   VULKAN_HPP_INLINE ObjectEntryUsageFlagsNVX operator~( ObjectEntryUsageFlagBitsNVX bits )
   21171   {
   21172     return ~( ObjectEntryUsageFlagsNVX( bits ) );
   21173   }
   21174 
   21175   template <> struct FlagTraits<ObjectEntryUsageFlagBitsNVX>
   21176   {
   21177     enum
   21178     {
   21179       allFlags = VkFlags(ObjectEntryUsageFlagBitsNVX::eGraphics) | VkFlags(ObjectEntryUsageFlagBitsNVX::eCompute)
   21180     };
   21181   };
   21182 
   21183   enum class IndirectCommandsTokenTypeNVX
   21184   {
   21185     ePipeline = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX,
   21186     eDescriptorSet = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX,
   21187     eIndexBuffer = VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX,
   21188     eVertexBuffer = VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX,
   21189     ePushConstant = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX,
   21190     eDrawIndexed = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX,
   21191     eDraw = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX,
   21192     eDispatch = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX
   21193   };
   21194 
   21195   struct IndirectCommandsTokenNVX
   21196   {
   21197     IndirectCommandsTokenNVX( IndirectCommandsTokenTypeNVX tokenType_ = IndirectCommandsTokenTypeNVX::ePipeline, Buffer buffer_ = Buffer(), DeviceSize offset_ = 0 )
   21198       : tokenType( tokenType_ )
   21199       , buffer( buffer_ )
   21200       , offset( offset_ )
   21201     {
   21202     }
   21203 
   21204     IndirectCommandsTokenNVX( VkIndirectCommandsTokenNVX const & rhs )
   21205     {
   21206       memcpy( this, &rhs, sizeof( IndirectCommandsTokenNVX ) );
   21207     }
   21208 
   21209     IndirectCommandsTokenNVX& operator=( VkIndirectCommandsTokenNVX const & rhs )
   21210     {
   21211       memcpy( this, &rhs, sizeof( IndirectCommandsTokenNVX ) );
   21212       return *this;
   21213     }
   21214     IndirectCommandsTokenNVX& setTokenType( IndirectCommandsTokenTypeNVX tokenType_ )
   21215     {
   21216       tokenType = tokenType_;
   21217       return *this;
   21218     }
   21219 
   21220     IndirectCommandsTokenNVX& setBuffer( Buffer buffer_ )
   21221     {
   21222       buffer = buffer_;
   21223       return *this;
   21224     }
   21225 
   21226     IndirectCommandsTokenNVX& setOffset( DeviceSize offset_ )
   21227     {
   21228       offset = offset_;
   21229       return *this;
   21230     }
   21231 
   21232     operator const VkIndirectCommandsTokenNVX&() const
   21233     {
   21234       return *reinterpret_cast<const VkIndirectCommandsTokenNVX*>(this);
   21235     }
   21236 
   21237     bool operator==( IndirectCommandsTokenNVX const& rhs ) const
   21238     {
   21239       return ( tokenType == rhs.tokenType )
   21240           && ( buffer == rhs.buffer )
   21241           && ( offset == rhs.offset );
   21242     }
   21243 
   21244     bool operator!=( IndirectCommandsTokenNVX const& rhs ) const
   21245     {
   21246       return !operator==( rhs );
   21247     }
   21248 
   21249     IndirectCommandsTokenTypeNVX tokenType;
   21250     Buffer buffer;
   21251     DeviceSize offset;
   21252   };
   21253   static_assert( sizeof( IndirectCommandsTokenNVX ) == sizeof( VkIndirectCommandsTokenNVX ), "struct and wrapper have different size!" );
   21254 
   21255   struct IndirectCommandsLayoutTokenNVX
   21256   {
   21257     IndirectCommandsLayoutTokenNVX( IndirectCommandsTokenTypeNVX tokenType_ = IndirectCommandsTokenTypeNVX::ePipeline, uint32_t bindingUnit_ = 0, uint32_t dynamicCount_ = 0, uint32_t divisor_ = 0 )
   21258       : tokenType( tokenType_ )
   21259       , bindingUnit( bindingUnit_ )
   21260       , dynamicCount( dynamicCount_ )
   21261       , divisor( divisor_ )
   21262     {
   21263     }
   21264 
   21265     IndirectCommandsLayoutTokenNVX( VkIndirectCommandsLayoutTokenNVX const & rhs )
   21266     {
   21267       memcpy( this, &rhs, sizeof( IndirectCommandsLayoutTokenNVX ) );
   21268     }
   21269 
   21270     IndirectCommandsLayoutTokenNVX& operator=( VkIndirectCommandsLayoutTokenNVX const & rhs )
   21271     {
   21272       memcpy( this, &rhs, sizeof( IndirectCommandsLayoutTokenNVX ) );
   21273       return *this;
   21274     }
   21275     IndirectCommandsLayoutTokenNVX& setTokenType( IndirectCommandsTokenTypeNVX tokenType_ )
   21276     {
   21277       tokenType = tokenType_;
   21278       return *this;
   21279     }
   21280 
   21281     IndirectCommandsLayoutTokenNVX& setBindingUnit( uint32_t bindingUnit_ )
   21282     {
   21283       bindingUnit = bindingUnit_;
   21284       return *this;
   21285     }
   21286 
   21287     IndirectCommandsLayoutTokenNVX& setDynamicCount( uint32_t dynamicCount_ )
   21288     {
   21289       dynamicCount = dynamicCount_;
   21290       return *this;
   21291     }
   21292 
   21293     IndirectCommandsLayoutTokenNVX& setDivisor( uint32_t divisor_ )
   21294     {
   21295       divisor = divisor_;
   21296       return *this;
   21297     }
   21298 
   21299     operator const VkIndirectCommandsLayoutTokenNVX&() const
   21300     {
   21301       return *reinterpret_cast<const VkIndirectCommandsLayoutTokenNVX*>(this);
   21302     }
   21303 
   21304     bool operator==( IndirectCommandsLayoutTokenNVX const& rhs ) const
   21305     {
   21306       return ( tokenType == rhs.tokenType )
   21307           && ( bindingUnit == rhs.bindingUnit )
   21308           && ( dynamicCount == rhs.dynamicCount )
   21309           && ( divisor == rhs.divisor );
   21310     }
   21311 
   21312     bool operator!=( IndirectCommandsLayoutTokenNVX const& rhs ) const
   21313     {
   21314       return !operator==( rhs );
   21315     }
   21316 
   21317     IndirectCommandsTokenTypeNVX tokenType;
   21318     uint32_t bindingUnit;
   21319     uint32_t dynamicCount;
   21320     uint32_t divisor;
   21321   };
   21322   static_assert( sizeof( IndirectCommandsLayoutTokenNVX ) == sizeof( VkIndirectCommandsLayoutTokenNVX ), "struct and wrapper have different size!" );
   21323 
   21324   struct IndirectCommandsLayoutCreateInfoNVX
   21325   {
   21326     IndirectCommandsLayoutCreateInfoNVX( PipelineBindPoint pipelineBindPoint_ = PipelineBindPoint::eGraphics, IndirectCommandsLayoutUsageFlagsNVX flags_ = IndirectCommandsLayoutUsageFlagsNVX(), uint32_t tokenCount_ = 0, const IndirectCommandsLayoutTokenNVX* pTokens_ = nullptr )
   21327       : pipelineBindPoint( pipelineBindPoint_ )
   21328       , flags( flags_ )
   21329       , tokenCount( tokenCount_ )
   21330       , pTokens( pTokens_ )
   21331     {
   21332     }
   21333 
   21334     IndirectCommandsLayoutCreateInfoNVX( VkIndirectCommandsLayoutCreateInfoNVX const & rhs )
   21335     {
   21336       memcpy( this, &rhs, sizeof( IndirectCommandsLayoutCreateInfoNVX ) );
   21337     }
   21338 
   21339     IndirectCommandsLayoutCreateInfoNVX& operator=( VkIndirectCommandsLayoutCreateInfoNVX const & rhs )
   21340     {
   21341       memcpy( this, &rhs, sizeof( IndirectCommandsLayoutCreateInfoNVX ) );
   21342       return *this;
   21343     }
   21344     IndirectCommandsLayoutCreateInfoNVX& setPNext( const void* pNext_ )
   21345     {
   21346       pNext = pNext_;
   21347       return *this;
   21348     }
   21349 
   21350     IndirectCommandsLayoutCreateInfoNVX& setPipelineBindPoint( PipelineBindPoint pipelineBindPoint_ )
   21351     {
   21352       pipelineBindPoint = pipelineBindPoint_;
   21353       return *this;
   21354     }
   21355 
   21356     IndirectCommandsLayoutCreateInfoNVX& setFlags( IndirectCommandsLayoutUsageFlagsNVX flags_ )
   21357     {
   21358       flags = flags_;
   21359       return *this;
   21360     }
   21361 
   21362     IndirectCommandsLayoutCreateInfoNVX& setTokenCount( uint32_t tokenCount_ )
   21363     {
   21364       tokenCount = tokenCount_;
   21365       return *this;
   21366     }
   21367 
   21368     IndirectCommandsLayoutCreateInfoNVX& setPTokens( const IndirectCommandsLayoutTokenNVX* pTokens_ )
   21369     {
   21370       pTokens = pTokens_;
   21371       return *this;
   21372     }
   21373 
   21374     operator const VkIndirectCommandsLayoutCreateInfoNVX&() const
   21375     {
   21376       return *reinterpret_cast<const VkIndirectCommandsLayoutCreateInfoNVX*>(this);
   21377     }
   21378 
   21379     bool operator==( IndirectCommandsLayoutCreateInfoNVX const& rhs ) const
   21380     {
   21381       return ( sType == rhs.sType )
   21382           && ( pNext == rhs.pNext )
   21383           && ( pipelineBindPoint == rhs.pipelineBindPoint )
   21384           && ( flags == rhs.flags )
   21385           && ( tokenCount == rhs.tokenCount )
   21386           && ( pTokens == rhs.pTokens );
   21387     }
   21388 
   21389     bool operator!=( IndirectCommandsLayoutCreateInfoNVX const& rhs ) const
   21390     {
   21391       return !operator==( rhs );
   21392     }
   21393 
   21394   private:
   21395     StructureType sType = StructureType::eIndirectCommandsLayoutCreateInfoNVX;
   21396 
   21397   public:
   21398     const void* pNext = nullptr;
   21399     PipelineBindPoint pipelineBindPoint;
   21400     IndirectCommandsLayoutUsageFlagsNVX flags;
   21401     uint32_t tokenCount;
   21402     const IndirectCommandsLayoutTokenNVX* pTokens;
   21403   };
   21404   static_assert( sizeof( IndirectCommandsLayoutCreateInfoNVX ) == sizeof( VkIndirectCommandsLayoutCreateInfoNVX ), "struct and wrapper have different size!" );
   21405 
   21406   enum class ObjectEntryTypeNVX
   21407   {
   21408     eDescriptorSet = VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX,
   21409     ePipeline = VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX,
   21410     eIndexBuffer = VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX,
   21411     eVertexBuffer = VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX,
   21412     ePushConstant = VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX
   21413   };
   21414 
   21415   struct ObjectTableCreateInfoNVX
   21416   {
   21417     ObjectTableCreateInfoNVX( uint32_t objectCount_ = 0, const ObjectEntryTypeNVX* pObjectEntryTypes_ = nullptr, const uint32_t* pObjectEntryCounts_ = nullptr, const ObjectEntryUsageFlagsNVX* pObjectEntryUsageFlags_ = nullptr, uint32_t maxUniformBuffersPerDescriptor_ = 0, uint32_t maxStorageBuffersPerDescriptor_ = 0, uint32_t maxStorageImagesPerDescriptor_ = 0, uint32_t maxSampledImagesPerDescriptor_ = 0, uint32_t maxPipelineLayouts_ = 0 )
   21418       : objectCount( objectCount_ )
   21419       , pObjectEntryTypes( pObjectEntryTypes_ )
   21420       , pObjectEntryCounts( pObjectEntryCounts_ )
   21421       , pObjectEntryUsageFlags( pObjectEntryUsageFlags_ )
   21422       , maxUniformBuffersPerDescriptor( maxUniformBuffersPerDescriptor_ )
   21423       , maxStorageBuffersPerDescriptor( maxStorageBuffersPerDescriptor_ )
   21424       , maxStorageImagesPerDescriptor( maxStorageImagesPerDescriptor_ )
   21425       , maxSampledImagesPerDescriptor( maxSampledImagesPerDescriptor_ )
   21426       , maxPipelineLayouts( maxPipelineLayouts_ )
   21427     {
   21428     }
   21429 
   21430     ObjectTableCreateInfoNVX( VkObjectTableCreateInfoNVX const & rhs )
   21431     {
   21432       memcpy( this, &rhs, sizeof( ObjectTableCreateInfoNVX ) );
   21433     }
   21434 
   21435     ObjectTableCreateInfoNVX& operator=( VkObjectTableCreateInfoNVX const & rhs )
   21436     {
   21437       memcpy( this, &rhs, sizeof( ObjectTableCreateInfoNVX ) );
   21438       return *this;
   21439     }
   21440     ObjectTableCreateInfoNVX& setPNext( const void* pNext_ )
   21441     {
   21442       pNext = pNext_;
   21443       return *this;
   21444     }
   21445 
   21446     ObjectTableCreateInfoNVX& setObjectCount( uint32_t objectCount_ )
   21447     {
   21448       objectCount = objectCount_;
   21449       return *this;
   21450     }
   21451 
   21452     ObjectTableCreateInfoNVX& setPObjectEntryTypes( const ObjectEntryTypeNVX* pObjectEntryTypes_ )
   21453     {
   21454       pObjectEntryTypes = pObjectEntryTypes_;
   21455       return *this;
   21456     }
   21457 
   21458     ObjectTableCreateInfoNVX& setPObjectEntryCounts( const uint32_t* pObjectEntryCounts_ )
   21459     {
   21460       pObjectEntryCounts = pObjectEntryCounts_;
   21461       return *this;
   21462     }
   21463 
   21464     ObjectTableCreateInfoNVX& setPObjectEntryUsageFlags( const ObjectEntryUsageFlagsNVX* pObjectEntryUsageFlags_ )
   21465     {
   21466       pObjectEntryUsageFlags = pObjectEntryUsageFlags_;
   21467       return *this;
   21468     }
   21469 
   21470     ObjectTableCreateInfoNVX& setMaxUniformBuffersPerDescriptor( uint32_t maxUniformBuffersPerDescriptor_ )
   21471     {
   21472       maxUniformBuffersPerDescriptor = maxUniformBuffersPerDescriptor_;
   21473       return *this;
   21474     }
   21475 
   21476     ObjectTableCreateInfoNVX& setMaxStorageBuffersPerDescriptor( uint32_t maxStorageBuffersPerDescriptor_ )
   21477     {
   21478       maxStorageBuffersPerDescriptor = maxStorageBuffersPerDescriptor_;
   21479       return *this;
   21480     }
   21481 
   21482     ObjectTableCreateInfoNVX& setMaxStorageImagesPerDescriptor( uint32_t maxStorageImagesPerDescriptor_ )
   21483     {
   21484       maxStorageImagesPerDescriptor = maxStorageImagesPerDescriptor_;
   21485       return *this;
   21486     }
   21487 
   21488     ObjectTableCreateInfoNVX& setMaxSampledImagesPerDescriptor( uint32_t maxSampledImagesPerDescriptor_ )
   21489     {
   21490       maxSampledImagesPerDescriptor = maxSampledImagesPerDescriptor_;
   21491       return *this;
   21492     }
   21493 
   21494     ObjectTableCreateInfoNVX& setMaxPipelineLayouts( uint32_t maxPipelineLayouts_ )
   21495     {
   21496       maxPipelineLayouts = maxPipelineLayouts_;
   21497       return *this;
   21498     }
   21499 
   21500     operator const VkObjectTableCreateInfoNVX&() const
   21501     {
   21502       return *reinterpret_cast<const VkObjectTableCreateInfoNVX*>(this);
   21503     }
   21504 
   21505     bool operator==( ObjectTableCreateInfoNVX const& rhs ) const
   21506     {
   21507       return ( sType == rhs.sType )
   21508           && ( pNext == rhs.pNext )
   21509           && ( objectCount == rhs.objectCount )
   21510           && ( pObjectEntryTypes == rhs.pObjectEntryTypes )
   21511           && ( pObjectEntryCounts == rhs.pObjectEntryCounts )
   21512           && ( pObjectEntryUsageFlags == rhs.pObjectEntryUsageFlags )
   21513           && ( maxUniformBuffersPerDescriptor == rhs.maxUniformBuffersPerDescriptor )
   21514           && ( maxStorageBuffersPerDescriptor == rhs.maxStorageBuffersPerDescriptor )
   21515           && ( maxStorageImagesPerDescriptor == rhs.maxStorageImagesPerDescriptor )
   21516           && ( maxSampledImagesPerDescriptor == rhs.maxSampledImagesPerDescriptor )
   21517           && ( maxPipelineLayouts == rhs.maxPipelineLayouts );
   21518     }
   21519 
   21520     bool operator!=( ObjectTableCreateInfoNVX const& rhs ) const
   21521     {
   21522       return !operator==( rhs );
   21523     }
   21524 
   21525   private:
   21526     StructureType sType = StructureType::eObjectTableCreateInfoNVX;
   21527 
   21528   public:
   21529     const void* pNext = nullptr;
   21530     uint32_t objectCount;
   21531     const ObjectEntryTypeNVX* pObjectEntryTypes;
   21532     const uint32_t* pObjectEntryCounts;
   21533     const ObjectEntryUsageFlagsNVX* pObjectEntryUsageFlags;
   21534     uint32_t maxUniformBuffersPerDescriptor;
   21535     uint32_t maxStorageBuffersPerDescriptor;
   21536     uint32_t maxStorageImagesPerDescriptor;
   21537     uint32_t maxSampledImagesPerDescriptor;
   21538     uint32_t maxPipelineLayouts;
   21539   };
   21540   static_assert( sizeof( ObjectTableCreateInfoNVX ) == sizeof( VkObjectTableCreateInfoNVX ), "struct and wrapper have different size!" );
   21541 
   21542   struct ObjectTableEntryNVX
   21543   {
   21544     ObjectTableEntryNVX( ObjectEntryTypeNVX type_ = ObjectEntryTypeNVX::eDescriptorSet, ObjectEntryUsageFlagsNVX flags_ = ObjectEntryUsageFlagsNVX() )
   21545       : type( type_ )
   21546       , flags( flags_ )
   21547     {
   21548     }
   21549 
   21550     ObjectTableEntryNVX( VkObjectTableEntryNVX const & rhs )
   21551     {
   21552       memcpy( this, &rhs, sizeof( ObjectTableEntryNVX ) );
   21553     }
   21554 
   21555     ObjectTableEntryNVX& operator=( VkObjectTableEntryNVX const & rhs )
   21556     {
   21557       memcpy( this, &rhs, sizeof( ObjectTableEntryNVX ) );
   21558       return *this;
   21559     }
   21560     ObjectTableEntryNVX& setType( ObjectEntryTypeNVX type_ )
   21561     {
   21562       type = type_;
   21563       return *this;
   21564     }
   21565 
   21566     ObjectTableEntryNVX& setFlags( ObjectEntryUsageFlagsNVX flags_ )
   21567     {
   21568       flags = flags_;
   21569       return *this;
   21570     }
   21571 
   21572     operator const VkObjectTableEntryNVX&() const
   21573     {
   21574       return *reinterpret_cast<const VkObjectTableEntryNVX*>(this);
   21575     }
   21576 
   21577     bool operator==( ObjectTableEntryNVX const& rhs ) const
   21578     {
   21579       return ( type == rhs.type )
   21580           && ( flags == rhs.flags );
   21581     }
   21582 
   21583     bool operator!=( ObjectTableEntryNVX const& rhs ) const
   21584     {
   21585       return !operator==( rhs );
   21586     }
   21587 
   21588     ObjectEntryTypeNVX type;
   21589     ObjectEntryUsageFlagsNVX flags;
   21590   };
   21591   static_assert( sizeof( ObjectTableEntryNVX ) == sizeof( VkObjectTableEntryNVX ), "struct and wrapper have different size!" );
   21592 
   21593   struct ObjectTablePipelineEntryNVX
   21594   {
   21595     ObjectTablePipelineEntryNVX( ObjectEntryTypeNVX type_ = ObjectEntryTypeNVX::eDescriptorSet, ObjectEntryUsageFlagsNVX flags_ = ObjectEntryUsageFlagsNVX(), Pipeline pipeline_ = Pipeline() )
   21596       : type( type_ )
   21597       , flags( flags_ )
   21598       , pipeline( pipeline_ )
   21599     {
   21600     }
   21601 
   21602     ObjectTablePipelineEntryNVX( VkObjectTablePipelineEntryNVX const & rhs )
   21603     {
   21604       memcpy( this, &rhs, sizeof( ObjectTablePipelineEntryNVX ) );
   21605     }
   21606 
   21607     ObjectTablePipelineEntryNVX& operator=( VkObjectTablePipelineEntryNVX const & rhs )
   21608     {
   21609       memcpy( this, &rhs, sizeof( ObjectTablePipelineEntryNVX ) );
   21610       return *this;
   21611     }
   21612     ObjectTablePipelineEntryNVX& setType( ObjectEntryTypeNVX type_ )
   21613     {
   21614       type = type_;
   21615       return *this;
   21616     }
   21617 
   21618     ObjectTablePipelineEntryNVX& setFlags( ObjectEntryUsageFlagsNVX flags_ )
   21619     {
   21620       flags = flags_;
   21621       return *this;
   21622     }
   21623 
   21624     ObjectTablePipelineEntryNVX& setPipeline( Pipeline pipeline_ )
   21625     {
   21626       pipeline = pipeline_;
   21627       return *this;
   21628     }
   21629 
   21630     operator const VkObjectTablePipelineEntryNVX&() const
   21631     {
   21632       return *reinterpret_cast<const VkObjectTablePipelineEntryNVX*>(this);
   21633     }
   21634 
   21635     bool operator==( ObjectTablePipelineEntryNVX const& rhs ) const
   21636     {
   21637       return ( type == rhs.type )
   21638           && ( flags == rhs.flags )
   21639           && ( pipeline == rhs.pipeline );
   21640     }
   21641 
   21642     bool operator!=( ObjectTablePipelineEntryNVX const& rhs ) const
   21643     {
   21644       return !operator==( rhs );
   21645     }
   21646 
   21647     ObjectEntryTypeNVX type;
   21648     ObjectEntryUsageFlagsNVX flags;
   21649     Pipeline pipeline;
   21650   };
   21651   static_assert( sizeof( ObjectTablePipelineEntryNVX ) == sizeof( VkObjectTablePipelineEntryNVX ), "struct and wrapper have different size!" );
   21652 
   21653   struct ObjectTableDescriptorSetEntryNVX
   21654   {
   21655     ObjectTableDescriptorSetEntryNVX( ObjectEntryTypeNVX type_ = ObjectEntryTypeNVX::eDescriptorSet, ObjectEntryUsageFlagsNVX flags_ = ObjectEntryUsageFlagsNVX(), PipelineLayout pipelineLayout_ = PipelineLayout(), DescriptorSet descriptorSet_ = DescriptorSet() )
   21656       : type( type_ )
   21657       , flags( flags_ )
   21658       , pipelineLayout( pipelineLayout_ )
   21659       , descriptorSet( descriptorSet_ )
   21660     {
   21661     }
   21662 
   21663     ObjectTableDescriptorSetEntryNVX( VkObjectTableDescriptorSetEntryNVX const & rhs )
   21664     {
   21665       memcpy( this, &rhs, sizeof( ObjectTableDescriptorSetEntryNVX ) );
   21666     }
   21667 
   21668     ObjectTableDescriptorSetEntryNVX& operator=( VkObjectTableDescriptorSetEntryNVX const & rhs )
   21669     {
   21670       memcpy( this, &rhs, sizeof( ObjectTableDescriptorSetEntryNVX ) );
   21671       return *this;
   21672     }
   21673     ObjectTableDescriptorSetEntryNVX& setType( ObjectEntryTypeNVX type_ )
   21674     {
   21675       type = type_;
   21676       return *this;
   21677     }
   21678 
   21679     ObjectTableDescriptorSetEntryNVX& setFlags( ObjectEntryUsageFlagsNVX flags_ )
   21680     {
   21681       flags = flags_;
   21682       return *this;
   21683     }
   21684 
   21685     ObjectTableDescriptorSetEntryNVX& setPipelineLayout( PipelineLayout pipelineLayout_ )
   21686     {
   21687       pipelineLayout = pipelineLayout_;
   21688       return *this;
   21689     }
   21690 
   21691     ObjectTableDescriptorSetEntryNVX& setDescriptorSet( DescriptorSet descriptorSet_ )
   21692     {
   21693       descriptorSet = descriptorSet_;
   21694       return *this;
   21695     }
   21696 
   21697     operator const VkObjectTableDescriptorSetEntryNVX&() const
   21698     {
   21699       return *reinterpret_cast<const VkObjectTableDescriptorSetEntryNVX*>(this);
   21700     }
   21701 
   21702     bool operator==( ObjectTableDescriptorSetEntryNVX const& rhs ) const
   21703     {
   21704       return ( type == rhs.type )
   21705           && ( flags == rhs.flags )
   21706           && ( pipelineLayout == rhs.pipelineLayout )
   21707           && ( descriptorSet == rhs.descriptorSet );
   21708     }
   21709 
   21710     bool operator!=( ObjectTableDescriptorSetEntryNVX const& rhs ) const
   21711     {
   21712       return !operator==( rhs );
   21713     }
   21714 
   21715     ObjectEntryTypeNVX type;
   21716     ObjectEntryUsageFlagsNVX flags;
   21717     PipelineLayout pipelineLayout;
   21718     DescriptorSet descriptorSet;
   21719   };
   21720   static_assert( sizeof( ObjectTableDescriptorSetEntryNVX ) == sizeof( VkObjectTableDescriptorSetEntryNVX ), "struct and wrapper have different size!" );
   21721 
   21722   struct ObjectTableVertexBufferEntryNVX
   21723   {
   21724     ObjectTableVertexBufferEntryNVX( ObjectEntryTypeNVX type_ = ObjectEntryTypeNVX::eDescriptorSet, ObjectEntryUsageFlagsNVX flags_ = ObjectEntryUsageFlagsNVX(), Buffer buffer_ = Buffer() )
   21725       : type( type_ )
   21726       , flags( flags_ )
   21727       , buffer( buffer_ )
   21728     {
   21729     }
   21730 
   21731     ObjectTableVertexBufferEntryNVX( VkObjectTableVertexBufferEntryNVX const & rhs )
   21732     {
   21733       memcpy( this, &rhs, sizeof( ObjectTableVertexBufferEntryNVX ) );
   21734     }
   21735 
   21736     ObjectTableVertexBufferEntryNVX& operator=( VkObjectTableVertexBufferEntryNVX const & rhs )
   21737     {
   21738       memcpy( this, &rhs, sizeof( ObjectTableVertexBufferEntryNVX ) );
   21739       return *this;
   21740     }
   21741     ObjectTableVertexBufferEntryNVX& setType( ObjectEntryTypeNVX type_ )
   21742     {
   21743       type = type_;
   21744       return *this;
   21745     }
   21746 
   21747     ObjectTableVertexBufferEntryNVX& setFlags( ObjectEntryUsageFlagsNVX flags_ )
   21748     {
   21749       flags = flags_;
   21750       return *this;
   21751     }
   21752 
   21753     ObjectTableVertexBufferEntryNVX& setBuffer( Buffer buffer_ )
   21754     {
   21755       buffer = buffer_;
   21756       return *this;
   21757     }
   21758 
   21759     operator const VkObjectTableVertexBufferEntryNVX&() const
   21760     {
   21761       return *reinterpret_cast<const VkObjectTableVertexBufferEntryNVX*>(this);
   21762     }
   21763 
   21764     bool operator==( ObjectTableVertexBufferEntryNVX const& rhs ) const
   21765     {
   21766       return ( type == rhs.type )
   21767           && ( flags == rhs.flags )
   21768           && ( buffer == rhs.buffer );
   21769     }
   21770 
   21771     bool operator!=( ObjectTableVertexBufferEntryNVX const& rhs ) const
   21772     {
   21773       return !operator==( rhs );
   21774     }
   21775 
   21776     ObjectEntryTypeNVX type;
   21777     ObjectEntryUsageFlagsNVX flags;
   21778     Buffer buffer;
   21779   };
   21780   static_assert( sizeof( ObjectTableVertexBufferEntryNVX ) == sizeof( VkObjectTableVertexBufferEntryNVX ), "struct and wrapper have different size!" );
   21781 
   21782   struct ObjectTableIndexBufferEntryNVX
   21783   {
   21784     ObjectTableIndexBufferEntryNVX( ObjectEntryTypeNVX type_ = ObjectEntryTypeNVX::eDescriptorSet, ObjectEntryUsageFlagsNVX flags_ = ObjectEntryUsageFlagsNVX(), Buffer buffer_ = Buffer(), IndexType indexType_ = IndexType::eUint16 )
   21785       : type( type_ )
   21786       , flags( flags_ )
   21787       , buffer( buffer_ )
   21788       , indexType( indexType_ )
   21789     {
   21790     }
   21791 
   21792     ObjectTableIndexBufferEntryNVX( VkObjectTableIndexBufferEntryNVX const & rhs )
   21793     {
   21794       memcpy( this, &rhs, sizeof( ObjectTableIndexBufferEntryNVX ) );
   21795     }
   21796 
   21797     ObjectTableIndexBufferEntryNVX& operator=( VkObjectTableIndexBufferEntryNVX const & rhs )
   21798     {
   21799       memcpy( this, &rhs, sizeof( ObjectTableIndexBufferEntryNVX ) );
   21800       return *this;
   21801     }
   21802     ObjectTableIndexBufferEntryNVX& setType( ObjectEntryTypeNVX type_ )
   21803     {
   21804       type = type_;
   21805       return *this;
   21806     }
   21807 
   21808     ObjectTableIndexBufferEntryNVX& setFlags( ObjectEntryUsageFlagsNVX flags_ )
   21809     {
   21810       flags = flags_;
   21811       return *this;
   21812     }
   21813 
   21814     ObjectTableIndexBufferEntryNVX& setBuffer( Buffer buffer_ )
   21815     {
   21816       buffer = buffer_;
   21817       return *this;
   21818     }
   21819 
   21820     ObjectTableIndexBufferEntryNVX& setIndexType( IndexType indexType_ )
   21821     {
   21822       indexType = indexType_;
   21823       return *this;
   21824     }
   21825 
   21826     operator const VkObjectTableIndexBufferEntryNVX&() const
   21827     {
   21828       return *reinterpret_cast<const VkObjectTableIndexBufferEntryNVX*>(this);
   21829     }
   21830 
   21831     bool operator==( ObjectTableIndexBufferEntryNVX const& rhs ) const
   21832     {
   21833       return ( type == rhs.type )
   21834           && ( flags == rhs.flags )
   21835           && ( buffer == rhs.buffer )
   21836           && ( indexType == rhs.indexType );
   21837     }
   21838 
   21839     bool operator!=( ObjectTableIndexBufferEntryNVX const& rhs ) const
   21840     {
   21841       return !operator==( rhs );
   21842     }
   21843 
   21844     ObjectEntryTypeNVX type;
   21845     ObjectEntryUsageFlagsNVX flags;
   21846     Buffer buffer;
   21847     IndexType indexType;
   21848   };
   21849   static_assert( sizeof( ObjectTableIndexBufferEntryNVX ) == sizeof( VkObjectTableIndexBufferEntryNVX ), "struct and wrapper have different size!" );
   21850 
   21851   struct ObjectTablePushConstantEntryNVX
   21852   {
   21853     ObjectTablePushConstantEntryNVX( ObjectEntryTypeNVX type_ = ObjectEntryTypeNVX::eDescriptorSet, ObjectEntryUsageFlagsNVX flags_ = ObjectEntryUsageFlagsNVX(), PipelineLayout pipelineLayout_ = PipelineLayout(), ShaderStageFlags stageFlags_ = ShaderStageFlags() )
   21854       : type( type_ )
   21855       , flags( flags_ )
   21856       , pipelineLayout( pipelineLayout_ )
   21857       , stageFlags( stageFlags_ )
   21858     {
   21859     }
   21860 
   21861     ObjectTablePushConstantEntryNVX( VkObjectTablePushConstantEntryNVX const & rhs )
   21862     {
   21863       memcpy( this, &rhs, sizeof( ObjectTablePushConstantEntryNVX ) );
   21864     }
   21865 
   21866     ObjectTablePushConstantEntryNVX& operator=( VkObjectTablePushConstantEntryNVX const & rhs )
   21867     {
   21868       memcpy( this, &rhs, sizeof( ObjectTablePushConstantEntryNVX ) );
   21869       return *this;
   21870     }
   21871     ObjectTablePushConstantEntryNVX& setType( ObjectEntryTypeNVX type_ )
   21872     {
   21873       type = type_;
   21874       return *this;
   21875     }
   21876 
   21877     ObjectTablePushConstantEntryNVX& setFlags( ObjectEntryUsageFlagsNVX flags_ )
   21878     {
   21879       flags = flags_;
   21880       return *this;
   21881     }
   21882 
   21883     ObjectTablePushConstantEntryNVX& setPipelineLayout( PipelineLayout pipelineLayout_ )
   21884     {
   21885       pipelineLayout = pipelineLayout_;
   21886       return *this;
   21887     }
   21888 
   21889     ObjectTablePushConstantEntryNVX& setStageFlags( ShaderStageFlags stageFlags_ )
   21890     {
   21891       stageFlags = stageFlags_;
   21892       return *this;
   21893     }
   21894 
   21895     operator const VkObjectTablePushConstantEntryNVX&() const
   21896     {
   21897       return *reinterpret_cast<const VkObjectTablePushConstantEntryNVX*>(this);
   21898     }
   21899 
   21900     bool operator==( ObjectTablePushConstantEntryNVX const& rhs ) const
   21901     {
   21902       return ( type == rhs.type )
   21903           && ( flags == rhs.flags )
   21904           && ( pipelineLayout == rhs.pipelineLayout )
   21905           && ( stageFlags == rhs.stageFlags );
   21906     }
   21907 
   21908     bool operator!=( ObjectTablePushConstantEntryNVX const& rhs ) const
   21909     {
   21910       return !operator==( rhs );
   21911     }
   21912 
   21913     ObjectEntryTypeNVX type;
   21914     ObjectEntryUsageFlagsNVX flags;
   21915     PipelineLayout pipelineLayout;
   21916     ShaderStageFlags stageFlags;
   21917   };
   21918   static_assert( sizeof( ObjectTablePushConstantEntryNVX ) == sizeof( VkObjectTablePushConstantEntryNVX ), "struct and wrapper have different size!" );
   21919 
   21920   enum class DescriptorSetLayoutCreateFlagBits
   21921   {
   21922     ePushDescriptorKHR = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
   21923   };
   21924 
   21925   using DescriptorSetLayoutCreateFlags = Flags<DescriptorSetLayoutCreateFlagBits, VkDescriptorSetLayoutCreateFlags>;
   21926 
   21927   VULKAN_HPP_INLINE DescriptorSetLayoutCreateFlags operator|( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 )
   21928   {
   21929     return DescriptorSetLayoutCreateFlags( bit0 ) | bit1;
   21930   }
   21931 
   21932   VULKAN_HPP_INLINE DescriptorSetLayoutCreateFlags operator~( DescriptorSetLayoutCreateFlagBits bits )
   21933   {
   21934     return ~( DescriptorSetLayoutCreateFlags( bits ) );
   21935   }
   21936 
   21937   template <> struct FlagTraits<DescriptorSetLayoutCreateFlagBits>
   21938   {
   21939     enum
   21940     {
   21941       allFlags = VkFlags(DescriptorSetLayoutCreateFlagBits::ePushDescriptorKHR)
   21942     };
   21943   };
   21944 
   21945   struct DescriptorSetLayoutCreateInfo
   21946   {
   21947     DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateFlags flags_ = DescriptorSetLayoutCreateFlags(), uint32_t bindingCount_ = 0, const DescriptorSetLayoutBinding* pBindings_ = nullptr )
   21948       : flags( flags_ )
   21949       , bindingCount( bindingCount_ )
   21950       , pBindings( pBindings_ )
   21951     {
   21952     }
   21953 
   21954     DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs )
   21955     {
   21956       memcpy( this, &rhs, sizeof( DescriptorSetLayoutCreateInfo ) );
   21957     }
   21958 
   21959     DescriptorSetLayoutCreateInfo& operator=( VkDescriptorSetLayoutCreateInfo const & rhs )
   21960     {
   21961       memcpy( this, &rhs, sizeof( DescriptorSetLayoutCreateInfo ) );
   21962       return *this;
   21963     }
   21964     DescriptorSetLayoutCreateInfo& setPNext( const void* pNext_ )
   21965     {
   21966       pNext = pNext_;
   21967       return *this;
   21968     }
   21969 
   21970     DescriptorSetLayoutCreateInfo& setFlags( DescriptorSetLayoutCreateFlags flags_ )
   21971     {
   21972       flags = flags_;
   21973       return *this;
   21974     }
   21975 
   21976     DescriptorSetLayoutCreateInfo& setBindingCount( uint32_t bindingCount_ )
   21977     {
   21978       bindingCount = bindingCount_;
   21979       return *this;
   21980     }
   21981 
   21982     DescriptorSetLayoutCreateInfo& setPBindings( const DescriptorSetLayoutBinding* pBindings_ )
   21983     {
   21984       pBindings = pBindings_;
   21985       return *this;
   21986     }
   21987 
   21988     operator const VkDescriptorSetLayoutCreateInfo&() const
   21989     {
   21990       return *reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>(this);
   21991     }
   21992 
   21993     bool operator==( DescriptorSetLayoutCreateInfo const& rhs ) const
   21994     {
   21995       return ( sType == rhs.sType )
   21996           && ( pNext == rhs.pNext )
   21997           && ( flags == rhs.flags )
   21998           && ( bindingCount == rhs.bindingCount )
   21999           && ( pBindings == rhs.pBindings );
   22000     }
   22001 
   22002     bool operator!=( DescriptorSetLayoutCreateInfo const& rhs ) const
   22003     {
   22004       return !operator==( rhs );
   22005     }
   22006 
   22007   private:
   22008     StructureType sType = StructureType::eDescriptorSetLayoutCreateInfo;
   22009 
   22010   public:
   22011     const void* pNext = nullptr;
   22012     DescriptorSetLayoutCreateFlags flags;
   22013     uint32_t bindingCount;
   22014     const DescriptorSetLayoutBinding* pBindings;
   22015   };
   22016   static_assert( sizeof( DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ), "struct and wrapper have different size!" );
   22017 
   22018   enum class ExternalMemoryHandleTypeFlagBitsKHR
   22019   {
   22020     eOpaqueFd = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,
   22021     eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,
   22022     eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,
   22023     eD3D11Texture = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR,
   22024     eD3D11TextureKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR,
   22025     eD3D12Heap = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR,
   22026     eD3D12Resource = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR,
   22027     eDmaBufEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,
   22028     eHostAllocationEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
   22029     eHostMappedForeignMemoryEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
   22030   };
   22031 
   22032   using ExternalMemoryHandleTypeFlagsKHR = Flags<ExternalMemoryHandleTypeFlagBitsKHR, VkExternalMemoryHandleTypeFlagsKHR>;
   22033 
   22034   VULKAN_HPP_INLINE ExternalMemoryHandleTypeFlagsKHR operator|( ExternalMemoryHandleTypeFlagBitsKHR bit0, ExternalMemoryHandleTypeFlagBitsKHR bit1 )
   22035   {
   22036     return ExternalMemoryHandleTypeFlagsKHR( bit0 ) | bit1;
   22037   }
   22038 
   22039   VULKAN_HPP_INLINE ExternalMemoryHandleTypeFlagsKHR operator~( ExternalMemoryHandleTypeFlagBitsKHR bits )
   22040   {
   22041     return ~( ExternalMemoryHandleTypeFlagsKHR( bits ) );
   22042   }
   22043 
   22044   template <> struct FlagTraits<ExternalMemoryHandleTypeFlagBitsKHR>
   22045   {
   22046     enum
   22047     {
   22048       allFlags = VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueWin32) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueWin32Kmt) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eD3D11Texture) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eD3D11TextureKmt) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eD3D12Heap) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eD3D12Resource) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eDmaBufEXT) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eHostAllocationEXT) | VkFlags(ExternalMemoryHandleTypeFlagBitsKHR::eHostMappedForeignMemoryEXT)
   22049     };
   22050   };
   22051 
   22052   struct PhysicalDeviceExternalImageFormatInfoKHR
   22053   {
   22054     PhysicalDeviceExternalImageFormatInfoKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType_ = ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd )
   22055       : handleType( handleType_ )
   22056     {
   22057     }
   22058 
   22059     PhysicalDeviceExternalImageFormatInfoKHR( VkPhysicalDeviceExternalImageFormatInfoKHR const & rhs )
   22060     {
   22061       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalImageFormatInfoKHR ) );
   22062     }
   22063 
   22064     PhysicalDeviceExternalImageFormatInfoKHR& operator=( VkPhysicalDeviceExternalImageFormatInfoKHR const & rhs )
   22065     {
   22066       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalImageFormatInfoKHR ) );
   22067       return *this;
   22068     }
   22069     PhysicalDeviceExternalImageFormatInfoKHR& setPNext( const void* pNext_ )
   22070     {
   22071       pNext = pNext_;
   22072       return *this;
   22073     }
   22074 
   22075     PhysicalDeviceExternalImageFormatInfoKHR& setHandleType( ExternalMemoryHandleTypeFlagBitsKHR handleType_ )
   22076     {
   22077       handleType = handleType_;
   22078       return *this;
   22079     }
   22080 
   22081     operator const VkPhysicalDeviceExternalImageFormatInfoKHR&() const
   22082     {
   22083       return *reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfoKHR*>(this);
   22084     }
   22085 
   22086     bool operator==( PhysicalDeviceExternalImageFormatInfoKHR const& rhs ) const
   22087     {
   22088       return ( sType == rhs.sType )
   22089           && ( pNext == rhs.pNext )
   22090           && ( handleType == rhs.handleType );
   22091     }
   22092 
   22093     bool operator!=( PhysicalDeviceExternalImageFormatInfoKHR const& rhs ) const
   22094     {
   22095       return !operator==( rhs );
   22096     }
   22097 
   22098   private:
   22099     StructureType sType = StructureType::ePhysicalDeviceExternalImageFormatInfoKHR;
   22100 
   22101   public:
   22102     const void* pNext = nullptr;
   22103     ExternalMemoryHandleTypeFlagBitsKHR handleType;
   22104   };
   22105   static_assert( sizeof( PhysicalDeviceExternalImageFormatInfoKHR ) == sizeof( VkPhysicalDeviceExternalImageFormatInfoKHR ), "struct and wrapper have different size!" );
   22106 
   22107   struct PhysicalDeviceExternalBufferInfoKHR
   22108   {
   22109     PhysicalDeviceExternalBufferInfoKHR( BufferCreateFlags flags_ = BufferCreateFlags(), BufferUsageFlags usage_ = BufferUsageFlags(), ExternalMemoryHandleTypeFlagBitsKHR handleType_ = ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd )
   22110       : flags( flags_ )
   22111       , usage( usage_ )
   22112       , handleType( handleType_ )
   22113     {
   22114     }
   22115 
   22116     PhysicalDeviceExternalBufferInfoKHR( VkPhysicalDeviceExternalBufferInfoKHR const & rhs )
   22117     {
   22118       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalBufferInfoKHR ) );
   22119     }
   22120 
   22121     PhysicalDeviceExternalBufferInfoKHR& operator=( VkPhysicalDeviceExternalBufferInfoKHR const & rhs )
   22122     {
   22123       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalBufferInfoKHR ) );
   22124       return *this;
   22125     }
   22126     PhysicalDeviceExternalBufferInfoKHR& setPNext( const void* pNext_ )
   22127     {
   22128       pNext = pNext_;
   22129       return *this;
   22130     }
   22131 
   22132     PhysicalDeviceExternalBufferInfoKHR& setFlags( BufferCreateFlags flags_ )
   22133     {
   22134       flags = flags_;
   22135       return *this;
   22136     }
   22137 
   22138     PhysicalDeviceExternalBufferInfoKHR& setUsage( BufferUsageFlags usage_ )
   22139     {
   22140       usage = usage_;
   22141       return *this;
   22142     }
   22143 
   22144     PhysicalDeviceExternalBufferInfoKHR& setHandleType( ExternalMemoryHandleTypeFlagBitsKHR handleType_ )
   22145     {
   22146       handleType = handleType_;
   22147       return *this;
   22148     }
   22149 
   22150     operator const VkPhysicalDeviceExternalBufferInfoKHR&() const
   22151     {
   22152       return *reinterpret_cast<const VkPhysicalDeviceExternalBufferInfoKHR*>(this);
   22153     }
   22154 
   22155     bool operator==( PhysicalDeviceExternalBufferInfoKHR const& rhs ) const
   22156     {
   22157       return ( sType == rhs.sType )
   22158           && ( pNext == rhs.pNext )
   22159           && ( flags == rhs.flags )
   22160           && ( usage == rhs.usage )
   22161           && ( handleType == rhs.handleType );
   22162     }
   22163 
   22164     bool operator!=( PhysicalDeviceExternalBufferInfoKHR const& rhs ) const
   22165     {
   22166       return !operator==( rhs );
   22167     }
   22168 
   22169   private:
   22170     StructureType sType = StructureType::ePhysicalDeviceExternalBufferInfoKHR;
   22171 
   22172   public:
   22173     const void* pNext = nullptr;
   22174     BufferCreateFlags flags;
   22175     BufferUsageFlags usage;
   22176     ExternalMemoryHandleTypeFlagBitsKHR handleType;
   22177   };
   22178   static_assert( sizeof( PhysicalDeviceExternalBufferInfoKHR ) == sizeof( VkPhysicalDeviceExternalBufferInfoKHR ), "struct and wrapper have different size!" );
   22179 
   22180   struct ExternalMemoryImageCreateInfoKHR
   22181   {
   22182     ExternalMemoryImageCreateInfoKHR( ExternalMemoryHandleTypeFlagsKHR handleTypes_ = ExternalMemoryHandleTypeFlagsKHR() )
   22183       : handleTypes( handleTypes_ )
   22184     {
   22185     }
   22186 
   22187     ExternalMemoryImageCreateInfoKHR( VkExternalMemoryImageCreateInfoKHR const & rhs )
   22188     {
   22189       memcpy( this, &rhs, sizeof( ExternalMemoryImageCreateInfoKHR ) );
   22190     }
   22191 
   22192     ExternalMemoryImageCreateInfoKHR& operator=( VkExternalMemoryImageCreateInfoKHR const & rhs )
   22193     {
   22194       memcpy( this, &rhs, sizeof( ExternalMemoryImageCreateInfoKHR ) );
   22195       return *this;
   22196     }
   22197     ExternalMemoryImageCreateInfoKHR& setPNext( const void* pNext_ )
   22198     {
   22199       pNext = pNext_;
   22200       return *this;
   22201     }
   22202 
   22203     ExternalMemoryImageCreateInfoKHR& setHandleTypes( ExternalMemoryHandleTypeFlagsKHR handleTypes_ )
   22204     {
   22205       handleTypes = handleTypes_;
   22206       return *this;
   22207     }
   22208 
   22209     operator const VkExternalMemoryImageCreateInfoKHR&() const
   22210     {
   22211       return *reinterpret_cast<const VkExternalMemoryImageCreateInfoKHR*>(this);
   22212     }
   22213 
   22214     bool operator==( ExternalMemoryImageCreateInfoKHR const& rhs ) const
   22215     {
   22216       return ( sType == rhs.sType )
   22217           && ( pNext == rhs.pNext )
   22218           && ( handleTypes == rhs.handleTypes );
   22219     }
   22220 
   22221     bool operator!=( ExternalMemoryImageCreateInfoKHR const& rhs ) const
   22222     {
   22223       return !operator==( rhs );
   22224     }
   22225 
   22226   private:
   22227     StructureType sType = StructureType::eExternalMemoryImageCreateInfoKHR;
   22228 
   22229   public:
   22230     const void* pNext = nullptr;
   22231     ExternalMemoryHandleTypeFlagsKHR handleTypes;
   22232   };
   22233   static_assert( sizeof( ExternalMemoryImageCreateInfoKHR ) == sizeof( VkExternalMemoryImageCreateInfoKHR ), "struct and wrapper have different size!" );
   22234 
   22235   struct ExternalMemoryBufferCreateInfoKHR
   22236   {
   22237     ExternalMemoryBufferCreateInfoKHR( ExternalMemoryHandleTypeFlagsKHR handleTypes_ = ExternalMemoryHandleTypeFlagsKHR() )
   22238       : handleTypes( handleTypes_ )
   22239     {
   22240     }
   22241 
   22242     ExternalMemoryBufferCreateInfoKHR( VkExternalMemoryBufferCreateInfoKHR const & rhs )
   22243     {
   22244       memcpy( this, &rhs, sizeof( ExternalMemoryBufferCreateInfoKHR ) );
   22245     }
   22246 
   22247     ExternalMemoryBufferCreateInfoKHR& operator=( VkExternalMemoryBufferCreateInfoKHR const & rhs )
   22248     {
   22249       memcpy( this, &rhs, sizeof( ExternalMemoryBufferCreateInfoKHR ) );
   22250       return *this;
   22251     }
   22252     ExternalMemoryBufferCreateInfoKHR& setPNext( const void* pNext_ )
   22253     {
   22254       pNext = pNext_;
   22255       return *this;
   22256     }
   22257 
   22258     ExternalMemoryBufferCreateInfoKHR& setHandleTypes( ExternalMemoryHandleTypeFlagsKHR handleTypes_ )
   22259     {
   22260       handleTypes = handleTypes_;
   22261       return *this;
   22262     }
   22263 
   22264     operator const VkExternalMemoryBufferCreateInfoKHR&() const
   22265     {
   22266       return *reinterpret_cast<const VkExternalMemoryBufferCreateInfoKHR*>(this);
   22267     }
   22268 
   22269     bool operator==( ExternalMemoryBufferCreateInfoKHR const& rhs ) const
   22270     {
   22271       return ( sType == rhs.sType )
   22272           && ( pNext == rhs.pNext )
   22273           && ( handleTypes == rhs.handleTypes );
   22274     }
   22275 
   22276     bool operator!=( ExternalMemoryBufferCreateInfoKHR const& rhs ) const
   22277     {
   22278       return !operator==( rhs );
   22279     }
   22280 
   22281   private:
   22282     StructureType sType = StructureType::eExternalMemoryBufferCreateInfoKHR;
   22283 
   22284   public:
   22285     const void* pNext = nullptr;
   22286     ExternalMemoryHandleTypeFlagsKHR handleTypes;
   22287   };
   22288   static_assert( sizeof( ExternalMemoryBufferCreateInfoKHR ) == sizeof( VkExternalMemoryBufferCreateInfoKHR ), "struct and wrapper have different size!" );
   22289 
   22290   struct ExportMemoryAllocateInfoKHR
   22291   {
   22292     ExportMemoryAllocateInfoKHR( ExternalMemoryHandleTypeFlagsKHR handleTypes_ = ExternalMemoryHandleTypeFlagsKHR() )
   22293       : handleTypes( handleTypes_ )
   22294     {
   22295     }
   22296 
   22297     ExportMemoryAllocateInfoKHR( VkExportMemoryAllocateInfoKHR const & rhs )
   22298     {
   22299       memcpy( this, &rhs, sizeof( ExportMemoryAllocateInfoKHR ) );
   22300     }
   22301 
   22302     ExportMemoryAllocateInfoKHR& operator=( VkExportMemoryAllocateInfoKHR const & rhs )
   22303     {
   22304       memcpy( this, &rhs, sizeof( ExportMemoryAllocateInfoKHR ) );
   22305       return *this;
   22306     }
   22307     ExportMemoryAllocateInfoKHR& setPNext( const void* pNext_ )
   22308     {
   22309       pNext = pNext_;
   22310       return *this;
   22311     }
   22312 
   22313     ExportMemoryAllocateInfoKHR& setHandleTypes( ExternalMemoryHandleTypeFlagsKHR handleTypes_ )
   22314     {
   22315       handleTypes = handleTypes_;
   22316       return *this;
   22317     }
   22318 
   22319     operator const VkExportMemoryAllocateInfoKHR&() const
   22320     {
   22321       return *reinterpret_cast<const VkExportMemoryAllocateInfoKHR*>(this);
   22322     }
   22323 
   22324     bool operator==( ExportMemoryAllocateInfoKHR const& rhs ) const
   22325     {
   22326       return ( sType == rhs.sType )
   22327           && ( pNext == rhs.pNext )
   22328           && ( handleTypes == rhs.handleTypes );
   22329     }
   22330 
   22331     bool operator!=( ExportMemoryAllocateInfoKHR const& rhs ) const
   22332     {
   22333       return !operator==( rhs );
   22334     }
   22335 
   22336   private:
   22337     StructureType sType = StructureType::eExportMemoryAllocateInfoKHR;
   22338 
   22339   public:
   22340     const void* pNext = nullptr;
   22341     ExternalMemoryHandleTypeFlagsKHR handleTypes;
   22342   };
   22343   static_assert( sizeof( ExportMemoryAllocateInfoKHR ) == sizeof( VkExportMemoryAllocateInfoKHR ), "struct and wrapper have different size!" );
   22344 
   22345 #ifdef VK_USE_PLATFORM_WIN32_KHR
   22346   struct ImportMemoryWin32HandleInfoKHR
   22347   {
   22348     ImportMemoryWin32HandleInfoKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType_ = ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd, HANDLE handle_ = 0, LPCWSTR name_ = 0 )
   22349       : handleType( handleType_ )
   22350       , handle( handle_ )
   22351       , name( name_ )
   22352     {
   22353     }
   22354 
   22355     ImportMemoryWin32HandleInfoKHR( VkImportMemoryWin32HandleInfoKHR const & rhs )
   22356     {
   22357       memcpy( this, &rhs, sizeof( ImportMemoryWin32HandleInfoKHR ) );
   22358     }
   22359 
   22360     ImportMemoryWin32HandleInfoKHR& operator=( VkImportMemoryWin32HandleInfoKHR const & rhs )
   22361     {
   22362       memcpy( this, &rhs, sizeof( ImportMemoryWin32HandleInfoKHR ) );
   22363       return *this;
   22364     }
   22365     ImportMemoryWin32HandleInfoKHR& setPNext( const void* pNext_ )
   22366     {
   22367       pNext = pNext_;
   22368       return *this;
   22369     }
   22370 
   22371     ImportMemoryWin32HandleInfoKHR& setHandleType( ExternalMemoryHandleTypeFlagBitsKHR handleType_ )
   22372     {
   22373       handleType = handleType_;
   22374       return *this;
   22375     }
   22376 
   22377     ImportMemoryWin32HandleInfoKHR& setHandle( HANDLE handle_ )
   22378     {
   22379       handle = handle_;
   22380       return *this;
   22381     }
   22382 
   22383     ImportMemoryWin32HandleInfoKHR& setName( LPCWSTR name_ )
   22384     {
   22385       name = name_;
   22386       return *this;
   22387     }
   22388 
   22389     operator const VkImportMemoryWin32HandleInfoKHR&() const
   22390     {
   22391       return *reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(this);
   22392     }
   22393 
   22394     bool operator==( ImportMemoryWin32HandleInfoKHR const& rhs ) const
   22395     {
   22396       return ( sType == rhs.sType )
   22397           && ( pNext == rhs.pNext )
   22398           && ( handleType == rhs.handleType )
   22399           && ( handle == rhs.handle )
   22400           && ( name == rhs.name );
   22401     }
   22402 
   22403     bool operator!=( ImportMemoryWin32HandleInfoKHR const& rhs ) const
   22404     {
   22405       return !operator==( rhs );
   22406     }
   22407 
   22408   private:
   22409     StructureType sType = StructureType::eImportMemoryWin32HandleInfoKHR;
   22410 
   22411   public:
   22412     const void* pNext = nullptr;
   22413     ExternalMemoryHandleTypeFlagBitsKHR handleType;
   22414     HANDLE handle;
   22415     LPCWSTR name;
   22416   };
   22417   static_assert( sizeof( ImportMemoryWin32HandleInfoKHR ) == sizeof( VkImportMemoryWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   22418 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   22419 
   22420 #ifdef VK_USE_PLATFORM_WIN32_KHR
   22421   struct MemoryGetWin32HandleInfoKHR
   22422   {
   22423     MemoryGetWin32HandleInfoKHR( DeviceMemory memory_ = DeviceMemory(), ExternalMemoryHandleTypeFlagBitsKHR handleType_ = ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd )
   22424       : memory( memory_ )
   22425       , handleType( handleType_ )
   22426     {
   22427     }
   22428 
   22429     MemoryGetWin32HandleInfoKHR( VkMemoryGetWin32HandleInfoKHR const & rhs )
   22430     {
   22431       memcpy( this, &rhs, sizeof( MemoryGetWin32HandleInfoKHR ) );
   22432     }
   22433 
   22434     MemoryGetWin32HandleInfoKHR& operator=( VkMemoryGetWin32HandleInfoKHR const & rhs )
   22435     {
   22436       memcpy( this, &rhs, sizeof( MemoryGetWin32HandleInfoKHR ) );
   22437       return *this;
   22438     }
   22439     MemoryGetWin32HandleInfoKHR& setPNext( const void* pNext_ )
   22440     {
   22441       pNext = pNext_;
   22442       return *this;
   22443     }
   22444 
   22445     MemoryGetWin32HandleInfoKHR& setMemory( DeviceMemory memory_ )
   22446     {
   22447       memory = memory_;
   22448       return *this;
   22449     }
   22450 
   22451     MemoryGetWin32HandleInfoKHR& setHandleType( ExternalMemoryHandleTypeFlagBitsKHR handleType_ )
   22452     {
   22453       handleType = handleType_;
   22454       return *this;
   22455     }
   22456 
   22457     operator const VkMemoryGetWin32HandleInfoKHR&() const
   22458     {
   22459       return *reinterpret_cast<const VkMemoryGetWin32HandleInfoKHR*>(this);
   22460     }
   22461 
   22462     bool operator==( MemoryGetWin32HandleInfoKHR const& rhs ) const
   22463     {
   22464       return ( sType == rhs.sType )
   22465           && ( pNext == rhs.pNext )
   22466           && ( memory == rhs.memory )
   22467           && ( handleType == rhs.handleType );
   22468     }
   22469 
   22470     bool operator!=( MemoryGetWin32HandleInfoKHR const& rhs ) const
   22471     {
   22472       return !operator==( rhs );
   22473     }
   22474 
   22475   private:
   22476     StructureType sType = StructureType::eMemoryGetWin32HandleInfoKHR;
   22477 
   22478   public:
   22479     const void* pNext = nullptr;
   22480     DeviceMemory memory;
   22481     ExternalMemoryHandleTypeFlagBitsKHR handleType;
   22482   };
   22483   static_assert( sizeof( MemoryGetWin32HandleInfoKHR ) == sizeof( VkMemoryGetWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   22484 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   22485 
   22486   struct ImportMemoryFdInfoKHR
   22487   {
   22488     ImportMemoryFdInfoKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType_ = ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd, int fd_ = 0 )
   22489       : handleType( handleType_ )
   22490       , fd( fd_ )
   22491     {
   22492     }
   22493 
   22494     ImportMemoryFdInfoKHR( VkImportMemoryFdInfoKHR const & rhs )
   22495     {
   22496       memcpy( this, &rhs, sizeof( ImportMemoryFdInfoKHR ) );
   22497     }
   22498 
   22499     ImportMemoryFdInfoKHR& operator=( VkImportMemoryFdInfoKHR const & rhs )
   22500     {
   22501       memcpy( this, &rhs, sizeof( ImportMemoryFdInfoKHR ) );
   22502       return *this;
   22503     }
   22504     ImportMemoryFdInfoKHR& setPNext( const void* pNext_ )
   22505     {
   22506       pNext = pNext_;
   22507       return *this;
   22508     }
   22509 
   22510     ImportMemoryFdInfoKHR& setHandleType( ExternalMemoryHandleTypeFlagBitsKHR handleType_ )
   22511     {
   22512       handleType = handleType_;
   22513       return *this;
   22514     }
   22515 
   22516     ImportMemoryFdInfoKHR& setFd( int fd_ )
   22517     {
   22518       fd = fd_;
   22519       return *this;
   22520     }
   22521 
   22522     operator const VkImportMemoryFdInfoKHR&() const
   22523     {
   22524       return *reinterpret_cast<const VkImportMemoryFdInfoKHR*>(this);
   22525     }
   22526 
   22527     bool operator==( ImportMemoryFdInfoKHR const& rhs ) const
   22528     {
   22529       return ( sType == rhs.sType )
   22530           && ( pNext == rhs.pNext )
   22531           && ( handleType == rhs.handleType )
   22532           && ( fd == rhs.fd );
   22533     }
   22534 
   22535     bool operator!=( ImportMemoryFdInfoKHR const& rhs ) const
   22536     {
   22537       return !operator==( rhs );
   22538     }
   22539 
   22540   private:
   22541     StructureType sType = StructureType::eImportMemoryFdInfoKHR;
   22542 
   22543   public:
   22544     const void* pNext = nullptr;
   22545     ExternalMemoryHandleTypeFlagBitsKHR handleType;
   22546     int fd;
   22547   };
   22548   static_assert( sizeof( ImportMemoryFdInfoKHR ) == sizeof( VkImportMemoryFdInfoKHR ), "struct and wrapper have different size!" );
   22549 
   22550   struct MemoryGetFdInfoKHR
   22551   {
   22552     MemoryGetFdInfoKHR( DeviceMemory memory_ = DeviceMemory(), ExternalMemoryHandleTypeFlagBitsKHR handleType_ = ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd )
   22553       : memory( memory_ )
   22554       , handleType( handleType_ )
   22555     {
   22556     }
   22557 
   22558     MemoryGetFdInfoKHR( VkMemoryGetFdInfoKHR const & rhs )
   22559     {
   22560       memcpy( this, &rhs, sizeof( MemoryGetFdInfoKHR ) );
   22561     }
   22562 
   22563     MemoryGetFdInfoKHR& operator=( VkMemoryGetFdInfoKHR const & rhs )
   22564     {
   22565       memcpy( this, &rhs, sizeof( MemoryGetFdInfoKHR ) );
   22566       return *this;
   22567     }
   22568     MemoryGetFdInfoKHR& setPNext( const void* pNext_ )
   22569     {
   22570       pNext = pNext_;
   22571       return *this;
   22572     }
   22573 
   22574     MemoryGetFdInfoKHR& setMemory( DeviceMemory memory_ )
   22575     {
   22576       memory = memory_;
   22577       return *this;
   22578     }
   22579 
   22580     MemoryGetFdInfoKHR& setHandleType( ExternalMemoryHandleTypeFlagBitsKHR handleType_ )
   22581     {
   22582       handleType = handleType_;
   22583       return *this;
   22584     }
   22585 
   22586     operator const VkMemoryGetFdInfoKHR&() const
   22587     {
   22588       return *reinterpret_cast<const VkMemoryGetFdInfoKHR*>(this);
   22589     }
   22590 
   22591     bool operator==( MemoryGetFdInfoKHR const& rhs ) const
   22592     {
   22593       return ( sType == rhs.sType )
   22594           && ( pNext == rhs.pNext )
   22595           && ( memory == rhs.memory )
   22596           && ( handleType == rhs.handleType );
   22597     }
   22598 
   22599     bool operator!=( MemoryGetFdInfoKHR const& rhs ) const
   22600     {
   22601       return !operator==( rhs );
   22602     }
   22603 
   22604   private:
   22605     StructureType sType = StructureType::eMemoryGetFdInfoKHR;
   22606 
   22607   public:
   22608     const void* pNext = nullptr;
   22609     DeviceMemory memory;
   22610     ExternalMemoryHandleTypeFlagBitsKHR handleType;
   22611   };
   22612   static_assert( sizeof( MemoryGetFdInfoKHR ) == sizeof( VkMemoryGetFdInfoKHR ), "struct and wrapper have different size!" );
   22613 
   22614   struct ImportMemoryHostPointerInfoEXT
   22615   {
   22616     ImportMemoryHostPointerInfoEXT( ExternalMemoryHandleTypeFlagBitsKHR handleType_ = ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd, void* pHostPointer_ = nullptr )
   22617       : handleType( handleType_ )
   22618       , pHostPointer( pHostPointer_ )
   22619     {
   22620     }
   22621 
   22622     ImportMemoryHostPointerInfoEXT( VkImportMemoryHostPointerInfoEXT const & rhs )
   22623     {
   22624       memcpy( this, &rhs, sizeof( ImportMemoryHostPointerInfoEXT ) );
   22625     }
   22626 
   22627     ImportMemoryHostPointerInfoEXT& operator=( VkImportMemoryHostPointerInfoEXT const & rhs )
   22628     {
   22629       memcpy( this, &rhs, sizeof( ImportMemoryHostPointerInfoEXT ) );
   22630       return *this;
   22631     }
   22632     ImportMemoryHostPointerInfoEXT& setPNext( const void* pNext_ )
   22633     {
   22634       pNext = pNext_;
   22635       return *this;
   22636     }
   22637 
   22638     ImportMemoryHostPointerInfoEXT& setHandleType( ExternalMemoryHandleTypeFlagBitsKHR handleType_ )
   22639     {
   22640       handleType = handleType_;
   22641       return *this;
   22642     }
   22643 
   22644     ImportMemoryHostPointerInfoEXT& setPHostPointer( void* pHostPointer_ )
   22645     {
   22646       pHostPointer = pHostPointer_;
   22647       return *this;
   22648     }
   22649 
   22650     operator const VkImportMemoryHostPointerInfoEXT&() const
   22651     {
   22652       return *reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(this);
   22653     }
   22654 
   22655     bool operator==( ImportMemoryHostPointerInfoEXT const& rhs ) const
   22656     {
   22657       return ( sType == rhs.sType )
   22658           && ( pNext == rhs.pNext )
   22659           && ( handleType == rhs.handleType )
   22660           && ( pHostPointer == rhs.pHostPointer );
   22661     }
   22662 
   22663     bool operator!=( ImportMemoryHostPointerInfoEXT const& rhs ) const
   22664     {
   22665       return !operator==( rhs );
   22666     }
   22667 
   22668   private:
   22669     StructureType sType = StructureType::eImportMemoryHostPointerInfoEXT;
   22670 
   22671   public:
   22672     const void* pNext = nullptr;
   22673     ExternalMemoryHandleTypeFlagBitsKHR handleType;
   22674     void* pHostPointer;
   22675   };
   22676   static_assert( sizeof( ImportMemoryHostPointerInfoEXT ) == sizeof( VkImportMemoryHostPointerInfoEXT ), "struct and wrapper have different size!" );
   22677 
   22678   enum class ExternalMemoryFeatureFlagBitsKHR
   22679   {
   22680     eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR,
   22681     eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR,
   22682     eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR
   22683   };
   22684 
   22685   using ExternalMemoryFeatureFlagsKHR = Flags<ExternalMemoryFeatureFlagBitsKHR, VkExternalMemoryFeatureFlagsKHR>;
   22686 
   22687   VULKAN_HPP_INLINE ExternalMemoryFeatureFlagsKHR operator|( ExternalMemoryFeatureFlagBitsKHR bit0, ExternalMemoryFeatureFlagBitsKHR bit1 )
   22688   {
   22689     return ExternalMemoryFeatureFlagsKHR( bit0 ) | bit1;
   22690   }
   22691 
   22692   VULKAN_HPP_INLINE ExternalMemoryFeatureFlagsKHR operator~( ExternalMemoryFeatureFlagBitsKHR bits )
   22693   {
   22694     return ~( ExternalMemoryFeatureFlagsKHR( bits ) );
   22695   }
   22696 
   22697   template <> struct FlagTraits<ExternalMemoryFeatureFlagBitsKHR>
   22698   {
   22699     enum
   22700     {
   22701       allFlags = VkFlags(ExternalMemoryFeatureFlagBitsKHR::eDedicatedOnly) | VkFlags(ExternalMemoryFeatureFlagBitsKHR::eExportable) | VkFlags(ExternalMemoryFeatureFlagBitsKHR::eImportable)
   22702     };
   22703   };
   22704 
   22705   struct ExternalMemoryPropertiesKHR
   22706   {
   22707     operator const VkExternalMemoryPropertiesKHR&() const
   22708     {
   22709       return *reinterpret_cast<const VkExternalMemoryPropertiesKHR*>(this);
   22710     }
   22711 
   22712     bool operator==( ExternalMemoryPropertiesKHR const& rhs ) const
   22713     {
   22714       return ( externalMemoryFeatures == rhs.externalMemoryFeatures )
   22715           && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
   22716           && ( compatibleHandleTypes == rhs.compatibleHandleTypes );
   22717     }
   22718 
   22719     bool operator!=( ExternalMemoryPropertiesKHR const& rhs ) const
   22720     {
   22721       return !operator==( rhs );
   22722     }
   22723 
   22724     ExternalMemoryFeatureFlagsKHR externalMemoryFeatures;
   22725     ExternalMemoryHandleTypeFlagsKHR exportFromImportedHandleTypes;
   22726     ExternalMemoryHandleTypeFlagsKHR compatibleHandleTypes;
   22727   };
   22728   static_assert( sizeof( ExternalMemoryPropertiesKHR ) == sizeof( VkExternalMemoryPropertiesKHR ), "struct and wrapper have different size!" );
   22729 
   22730   struct ExternalImageFormatPropertiesKHR
   22731   {
   22732     operator const VkExternalImageFormatPropertiesKHR&() const
   22733     {
   22734       return *reinterpret_cast<const VkExternalImageFormatPropertiesKHR*>(this);
   22735     }
   22736 
   22737     bool operator==( ExternalImageFormatPropertiesKHR const& rhs ) const
   22738     {
   22739       return ( sType == rhs.sType )
   22740           && ( pNext == rhs.pNext )
   22741           && ( externalMemoryProperties == rhs.externalMemoryProperties );
   22742     }
   22743 
   22744     bool operator!=( ExternalImageFormatPropertiesKHR const& rhs ) const
   22745     {
   22746       return !operator==( rhs );
   22747     }
   22748 
   22749   private:
   22750     StructureType sType = StructureType::eExternalImageFormatPropertiesKHR;
   22751 
   22752   public:
   22753     void* pNext = nullptr;
   22754     ExternalMemoryPropertiesKHR externalMemoryProperties;
   22755   };
   22756   static_assert( sizeof( ExternalImageFormatPropertiesKHR ) == sizeof( VkExternalImageFormatPropertiesKHR ), "struct and wrapper have different size!" );
   22757 
   22758   struct ExternalBufferPropertiesKHR
   22759   {
   22760     operator const VkExternalBufferPropertiesKHR&() const
   22761     {
   22762       return *reinterpret_cast<const VkExternalBufferPropertiesKHR*>(this);
   22763     }
   22764 
   22765     bool operator==( ExternalBufferPropertiesKHR const& rhs ) const
   22766     {
   22767       return ( sType == rhs.sType )
   22768           && ( pNext == rhs.pNext )
   22769           && ( externalMemoryProperties == rhs.externalMemoryProperties );
   22770     }
   22771 
   22772     bool operator!=( ExternalBufferPropertiesKHR const& rhs ) const
   22773     {
   22774       return !operator==( rhs );
   22775     }
   22776 
   22777   private:
   22778     StructureType sType = StructureType::eExternalBufferPropertiesKHR;
   22779 
   22780   public:
   22781     void* pNext = nullptr;
   22782     ExternalMemoryPropertiesKHR externalMemoryProperties;
   22783   };
   22784   static_assert( sizeof( ExternalBufferPropertiesKHR ) == sizeof( VkExternalBufferPropertiesKHR ), "struct and wrapper have different size!" );
   22785 
   22786   enum class ExternalSemaphoreHandleTypeFlagBitsKHR
   22787   {
   22788     eOpaqueFd = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,
   22789     eOpaqueWin32 = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,
   22790     eOpaqueWin32Kmt = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,
   22791     eD3D12Fence = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR,
   22792     eSyncFd = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR
   22793   };
   22794 
   22795   using ExternalSemaphoreHandleTypeFlagsKHR = Flags<ExternalSemaphoreHandleTypeFlagBitsKHR, VkExternalSemaphoreHandleTypeFlagsKHR>;
   22796 
   22797   VULKAN_HPP_INLINE ExternalSemaphoreHandleTypeFlagsKHR operator|( ExternalSemaphoreHandleTypeFlagBitsKHR bit0, ExternalSemaphoreHandleTypeFlagBitsKHR bit1 )
   22798   {
   22799     return ExternalSemaphoreHandleTypeFlagsKHR( bit0 ) | bit1;
   22800   }
   22801 
   22802   VULKAN_HPP_INLINE ExternalSemaphoreHandleTypeFlagsKHR operator~( ExternalSemaphoreHandleTypeFlagBitsKHR bits )
   22803   {
   22804     return ~( ExternalSemaphoreHandleTypeFlagsKHR( bits ) );
   22805   }
   22806 
   22807   template <> struct FlagTraits<ExternalSemaphoreHandleTypeFlagBitsKHR>
   22808   {
   22809     enum
   22810     {
   22811       allFlags = VkFlags(ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueFd) | VkFlags(ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueWin32) | VkFlags(ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueWin32Kmt) | VkFlags(ExternalSemaphoreHandleTypeFlagBitsKHR::eD3D12Fence) | VkFlags(ExternalSemaphoreHandleTypeFlagBitsKHR::eSyncFd)
   22812     };
   22813   };
   22814 
   22815   struct PhysicalDeviceExternalSemaphoreInfoKHR
   22816   {
   22817     PhysicalDeviceExternalSemaphoreInfoKHR( ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ = ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueFd )
   22818       : handleType( handleType_ )
   22819     {
   22820     }
   22821 
   22822     PhysicalDeviceExternalSemaphoreInfoKHR( VkPhysicalDeviceExternalSemaphoreInfoKHR const & rhs )
   22823     {
   22824       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalSemaphoreInfoKHR ) );
   22825     }
   22826 
   22827     PhysicalDeviceExternalSemaphoreInfoKHR& operator=( VkPhysicalDeviceExternalSemaphoreInfoKHR const & rhs )
   22828     {
   22829       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalSemaphoreInfoKHR ) );
   22830       return *this;
   22831     }
   22832     PhysicalDeviceExternalSemaphoreInfoKHR& setPNext( const void* pNext_ )
   22833     {
   22834       pNext = pNext_;
   22835       return *this;
   22836     }
   22837 
   22838     PhysicalDeviceExternalSemaphoreInfoKHR& setHandleType( ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ )
   22839     {
   22840       handleType = handleType_;
   22841       return *this;
   22842     }
   22843 
   22844     operator const VkPhysicalDeviceExternalSemaphoreInfoKHR&() const
   22845     {
   22846       return *reinterpret_cast<const VkPhysicalDeviceExternalSemaphoreInfoKHR*>(this);
   22847     }
   22848 
   22849     bool operator==( PhysicalDeviceExternalSemaphoreInfoKHR const& rhs ) const
   22850     {
   22851       return ( sType == rhs.sType )
   22852           && ( pNext == rhs.pNext )
   22853           && ( handleType == rhs.handleType );
   22854     }
   22855 
   22856     bool operator!=( PhysicalDeviceExternalSemaphoreInfoKHR const& rhs ) const
   22857     {
   22858       return !operator==( rhs );
   22859     }
   22860 
   22861   private:
   22862     StructureType sType = StructureType::ePhysicalDeviceExternalSemaphoreInfoKHR;
   22863 
   22864   public:
   22865     const void* pNext = nullptr;
   22866     ExternalSemaphoreHandleTypeFlagBitsKHR handleType;
   22867   };
   22868   static_assert( sizeof( PhysicalDeviceExternalSemaphoreInfoKHR ) == sizeof( VkPhysicalDeviceExternalSemaphoreInfoKHR ), "struct and wrapper have different size!" );
   22869 
   22870   struct ExportSemaphoreCreateInfoKHR
   22871   {
   22872     ExportSemaphoreCreateInfoKHR( ExternalSemaphoreHandleTypeFlagsKHR handleTypes_ = ExternalSemaphoreHandleTypeFlagsKHR() )
   22873       : handleTypes( handleTypes_ )
   22874     {
   22875     }
   22876 
   22877     ExportSemaphoreCreateInfoKHR( VkExportSemaphoreCreateInfoKHR const & rhs )
   22878     {
   22879       memcpy( this, &rhs, sizeof( ExportSemaphoreCreateInfoKHR ) );
   22880     }
   22881 
   22882     ExportSemaphoreCreateInfoKHR& operator=( VkExportSemaphoreCreateInfoKHR const & rhs )
   22883     {
   22884       memcpy( this, &rhs, sizeof( ExportSemaphoreCreateInfoKHR ) );
   22885       return *this;
   22886     }
   22887     ExportSemaphoreCreateInfoKHR& setPNext( const void* pNext_ )
   22888     {
   22889       pNext = pNext_;
   22890       return *this;
   22891     }
   22892 
   22893     ExportSemaphoreCreateInfoKHR& setHandleTypes( ExternalSemaphoreHandleTypeFlagsKHR handleTypes_ )
   22894     {
   22895       handleTypes = handleTypes_;
   22896       return *this;
   22897     }
   22898 
   22899     operator const VkExportSemaphoreCreateInfoKHR&() const
   22900     {
   22901       return *reinterpret_cast<const VkExportSemaphoreCreateInfoKHR*>(this);
   22902     }
   22903 
   22904     bool operator==( ExportSemaphoreCreateInfoKHR const& rhs ) const
   22905     {
   22906       return ( sType == rhs.sType )
   22907           && ( pNext == rhs.pNext )
   22908           && ( handleTypes == rhs.handleTypes );
   22909     }
   22910 
   22911     bool operator!=( ExportSemaphoreCreateInfoKHR const& rhs ) const
   22912     {
   22913       return !operator==( rhs );
   22914     }
   22915 
   22916   private:
   22917     StructureType sType = StructureType::eExportSemaphoreCreateInfoKHR;
   22918 
   22919   public:
   22920     const void* pNext = nullptr;
   22921     ExternalSemaphoreHandleTypeFlagsKHR handleTypes;
   22922   };
   22923   static_assert( sizeof( ExportSemaphoreCreateInfoKHR ) == sizeof( VkExportSemaphoreCreateInfoKHR ), "struct and wrapper have different size!" );
   22924 
   22925 #ifdef VK_USE_PLATFORM_WIN32_KHR
   22926   struct SemaphoreGetWin32HandleInfoKHR
   22927   {
   22928     SemaphoreGetWin32HandleInfoKHR( Semaphore semaphore_ = Semaphore(), ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ = ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueFd )
   22929       : semaphore( semaphore_ )
   22930       , handleType( handleType_ )
   22931     {
   22932     }
   22933 
   22934     SemaphoreGetWin32HandleInfoKHR( VkSemaphoreGetWin32HandleInfoKHR const & rhs )
   22935     {
   22936       memcpy( this, &rhs, sizeof( SemaphoreGetWin32HandleInfoKHR ) );
   22937     }
   22938 
   22939     SemaphoreGetWin32HandleInfoKHR& operator=( VkSemaphoreGetWin32HandleInfoKHR const & rhs )
   22940     {
   22941       memcpy( this, &rhs, sizeof( SemaphoreGetWin32HandleInfoKHR ) );
   22942       return *this;
   22943     }
   22944     SemaphoreGetWin32HandleInfoKHR& setPNext( const void* pNext_ )
   22945     {
   22946       pNext = pNext_;
   22947       return *this;
   22948     }
   22949 
   22950     SemaphoreGetWin32HandleInfoKHR& setSemaphore( Semaphore semaphore_ )
   22951     {
   22952       semaphore = semaphore_;
   22953       return *this;
   22954     }
   22955 
   22956     SemaphoreGetWin32HandleInfoKHR& setHandleType( ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ )
   22957     {
   22958       handleType = handleType_;
   22959       return *this;
   22960     }
   22961 
   22962     operator const VkSemaphoreGetWin32HandleInfoKHR&() const
   22963     {
   22964       return *reinterpret_cast<const VkSemaphoreGetWin32HandleInfoKHR*>(this);
   22965     }
   22966 
   22967     bool operator==( SemaphoreGetWin32HandleInfoKHR const& rhs ) const
   22968     {
   22969       return ( sType == rhs.sType )
   22970           && ( pNext == rhs.pNext )
   22971           && ( semaphore == rhs.semaphore )
   22972           && ( handleType == rhs.handleType );
   22973     }
   22974 
   22975     bool operator!=( SemaphoreGetWin32HandleInfoKHR const& rhs ) const
   22976     {
   22977       return !operator==( rhs );
   22978     }
   22979 
   22980   private:
   22981     StructureType sType = StructureType::eSemaphoreGetWin32HandleInfoKHR;
   22982 
   22983   public:
   22984     const void* pNext = nullptr;
   22985     Semaphore semaphore;
   22986     ExternalSemaphoreHandleTypeFlagBitsKHR handleType;
   22987   };
   22988   static_assert( sizeof( SemaphoreGetWin32HandleInfoKHR ) == sizeof( VkSemaphoreGetWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   22989 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   22990 
   22991   struct SemaphoreGetFdInfoKHR
   22992   {
   22993     SemaphoreGetFdInfoKHR( Semaphore semaphore_ = Semaphore(), ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ = ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueFd )
   22994       : semaphore( semaphore_ )
   22995       , handleType( handleType_ )
   22996     {
   22997     }
   22998 
   22999     SemaphoreGetFdInfoKHR( VkSemaphoreGetFdInfoKHR const & rhs )
   23000     {
   23001       memcpy( this, &rhs, sizeof( SemaphoreGetFdInfoKHR ) );
   23002     }
   23003 
   23004     SemaphoreGetFdInfoKHR& operator=( VkSemaphoreGetFdInfoKHR const & rhs )
   23005     {
   23006       memcpy( this, &rhs, sizeof( SemaphoreGetFdInfoKHR ) );
   23007       return *this;
   23008     }
   23009     SemaphoreGetFdInfoKHR& setPNext( const void* pNext_ )
   23010     {
   23011       pNext = pNext_;
   23012       return *this;
   23013     }
   23014 
   23015     SemaphoreGetFdInfoKHR& setSemaphore( Semaphore semaphore_ )
   23016     {
   23017       semaphore = semaphore_;
   23018       return *this;
   23019     }
   23020 
   23021     SemaphoreGetFdInfoKHR& setHandleType( ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ )
   23022     {
   23023       handleType = handleType_;
   23024       return *this;
   23025     }
   23026 
   23027     operator const VkSemaphoreGetFdInfoKHR&() const
   23028     {
   23029       return *reinterpret_cast<const VkSemaphoreGetFdInfoKHR*>(this);
   23030     }
   23031 
   23032     bool operator==( SemaphoreGetFdInfoKHR const& rhs ) const
   23033     {
   23034       return ( sType == rhs.sType )
   23035           && ( pNext == rhs.pNext )
   23036           && ( semaphore == rhs.semaphore )
   23037           && ( handleType == rhs.handleType );
   23038     }
   23039 
   23040     bool operator!=( SemaphoreGetFdInfoKHR const& rhs ) const
   23041     {
   23042       return !operator==( rhs );
   23043     }
   23044 
   23045   private:
   23046     StructureType sType = StructureType::eSemaphoreGetFdInfoKHR;
   23047 
   23048   public:
   23049     const void* pNext = nullptr;
   23050     Semaphore semaphore;
   23051     ExternalSemaphoreHandleTypeFlagBitsKHR handleType;
   23052   };
   23053   static_assert( sizeof( SemaphoreGetFdInfoKHR ) == sizeof( VkSemaphoreGetFdInfoKHR ), "struct and wrapper have different size!" );
   23054 
   23055   enum class ExternalSemaphoreFeatureFlagBitsKHR
   23056   {
   23057     eExportable = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR,
   23058     eImportable = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR
   23059   };
   23060 
   23061   using ExternalSemaphoreFeatureFlagsKHR = Flags<ExternalSemaphoreFeatureFlagBitsKHR, VkExternalSemaphoreFeatureFlagsKHR>;
   23062 
   23063   VULKAN_HPP_INLINE ExternalSemaphoreFeatureFlagsKHR operator|( ExternalSemaphoreFeatureFlagBitsKHR bit0, ExternalSemaphoreFeatureFlagBitsKHR bit1 )
   23064   {
   23065     return ExternalSemaphoreFeatureFlagsKHR( bit0 ) | bit1;
   23066   }
   23067 
   23068   VULKAN_HPP_INLINE ExternalSemaphoreFeatureFlagsKHR operator~( ExternalSemaphoreFeatureFlagBitsKHR bits )
   23069   {
   23070     return ~( ExternalSemaphoreFeatureFlagsKHR( bits ) );
   23071   }
   23072 
   23073   template <> struct FlagTraits<ExternalSemaphoreFeatureFlagBitsKHR>
   23074   {
   23075     enum
   23076     {
   23077       allFlags = VkFlags(ExternalSemaphoreFeatureFlagBitsKHR::eExportable) | VkFlags(ExternalSemaphoreFeatureFlagBitsKHR::eImportable)
   23078     };
   23079   };
   23080 
   23081   struct ExternalSemaphorePropertiesKHR
   23082   {
   23083     operator const VkExternalSemaphorePropertiesKHR&() const
   23084     {
   23085       return *reinterpret_cast<const VkExternalSemaphorePropertiesKHR*>(this);
   23086     }
   23087 
   23088     bool operator==( ExternalSemaphorePropertiesKHR const& rhs ) const
   23089     {
   23090       return ( sType == rhs.sType )
   23091           && ( pNext == rhs.pNext )
   23092           && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
   23093           && ( compatibleHandleTypes == rhs.compatibleHandleTypes )
   23094           && ( externalSemaphoreFeatures == rhs.externalSemaphoreFeatures );
   23095     }
   23096 
   23097     bool operator!=( ExternalSemaphorePropertiesKHR const& rhs ) const
   23098     {
   23099       return !operator==( rhs );
   23100     }
   23101 
   23102   private:
   23103     StructureType sType = StructureType::eExternalSemaphorePropertiesKHR;
   23104 
   23105   public:
   23106     void* pNext = nullptr;
   23107     ExternalSemaphoreHandleTypeFlagsKHR exportFromImportedHandleTypes;
   23108     ExternalSemaphoreHandleTypeFlagsKHR compatibleHandleTypes;
   23109     ExternalSemaphoreFeatureFlagsKHR externalSemaphoreFeatures;
   23110   };
   23111   static_assert( sizeof( ExternalSemaphorePropertiesKHR ) == sizeof( VkExternalSemaphorePropertiesKHR ), "struct and wrapper have different size!" );
   23112 
   23113   enum class SemaphoreImportFlagBitsKHR
   23114   {
   23115     eTemporary = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR
   23116   };
   23117 
   23118   using SemaphoreImportFlagsKHR = Flags<SemaphoreImportFlagBitsKHR, VkSemaphoreImportFlagsKHR>;
   23119 
   23120   VULKAN_HPP_INLINE SemaphoreImportFlagsKHR operator|( SemaphoreImportFlagBitsKHR bit0, SemaphoreImportFlagBitsKHR bit1 )
   23121   {
   23122     return SemaphoreImportFlagsKHR( bit0 ) | bit1;
   23123   }
   23124 
   23125   VULKAN_HPP_INLINE SemaphoreImportFlagsKHR operator~( SemaphoreImportFlagBitsKHR bits )
   23126   {
   23127     return ~( SemaphoreImportFlagsKHR( bits ) );
   23128   }
   23129 
   23130   template <> struct FlagTraits<SemaphoreImportFlagBitsKHR>
   23131   {
   23132     enum
   23133     {
   23134       allFlags = VkFlags(SemaphoreImportFlagBitsKHR::eTemporary)
   23135     };
   23136   };
   23137 
   23138 #ifdef VK_USE_PLATFORM_WIN32_KHR
   23139   struct ImportSemaphoreWin32HandleInfoKHR
   23140   {
   23141     ImportSemaphoreWin32HandleInfoKHR( Semaphore semaphore_ = Semaphore(), SemaphoreImportFlagsKHR flags_ = SemaphoreImportFlagsKHR(), ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ = ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueFd, HANDLE handle_ = 0, LPCWSTR name_ = 0 )
   23142       : semaphore( semaphore_ )
   23143       , flags( flags_ )
   23144       , handleType( handleType_ )
   23145       , handle( handle_ )
   23146       , name( name_ )
   23147     {
   23148     }
   23149 
   23150     ImportSemaphoreWin32HandleInfoKHR( VkImportSemaphoreWin32HandleInfoKHR const & rhs )
   23151     {
   23152       memcpy( this, &rhs, sizeof( ImportSemaphoreWin32HandleInfoKHR ) );
   23153     }
   23154 
   23155     ImportSemaphoreWin32HandleInfoKHR& operator=( VkImportSemaphoreWin32HandleInfoKHR const & rhs )
   23156     {
   23157       memcpy( this, &rhs, sizeof( ImportSemaphoreWin32HandleInfoKHR ) );
   23158       return *this;
   23159     }
   23160     ImportSemaphoreWin32HandleInfoKHR& setPNext( const void* pNext_ )
   23161     {
   23162       pNext = pNext_;
   23163       return *this;
   23164     }
   23165 
   23166     ImportSemaphoreWin32HandleInfoKHR& setSemaphore( Semaphore semaphore_ )
   23167     {
   23168       semaphore = semaphore_;
   23169       return *this;
   23170     }
   23171 
   23172     ImportSemaphoreWin32HandleInfoKHR& setFlags( SemaphoreImportFlagsKHR flags_ )
   23173     {
   23174       flags = flags_;
   23175       return *this;
   23176     }
   23177 
   23178     ImportSemaphoreWin32HandleInfoKHR& setHandleType( ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ )
   23179     {
   23180       handleType = handleType_;
   23181       return *this;
   23182     }
   23183 
   23184     ImportSemaphoreWin32HandleInfoKHR& setHandle( HANDLE handle_ )
   23185     {
   23186       handle = handle_;
   23187       return *this;
   23188     }
   23189 
   23190     ImportSemaphoreWin32HandleInfoKHR& setName( LPCWSTR name_ )
   23191     {
   23192       name = name_;
   23193       return *this;
   23194     }
   23195 
   23196     operator const VkImportSemaphoreWin32HandleInfoKHR&() const
   23197     {
   23198       return *reinterpret_cast<const VkImportSemaphoreWin32HandleInfoKHR*>(this);
   23199     }
   23200 
   23201     bool operator==( ImportSemaphoreWin32HandleInfoKHR const& rhs ) const
   23202     {
   23203       return ( sType == rhs.sType )
   23204           && ( pNext == rhs.pNext )
   23205           && ( semaphore == rhs.semaphore )
   23206           && ( flags == rhs.flags )
   23207           && ( handleType == rhs.handleType )
   23208           && ( handle == rhs.handle )
   23209           && ( name == rhs.name );
   23210     }
   23211 
   23212     bool operator!=( ImportSemaphoreWin32HandleInfoKHR const& rhs ) const
   23213     {
   23214       return !operator==( rhs );
   23215     }
   23216 
   23217   private:
   23218     StructureType sType = StructureType::eImportSemaphoreWin32HandleInfoKHR;
   23219 
   23220   public:
   23221     const void* pNext = nullptr;
   23222     Semaphore semaphore;
   23223     SemaphoreImportFlagsKHR flags;
   23224     ExternalSemaphoreHandleTypeFlagBitsKHR handleType;
   23225     HANDLE handle;
   23226     LPCWSTR name;
   23227   };
   23228   static_assert( sizeof( ImportSemaphoreWin32HandleInfoKHR ) == sizeof( VkImportSemaphoreWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   23229 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   23230 
   23231   struct ImportSemaphoreFdInfoKHR
   23232   {
   23233     ImportSemaphoreFdInfoKHR( Semaphore semaphore_ = Semaphore(), SemaphoreImportFlagsKHR flags_ = SemaphoreImportFlagsKHR(), ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ = ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueFd, int fd_ = 0 )
   23234       : semaphore( semaphore_ )
   23235       , flags( flags_ )
   23236       , handleType( handleType_ )
   23237       , fd( fd_ )
   23238     {
   23239     }
   23240 
   23241     ImportSemaphoreFdInfoKHR( VkImportSemaphoreFdInfoKHR const & rhs )
   23242     {
   23243       memcpy( this, &rhs, sizeof( ImportSemaphoreFdInfoKHR ) );
   23244     }
   23245 
   23246     ImportSemaphoreFdInfoKHR& operator=( VkImportSemaphoreFdInfoKHR const & rhs )
   23247     {
   23248       memcpy( this, &rhs, sizeof( ImportSemaphoreFdInfoKHR ) );
   23249       return *this;
   23250     }
   23251     ImportSemaphoreFdInfoKHR& setPNext( const void* pNext_ )
   23252     {
   23253       pNext = pNext_;
   23254       return *this;
   23255     }
   23256 
   23257     ImportSemaphoreFdInfoKHR& setSemaphore( Semaphore semaphore_ )
   23258     {
   23259       semaphore = semaphore_;
   23260       return *this;
   23261     }
   23262 
   23263     ImportSemaphoreFdInfoKHR& setFlags( SemaphoreImportFlagsKHR flags_ )
   23264     {
   23265       flags = flags_;
   23266       return *this;
   23267     }
   23268 
   23269     ImportSemaphoreFdInfoKHR& setHandleType( ExternalSemaphoreHandleTypeFlagBitsKHR handleType_ )
   23270     {
   23271       handleType = handleType_;
   23272       return *this;
   23273     }
   23274 
   23275     ImportSemaphoreFdInfoKHR& setFd( int fd_ )
   23276     {
   23277       fd = fd_;
   23278       return *this;
   23279     }
   23280 
   23281     operator const VkImportSemaphoreFdInfoKHR&() const
   23282     {
   23283       return *reinterpret_cast<const VkImportSemaphoreFdInfoKHR*>(this);
   23284     }
   23285 
   23286     bool operator==( ImportSemaphoreFdInfoKHR const& rhs ) const
   23287     {
   23288       return ( sType == rhs.sType )
   23289           && ( pNext == rhs.pNext )
   23290           && ( semaphore == rhs.semaphore )
   23291           && ( flags == rhs.flags )
   23292           && ( handleType == rhs.handleType )
   23293           && ( fd == rhs.fd );
   23294     }
   23295 
   23296     bool operator!=( ImportSemaphoreFdInfoKHR const& rhs ) const
   23297     {
   23298       return !operator==( rhs );
   23299     }
   23300 
   23301   private:
   23302     StructureType sType = StructureType::eImportSemaphoreFdInfoKHR;
   23303 
   23304   public:
   23305     const void* pNext = nullptr;
   23306     Semaphore semaphore;
   23307     SemaphoreImportFlagsKHR flags;
   23308     ExternalSemaphoreHandleTypeFlagBitsKHR handleType;
   23309     int fd;
   23310   };
   23311   static_assert( sizeof( ImportSemaphoreFdInfoKHR ) == sizeof( VkImportSemaphoreFdInfoKHR ), "struct and wrapper have different size!" );
   23312 
   23313   enum class ExternalFenceHandleTypeFlagBitsKHR
   23314   {
   23315     eOpaqueFd = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,
   23316     eOpaqueWin32 = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,
   23317     eOpaqueWin32Kmt = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,
   23318     eSyncFd = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR
   23319   };
   23320 
   23321   using ExternalFenceHandleTypeFlagsKHR = Flags<ExternalFenceHandleTypeFlagBitsKHR, VkExternalFenceHandleTypeFlagsKHR>;
   23322 
   23323   VULKAN_HPP_INLINE ExternalFenceHandleTypeFlagsKHR operator|( ExternalFenceHandleTypeFlagBitsKHR bit0, ExternalFenceHandleTypeFlagBitsKHR bit1 )
   23324   {
   23325     return ExternalFenceHandleTypeFlagsKHR( bit0 ) | bit1;
   23326   }
   23327 
   23328   VULKAN_HPP_INLINE ExternalFenceHandleTypeFlagsKHR operator~( ExternalFenceHandleTypeFlagBitsKHR bits )
   23329   {
   23330     return ~( ExternalFenceHandleTypeFlagsKHR( bits ) );
   23331   }
   23332 
   23333   template <> struct FlagTraits<ExternalFenceHandleTypeFlagBitsKHR>
   23334   {
   23335     enum
   23336     {
   23337       allFlags = VkFlags(ExternalFenceHandleTypeFlagBitsKHR::eOpaqueFd) | VkFlags(ExternalFenceHandleTypeFlagBitsKHR::eOpaqueWin32) | VkFlags(ExternalFenceHandleTypeFlagBitsKHR::eOpaqueWin32Kmt) | VkFlags(ExternalFenceHandleTypeFlagBitsKHR::eSyncFd)
   23338     };
   23339   };
   23340 
   23341   struct PhysicalDeviceExternalFenceInfoKHR
   23342   {
   23343     PhysicalDeviceExternalFenceInfoKHR( ExternalFenceHandleTypeFlagBitsKHR handleType_ = ExternalFenceHandleTypeFlagBitsKHR::eOpaqueFd )
   23344       : handleType( handleType_ )
   23345     {
   23346     }
   23347 
   23348     PhysicalDeviceExternalFenceInfoKHR( VkPhysicalDeviceExternalFenceInfoKHR const & rhs )
   23349     {
   23350       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalFenceInfoKHR ) );
   23351     }
   23352 
   23353     PhysicalDeviceExternalFenceInfoKHR& operator=( VkPhysicalDeviceExternalFenceInfoKHR const & rhs )
   23354     {
   23355       memcpy( this, &rhs, sizeof( PhysicalDeviceExternalFenceInfoKHR ) );
   23356       return *this;
   23357     }
   23358     PhysicalDeviceExternalFenceInfoKHR& setPNext( const void* pNext_ )
   23359     {
   23360       pNext = pNext_;
   23361       return *this;
   23362     }
   23363 
   23364     PhysicalDeviceExternalFenceInfoKHR& setHandleType( ExternalFenceHandleTypeFlagBitsKHR handleType_ )
   23365     {
   23366       handleType = handleType_;
   23367       return *this;
   23368     }
   23369 
   23370     operator const VkPhysicalDeviceExternalFenceInfoKHR&() const
   23371     {
   23372       return *reinterpret_cast<const VkPhysicalDeviceExternalFenceInfoKHR*>(this);
   23373     }
   23374 
   23375     bool operator==( PhysicalDeviceExternalFenceInfoKHR const& rhs ) const
   23376     {
   23377       return ( sType == rhs.sType )
   23378           && ( pNext == rhs.pNext )
   23379           && ( handleType == rhs.handleType );
   23380     }
   23381 
   23382     bool operator!=( PhysicalDeviceExternalFenceInfoKHR const& rhs ) const
   23383     {
   23384       return !operator==( rhs );
   23385     }
   23386 
   23387   private:
   23388     StructureType sType = StructureType::ePhysicalDeviceExternalFenceInfoKHR;
   23389 
   23390   public:
   23391     const void* pNext = nullptr;
   23392     ExternalFenceHandleTypeFlagBitsKHR handleType;
   23393   };
   23394   static_assert( sizeof( PhysicalDeviceExternalFenceInfoKHR ) == sizeof( VkPhysicalDeviceExternalFenceInfoKHR ), "struct and wrapper have different size!" );
   23395 
   23396   struct ExportFenceCreateInfoKHR
   23397   {
   23398     ExportFenceCreateInfoKHR( ExternalFenceHandleTypeFlagsKHR handleTypes_ = ExternalFenceHandleTypeFlagsKHR() )
   23399       : handleTypes( handleTypes_ )
   23400     {
   23401     }
   23402 
   23403     ExportFenceCreateInfoKHR( VkExportFenceCreateInfoKHR const & rhs )
   23404     {
   23405       memcpy( this, &rhs, sizeof( ExportFenceCreateInfoKHR ) );
   23406     }
   23407 
   23408     ExportFenceCreateInfoKHR& operator=( VkExportFenceCreateInfoKHR const & rhs )
   23409     {
   23410       memcpy( this, &rhs, sizeof( ExportFenceCreateInfoKHR ) );
   23411       return *this;
   23412     }
   23413     ExportFenceCreateInfoKHR& setPNext( const void* pNext_ )
   23414     {
   23415       pNext = pNext_;
   23416       return *this;
   23417     }
   23418 
   23419     ExportFenceCreateInfoKHR& setHandleTypes( ExternalFenceHandleTypeFlagsKHR handleTypes_ )
   23420     {
   23421       handleTypes = handleTypes_;
   23422       return *this;
   23423     }
   23424 
   23425     operator const VkExportFenceCreateInfoKHR&() const
   23426     {
   23427       return *reinterpret_cast<const VkExportFenceCreateInfoKHR*>(this);
   23428     }
   23429 
   23430     bool operator==( ExportFenceCreateInfoKHR const& rhs ) const
   23431     {
   23432       return ( sType == rhs.sType )
   23433           && ( pNext == rhs.pNext )
   23434           && ( handleTypes == rhs.handleTypes );
   23435     }
   23436 
   23437     bool operator!=( ExportFenceCreateInfoKHR const& rhs ) const
   23438     {
   23439       return !operator==( rhs );
   23440     }
   23441 
   23442   private:
   23443     StructureType sType = StructureType::eExportFenceCreateInfoKHR;
   23444 
   23445   public:
   23446     const void* pNext = nullptr;
   23447     ExternalFenceHandleTypeFlagsKHR handleTypes;
   23448   };
   23449   static_assert( sizeof( ExportFenceCreateInfoKHR ) == sizeof( VkExportFenceCreateInfoKHR ), "struct and wrapper have different size!" );
   23450 
   23451 #ifdef VK_USE_PLATFORM_WIN32_KHR
   23452   struct FenceGetWin32HandleInfoKHR
   23453   {
   23454     FenceGetWin32HandleInfoKHR( Fence fence_ = Fence(), ExternalFenceHandleTypeFlagBitsKHR handleType_ = ExternalFenceHandleTypeFlagBitsKHR::eOpaqueFd )
   23455       : fence( fence_ )
   23456       , handleType( handleType_ )
   23457     {
   23458     }
   23459 
   23460     FenceGetWin32HandleInfoKHR( VkFenceGetWin32HandleInfoKHR const & rhs )
   23461     {
   23462       memcpy( this, &rhs, sizeof( FenceGetWin32HandleInfoKHR ) );
   23463     }
   23464 
   23465     FenceGetWin32HandleInfoKHR& operator=( VkFenceGetWin32HandleInfoKHR const & rhs )
   23466     {
   23467       memcpy( this, &rhs, sizeof( FenceGetWin32HandleInfoKHR ) );
   23468       return *this;
   23469     }
   23470     FenceGetWin32HandleInfoKHR& setPNext( const void* pNext_ )
   23471     {
   23472       pNext = pNext_;
   23473       return *this;
   23474     }
   23475 
   23476     FenceGetWin32HandleInfoKHR& setFence( Fence fence_ )
   23477     {
   23478       fence = fence_;
   23479       return *this;
   23480     }
   23481 
   23482     FenceGetWin32HandleInfoKHR& setHandleType( ExternalFenceHandleTypeFlagBitsKHR handleType_ )
   23483     {
   23484       handleType = handleType_;
   23485       return *this;
   23486     }
   23487 
   23488     operator const VkFenceGetWin32HandleInfoKHR&() const
   23489     {
   23490       return *reinterpret_cast<const VkFenceGetWin32HandleInfoKHR*>(this);
   23491     }
   23492 
   23493     bool operator==( FenceGetWin32HandleInfoKHR const& rhs ) const
   23494     {
   23495       return ( sType == rhs.sType )
   23496           && ( pNext == rhs.pNext )
   23497           && ( fence == rhs.fence )
   23498           && ( handleType == rhs.handleType );
   23499     }
   23500 
   23501     bool operator!=( FenceGetWin32HandleInfoKHR const& rhs ) const
   23502     {
   23503       return !operator==( rhs );
   23504     }
   23505 
   23506   private:
   23507     StructureType sType = StructureType::eFenceGetWin32HandleInfoKHR;
   23508 
   23509   public:
   23510     const void* pNext = nullptr;
   23511     Fence fence;
   23512     ExternalFenceHandleTypeFlagBitsKHR handleType;
   23513   };
   23514   static_assert( sizeof( FenceGetWin32HandleInfoKHR ) == sizeof( VkFenceGetWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   23515 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   23516 
   23517   struct FenceGetFdInfoKHR
   23518   {
   23519     FenceGetFdInfoKHR( Fence fence_ = Fence(), ExternalFenceHandleTypeFlagBitsKHR handleType_ = ExternalFenceHandleTypeFlagBitsKHR::eOpaqueFd )
   23520       : fence( fence_ )
   23521       , handleType( handleType_ )
   23522     {
   23523     }
   23524 
   23525     FenceGetFdInfoKHR( VkFenceGetFdInfoKHR const & rhs )
   23526     {
   23527       memcpy( this, &rhs, sizeof( FenceGetFdInfoKHR ) );
   23528     }
   23529 
   23530     FenceGetFdInfoKHR& operator=( VkFenceGetFdInfoKHR const & rhs )
   23531     {
   23532       memcpy( this, &rhs, sizeof( FenceGetFdInfoKHR ) );
   23533       return *this;
   23534     }
   23535     FenceGetFdInfoKHR& setPNext( const void* pNext_ )
   23536     {
   23537       pNext = pNext_;
   23538       return *this;
   23539     }
   23540 
   23541     FenceGetFdInfoKHR& setFence( Fence fence_ )
   23542     {
   23543       fence = fence_;
   23544       return *this;
   23545     }
   23546 
   23547     FenceGetFdInfoKHR& setHandleType( ExternalFenceHandleTypeFlagBitsKHR handleType_ )
   23548     {
   23549       handleType = handleType_;
   23550       return *this;
   23551     }
   23552 
   23553     operator const VkFenceGetFdInfoKHR&() const
   23554     {
   23555       return *reinterpret_cast<const VkFenceGetFdInfoKHR*>(this);
   23556     }
   23557 
   23558     bool operator==( FenceGetFdInfoKHR const& rhs ) const
   23559     {
   23560       return ( sType == rhs.sType )
   23561           && ( pNext == rhs.pNext )
   23562           && ( fence == rhs.fence )
   23563           && ( handleType == rhs.handleType );
   23564     }
   23565 
   23566     bool operator!=( FenceGetFdInfoKHR const& rhs ) const
   23567     {
   23568       return !operator==( rhs );
   23569     }
   23570 
   23571   private:
   23572     StructureType sType = StructureType::eFenceGetFdInfoKHR;
   23573 
   23574   public:
   23575     const void* pNext = nullptr;
   23576     Fence fence;
   23577     ExternalFenceHandleTypeFlagBitsKHR handleType;
   23578   };
   23579   static_assert( sizeof( FenceGetFdInfoKHR ) == sizeof( VkFenceGetFdInfoKHR ), "struct and wrapper have different size!" );
   23580 
   23581   enum class ExternalFenceFeatureFlagBitsKHR
   23582   {
   23583     eExportable = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR,
   23584     eImportable = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR
   23585   };
   23586 
   23587   using ExternalFenceFeatureFlagsKHR = Flags<ExternalFenceFeatureFlagBitsKHR, VkExternalFenceFeatureFlagsKHR>;
   23588 
   23589   VULKAN_HPP_INLINE ExternalFenceFeatureFlagsKHR operator|( ExternalFenceFeatureFlagBitsKHR bit0, ExternalFenceFeatureFlagBitsKHR bit1 )
   23590   {
   23591     return ExternalFenceFeatureFlagsKHR( bit0 ) | bit1;
   23592   }
   23593 
   23594   VULKAN_HPP_INLINE ExternalFenceFeatureFlagsKHR operator~( ExternalFenceFeatureFlagBitsKHR bits )
   23595   {
   23596     return ~( ExternalFenceFeatureFlagsKHR( bits ) );
   23597   }
   23598 
   23599   template <> struct FlagTraits<ExternalFenceFeatureFlagBitsKHR>
   23600   {
   23601     enum
   23602     {
   23603       allFlags = VkFlags(ExternalFenceFeatureFlagBitsKHR::eExportable) | VkFlags(ExternalFenceFeatureFlagBitsKHR::eImportable)
   23604     };
   23605   };
   23606 
   23607   struct ExternalFencePropertiesKHR
   23608   {
   23609     operator const VkExternalFencePropertiesKHR&() const
   23610     {
   23611       return *reinterpret_cast<const VkExternalFencePropertiesKHR*>(this);
   23612     }
   23613 
   23614     bool operator==( ExternalFencePropertiesKHR const& rhs ) const
   23615     {
   23616       return ( sType == rhs.sType )
   23617           && ( pNext == rhs.pNext )
   23618           && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes )
   23619           && ( compatibleHandleTypes == rhs.compatibleHandleTypes )
   23620           && ( externalFenceFeatures == rhs.externalFenceFeatures );
   23621     }
   23622 
   23623     bool operator!=( ExternalFencePropertiesKHR const& rhs ) const
   23624     {
   23625       return !operator==( rhs );
   23626     }
   23627 
   23628   private:
   23629     StructureType sType = StructureType::eExternalFencePropertiesKHR;
   23630 
   23631   public:
   23632     void* pNext = nullptr;
   23633     ExternalFenceHandleTypeFlagsKHR exportFromImportedHandleTypes;
   23634     ExternalFenceHandleTypeFlagsKHR compatibleHandleTypes;
   23635     ExternalFenceFeatureFlagsKHR externalFenceFeatures;
   23636   };
   23637   static_assert( sizeof( ExternalFencePropertiesKHR ) == sizeof( VkExternalFencePropertiesKHR ), "struct and wrapper have different size!" );
   23638 
   23639   enum class FenceImportFlagBitsKHR
   23640   {
   23641     eTemporary = VK_FENCE_IMPORT_TEMPORARY_BIT_KHR
   23642   };
   23643 
   23644   using FenceImportFlagsKHR = Flags<FenceImportFlagBitsKHR, VkFenceImportFlagsKHR>;
   23645 
   23646   VULKAN_HPP_INLINE FenceImportFlagsKHR operator|( FenceImportFlagBitsKHR bit0, FenceImportFlagBitsKHR bit1 )
   23647   {
   23648     return FenceImportFlagsKHR( bit0 ) | bit1;
   23649   }
   23650 
   23651   VULKAN_HPP_INLINE FenceImportFlagsKHR operator~( FenceImportFlagBitsKHR bits )
   23652   {
   23653     return ~( FenceImportFlagsKHR( bits ) );
   23654   }
   23655 
   23656   template <> struct FlagTraits<FenceImportFlagBitsKHR>
   23657   {
   23658     enum
   23659     {
   23660       allFlags = VkFlags(FenceImportFlagBitsKHR::eTemporary)
   23661     };
   23662   };
   23663 
   23664 #ifdef VK_USE_PLATFORM_WIN32_KHR
   23665   struct ImportFenceWin32HandleInfoKHR
   23666   {
   23667     ImportFenceWin32HandleInfoKHR( Fence fence_ = Fence(), FenceImportFlagsKHR flags_ = FenceImportFlagsKHR(), ExternalFenceHandleTypeFlagBitsKHR handleType_ = ExternalFenceHandleTypeFlagBitsKHR::eOpaqueFd, HANDLE handle_ = 0, LPCWSTR name_ = 0 )
   23668       : fence( fence_ )
   23669       , flags( flags_ )
   23670       , handleType( handleType_ )
   23671       , handle( handle_ )
   23672       , name( name_ )
   23673     {
   23674     }
   23675 
   23676     ImportFenceWin32HandleInfoKHR( VkImportFenceWin32HandleInfoKHR const & rhs )
   23677     {
   23678       memcpy( this, &rhs, sizeof( ImportFenceWin32HandleInfoKHR ) );
   23679     }
   23680 
   23681     ImportFenceWin32HandleInfoKHR& operator=( VkImportFenceWin32HandleInfoKHR const & rhs )
   23682     {
   23683       memcpy( this, &rhs, sizeof( ImportFenceWin32HandleInfoKHR ) );
   23684       return *this;
   23685     }
   23686     ImportFenceWin32HandleInfoKHR& setPNext( const void* pNext_ )
   23687     {
   23688       pNext = pNext_;
   23689       return *this;
   23690     }
   23691 
   23692     ImportFenceWin32HandleInfoKHR& setFence( Fence fence_ )
   23693     {
   23694       fence = fence_;
   23695       return *this;
   23696     }
   23697 
   23698     ImportFenceWin32HandleInfoKHR& setFlags( FenceImportFlagsKHR flags_ )
   23699     {
   23700       flags = flags_;
   23701       return *this;
   23702     }
   23703 
   23704     ImportFenceWin32HandleInfoKHR& setHandleType( ExternalFenceHandleTypeFlagBitsKHR handleType_ )
   23705     {
   23706       handleType = handleType_;
   23707       return *this;
   23708     }
   23709 
   23710     ImportFenceWin32HandleInfoKHR& setHandle( HANDLE handle_ )
   23711     {
   23712       handle = handle_;
   23713       return *this;
   23714     }
   23715 
   23716     ImportFenceWin32HandleInfoKHR& setName( LPCWSTR name_ )
   23717     {
   23718       name = name_;
   23719       return *this;
   23720     }
   23721 
   23722     operator const VkImportFenceWin32HandleInfoKHR&() const
   23723     {
   23724       return *reinterpret_cast<const VkImportFenceWin32HandleInfoKHR*>(this);
   23725     }
   23726 
   23727     bool operator==( ImportFenceWin32HandleInfoKHR const& rhs ) const
   23728     {
   23729       return ( sType == rhs.sType )
   23730           && ( pNext == rhs.pNext )
   23731           && ( fence == rhs.fence )
   23732           && ( flags == rhs.flags )
   23733           && ( handleType == rhs.handleType )
   23734           && ( handle == rhs.handle )
   23735           && ( name == rhs.name );
   23736     }
   23737 
   23738     bool operator!=( ImportFenceWin32HandleInfoKHR const& rhs ) const
   23739     {
   23740       return !operator==( rhs );
   23741     }
   23742 
   23743   private:
   23744     StructureType sType = StructureType::eImportFenceWin32HandleInfoKHR;
   23745 
   23746   public:
   23747     const void* pNext = nullptr;
   23748     Fence fence;
   23749     FenceImportFlagsKHR flags;
   23750     ExternalFenceHandleTypeFlagBitsKHR handleType;
   23751     HANDLE handle;
   23752     LPCWSTR name;
   23753   };
   23754   static_assert( sizeof( ImportFenceWin32HandleInfoKHR ) == sizeof( VkImportFenceWin32HandleInfoKHR ), "struct and wrapper have different size!" );
   23755 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   23756 
   23757   struct ImportFenceFdInfoKHR
   23758   {
   23759     ImportFenceFdInfoKHR( Fence fence_ = Fence(), FenceImportFlagsKHR flags_ = FenceImportFlagsKHR(), ExternalFenceHandleTypeFlagBitsKHR handleType_ = ExternalFenceHandleTypeFlagBitsKHR::eOpaqueFd, int fd_ = 0 )
   23760       : fence( fence_ )
   23761       , flags( flags_ )
   23762       , handleType( handleType_ )
   23763       , fd( fd_ )
   23764     {
   23765     }
   23766 
   23767     ImportFenceFdInfoKHR( VkImportFenceFdInfoKHR const & rhs )
   23768     {
   23769       memcpy( this, &rhs, sizeof( ImportFenceFdInfoKHR ) );
   23770     }
   23771 
   23772     ImportFenceFdInfoKHR& operator=( VkImportFenceFdInfoKHR const & rhs )
   23773     {
   23774       memcpy( this, &rhs, sizeof( ImportFenceFdInfoKHR ) );
   23775       return *this;
   23776     }
   23777     ImportFenceFdInfoKHR& setPNext( const void* pNext_ )
   23778     {
   23779       pNext = pNext_;
   23780       return *this;
   23781     }
   23782 
   23783     ImportFenceFdInfoKHR& setFence( Fence fence_ )
   23784     {
   23785       fence = fence_;
   23786       return *this;
   23787     }
   23788 
   23789     ImportFenceFdInfoKHR& setFlags( FenceImportFlagsKHR flags_ )
   23790     {
   23791       flags = flags_;
   23792       return *this;
   23793     }
   23794 
   23795     ImportFenceFdInfoKHR& setHandleType( ExternalFenceHandleTypeFlagBitsKHR handleType_ )
   23796     {
   23797       handleType = handleType_;
   23798       return *this;
   23799     }
   23800 
   23801     ImportFenceFdInfoKHR& setFd( int fd_ )
   23802     {
   23803       fd = fd_;
   23804       return *this;
   23805     }
   23806 
   23807     operator const VkImportFenceFdInfoKHR&() const
   23808     {
   23809       return *reinterpret_cast<const VkImportFenceFdInfoKHR*>(this);
   23810     }
   23811 
   23812     bool operator==( ImportFenceFdInfoKHR const& rhs ) const
   23813     {
   23814       return ( sType == rhs.sType )
   23815           && ( pNext == rhs.pNext )
   23816           && ( fence == rhs.fence )
   23817           && ( flags == rhs.flags )
   23818           && ( handleType == rhs.handleType )
   23819           && ( fd == rhs.fd );
   23820     }
   23821 
   23822     bool operator!=( ImportFenceFdInfoKHR const& rhs ) const
   23823     {
   23824       return !operator==( rhs );
   23825     }
   23826 
   23827   private:
   23828     StructureType sType = StructureType::eImportFenceFdInfoKHR;
   23829 
   23830   public:
   23831     const void* pNext = nullptr;
   23832     Fence fence;
   23833     FenceImportFlagsKHR flags;
   23834     ExternalFenceHandleTypeFlagBitsKHR handleType;
   23835     int fd;
   23836   };
   23837   static_assert( sizeof( ImportFenceFdInfoKHR ) == sizeof( VkImportFenceFdInfoKHR ), "struct and wrapper have different size!" );
   23838 
   23839   enum class SurfaceCounterFlagBitsEXT
   23840   {
   23841     eVblank = VK_SURFACE_COUNTER_VBLANK_EXT
   23842   };
   23843 
   23844   using SurfaceCounterFlagsEXT = Flags<SurfaceCounterFlagBitsEXT, VkSurfaceCounterFlagsEXT>;
   23845 
   23846   VULKAN_HPP_INLINE SurfaceCounterFlagsEXT operator|( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 )
   23847   {
   23848     return SurfaceCounterFlagsEXT( bit0 ) | bit1;
   23849   }
   23850 
   23851   VULKAN_HPP_INLINE SurfaceCounterFlagsEXT operator~( SurfaceCounterFlagBitsEXT bits )
   23852   {
   23853     return ~( SurfaceCounterFlagsEXT( bits ) );
   23854   }
   23855 
   23856   template <> struct FlagTraits<SurfaceCounterFlagBitsEXT>
   23857   {
   23858     enum
   23859     {
   23860       allFlags = VkFlags(SurfaceCounterFlagBitsEXT::eVblank)
   23861     };
   23862   };
   23863 
   23864   struct SurfaceCapabilities2EXT
   23865   {
   23866     operator const VkSurfaceCapabilities2EXT&() const
   23867     {
   23868       return *reinterpret_cast<const VkSurfaceCapabilities2EXT*>(this);
   23869     }
   23870 
   23871     bool operator==( SurfaceCapabilities2EXT const& rhs ) const
   23872     {
   23873       return ( sType == rhs.sType )
   23874           && ( pNext == rhs.pNext )
   23875           && ( minImageCount == rhs.minImageCount )
   23876           && ( maxImageCount == rhs.maxImageCount )
   23877           && ( currentExtent == rhs.currentExtent )
   23878           && ( minImageExtent == rhs.minImageExtent )
   23879           && ( maxImageExtent == rhs.maxImageExtent )
   23880           && ( maxImageArrayLayers == rhs.maxImageArrayLayers )
   23881           && ( supportedTransforms == rhs.supportedTransforms )
   23882           && ( currentTransform == rhs.currentTransform )
   23883           && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha )
   23884           && ( supportedUsageFlags == rhs.supportedUsageFlags )
   23885           && ( supportedSurfaceCounters == rhs.supportedSurfaceCounters );
   23886     }
   23887 
   23888     bool operator!=( SurfaceCapabilities2EXT const& rhs ) const
   23889     {
   23890       return !operator==( rhs );
   23891     }
   23892 
   23893   private:
   23894     StructureType sType = StructureType::eSurfaceCapabilities2EXT;
   23895 
   23896   public:
   23897     void* pNext = nullptr;
   23898     uint32_t minImageCount;
   23899     uint32_t maxImageCount;
   23900     Extent2D currentExtent;
   23901     Extent2D minImageExtent;
   23902     Extent2D maxImageExtent;
   23903     uint32_t maxImageArrayLayers;
   23904     SurfaceTransformFlagsKHR supportedTransforms;
   23905     SurfaceTransformFlagBitsKHR currentTransform;
   23906     CompositeAlphaFlagsKHR supportedCompositeAlpha;
   23907     ImageUsageFlags supportedUsageFlags;
   23908     SurfaceCounterFlagsEXT supportedSurfaceCounters;
   23909   };
   23910   static_assert( sizeof( SurfaceCapabilities2EXT ) == sizeof( VkSurfaceCapabilities2EXT ), "struct and wrapper have different size!" );
   23911 
   23912   struct SwapchainCounterCreateInfoEXT
   23913   {
   23914     SwapchainCounterCreateInfoEXT( SurfaceCounterFlagsEXT surfaceCounters_ = SurfaceCounterFlagsEXT() )
   23915       : surfaceCounters( surfaceCounters_ )
   23916     {
   23917     }
   23918 
   23919     SwapchainCounterCreateInfoEXT( VkSwapchainCounterCreateInfoEXT const & rhs )
   23920     {
   23921       memcpy( this, &rhs, sizeof( SwapchainCounterCreateInfoEXT ) );
   23922     }
   23923 
   23924     SwapchainCounterCreateInfoEXT& operator=( VkSwapchainCounterCreateInfoEXT const & rhs )
   23925     {
   23926       memcpy( this, &rhs, sizeof( SwapchainCounterCreateInfoEXT ) );
   23927       return *this;
   23928     }
   23929     SwapchainCounterCreateInfoEXT& setPNext( const void* pNext_ )
   23930     {
   23931       pNext = pNext_;
   23932       return *this;
   23933     }
   23934 
   23935     SwapchainCounterCreateInfoEXT& setSurfaceCounters( SurfaceCounterFlagsEXT surfaceCounters_ )
   23936     {
   23937       surfaceCounters = surfaceCounters_;
   23938       return *this;
   23939     }
   23940 
   23941     operator const VkSwapchainCounterCreateInfoEXT&() const
   23942     {
   23943       return *reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(this);
   23944     }
   23945 
   23946     bool operator==( SwapchainCounterCreateInfoEXT const& rhs ) const
   23947     {
   23948       return ( sType == rhs.sType )
   23949           && ( pNext == rhs.pNext )
   23950           && ( surfaceCounters == rhs.surfaceCounters );
   23951     }
   23952 
   23953     bool operator!=( SwapchainCounterCreateInfoEXT const& rhs ) const
   23954     {
   23955       return !operator==( rhs );
   23956     }
   23957 
   23958   private:
   23959     StructureType sType = StructureType::eSwapchainCounterCreateInfoEXT;
   23960 
   23961   public:
   23962     const void* pNext = nullptr;
   23963     SurfaceCounterFlagsEXT surfaceCounters;
   23964   };
   23965   static_assert( sizeof( SwapchainCounterCreateInfoEXT ) == sizeof( VkSwapchainCounterCreateInfoEXT ), "struct and wrapper have different size!" );
   23966 
   23967   enum class DisplayPowerStateEXT
   23968   {
   23969     eOff = VK_DISPLAY_POWER_STATE_OFF_EXT,
   23970     eSuspend = VK_DISPLAY_POWER_STATE_SUSPEND_EXT,
   23971     eOn = VK_DISPLAY_POWER_STATE_ON_EXT
   23972   };
   23973 
   23974   struct DisplayPowerInfoEXT
   23975   {
   23976     DisplayPowerInfoEXT( DisplayPowerStateEXT powerState_ = DisplayPowerStateEXT::eOff )
   23977       : powerState( powerState_ )
   23978     {
   23979     }
   23980 
   23981     DisplayPowerInfoEXT( VkDisplayPowerInfoEXT const & rhs )
   23982     {
   23983       memcpy( this, &rhs, sizeof( DisplayPowerInfoEXT ) );
   23984     }
   23985 
   23986     DisplayPowerInfoEXT& operator=( VkDisplayPowerInfoEXT const & rhs )
   23987     {
   23988       memcpy( this, &rhs, sizeof( DisplayPowerInfoEXT ) );
   23989       return *this;
   23990     }
   23991     DisplayPowerInfoEXT& setPNext( const void* pNext_ )
   23992     {
   23993       pNext = pNext_;
   23994       return *this;
   23995     }
   23996 
   23997     DisplayPowerInfoEXT& setPowerState( DisplayPowerStateEXT powerState_ )
   23998     {
   23999       powerState = powerState_;
   24000       return *this;
   24001     }
   24002 
   24003     operator const VkDisplayPowerInfoEXT&() const
   24004     {
   24005       return *reinterpret_cast<const VkDisplayPowerInfoEXT*>(this);
   24006     }
   24007 
   24008     bool operator==( DisplayPowerInfoEXT const& rhs ) const
   24009     {
   24010       return ( sType == rhs.sType )
   24011           && ( pNext == rhs.pNext )
   24012           && ( powerState == rhs.powerState );
   24013     }
   24014 
   24015     bool operator!=( DisplayPowerInfoEXT const& rhs ) const
   24016     {
   24017       return !operator==( rhs );
   24018     }
   24019 
   24020   private:
   24021     StructureType sType = StructureType::eDisplayPowerInfoEXT;
   24022 
   24023   public:
   24024     const void* pNext = nullptr;
   24025     DisplayPowerStateEXT powerState;
   24026   };
   24027   static_assert( sizeof( DisplayPowerInfoEXT ) == sizeof( VkDisplayPowerInfoEXT ), "struct and wrapper have different size!" );
   24028 
   24029   enum class DeviceEventTypeEXT
   24030   {
   24031     eDisplayHotplug = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT
   24032   };
   24033 
   24034   struct DeviceEventInfoEXT
   24035   {
   24036     DeviceEventInfoEXT( DeviceEventTypeEXT deviceEvent_ = DeviceEventTypeEXT::eDisplayHotplug )
   24037       : deviceEvent( deviceEvent_ )
   24038     {
   24039     }
   24040 
   24041     DeviceEventInfoEXT( VkDeviceEventInfoEXT const & rhs )
   24042     {
   24043       memcpy( this, &rhs, sizeof( DeviceEventInfoEXT ) );
   24044     }
   24045 
   24046     DeviceEventInfoEXT& operator=( VkDeviceEventInfoEXT const & rhs )
   24047     {
   24048       memcpy( this, &rhs, sizeof( DeviceEventInfoEXT ) );
   24049       return *this;
   24050     }
   24051     DeviceEventInfoEXT& setPNext( const void* pNext_ )
   24052     {
   24053       pNext = pNext_;
   24054       return *this;
   24055     }
   24056 
   24057     DeviceEventInfoEXT& setDeviceEvent( DeviceEventTypeEXT deviceEvent_ )
   24058     {
   24059       deviceEvent = deviceEvent_;
   24060       return *this;
   24061     }
   24062 
   24063     operator const VkDeviceEventInfoEXT&() const
   24064     {
   24065       return *reinterpret_cast<const VkDeviceEventInfoEXT*>(this);
   24066     }
   24067 
   24068     bool operator==( DeviceEventInfoEXT const& rhs ) const
   24069     {
   24070       return ( sType == rhs.sType )
   24071           && ( pNext == rhs.pNext )
   24072           && ( deviceEvent == rhs.deviceEvent );
   24073     }
   24074 
   24075     bool operator!=( DeviceEventInfoEXT const& rhs ) const
   24076     {
   24077       return !operator==( rhs );
   24078     }
   24079 
   24080   private:
   24081     StructureType sType = StructureType::eDeviceEventInfoEXT;
   24082 
   24083   public:
   24084     const void* pNext = nullptr;
   24085     DeviceEventTypeEXT deviceEvent;
   24086   };
   24087   static_assert( sizeof( DeviceEventInfoEXT ) == sizeof( VkDeviceEventInfoEXT ), "struct and wrapper have different size!" );
   24088 
   24089   enum class DisplayEventTypeEXT
   24090   {
   24091     eFirstPixelOut = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT
   24092   };
   24093 
   24094   struct DisplayEventInfoEXT
   24095   {
   24096     DisplayEventInfoEXT( DisplayEventTypeEXT displayEvent_ = DisplayEventTypeEXT::eFirstPixelOut )
   24097       : displayEvent( displayEvent_ )
   24098     {
   24099     }
   24100 
   24101     DisplayEventInfoEXT( VkDisplayEventInfoEXT const & rhs )
   24102     {
   24103       memcpy( this, &rhs, sizeof( DisplayEventInfoEXT ) );
   24104     }
   24105 
   24106     DisplayEventInfoEXT& operator=( VkDisplayEventInfoEXT const & rhs )
   24107     {
   24108       memcpy( this, &rhs, sizeof( DisplayEventInfoEXT ) );
   24109       return *this;
   24110     }
   24111     DisplayEventInfoEXT& setPNext( const void* pNext_ )
   24112     {
   24113       pNext = pNext_;
   24114       return *this;
   24115     }
   24116 
   24117     DisplayEventInfoEXT& setDisplayEvent( DisplayEventTypeEXT displayEvent_ )
   24118     {
   24119       displayEvent = displayEvent_;
   24120       return *this;
   24121     }
   24122 
   24123     operator const VkDisplayEventInfoEXT&() const
   24124     {
   24125       return *reinterpret_cast<const VkDisplayEventInfoEXT*>(this);
   24126     }
   24127 
   24128     bool operator==( DisplayEventInfoEXT const& rhs ) const
   24129     {
   24130       return ( sType == rhs.sType )
   24131           && ( pNext == rhs.pNext )
   24132           && ( displayEvent == rhs.displayEvent );
   24133     }
   24134 
   24135     bool operator!=( DisplayEventInfoEXT const& rhs ) const
   24136     {
   24137       return !operator==( rhs );
   24138     }
   24139 
   24140   private:
   24141     StructureType sType = StructureType::eDisplayEventInfoEXT;
   24142 
   24143   public:
   24144     const void* pNext = nullptr;
   24145     DisplayEventTypeEXT displayEvent;
   24146   };
   24147   static_assert( sizeof( DisplayEventInfoEXT ) == sizeof( VkDisplayEventInfoEXT ), "struct and wrapper have different size!" );
   24148 
   24149   enum class PeerMemoryFeatureFlagBitsKHX
   24150   {
   24151     eCopySrc = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX,
   24152     eCopyDst = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX,
   24153     eGenericSrc = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHX,
   24154     eGenericDst = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX
   24155   };
   24156 
   24157   using PeerMemoryFeatureFlagsKHX = Flags<PeerMemoryFeatureFlagBitsKHX, VkPeerMemoryFeatureFlagsKHX>;
   24158 
   24159   VULKAN_HPP_INLINE PeerMemoryFeatureFlagsKHX operator|( PeerMemoryFeatureFlagBitsKHX bit0, PeerMemoryFeatureFlagBitsKHX bit1 )
   24160   {
   24161     return PeerMemoryFeatureFlagsKHX( bit0 ) | bit1;
   24162   }
   24163 
   24164   VULKAN_HPP_INLINE PeerMemoryFeatureFlagsKHX operator~( PeerMemoryFeatureFlagBitsKHX bits )
   24165   {
   24166     return ~( PeerMemoryFeatureFlagsKHX( bits ) );
   24167   }
   24168 
   24169   template <> struct FlagTraits<PeerMemoryFeatureFlagBitsKHX>
   24170   {
   24171     enum
   24172     {
   24173       allFlags = VkFlags(PeerMemoryFeatureFlagBitsKHX::eCopySrc) | VkFlags(PeerMemoryFeatureFlagBitsKHX::eCopyDst) | VkFlags(PeerMemoryFeatureFlagBitsKHX::eGenericSrc) | VkFlags(PeerMemoryFeatureFlagBitsKHX::eGenericDst)
   24174     };
   24175   };
   24176 
   24177   enum class MemoryAllocateFlagBitsKHX
   24178   {
   24179     eDeviceMask = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX
   24180   };
   24181 
   24182   using MemoryAllocateFlagsKHX = Flags<MemoryAllocateFlagBitsKHX, VkMemoryAllocateFlagsKHX>;
   24183 
   24184   VULKAN_HPP_INLINE MemoryAllocateFlagsKHX operator|( MemoryAllocateFlagBitsKHX bit0, MemoryAllocateFlagBitsKHX bit1 )
   24185   {
   24186     return MemoryAllocateFlagsKHX( bit0 ) | bit1;
   24187   }
   24188 
   24189   VULKAN_HPP_INLINE MemoryAllocateFlagsKHX operator~( MemoryAllocateFlagBitsKHX bits )
   24190   {
   24191     return ~( MemoryAllocateFlagsKHX( bits ) );
   24192   }
   24193 
   24194   template <> struct FlagTraits<MemoryAllocateFlagBitsKHX>
   24195   {
   24196     enum
   24197     {
   24198       allFlags = VkFlags(MemoryAllocateFlagBitsKHX::eDeviceMask)
   24199     };
   24200   };
   24201 
   24202   struct MemoryAllocateFlagsInfoKHX
   24203   {
   24204     MemoryAllocateFlagsInfoKHX( MemoryAllocateFlagsKHX flags_ = MemoryAllocateFlagsKHX(), uint32_t deviceMask_ = 0 )
   24205       : flags( flags_ )
   24206       , deviceMask( deviceMask_ )
   24207     {
   24208     }
   24209 
   24210     MemoryAllocateFlagsInfoKHX( VkMemoryAllocateFlagsInfoKHX const & rhs )
   24211     {
   24212       memcpy( this, &rhs, sizeof( MemoryAllocateFlagsInfoKHX ) );
   24213     }
   24214 
   24215     MemoryAllocateFlagsInfoKHX& operator=( VkMemoryAllocateFlagsInfoKHX const & rhs )
   24216     {
   24217       memcpy( this, &rhs, sizeof( MemoryAllocateFlagsInfoKHX ) );
   24218       return *this;
   24219     }
   24220     MemoryAllocateFlagsInfoKHX& setPNext( const void* pNext_ )
   24221     {
   24222       pNext = pNext_;
   24223       return *this;
   24224     }
   24225 
   24226     MemoryAllocateFlagsInfoKHX& setFlags( MemoryAllocateFlagsKHX flags_ )
   24227     {
   24228       flags = flags_;
   24229       return *this;
   24230     }
   24231 
   24232     MemoryAllocateFlagsInfoKHX& setDeviceMask( uint32_t deviceMask_ )
   24233     {
   24234       deviceMask = deviceMask_;
   24235       return *this;
   24236     }
   24237 
   24238     operator const VkMemoryAllocateFlagsInfoKHX&() const
   24239     {
   24240       return *reinterpret_cast<const VkMemoryAllocateFlagsInfoKHX*>(this);
   24241     }
   24242 
   24243     bool operator==( MemoryAllocateFlagsInfoKHX const& rhs ) const
   24244     {
   24245       return ( sType == rhs.sType )
   24246           && ( pNext == rhs.pNext )
   24247           && ( flags == rhs.flags )
   24248           && ( deviceMask == rhs.deviceMask );
   24249     }
   24250 
   24251     bool operator!=( MemoryAllocateFlagsInfoKHX const& rhs ) const
   24252     {
   24253       return !operator==( rhs );
   24254     }
   24255 
   24256   private:
   24257     StructureType sType = StructureType::eMemoryAllocateFlagsInfoKHX;
   24258 
   24259   public:
   24260     const void* pNext = nullptr;
   24261     MemoryAllocateFlagsKHX flags;
   24262     uint32_t deviceMask;
   24263   };
   24264   static_assert( sizeof( MemoryAllocateFlagsInfoKHX ) == sizeof( VkMemoryAllocateFlagsInfoKHX ), "struct and wrapper have different size!" );
   24265 
   24266   enum class DeviceGroupPresentModeFlagBitsKHX
   24267   {
   24268     eLocal = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX,
   24269     eRemote = VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX,
   24270     eSum = VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX,
   24271     eLocalMultiDevice = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX
   24272   };
   24273 
   24274   using DeviceGroupPresentModeFlagsKHX = Flags<DeviceGroupPresentModeFlagBitsKHX, VkDeviceGroupPresentModeFlagsKHX>;
   24275 
   24276   VULKAN_HPP_INLINE DeviceGroupPresentModeFlagsKHX operator|( DeviceGroupPresentModeFlagBitsKHX bit0, DeviceGroupPresentModeFlagBitsKHX bit1 )
   24277   {
   24278     return DeviceGroupPresentModeFlagsKHX( bit0 ) | bit1;
   24279   }
   24280 
   24281   VULKAN_HPP_INLINE DeviceGroupPresentModeFlagsKHX operator~( DeviceGroupPresentModeFlagBitsKHX bits )
   24282   {
   24283     return ~( DeviceGroupPresentModeFlagsKHX( bits ) );
   24284   }
   24285 
   24286   template <> struct FlagTraits<DeviceGroupPresentModeFlagBitsKHX>
   24287   {
   24288     enum
   24289     {
   24290       allFlags = VkFlags(DeviceGroupPresentModeFlagBitsKHX::eLocal) | VkFlags(DeviceGroupPresentModeFlagBitsKHX::eRemote) | VkFlags(DeviceGroupPresentModeFlagBitsKHX::eSum) | VkFlags(DeviceGroupPresentModeFlagBitsKHX::eLocalMultiDevice)
   24291     };
   24292   };
   24293 
   24294   struct DeviceGroupPresentCapabilitiesKHX
   24295   {
   24296     operator const VkDeviceGroupPresentCapabilitiesKHX&() const
   24297     {
   24298       return *reinterpret_cast<const VkDeviceGroupPresentCapabilitiesKHX*>(this);
   24299     }
   24300 
   24301     bool operator==( DeviceGroupPresentCapabilitiesKHX const& rhs ) const
   24302     {
   24303       return ( sType == rhs.sType )
   24304           && ( pNext == rhs.pNext )
   24305           && ( memcmp( presentMask, rhs.presentMask, VK_MAX_DEVICE_GROUP_SIZE_KHX * sizeof( uint32_t ) ) == 0 )
   24306           && ( modes == rhs.modes );
   24307     }
   24308 
   24309     bool operator!=( DeviceGroupPresentCapabilitiesKHX const& rhs ) const
   24310     {
   24311       return !operator==( rhs );
   24312     }
   24313 
   24314   private:
   24315     StructureType sType = StructureType::eDeviceGroupPresentCapabilitiesKHX;
   24316 
   24317   public:
   24318     const void* pNext = nullptr;
   24319     uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE_KHX];
   24320     DeviceGroupPresentModeFlagsKHX modes;
   24321   };
   24322   static_assert( sizeof( DeviceGroupPresentCapabilitiesKHX ) == sizeof( VkDeviceGroupPresentCapabilitiesKHX ), "struct and wrapper have different size!" );
   24323 
   24324   struct DeviceGroupPresentInfoKHX
   24325   {
   24326     DeviceGroupPresentInfoKHX( uint32_t swapchainCount_ = 0, const uint32_t* pDeviceMasks_ = nullptr, DeviceGroupPresentModeFlagBitsKHX mode_ = DeviceGroupPresentModeFlagBitsKHX::eLocal )
   24327       : swapchainCount( swapchainCount_ )
   24328       , pDeviceMasks( pDeviceMasks_ )
   24329       , mode( mode_ )
   24330     {
   24331     }
   24332 
   24333     DeviceGroupPresentInfoKHX( VkDeviceGroupPresentInfoKHX const & rhs )
   24334     {
   24335       memcpy( this, &rhs, sizeof( DeviceGroupPresentInfoKHX ) );
   24336     }
   24337 
   24338     DeviceGroupPresentInfoKHX& operator=( VkDeviceGroupPresentInfoKHX const & rhs )
   24339     {
   24340       memcpy( this, &rhs, sizeof( DeviceGroupPresentInfoKHX ) );
   24341       return *this;
   24342     }
   24343     DeviceGroupPresentInfoKHX& setPNext( const void* pNext_ )
   24344     {
   24345       pNext = pNext_;
   24346       return *this;
   24347     }
   24348 
   24349     DeviceGroupPresentInfoKHX& setSwapchainCount( uint32_t swapchainCount_ )
   24350     {
   24351       swapchainCount = swapchainCount_;
   24352       return *this;
   24353     }
   24354 
   24355     DeviceGroupPresentInfoKHX& setPDeviceMasks( const uint32_t* pDeviceMasks_ )
   24356     {
   24357       pDeviceMasks = pDeviceMasks_;
   24358       return *this;
   24359     }
   24360 
   24361     DeviceGroupPresentInfoKHX& setMode( DeviceGroupPresentModeFlagBitsKHX mode_ )
   24362     {
   24363       mode = mode_;
   24364       return *this;
   24365     }
   24366 
   24367     operator const VkDeviceGroupPresentInfoKHX&() const
   24368     {
   24369       return *reinterpret_cast<const VkDeviceGroupPresentInfoKHX*>(this);
   24370     }
   24371 
   24372     bool operator==( DeviceGroupPresentInfoKHX const& rhs ) const
   24373     {
   24374       return ( sType == rhs.sType )
   24375           && ( pNext == rhs.pNext )
   24376           && ( swapchainCount == rhs.swapchainCount )
   24377           && ( pDeviceMasks == rhs.pDeviceMasks )
   24378           && ( mode == rhs.mode );
   24379     }
   24380 
   24381     bool operator!=( DeviceGroupPresentInfoKHX const& rhs ) const
   24382     {
   24383       return !operator==( rhs );
   24384     }
   24385 
   24386   private:
   24387     StructureType sType = StructureType::eDeviceGroupPresentInfoKHX;
   24388 
   24389   public:
   24390     const void* pNext = nullptr;
   24391     uint32_t swapchainCount;
   24392     const uint32_t* pDeviceMasks;
   24393     DeviceGroupPresentModeFlagBitsKHX mode;
   24394   };
   24395   static_assert( sizeof( DeviceGroupPresentInfoKHX ) == sizeof( VkDeviceGroupPresentInfoKHX ), "struct and wrapper have different size!" );
   24396 
   24397   struct DeviceGroupSwapchainCreateInfoKHX
   24398   {
   24399     DeviceGroupSwapchainCreateInfoKHX( DeviceGroupPresentModeFlagsKHX modes_ = DeviceGroupPresentModeFlagsKHX() )
   24400       : modes( modes_ )
   24401     {
   24402     }
   24403 
   24404     DeviceGroupSwapchainCreateInfoKHX( VkDeviceGroupSwapchainCreateInfoKHX const & rhs )
   24405     {
   24406       memcpy( this, &rhs, sizeof( DeviceGroupSwapchainCreateInfoKHX ) );
   24407     }
   24408 
   24409     DeviceGroupSwapchainCreateInfoKHX& operator=( VkDeviceGroupSwapchainCreateInfoKHX const & rhs )
   24410     {
   24411       memcpy( this, &rhs, sizeof( DeviceGroupSwapchainCreateInfoKHX ) );
   24412       return *this;
   24413     }
   24414     DeviceGroupSwapchainCreateInfoKHX& setPNext( const void* pNext_ )
   24415     {
   24416       pNext = pNext_;
   24417       return *this;
   24418     }
   24419 
   24420     DeviceGroupSwapchainCreateInfoKHX& setModes( DeviceGroupPresentModeFlagsKHX modes_ )
   24421     {
   24422       modes = modes_;
   24423       return *this;
   24424     }
   24425 
   24426     operator const VkDeviceGroupSwapchainCreateInfoKHX&() const
   24427     {
   24428       return *reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHX*>(this);
   24429     }
   24430 
   24431     bool operator==( DeviceGroupSwapchainCreateInfoKHX const& rhs ) const
   24432     {
   24433       return ( sType == rhs.sType )
   24434           && ( pNext == rhs.pNext )
   24435           && ( modes == rhs.modes );
   24436     }
   24437 
   24438     bool operator!=( DeviceGroupSwapchainCreateInfoKHX const& rhs ) const
   24439     {
   24440       return !operator==( rhs );
   24441     }
   24442 
   24443   private:
   24444     StructureType sType = StructureType::eDeviceGroupSwapchainCreateInfoKHX;
   24445 
   24446   public:
   24447     const void* pNext = nullptr;
   24448     DeviceGroupPresentModeFlagsKHX modes;
   24449   };
   24450   static_assert( sizeof( DeviceGroupSwapchainCreateInfoKHX ) == sizeof( VkDeviceGroupSwapchainCreateInfoKHX ), "struct and wrapper have different size!" );
   24451 
   24452   enum class SwapchainCreateFlagBitsKHR
   24453   {
   24454     eBindSfrKHX = VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX
   24455   };
   24456 
   24457   using SwapchainCreateFlagsKHR = Flags<SwapchainCreateFlagBitsKHR, VkSwapchainCreateFlagsKHR>;
   24458 
   24459   VULKAN_HPP_INLINE SwapchainCreateFlagsKHR operator|( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 )
   24460   {
   24461     return SwapchainCreateFlagsKHR( bit0 ) | bit1;
   24462   }
   24463 
   24464   VULKAN_HPP_INLINE SwapchainCreateFlagsKHR operator~( SwapchainCreateFlagBitsKHR bits )
   24465   {
   24466     return ~( SwapchainCreateFlagsKHR( bits ) );
   24467   }
   24468 
   24469   template <> struct FlagTraits<SwapchainCreateFlagBitsKHR>
   24470   {
   24471     enum
   24472     {
   24473       allFlags = VkFlags(SwapchainCreateFlagBitsKHR::eBindSfrKHX)
   24474     };
   24475   };
   24476 
   24477   struct SwapchainCreateInfoKHR
   24478   {
   24479     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() )
   24480       : flags( flags_ )
   24481       , surface( surface_ )
   24482       , minImageCount( minImageCount_ )
   24483       , imageFormat( imageFormat_ )
   24484       , imageColorSpace( imageColorSpace_ )
   24485       , imageExtent( imageExtent_ )
   24486       , imageArrayLayers( imageArrayLayers_ )
   24487       , imageUsage( imageUsage_ )
   24488       , imageSharingMode( imageSharingMode_ )
   24489       , queueFamilyIndexCount( queueFamilyIndexCount_ )
   24490       , pQueueFamilyIndices( pQueueFamilyIndices_ )
   24491       , preTransform( preTransform_ )
   24492       , compositeAlpha( compositeAlpha_ )
   24493       , presentMode( presentMode_ )
   24494       , clipped( clipped_ )
   24495       , oldSwapchain( oldSwapchain_ )
   24496     {
   24497     }
   24498 
   24499     SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs )
   24500     {
   24501       memcpy( this, &rhs, sizeof( SwapchainCreateInfoKHR ) );
   24502     }
   24503 
   24504     SwapchainCreateInfoKHR& operator=( VkSwapchainCreateInfoKHR const & rhs )
   24505     {
   24506       memcpy( this, &rhs, sizeof( SwapchainCreateInfoKHR ) );
   24507       return *this;
   24508     }
   24509     SwapchainCreateInfoKHR& setPNext( const void* pNext_ )
   24510     {
   24511       pNext = pNext_;
   24512       return *this;
   24513     }
   24514 
   24515     SwapchainCreateInfoKHR& setFlags( SwapchainCreateFlagsKHR flags_ )
   24516     {
   24517       flags = flags_;
   24518       return *this;
   24519     }
   24520 
   24521     SwapchainCreateInfoKHR& setSurface( SurfaceKHR surface_ )
   24522     {
   24523       surface = surface_;
   24524       return *this;
   24525     }
   24526 
   24527     SwapchainCreateInfoKHR& setMinImageCount( uint32_t minImageCount_ )
   24528     {
   24529       minImageCount = minImageCount_;
   24530       return *this;
   24531     }
   24532 
   24533     SwapchainCreateInfoKHR& setImageFormat( Format imageFormat_ )
   24534     {
   24535       imageFormat = imageFormat_;
   24536       return *this;
   24537     }
   24538 
   24539     SwapchainCreateInfoKHR& setImageColorSpace( ColorSpaceKHR imageColorSpace_ )
   24540     {
   24541       imageColorSpace = imageColorSpace_;
   24542       return *this;
   24543     }
   24544 
   24545     SwapchainCreateInfoKHR& setImageExtent( Extent2D imageExtent_ )
   24546     {
   24547       imageExtent = imageExtent_;
   24548       return *this;
   24549     }
   24550 
   24551     SwapchainCreateInfoKHR& setImageArrayLayers( uint32_t imageArrayLayers_ )
   24552     {
   24553       imageArrayLayers = imageArrayLayers_;
   24554       return *this;
   24555     }
   24556 
   24557     SwapchainCreateInfoKHR& setImageUsage( ImageUsageFlags imageUsage_ )
   24558     {
   24559       imageUsage = imageUsage_;
   24560       return *this;
   24561     }
   24562 
   24563     SwapchainCreateInfoKHR& setImageSharingMode( SharingMode imageSharingMode_ )
   24564     {
   24565       imageSharingMode = imageSharingMode_;
   24566       return *this;
   24567     }
   24568 
   24569     SwapchainCreateInfoKHR& setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ )
   24570     {
   24571       queueFamilyIndexCount = queueFamilyIndexCount_;
   24572       return *this;
   24573     }
   24574 
   24575     SwapchainCreateInfoKHR& setPQueueFamilyIndices( const uint32_t* pQueueFamilyIndices_ )
   24576     {
   24577       pQueueFamilyIndices = pQueueFamilyIndices_;
   24578       return *this;
   24579     }
   24580 
   24581     SwapchainCreateInfoKHR& setPreTransform( SurfaceTransformFlagBitsKHR preTransform_ )
   24582     {
   24583       preTransform = preTransform_;
   24584       return *this;
   24585     }
   24586 
   24587     SwapchainCreateInfoKHR& setCompositeAlpha( CompositeAlphaFlagBitsKHR compositeAlpha_ )
   24588     {
   24589       compositeAlpha = compositeAlpha_;
   24590       return *this;
   24591     }
   24592 
   24593     SwapchainCreateInfoKHR& setPresentMode( PresentModeKHR presentMode_ )
   24594     {
   24595       presentMode = presentMode_;
   24596       return *this;
   24597     }
   24598 
   24599     SwapchainCreateInfoKHR& setClipped( Bool32 clipped_ )
   24600     {
   24601       clipped = clipped_;
   24602       return *this;
   24603     }
   24604 
   24605     SwapchainCreateInfoKHR& setOldSwapchain( SwapchainKHR oldSwapchain_ )
   24606     {
   24607       oldSwapchain = oldSwapchain_;
   24608       return *this;
   24609     }
   24610 
   24611     operator const VkSwapchainCreateInfoKHR&() const
   24612     {
   24613       return *reinterpret_cast<const VkSwapchainCreateInfoKHR*>(this);
   24614     }
   24615 
   24616     bool operator==( SwapchainCreateInfoKHR const& rhs ) const
   24617     {
   24618       return ( sType == rhs.sType )
   24619           && ( pNext == rhs.pNext )
   24620           && ( flags == rhs.flags )
   24621           && ( surface == rhs.surface )
   24622           && ( minImageCount == rhs.minImageCount )
   24623           && ( imageFormat == rhs.imageFormat )
   24624           && ( imageColorSpace == rhs.imageColorSpace )
   24625           && ( imageExtent == rhs.imageExtent )
   24626           && ( imageArrayLayers == rhs.imageArrayLayers )
   24627           && ( imageUsage == rhs.imageUsage )
   24628           && ( imageSharingMode == rhs.imageSharingMode )
   24629           && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount )
   24630           && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices )
   24631           && ( preTransform == rhs.preTransform )
   24632           && ( compositeAlpha == rhs.compositeAlpha )
   24633           && ( presentMode == rhs.presentMode )
   24634           && ( clipped == rhs.clipped )
   24635           && ( oldSwapchain == rhs.oldSwapchain );
   24636     }
   24637 
   24638     bool operator!=( SwapchainCreateInfoKHR const& rhs ) const
   24639     {
   24640       return !operator==( rhs );
   24641     }
   24642 
   24643   private:
   24644     StructureType sType = StructureType::eSwapchainCreateInfoKHR;
   24645 
   24646   public:
   24647     const void* pNext = nullptr;
   24648     SwapchainCreateFlagsKHR flags;
   24649     SurfaceKHR surface;
   24650     uint32_t minImageCount;
   24651     Format imageFormat;
   24652     ColorSpaceKHR imageColorSpace;
   24653     Extent2D imageExtent;
   24654     uint32_t imageArrayLayers;
   24655     ImageUsageFlags imageUsage;
   24656     SharingMode imageSharingMode;
   24657     uint32_t queueFamilyIndexCount;
   24658     const uint32_t* pQueueFamilyIndices;
   24659     SurfaceTransformFlagBitsKHR preTransform;
   24660     CompositeAlphaFlagBitsKHR compositeAlpha;
   24661     PresentModeKHR presentMode;
   24662     Bool32 clipped;
   24663     SwapchainKHR oldSwapchain;
   24664   };
   24665   static_assert( sizeof( SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ), "struct and wrapper have different size!" );
   24666 
   24667   enum class ViewportCoordinateSwizzleNV
   24668   {
   24669     ePositiveX = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV,
   24670     eNegativeX = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV,
   24671     ePositiveY = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV,
   24672     eNegativeY = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV,
   24673     ePositiveZ = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV,
   24674     eNegativeZ = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV,
   24675     ePositiveW = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV,
   24676     eNegativeW = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV
   24677   };
   24678 
   24679   struct ViewportSwizzleNV
   24680   {
   24681     ViewportSwizzleNV( ViewportCoordinateSwizzleNV x_ = ViewportCoordinateSwizzleNV::ePositiveX, ViewportCoordinateSwizzleNV y_ = ViewportCoordinateSwizzleNV::ePositiveX, ViewportCoordinateSwizzleNV z_ = ViewportCoordinateSwizzleNV::ePositiveX, ViewportCoordinateSwizzleNV w_ = ViewportCoordinateSwizzleNV::ePositiveX )
   24682       : x( x_ )
   24683       , y( y_ )
   24684       , z( z_ )
   24685       , w( w_ )
   24686     {
   24687     }
   24688 
   24689     ViewportSwizzleNV( VkViewportSwizzleNV const & rhs )
   24690     {
   24691       memcpy( this, &rhs, sizeof( ViewportSwizzleNV ) );
   24692     }
   24693 
   24694     ViewportSwizzleNV& operator=( VkViewportSwizzleNV const & rhs )
   24695     {
   24696       memcpy( this, &rhs, sizeof( ViewportSwizzleNV ) );
   24697       return *this;
   24698     }
   24699     ViewportSwizzleNV& setX( ViewportCoordinateSwizzleNV x_ )
   24700     {
   24701       x = x_;
   24702       return *this;
   24703     }
   24704 
   24705     ViewportSwizzleNV& setY( ViewportCoordinateSwizzleNV y_ )
   24706     {
   24707       y = y_;
   24708       return *this;
   24709     }
   24710 
   24711     ViewportSwizzleNV& setZ( ViewportCoordinateSwizzleNV z_ )
   24712     {
   24713       z = z_;
   24714       return *this;
   24715     }
   24716 
   24717     ViewportSwizzleNV& setW( ViewportCoordinateSwizzleNV w_ )
   24718     {
   24719       w = w_;
   24720       return *this;
   24721     }
   24722 
   24723     operator const VkViewportSwizzleNV&() const
   24724     {
   24725       return *reinterpret_cast<const VkViewportSwizzleNV*>(this);
   24726     }
   24727 
   24728     bool operator==( ViewportSwizzleNV const& rhs ) const
   24729     {
   24730       return ( x == rhs.x )
   24731           && ( y == rhs.y )
   24732           && ( z == rhs.z )
   24733           && ( w == rhs.w );
   24734     }
   24735 
   24736     bool operator!=( ViewportSwizzleNV const& rhs ) const
   24737     {
   24738       return !operator==( rhs );
   24739     }
   24740 
   24741     ViewportCoordinateSwizzleNV x;
   24742     ViewportCoordinateSwizzleNV y;
   24743     ViewportCoordinateSwizzleNV z;
   24744     ViewportCoordinateSwizzleNV w;
   24745   };
   24746   static_assert( sizeof( ViewportSwizzleNV ) == sizeof( VkViewportSwizzleNV ), "struct and wrapper have different size!" );
   24747 
   24748   struct PipelineViewportSwizzleStateCreateInfoNV
   24749   {
   24750     PipelineViewportSwizzleStateCreateInfoNV( PipelineViewportSwizzleStateCreateFlagsNV flags_ = PipelineViewportSwizzleStateCreateFlagsNV(), uint32_t viewportCount_ = 0, const ViewportSwizzleNV* pViewportSwizzles_ = nullptr )
   24751       : flags( flags_ )
   24752       , viewportCount( viewportCount_ )
   24753       , pViewportSwizzles( pViewportSwizzles_ )
   24754     {
   24755     }
   24756 
   24757     PipelineViewportSwizzleStateCreateInfoNV( VkPipelineViewportSwizzleStateCreateInfoNV const & rhs )
   24758     {
   24759       memcpy( this, &rhs, sizeof( PipelineViewportSwizzleStateCreateInfoNV ) );
   24760     }
   24761 
   24762     PipelineViewportSwizzleStateCreateInfoNV& operator=( VkPipelineViewportSwizzleStateCreateInfoNV const & rhs )
   24763     {
   24764       memcpy( this, &rhs, sizeof( PipelineViewportSwizzleStateCreateInfoNV ) );
   24765       return *this;
   24766     }
   24767     PipelineViewportSwizzleStateCreateInfoNV& setPNext( const void* pNext_ )
   24768     {
   24769       pNext = pNext_;
   24770       return *this;
   24771     }
   24772 
   24773     PipelineViewportSwizzleStateCreateInfoNV& setFlags( PipelineViewportSwizzleStateCreateFlagsNV flags_ )
   24774     {
   24775       flags = flags_;
   24776       return *this;
   24777     }
   24778 
   24779     PipelineViewportSwizzleStateCreateInfoNV& setViewportCount( uint32_t viewportCount_ )
   24780     {
   24781       viewportCount = viewportCount_;
   24782       return *this;
   24783     }
   24784 
   24785     PipelineViewportSwizzleStateCreateInfoNV& setPViewportSwizzles( const ViewportSwizzleNV* pViewportSwizzles_ )
   24786     {
   24787       pViewportSwizzles = pViewportSwizzles_;
   24788       return *this;
   24789     }
   24790 
   24791     operator const VkPipelineViewportSwizzleStateCreateInfoNV&() const
   24792     {
   24793       return *reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(this);
   24794     }
   24795 
   24796     bool operator==( PipelineViewportSwizzleStateCreateInfoNV const& rhs ) const
   24797     {
   24798       return ( sType == rhs.sType )
   24799           && ( pNext == rhs.pNext )
   24800           && ( flags == rhs.flags )
   24801           && ( viewportCount == rhs.viewportCount )
   24802           && ( pViewportSwizzles == rhs.pViewportSwizzles );
   24803     }
   24804 
   24805     bool operator!=( PipelineViewportSwizzleStateCreateInfoNV const& rhs ) const
   24806     {
   24807       return !operator==( rhs );
   24808     }
   24809 
   24810   private:
   24811     StructureType sType = StructureType::ePipelineViewportSwizzleStateCreateInfoNV;
   24812 
   24813   public:
   24814     const void* pNext = nullptr;
   24815     PipelineViewportSwizzleStateCreateFlagsNV flags;
   24816     uint32_t viewportCount;
   24817     const ViewportSwizzleNV* pViewportSwizzles;
   24818   };
   24819   static_assert( sizeof( PipelineViewportSwizzleStateCreateInfoNV ) == sizeof( VkPipelineViewportSwizzleStateCreateInfoNV ), "struct and wrapper have different size!" );
   24820 
   24821   enum class DiscardRectangleModeEXT
   24822   {
   24823     eInclusive = VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT,
   24824     eExclusive = VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT
   24825   };
   24826 
   24827   struct PipelineDiscardRectangleStateCreateInfoEXT
   24828   {
   24829     PipelineDiscardRectangleStateCreateInfoEXT( PipelineDiscardRectangleStateCreateFlagsEXT flags_ = PipelineDiscardRectangleStateCreateFlagsEXT(), DiscardRectangleModeEXT discardRectangleMode_ = DiscardRectangleModeEXT::eInclusive, uint32_t discardRectangleCount_ = 0, const Rect2D* pDiscardRectangles_ = nullptr )
   24830       : flags( flags_ )
   24831       , discardRectangleMode( discardRectangleMode_ )
   24832       , discardRectangleCount( discardRectangleCount_ )
   24833       , pDiscardRectangles( pDiscardRectangles_ )
   24834     {
   24835     }
   24836 
   24837     PipelineDiscardRectangleStateCreateInfoEXT( VkPipelineDiscardRectangleStateCreateInfoEXT const & rhs )
   24838     {
   24839       memcpy( this, &rhs, sizeof( PipelineDiscardRectangleStateCreateInfoEXT ) );
   24840     }
   24841 
   24842     PipelineDiscardRectangleStateCreateInfoEXT& operator=( VkPipelineDiscardRectangleStateCreateInfoEXT const & rhs )
   24843     {
   24844       memcpy( this, &rhs, sizeof( PipelineDiscardRectangleStateCreateInfoEXT ) );
   24845       return *this;
   24846     }
   24847     PipelineDiscardRectangleStateCreateInfoEXT& setPNext( const void* pNext_ )
   24848     {
   24849       pNext = pNext_;
   24850       return *this;
   24851     }
   24852 
   24853     PipelineDiscardRectangleStateCreateInfoEXT& setFlags( PipelineDiscardRectangleStateCreateFlagsEXT flags_ )
   24854     {
   24855       flags = flags_;
   24856       return *this;
   24857     }
   24858 
   24859     PipelineDiscardRectangleStateCreateInfoEXT& setDiscardRectangleMode( DiscardRectangleModeEXT discardRectangleMode_ )
   24860     {
   24861       discardRectangleMode = discardRectangleMode_;
   24862       return *this;
   24863     }
   24864 
   24865     PipelineDiscardRectangleStateCreateInfoEXT& setDiscardRectangleCount( uint32_t discardRectangleCount_ )
   24866     {
   24867       discardRectangleCount = discardRectangleCount_;
   24868       return *this;
   24869     }
   24870 
   24871     PipelineDiscardRectangleStateCreateInfoEXT& setPDiscardRectangles( const Rect2D* pDiscardRectangles_ )
   24872     {
   24873       pDiscardRectangles = pDiscardRectangles_;
   24874       return *this;
   24875     }
   24876 
   24877     operator const VkPipelineDiscardRectangleStateCreateInfoEXT&() const
   24878     {
   24879       return *reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(this);
   24880     }
   24881 
   24882     bool operator==( PipelineDiscardRectangleStateCreateInfoEXT const& rhs ) const
   24883     {
   24884       return ( sType == rhs.sType )
   24885           && ( pNext == rhs.pNext )
   24886           && ( flags == rhs.flags )
   24887           && ( discardRectangleMode == rhs.discardRectangleMode )
   24888           && ( discardRectangleCount == rhs.discardRectangleCount )
   24889           && ( pDiscardRectangles == rhs.pDiscardRectangles );
   24890     }
   24891 
   24892     bool operator!=( PipelineDiscardRectangleStateCreateInfoEXT const& rhs ) const
   24893     {
   24894       return !operator==( rhs );
   24895     }
   24896 
   24897   private:
   24898     StructureType sType = StructureType::ePipelineDiscardRectangleStateCreateInfoEXT;
   24899 
   24900   public:
   24901     const void* pNext = nullptr;
   24902     PipelineDiscardRectangleStateCreateFlagsEXT flags;
   24903     DiscardRectangleModeEXT discardRectangleMode;
   24904     uint32_t discardRectangleCount;
   24905     const Rect2D* pDiscardRectangles;
   24906   };
   24907   static_assert( sizeof( PipelineDiscardRectangleStateCreateInfoEXT ) == sizeof( VkPipelineDiscardRectangleStateCreateInfoEXT ), "struct and wrapper have different size!" );
   24908 
   24909   enum class SubpassDescriptionFlagBits
   24910   {
   24911     ePerViewAttributesNVX = VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX,
   24912     ePerViewPositionXOnlyNVX = VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX
   24913   };
   24914 
   24915   using SubpassDescriptionFlags = Flags<SubpassDescriptionFlagBits, VkSubpassDescriptionFlags>;
   24916 
   24917   VULKAN_HPP_INLINE SubpassDescriptionFlags operator|( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 )
   24918   {
   24919     return SubpassDescriptionFlags( bit0 ) | bit1;
   24920   }
   24921 
   24922   VULKAN_HPP_INLINE SubpassDescriptionFlags operator~( SubpassDescriptionFlagBits bits )
   24923   {
   24924     return ~( SubpassDescriptionFlags( bits ) );
   24925   }
   24926 
   24927   template <> struct FlagTraits<SubpassDescriptionFlagBits>
   24928   {
   24929     enum
   24930     {
   24931       allFlags = VkFlags(SubpassDescriptionFlagBits::ePerViewAttributesNVX) | VkFlags(SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX)
   24932     };
   24933   };
   24934 
   24935   struct SubpassDescription
   24936   {
   24937     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 )
   24938       : flags( flags_ )
   24939       , pipelineBindPoint( pipelineBindPoint_ )
   24940       , inputAttachmentCount( inputAttachmentCount_ )
   24941       , pInputAttachments( pInputAttachments_ )
   24942       , colorAttachmentCount( colorAttachmentCount_ )
   24943       , pColorAttachments( pColorAttachments_ )
   24944       , pResolveAttachments( pResolveAttachments_ )
   24945       , pDepthStencilAttachment( pDepthStencilAttachment_ )
   24946       , preserveAttachmentCount( preserveAttachmentCount_ )
   24947       , pPreserveAttachments( pPreserveAttachments_ )
   24948     {
   24949     }
   24950 
   24951     SubpassDescription( VkSubpassDescription const & rhs )
   24952     {
   24953       memcpy( this, &rhs, sizeof( SubpassDescription ) );
   24954     }
   24955 
   24956     SubpassDescription& operator=( VkSubpassDescription const & rhs )
   24957     {
   24958       memcpy( this, &rhs, sizeof( SubpassDescription ) );
   24959       return *this;
   24960     }
   24961     SubpassDescription& setFlags( SubpassDescriptionFlags flags_ )
   24962     {
   24963       flags = flags_;
   24964       return *this;
   24965     }
   24966 
   24967     SubpassDescription& setPipelineBindPoint( PipelineBindPoint pipelineBindPoint_ )
   24968     {
   24969       pipelineBindPoint = pipelineBindPoint_;
   24970       return *this;
   24971     }
   24972 
   24973     SubpassDescription& setInputAttachmentCount( uint32_t inputAttachmentCount_ )
   24974     {
   24975       inputAttachmentCount = inputAttachmentCount_;
   24976       return *this;
   24977     }
   24978 
   24979     SubpassDescription& setPInputAttachments( const AttachmentReference* pInputAttachments_ )
   24980     {
   24981       pInputAttachments = pInputAttachments_;
   24982       return *this;
   24983     }
   24984 
   24985     SubpassDescription& setColorAttachmentCount( uint32_t colorAttachmentCount_ )
   24986     {
   24987       colorAttachmentCount = colorAttachmentCount_;
   24988       return *this;
   24989     }
   24990 
   24991     SubpassDescription& setPColorAttachments( const AttachmentReference* pColorAttachments_ )
   24992     {
   24993       pColorAttachments = pColorAttachments_;
   24994       return *this;
   24995     }
   24996 
   24997     SubpassDescription& setPResolveAttachments( const AttachmentReference* pResolveAttachments_ )
   24998     {
   24999       pResolveAttachments = pResolveAttachments_;
   25000       return *this;
   25001     }
   25002 
   25003     SubpassDescription& setPDepthStencilAttachment( const AttachmentReference* pDepthStencilAttachment_ )
   25004     {
   25005       pDepthStencilAttachment = pDepthStencilAttachment_;
   25006       return *this;
   25007     }
   25008 
   25009     SubpassDescription& setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ )
   25010     {
   25011       preserveAttachmentCount = preserveAttachmentCount_;
   25012       return *this;
   25013     }
   25014 
   25015     SubpassDescription& setPPreserveAttachments( const uint32_t* pPreserveAttachments_ )
   25016     {
   25017       pPreserveAttachments = pPreserveAttachments_;
   25018       return *this;
   25019     }
   25020 
   25021     operator const VkSubpassDescription&() const
   25022     {
   25023       return *reinterpret_cast<const VkSubpassDescription*>(this);
   25024     }
   25025 
   25026     bool operator==( SubpassDescription const& rhs ) const
   25027     {
   25028       return ( flags == rhs.flags )
   25029           && ( pipelineBindPoint == rhs.pipelineBindPoint )
   25030           && ( inputAttachmentCount == rhs.inputAttachmentCount )
   25031           && ( pInputAttachments == rhs.pInputAttachments )
   25032           && ( colorAttachmentCount == rhs.colorAttachmentCount )
   25033           && ( pColorAttachments == rhs.pColorAttachments )
   25034           && ( pResolveAttachments == rhs.pResolveAttachments )
   25035           && ( pDepthStencilAttachment == rhs.pDepthStencilAttachment )
   25036           && ( preserveAttachmentCount == rhs.preserveAttachmentCount )
   25037           && ( pPreserveAttachments == rhs.pPreserveAttachments );
   25038     }
   25039 
   25040     bool operator!=( SubpassDescription const& rhs ) const
   25041     {
   25042       return !operator==( rhs );
   25043     }
   25044 
   25045     SubpassDescriptionFlags flags;
   25046     PipelineBindPoint pipelineBindPoint;
   25047     uint32_t inputAttachmentCount;
   25048     const AttachmentReference* pInputAttachments;
   25049     uint32_t colorAttachmentCount;
   25050     const AttachmentReference* pColorAttachments;
   25051     const AttachmentReference* pResolveAttachments;
   25052     const AttachmentReference* pDepthStencilAttachment;
   25053     uint32_t preserveAttachmentCount;
   25054     const uint32_t* pPreserveAttachments;
   25055   };
   25056   static_assert( sizeof( SubpassDescription ) == sizeof( VkSubpassDescription ), "struct and wrapper have different size!" );
   25057 
   25058   struct RenderPassCreateInfo
   25059   {
   25060     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 )
   25061       : flags( flags_ )
   25062       , attachmentCount( attachmentCount_ )
   25063       , pAttachments( pAttachments_ )
   25064       , subpassCount( subpassCount_ )
   25065       , pSubpasses( pSubpasses_ )
   25066       , dependencyCount( dependencyCount_ )
   25067       , pDependencies( pDependencies_ )
   25068     {
   25069     }
   25070 
   25071     RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs )
   25072     {
   25073       memcpy( this, &rhs, sizeof( RenderPassCreateInfo ) );
   25074     }
   25075 
   25076     RenderPassCreateInfo& operator=( VkRenderPassCreateInfo const & rhs )
   25077     {
   25078       memcpy( this, &rhs, sizeof( RenderPassCreateInfo ) );
   25079       return *this;
   25080     }
   25081     RenderPassCreateInfo& setPNext( const void* pNext_ )
   25082     {
   25083       pNext = pNext_;
   25084       return *this;
   25085     }
   25086 
   25087     RenderPassCreateInfo& setFlags( RenderPassCreateFlags flags_ )
   25088     {
   25089       flags = flags_;
   25090       return *this;
   25091     }
   25092 
   25093     RenderPassCreateInfo& setAttachmentCount( uint32_t attachmentCount_ )
   25094     {
   25095       attachmentCount = attachmentCount_;
   25096       return *this;
   25097     }
   25098 
   25099     RenderPassCreateInfo& setPAttachments( const AttachmentDescription* pAttachments_ )
   25100     {
   25101       pAttachments = pAttachments_;
   25102       return *this;
   25103     }
   25104 
   25105     RenderPassCreateInfo& setSubpassCount( uint32_t subpassCount_ )
   25106     {
   25107       subpassCount = subpassCount_;
   25108       return *this;
   25109     }
   25110 
   25111     RenderPassCreateInfo& setPSubpasses( const SubpassDescription* pSubpasses_ )
   25112     {
   25113       pSubpasses = pSubpasses_;
   25114       return *this;
   25115     }
   25116 
   25117     RenderPassCreateInfo& setDependencyCount( uint32_t dependencyCount_ )
   25118     {
   25119       dependencyCount = dependencyCount_;
   25120       return *this;
   25121     }
   25122 
   25123     RenderPassCreateInfo& setPDependencies( const SubpassDependency* pDependencies_ )
   25124     {
   25125       pDependencies = pDependencies_;
   25126       return *this;
   25127     }
   25128 
   25129     operator const VkRenderPassCreateInfo&() const
   25130     {
   25131       return *reinterpret_cast<const VkRenderPassCreateInfo*>(this);
   25132     }
   25133 
   25134     bool operator==( RenderPassCreateInfo const& rhs ) const
   25135     {
   25136       return ( sType == rhs.sType )
   25137           && ( pNext == rhs.pNext )
   25138           && ( flags == rhs.flags )
   25139           && ( attachmentCount == rhs.attachmentCount )
   25140           && ( pAttachments == rhs.pAttachments )
   25141           && ( subpassCount == rhs.subpassCount )
   25142           && ( pSubpasses == rhs.pSubpasses )
   25143           && ( dependencyCount == rhs.dependencyCount )
   25144           && ( pDependencies == rhs.pDependencies );
   25145     }
   25146 
   25147     bool operator!=( RenderPassCreateInfo const& rhs ) const
   25148     {
   25149       return !operator==( rhs );
   25150     }
   25151 
   25152   private:
   25153     StructureType sType = StructureType::eRenderPassCreateInfo;
   25154 
   25155   public:
   25156     const void* pNext = nullptr;
   25157     RenderPassCreateFlags flags;
   25158     uint32_t attachmentCount;
   25159     const AttachmentDescription* pAttachments;
   25160     uint32_t subpassCount;
   25161     const SubpassDescription* pSubpasses;
   25162     uint32_t dependencyCount;
   25163     const SubpassDependency* pDependencies;
   25164   };
   25165   static_assert( sizeof( RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ), "struct and wrapper have different size!" );
   25166 
   25167   enum class PointClippingBehaviorKHR
   25168   {
   25169     eAllClipPlanes = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR,
   25170     eUserClipPlanesOnly = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR
   25171   };
   25172 
   25173   struct PhysicalDevicePointClippingPropertiesKHR
   25174   {
   25175     operator const VkPhysicalDevicePointClippingPropertiesKHR&() const
   25176     {
   25177       return *reinterpret_cast<const VkPhysicalDevicePointClippingPropertiesKHR*>(this);
   25178     }
   25179 
   25180     bool operator==( PhysicalDevicePointClippingPropertiesKHR const& rhs ) const
   25181     {
   25182       return ( sType == rhs.sType )
   25183           && ( pNext == rhs.pNext )
   25184           && ( pointClippingBehavior == rhs.pointClippingBehavior );
   25185     }
   25186 
   25187     bool operator!=( PhysicalDevicePointClippingPropertiesKHR const& rhs ) const
   25188     {
   25189       return !operator==( rhs );
   25190     }
   25191 
   25192   private:
   25193     StructureType sType = StructureType::ePhysicalDevicePointClippingPropertiesKHR;
   25194 
   25195   public:
   25196     void* pNext = nullptr;
   25197     PointClippingBehaviorKHR pointClippingBehavior;
   25198   };
   25199   static_assert( sizeof( PhysicalDevicePointClippingPropertiesKHR ) == sizeof( VkPhysicalDevicePointClippingPropertiesKHR ), "struct and wrapper have different size!" );
   25200 
   25201   enum class SamplerReductionModeEXT
   25202   {
   25203     eWeightedAverage = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT,
   25204     eMin = VK_SAMPLER_REDUCTION_MODE_MIN_EXT,
   25205     eMax = VK_SAMPLER_REDUCTION_MODE_MAX_EXT
   25206   };
   25207 
   25208   struct SamplerReductionModeCreateInfoEXT
   25209   {
   25210     SamplerReductionModeCreateInfoEXT( SamplerReductionModeEXT reductionMode_ = SamplerReductionModeEXT::eWeightedAverage )
   25211       : reductionMode( reductionMode_ )
   25212     {
   25213     }
   25214 
   25215     SamplerReductionModeCreateInfoEXT( VkSamplerReductionModeCreateInfoEXT const & rhs )
   25216     {
   25217       memcpy( this, &rhs, sizeof( SamplerReductionModeCreateInfoEXT ) );
   25218     }
   25219 
   25220     SamplerReductionModeCreateInfoEXT& operator=( VkSamplerReductionModeCreateInfoEXT const & rhs )
   25221     {
   25222       memcpy( this, &rhs, sizeof( SamplerReductionModeCreateInfoEXT ) );
   25223       return *this;
   25224     }
   25225     SamplerReductionModeCreateInfoEXT& setPNext( const void* pNext_ )
   25226     {
   25227       pNext = pNext_;
   25228       return *this;
   25229     }
   25230 
   25231     SamplerReductionModeCreateInfoEXT& setReductionMode( SamplerReductionModeEXT reductionMode_ )
   25232     {
   25233       reductionMode = reductionMode_;
   25234       return *this;
   25235     }
   25236 
   25237     operator const VkSamplerReductionModeCreateInfoEXT&() const
   25238     {
   25239       return *reinterpret_cast<const VkSamplerReductionModeCreateInfoEXT*>(this);
   25240     }
   25241 
   25242     bool operator==( SamplerReductionModeCreateInfoEXT const& rhs ) const
   25243     {
   25244       return ( sType == rhs.sType )
   25245           && ( pNext == rhs.pNext )
   25246           && ( reductionMode == rhs.reductionMode );
   25247     }
   25248 
   25249     bool operator!=( SamplerReductionModeCreateInfoEXT const& rhs ) const
   25250     {
   25251       return !operator==( rhs );
   25252     }
   25253 
   25254   private:
   25255     StructureType sType = StructureType::eSamplerReductionModeCreateInfoEXT;
   25256 
   25257   public:
   25258     const void* pNext = nullptr;
   25259     SamplerReductionModeEXT reductionMode;
   25260   };
   25261   static_assert( sizeof( SamplerReductionModeCreateInfoEXT ) == sizeof( VkSamplerReductionModeCreateInfoEXT ), "struct and wrapper have different size!" );
   25262 
   25263   enum class TessellationDomainOriginKHR
   25264   {
   25265     eUpperLeft = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR,
   25266     eLowerLeft = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR
   25267   };
   25268 
   25269   struct PipelineTessellationDomainOriginStateCreateInfoKHR
   25270   {
   25271     PipelineTessellationDomainOriginStateCreateInfoKHR( TessellationDomainOriginKHR domainOrigin_ = TessellationDomainOriginKHR::eUpperLeft )
   25272       : domainOrigin( domainOrigin_ )
   25273     {
   25274     }
   25275 
   25276     PipelineTessellationDomainOriginStateCreateInfoKHR( VkPipelineTessellationDomainOriginStateCreateInfoKHR const & rhs )
   25277     {
   25278       memcpy( this, &rhs, sizeof( PipelineTessellationDomainOriginStateCreateInfoKHR ) );
   25279     }
   25280 
   25281     PipelineTessellationDomainOriginStateCreateInfoKHR& operator=( VkPipelineTessellationDomainOriginStateCreateInfoKHR const & rhs )
   25282     {
   25283       memcpy( this, &rhs, sizeof( PipelineTessellationDomainOriginStateCreateInfoKHR ) );
   25284       return *this;
   25285     }
   25286     PipelineTessellationDomainOriginStateCreateInfoKHR& setPNext( const void* pNext_ )
   25287     {
   25288       pNext = pNext_;
   25289       return *this;
   25290     }
   25291 
   25292     PipelineTessellationDomainOriginStateCreateInfoKHR& setDomainOrigin( TessellationDomainOriginKHR domainOrigin_ )
   25293     {
   25294       domainOrigin = domainOrigin_;
   25295       return *this;
   25296     }
   25297 
   25298     operator const VkPipelineTessellationDomainOriginStateCreateInfoKHR&() const
   25299     {
   25300       return *reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfoKHR*>(this);
   25301     }
   25302 
   25303     bool operator==( PipelineTessellationDomainOriginStateCreateInfoKHR const& rhs ) const
   25304     {
   25305       return ( sType == rhs.sType )
   25306           && ( pNext == rhs.pNext )
   25307           && ( domainOrigin == rhs.domainOrigin );
   25308     }
   25309 
   25310     bool operator!=( PipelineTessellationDomainOriginStateCreateInfoKHR const& rhs ) const
   25311     {
   25312       return !operator==( rhs );
   25313     }
   25314 
   25315   private:
   25316     StructureType sType = StructureType::ePipelineTessellationDomainOriginStateCreateInfoKHR;
   25317 
   25318   public:
   25319     const void* pNext = nullptr;
   25320     TessellationDomainOriginKHR domainOrigin;
   25321   };
   25322   static_assert( sizeof( PipelineTessellationDomainOriginStateCreateInfoKHR ) == sizeof( VkPipelineTessellationDomainOriginStateCreateInfoKHR ), "struct and wrapper have different size!" );
   25323 
   25324   enum class SamplerYcbcrModelConversionKHR
   25325   {
   25326     eRgbIdentity = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR,
   25327     eYcbcrIdentity = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR,
   25328     eYcbcr709 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR,
   25329     eYcbcr601 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR,
   25330     eYcbcr2020 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR
   25331   };
   25332 
   25333   enum class SamplerYcbcrRangeKHR
   25334   {
   25335     eItuFull = VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR,
   25336     eItuNarrow = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR
   25337   };
   25338 
   25339   enum class ChromaLocationKHR
   25340   {
   25341     eCositedEven = VK_CHROMA_LOCATION_COSITED_EVEN_KHR,
   25342     eMidpoint = VK_CHROMA_LOCATION_MIDPOINT_KHR
   25343   };
   25344 
   25345   struct SamplerYcbcrConversionCreateInfoKHR
   25346   {
   25347     SamplerYcbcrConversionCreateInfoKHR( Format format_ = Format::eUndefined, SamplerYcbcrModelConversionKHR ycbcrModel_ = SamplerYcbcrModelConversionKHR::eRgbIdentity, SamplerYcbcrRangeKHR ycbcrRange_ = SamplerYcbcrRangeKHR::eItuFull, ComponentMapping components_ = ComponentMapping(), ChromaLocationKHR xChromaOffset_ = ChromaLocationKHR::eCositedEven, ChromaLocationKHR yChromaOffset_ = ChromaLocationKHR::eCositedEven, Filter chromaFilter_ = Filter::eNearest, Bool32 forceExplicitReconstruction_ = 0 )
   25348       : format( format_ )
   25349       , ycbcrModel( ycbcrModel_ )
   25350       , ycbcrRange( ycbcrRange_ )
   25351       , components( components_ )
   25352       , xChromaOffset( xChromaOffset_ )
   25353       , yChromaOffset( yChromaOffset_ )
   25354       , chromaFilter( chromaFilter_ )
   25355       , forceExplicitReconstruction( forceExplicitReconstruction_ )
   25356     {
   25357     }
   25358 
   25359     SamplerYcbcrConversionCreateInfoKHR( VkSamplerYcbcrConversionCreateInfoKHR const & rhs )
   25360     {
   25361       memcpy( this, &rhs, sizeof( SamplerYcbcrConversionCreateInfoKHR ) );
   25362     }
   25363 
   25364     SamplerYcbcrConversionCreateInfoKHR& operator=( VkSamplerYcbcrConversionCreateInfoKHR const & rhs )
   25365     {
   25366       memcpy( this, &rhs, sizeof( SamplerYcbcrConversionCreateInfoKHR ) );
   25367       return *this;
   25368     }
   25369     SamplerYcbcrConversionCreateInfoKHR& setPNext( const void* pNext_ )
   25370     {
   25371       pNext = pNext_;
   25372       return *this;
   25373     }
   25374 
   25375     SamplerYcbcrConversionCreateInfoKHR& setFormat( Format format_ )
   25376     {
   25377       format = format_;
   25378       return *this;
   25379     }
   25380 
   25381     SamplerYcbcrConversionCreateInfoKHR& setYcbcrModel( SamplerYcbcrModelConversionKHR ycbcrModel_ )
   25382     {
   25383       ycbcrModel = ycbcrModel_;
   25384       return *this;
   25385     }
   25386 
   25387     SamplerYcbcrConversionCreateInfoKHR& setYcbcrRange( SamplerYcbcrRangeKHR ycbcrRange_ )
   25388     {
   25389       ycbcrRange = ycbcrRange_;
   25390       return *this;
   25391     }
   25392 
   25393     SamplerYcbcrConversionCreateInfoKHR& setComponents( ComponentMapping components_ )
   25394     {
   25395       components = components_;
   25396       return *this;
   25397     }
   25398 
   25399     SamplerYcbcrConversionCreateInfoKHR& setXChromaOffset( ChromaLocationKHR xChromaOffset_ )
   25400     {
   25401       xChromaOffset = xChromaOffset_;
   25402       return *this;
   25403     }
   25404 
   25405     SamplerYcbcrConversionCreateInfoKHR& setYChromaOffset( ChromaLocationKHR yChromaOffset_ )
   25406     {
   25407       yChromaOffset = yChromaOffset_;
   25408       return *this;
   25409     }
   25410 
   25411     SamplerYcbcrConversionCreateInfoKHR& setChromaFilter( Filter chromaFilter_ )
   25412     {
   25413       chromaFilter = chromaFilter_;
   25414       return *this;
   25415     }
   25416 
   25417     SamplerYcbcrConversionCreateInfoKHR& setForceExplicitReconstruction( Bool32 forceExplicitReconstruction_ )
   25418     {
   25419       forceExplicitReconstruction = forceExplicitReconstruction_;
   25420       return *this;
   25421     }
   25422 
   25423     operator const VkSamplerYcbcrConversionCreateInfoKHR&() const
   25424     {
   25425       return *reinterpret_cast<const VkSamplerYcbcrConversionCreateInfoKHR*>(this);
   25426     }
   25427 
   25428     bool operator==( SamplerYcbcrConversionCreateInfoKHR const& rhs ) const
   25429     {
   25430       return ( sType == rhs.sType )
   25431           && ( pNext == rhs.pNext )
   25432           && ( format == rhs.format )
   25433           && ( ycbcrModel == rhs.ycbcrModel )
   25434           && ( ycbcrRange == rhs.ycbcrRange )
   25435           && ( components == rhs.components )
   25436           && ( xChromaOffset == rhs.xChromaOffset )
   25437           && ( yChromaOffset == rhs.yChromaOffset )
   25438           && ( chromaFilter == rhs.chromaFilter )
   25439           && ( forceExplicitReconstruction == rhs.forceExplicitReconstruction );
   25440     }
   25441 
   25442     bool operator!=( SamplerYcbcrConversionCreateInfoKHR const& rhs ) const
   25443     {
   25444       return !operator==( rhs );
   25445     }
   25446 
   25447   private:
   25448     StructureType sType = StructureType::eSamplerYcbcrConversionCreateInfoKHR;
   25449 
   25450   public:
   25451     const void* pNext = nullptr;
   25452     Format format;
   25453     SamplerYcbcrModelConversionKHR ycbcrModel;
   25454     SamplerYcbcrRangeKHR ycbcrRange;
   25455     ComponentMapping components;
   25456     ChromaLocationKHR xChromaOffset;
   25457     ChromaLocationKHR yChromaOffset;
   25458     Filter chromaFilter;
   25459     Bool32 forceExplicitReconstruction;
   25460   };
   25461   static_assert( sizeof( SamplerYcbcrConversionCreateInfoKHR ) == sizeof( VkSamplerYcbcrConversionCreateInfoKHR ), "struct and wrapper have different size!" );
   25462 
   25463   enum class BlendOverlapEXT
   25464   {
   25465     eUncorrelated = VK_BLEND_OVERLAP_UNCORRELATED_EXT,
   25466     eDisjoint = VK_BLEND_OVERLAP_DISJOINT_EXT,
   25467     eConjoint = VK_BLEND_OVERLAP_CONJOINT_EXT
   25468   };
   25469 
   25470   struct PipelineColorBlendAdvancedStateCreateInfoEXT
   25471   {
   25472     PipelineColorBlendAdvancedStateCreateInfoEXT( Bool32 srcPremultiplied_ = 0, Bool32 dstPremultiplied_ = 0, BlendOverlapEXT blendOverlap_ = BlendOverlapEXT::eUncorrelated )
   25473       : srcPremultiplied( srcPremultiplied_ )
   25474       , dstPremultiplied( dstPremultiplied_ )
   25475       , blendOverlap( blendOverlap_ )
   25476     {
   25477     }
   25478 
   25479     PipelineColorBlendAdvancedStateCreateInfoEXT( VkPipelineColorBlendAdvancedStateCreateInfoEXT const & rhs )
   25480     {
   25481       memcpy( this, &rhs, sizeof( PipelineColorBlendAdvancedStateCreateInfoEXT ) );
   25482     }
   25483 
   25484     PipelineColorBlendAdvancedStateCreateInfoEXT& operator=( VkPipelineColorBlendAdvancedStateCreateInfoEXT const & rhs )
   25485     {
   25486       memcpy( this, &rhs, sizeof( PipelineColorBlendAdvancedStateCreateInfoEXT ) );
   25487       return *this;
   25488     }
   25489     PipelineColorBlendAdvancedStateCreateInfoEXT& setPNext( const void* pNext_ )
   25490     {
   25491       pNext = pNext_;
   25492       return *this;
   25493     }
   25494 
   25495     PipelineColorBlendAdvancedStateCreateInfoEXT& setSrcPremultiplied( Bool32 srcPremultiplied_ )
   25496     {
   25497       srcPremultiplied = srcPremultiplied_;
   25498       return *this;
   25499     }
   25500 
   25501     PipelineColorBlendAdvancedStateCreateInfoEXT& setDstPremultiplied( Bool32 dstPremultiplied_ )
   25502     {
   25503       dstPremultiplied = dstPremultiplied_;
   25504       return *this;
   25505     }
   25506 
   25507     PipelineColorBlendAdvancedStateCreateInfoEXT& setBlendOverlap( BlendOverlapEXT blendOverlap_ )
   25508     {
   25509       blendOverlap = blendOverlap_;
   25510       return *this;
   25511     }
   25512 
   25513     operator const VkPipelineColorBlendAdvancedStateCreateInfoEXT&() const
   25514     {
   25515       return *reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(this);
   25516     }
   25517 
   25518     bool operator==( PipelineColorBlendAdvancedStateCreateInfoEXT const& rhs ) const
   25519     {
   25520       return ( sType == rhs.sType )
   25521           && ( pNext == rhs.pNext )
   25522           && ( srcPremultiplied == rhs.srcPremultiplied )
   25523           && ( dstPremultiplied == rhs.dstPremultiplied )
   25524           && ( blendOverlap == rhs.blendOverlap );
   25525     }
   25526 
   25527     bool operator!=( PipelineColorBlendAdvancedStateCreateInfoEXT const& rhs ) const
   25528     {
   25529       return !operator==( rhs );
   25530     }
   25531 
   25532   private:
   25533     StructureType sType = StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT;
   25534 
   25535   public:
   25536     const void* pNext = nullptr;
   25537     Bool32 srcPremultiplied;
   25538     Bool32 dstPremultiplied;
   25539     BlendOverlapEXT blendOverlap;
   25540   };
   25541   static_assert( sizeof( PipelineColorBlendAdvancedStateCreateInfoEXT ) == sizeof( VkPipelineColorBlendAdvancedStateCreateInfoEXT ), "struct and wrapper have different size!" );
   25542 
   25543   enum class CoverageModulationModeNV
   25544   {
   25545     eNone = VK_COVERAGE_MODULATION_MODE_NONE_NV,
   25546     eRgb = VK_COVERAGE_MODULATION_MODE_RGB_NV,
   25547     eAlpha = VK_COVERAGE_MODULATION_MODE_ALPHA_NV,
   25548     eRgba = VK_COVERAGE_MODULATION_MODE_RGBA_NV
   25549   };
   25550 
   25551   struct PipelineCoverageModulationStateCreateInfoNV
   25552   {
   25553     PipelineCoverageModulationStateCreateInfoNV( PipelineCoverageModulationStateCreateFlagsNV flags_ = PipelineCoverageModulationStateCreateFlagsNV(), CoverageModulationModeNV coverageModulationMode_ = CoverageModulationModeNV::eNone, Bool32 coverageModulationTableEnable_ = 0, uint32_t coverageModulationTableCount_ = 0, const float* pCoverageModulationTable_ = nullptr )
   25554       : flags( flags_ )
   25555       , coverageModulationMode( coverageModulationMode_ )
   25556       , coverageModulationTableEnable( coverageModulationTableEnable_ )
   25557       , coverageModulationTableCount( coverageModulationTableCount_ )
   25558       , pCoverageModulationTable( pCoverageModulationTable_ )
   25559     {
   25560     }
   25561 
   25562     PipelineCoverageModulationStateCreateInfoNV( VkPipelineCoverageModulationStateCreateInfoNV const & rhs )
   25563     {
   25564       memcpy( this, &rhs, sizeof( PipelineCoverageModulationStateCreateInfoNV ) );
   25565     }
   25566 
   25567     PipelineCoverageModulationStateCreateInfoNV& operator=( VkPipelineCoverageModulationStateCreateInfoNV const & rhs )
   25568     {
   25569       memcpy( this, &rhs, sizeof( PipelineCoverageModulationStateCreateInfoNV ) );
   25570       return *this;
   25571     }
   25572     PipelineCoverageModulationStateCreateInfoNV& setPNext( const void* pNext_ )
   25573     {
   25574       pNext = pNext_;
   25575       return *this;
   25576     }
   25577 
   25578     PipelineCoverageModulationStateCreateInfoNV& setFlags( PipelineCoverageModulationStateCreateFlagsNV flags_ )
   25579     {
   25580       flags = flags_;
   25581       return *this;
   25582     }
   25583 
   25584     PipelineCoverageModulationStateCreateInfoNV& setCoverageModulationMode( CoverageModulationModeNV coverageModulationMode_ )
   25585     {
   25586       coverageModulationMode = coverageModulationMode_;
   25587       return *this;
   25588     }
   25589 
   25590     PipelineCoverageModulationStateCreateInfoNV& setCoverageModulationTableEnable( Bool32 coverageModulationTableEnable_ )
   25591     {
   25592       coverageModulationTableEnable = coverageModulationTableEnable_;
   25593       return *this;
   25594     }
   25595 
   25596     PipelineCoverageModulationStateCreateInfoNV& setCoverageModulationTableCount( uint32_t coverageModulationTableCount_ )
   25597     {
   25598       coverageModulationTableCount = coverageModulationTableCount_;
   25599       return *this;
   25600     }
   25601 
   25602     PipelineCoverageModulationStateCreateInfoNV& setPCoverageModulationTable( const float* pCoverageModulationTable_ )
   25603     {
   25604       pCoverageModulationTable = pCoverageModulationTable_;
   25605       return *this;
   25606     }
   25607 
   25608     operator const VkPipelineCoverageModulationStateCreateInfoNV&() const
   25609     {
   25610       return *reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(this);
   25611     }
   25612 
   25613     bool operator==( PipelineCoverageModulationStateCreateInfoNV const& rhs ) const
   25614     {
   25615       return ( sType == rhs.sType )
   25616           && ( pNext == rhs.pNext )
   25617           && ( flags == rhs.flags )
   25618           && ( coverageModulationMode == rhs.coverageModulationMode )
   25619           && ( coverageModulationTableEnable == rhs.coverageModulationTableEnable )
   25620           && ( coverageModulationTableCount == rhs.coverageModulationTableCount )
   25621           && ( pCoverageModulationTable == rhs.pCoverageModulationTable );
   25622     }
   25623 
   25624     bool operator!=( PipelineCoverageModulationStateCreateInfoNV const& rhs ) const
   25625     {
   25626       return !operator==( rhs );
   25627     }
   25628 
   25629   private:
   25630     StructureType sType = StructureType::ePipelineCoverageModulationStateCreateInfoNV;
   25631 
   25632   public:
   25633     const void* pNext = nullptr;
   25634     PipelineCoverageModulationStateCreateFlagsNV flags;
   25635     CoverageModulationModeNV coverageModulationMode;
   25636     Bool32 coverageModulationTableEnable;
   25637     uint32_t coverageModulationTableCount;
   25638     const float* pCoverageModulationTable;
   25639   };
   25640   static_assert( sizeof( PipelineCoverageModulationStateCreateInfoNV ) == sizeof( VkPipelineCoverageModulationStateCreateInfoNV ), "struct and wrapper have different size!" );
   25641 
   25642   enum class ValidationCacheHeaderVersionEXT
   25643   {
   25644     eOne = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT
   25645   };
   25646 
   25647   enum class ShaderInfoTypeAMD
   25648   {
   25649     eStatistics = VK_SHADER_INFO_TYPE_STATISTICS_AMD,
   25650     eBinary = VK_SHADER_INFO_TYPE_BINARY_AMD,
   25651     eDisassembly = VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD
   25652   };
   25653 
   25654   enum class QueueGlobalPriorityEXT
   25655   {
   25656     eLow = VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT,
   25657     eMedium = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT,
   25658     eHigh = VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT,
   25659     eRealtime = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT
   25660   };
   25661 
   25662   struct DeviceQueueGlobalPriorityCreateInfoEXT
   25663   {
   25664     DeviceQueueGlobalPriorityCreateInfoEXT( QueueGlobalPriorityEXT globalPriority_ = QueueGlobalPriorityEXT::eLow )
   25665       : globalPriority( globalPriority_ )
   25666     {
   25667     }
   25668 
   25669     DeviceQueueGlobalPriorityCreateInfoEXT( VkDeviceQueueGlobalPriorityCreateInfoEXT const & rhs )
   25670     {
   25671       memcpy( this, &rhs, sizeof( DeviceQueueGlobalPriorityCreateInfoEXT ) );
   25672     }
   25673 
   25674     DeviceQueueGlobalPriorityCreateInfoEXT& operator=( VkDeviceQueueGlobalPriorityCreateInfoEXT const & rhs )
   25675     {
   25676       memcpy( this, &rhs, sizeof( DeviceQueueGlobalPriorityCreateInfoEXT ) );
   25677       return *this;
   25678     }
   25679     DeviceQueueGlobalPriorityCreateInfoEXT& setPNext( const void* pNext_ )
   25680     {
   25681       pNext = pNext_;
   25682       return *this;
   25683     }
   25684 
   25685     DeviceQueueGlobalPriorityCreateInfoEXT& setGlobalPriority( QueueGlobalPriorityEXT globalPriority_ )
   25686     {
   25687       globalPriority = globalPriority_;
   25688       return *this;
   25689     }
   25690 
   25691     operator const VkDeviceQueueGlobalPriorityCreateInfoEXT&() const
   25692     {
   25693       return *reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(this);
   25694     }
   25695 
   25696     bool operator==( DeviceQueueGlobalPriorityCreateInfoEXT const& rhs ) const
   25697     {
   25698       return ( sType == rhs.sType )
   25699           && ( pNext == rhs.pNext )
   25700           && ( globalPriority == rhs.globalPriority );
   25701     }
   25702 
   25703     bool operator!=( DeviceQueueGlobalPriorityCreateInfoEXT const& rhs ) const
   25704     {
   25705       return !operator==( rhs );
   25706     }
   25707 
   25708   private:
   25709     StructureType sType = StructureType::eDeviceQueueGlobalPriorityCreateInfoEXT;
   25710 
   25711   public:
   25712     const void* pNext = nullptr;
   25713     QueueGlobalPriorityEXT globalPriority;
   25714   };
   25715   static_assert( sizeof( DeviceQueueGlobalPriorityCreateInfoEXT ) == sizeof( VkDeviceQueueGlobalPriorityCreateInfoEXT ), "struct and wrapper have different size!" );
   25716 
   25717   enum class ConservativeRasterizationModeEXT
   25718   {
   25719     eDisabled = VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT,
   25720     eOverestimate = VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT,
   25721     eUnderestimate = VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT
   25722   };
   25723 
   25724   struct PipelineRasterizationConservativeStateCreateInfoEXT
   25725   {
   25726     PipelineRasterizationConservativeStateCreateInfoEXT( PipelineRasterizationConservativeStateCreateFlagsEXT flags_ = PipelineRasterizationConservativeStateCreateFlagsEXT(), ConservativeRasterizationModeEXT conservativeRasterizationMode_ = ConservativeRasterizationModeEXT::eDisabled, float extraPrimitiveOverestimationSize_ = 0 )
   25727       : flags( flags_ )
   25728       , conservativeRasterizationMode( conservativeRasterizationMode_ )
   25729       , extraPrimitiveOverestimationSize( extraPrimitiveOverestimationSize_ )
   25730     {
   25731     }
   25732 
   25733     PipelineRasterizationConservativeStateCreateInfoEXT( VkPipelineRasterizationConservativeStateCreateInfoEXT const & rhs )
   25734     {
   25735       memcpy( this, &rhs, sizeof( PipelineRasterizationConservativeStateCreateInfoEXT ) );
   25736     }
   25737 
   25738     PipelineRasterizationConservativeStateCreateInfoEXT& operator=( VkPipelineRasterizationConservativeStateCreateInfoEXT const & rhs )
   25739     {
   25740       memcpy( this, &rhs, sizeof( PipelineRasterizationConservativeStateCreateInfoEXT ) );
   25741       return *this;
   25742     }
   25743     PipelineRasterizationConservativeStateCreateInfoEXT& setPNext( const void* pNext_ )
   25744     {
   25745       pNext = pNext_;
   25746       return *this;
   25747     }
   25748 
   25749     PipelineRasterizationConservativeStateCreateInfoEXT& setFlags( PipelineRasterizationConservativeStateCreateFlagsEXT flags_ )
   25750     {
   25751       flags = flags_;
   25752       return *this;
   25753     }
   25754 
   25755     PipelineRasterizationConservativeStateCreateInfoEXT& setConservativeRasterizationMode( ConservativeRasterizationModeEXT conservativeRasterizationMode_ )
   25756     {
   25757       conservativeRasterizationMode = conservativeRasterizationMode_;
   25758       return *this;
   25759     }
   25760 
   25761     PipelineRasterizationConservativeStateCreateInfoEXT& setExtraPrimitiveOverestimationSize( float extraPrimitiveOverestimationSize_ )
   25762     {
   25763       extraPrimitiveOverestimationSize = extraPrimitiveOverestimationSize_;
   25764       return *this;
   25765     }
   25766 
   25767     operator const VkPipelineRasterizationConservativeStateCreateInfoEXT&() const
   25768     {
   25769       return *reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(this);
   25770     }
   25771 
   25772     bool operator==( PipelineRasterizationConservativeStateCreateInfoEXT const& rhs ) const
   25773     {
   25774       return ( sType == rhs.sType )
   25775           && ( pNext == rhs.pNext )
   25776           && ( flags == rhs.flags )
   25777           && ( conservativeRasterizationMode == rhs.conservativeRasterizationMode )
   25778           && ( extraPrimitiveOverestimationSize == rhs.extraPrimitiveOverestimationSize );
   25779     }
   25780 
   25781     bool operator!=( PipelineRasterizationConservativeStateCreateInfoEXT const& rhs ) const
   25782     {
   25783       return !operator==( rhs );
   25784     }
   25785 
   25786   private:
   25787     StructureType sType = StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT;
   25788 
   25789   public:
   25790     const void* pNext = nullptr;
   25791     PipelineRasterizationConservativeStateCreateFlagsEXT flags;
   25792     ConservativeRasterizationModeEXT conservativeRasterizationMode;
   25793     float extraPrimitiveOverestimationSize;
   25794   };
   25795   static_assert( sizeof( PipelineRasterizationConservativeStateCreateInfoEXT ) == sizeof( VkPipelineRasterizationConservativeStateCreateInfoEXT ), "struct and wrapper have different size!" );
   25796 
   25797   Result enumerateInstanceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties );
   25798 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25799   template <typename Allocator = std::allocator<LayerProperties>>
   25800   typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties();
   25801 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25802 
   25803   VULKAN_HPP_INLINE Result enumerateInstanceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties )
   25804   {
   25805     return static_cast<Result>( vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
   25806   }
   25807 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25808   template <typename Allocator>
   25809   VULKAN_HPP_INLINE typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties()
   25810   {
   25811     std::vector<LayerProperties,Allocator> properties;
   25812     uint32_t propertyCount;
   25813     Result result;
   25814     do
   25815     {
   25816       result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) );
   25817       if ( ( result == Result::eSuccess ) && propertyCount )
   25818       {
   25819         properties.resize( propertyCount );
   25820         result = static_cast<Result>( vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
   25821       }
   25822     } while ( result == Result::eIncomplete );
   25823     assert( propertyCount <= properties.size() );
   25824     properties.resize( propertyCount );
   25825     return createResultValue( result, properties, "VULKAN_HPP_NAMESPACE::enumerateInstanceLayerProperties" );
   25826   }
   25827 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25828 
   25829 
   25830   Result enumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties );
   25831 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25832   template <typename Allocator = std::allocator<ExtensionProperties>>
   25833   typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateInstanceExtensionProperties( Optional<const std::string> layerName = nullptr );
   25834 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25835 
   25836   VULKAN_HPP_INLINE Result enumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties )
   25837   {
   25838     return static_cast<Result>( vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
   25839   }
   25840 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25841   template <typename Allocator>
   25842   VULKAN_HPP_INLINE typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateInstanceExtensionProperties( Optional<const std::string> layerName )
   25843   {
   25844     std::vector<ExtensionProperties,Allocator> properties;
   25845     uint32_t propertyCount;
   25846     Result result;
   25847     do
   25848     {
   25849       result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
   25850       if ( ( result == Result::eSuccess ) && propertyCount )
   25851       {
   25852         properties.resize( propertyCount );
   25853         result = static_cast<Result>( vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
   25854       }
   25855     } while ( result == Result::eIncomplete );
   25856     assert( propertyCount <= properties.size() );
   25857     properties.resize( propertyCount );
   25858     return createResultValue( result, properties, "VULKAN_HPP_NAMESPACE::enumerateInstanceExtensionProperties" );
   25859   }
   25860 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25861 
   25862 
   25863   // forward declarations
   25864   struct CmdProcessCommandsInfoNVX;
   25865 
   25866   class CommandBuffer
   25867   {
   25868   public:
   25869     CommandBuffer()
   25870       : m_commandBuffer(VK_NULL_HANDLE)
   25871     {}
   25872 
   25873     CommandBuffer( std::nullptr_t )
   25874       : m_commandBuffer(VK_NULL_HANDLE)
   25875     {}
   25876 
   25877     VULKAN_HPP_TYPESAFE_EXPLICIT CommandBuffer( VkCommandBuffer commandBuffer )
   25878       : m_commandBuffer( commandBuffer )
   25879     {}
   25880 
   25881 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   25882     CommandBuffer & operator=(VkCommandBuffer commandBuffer)
   25883     {
   25884       m_commandBuffer = commandBuffer;
   25885       return *this;
   25886     }
   25887 #endif
   25888 
   25889     CommandBuffer & operator=( std::nullptr_t )
   25890     {
   25891       m_commandBuffer = VK_NULL_HANDLE;
   25892       return *this;
   25893     }
   25894 
   25895     bool operator==( CommandBuffer const & rhs ) const
   25896     {
   25897       return m_commandBuffer == rhs.m_commandBuffer;
   25898     }
   25899 
   25900     bool operator!=(CommandBuffer const & rhs ) const
   25901     {
   25902       return m_commandBuffer != rhs.m_commandBuffer;
   25903     }
   25904 
   25905     bool operator<(CommandBuffer const & rhs ) const
   25906     {
   25907       return m_commandBuffer < rhs.m_commandBuffer;
   25908     }
   25909 
   25910     Result begin( const CommandBufferBeginInfo* pBeginInfo ) const;
   25911 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25912     ResultValueType<void>::type begin( const CommandBufferBeginInfo & beginInfo ) const;
   25913 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25914 
   25915 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25916     Result end() const;
   25917 #else
   25918     ResultValueType<void>::type end() const;
   25919 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25920 
   25921 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25922     Result reset( CommandBufferResetFlags flags ) const;
   25923 #else
   25924     ResultValueType<void>::type reset( CommandBufferResetFlags flags ) const;
   25925 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25926 
   25927     void bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const;
   25928 
   25929     void setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport* pViewports ) const;
   25930 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25931     void setViewport( uint32_t firstViewport, ArrayProxy<const Viewport> viewports ) const;
   25932 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25933 
   25934     void setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D* pScissors ) const;
   25935 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25936     void setScissor( uint32_t firstScissor, ArrayProxy<const Rect2D> scissors ) const;
   25937 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25938 
   25939     void setLineWidth( float lineWidth ) const;
   25940 
   25941     void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const;
   25942 
   25943     void setBlendConstants( const float blendConstants[4] ) const;
   25944 
   25945     void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const;
   25946 
   25947     void setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const;
   25948 
   25949     void setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const;
   25950 
   25951     void setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const;
   25952 
   25953     void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets ) const;
   25954 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25955     void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, ArrayProxy<const DescriptorSet> descriptorSets, ArrayProxy<const uint32_t> dynamicOffsets ) const;
   25956 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25957 
   25958     void bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const;
   25959 
   25960     void bindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const Buffer* pBuffers, const DeviceSize* pOffsets ) const;
   25961 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25962     void bindVertexBuffers( uint32_t firstBinding, ArrayProxy<const Buffer> buffers, ArrayProxy<const DeviceSize> offsets ) const;
   25963 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25964 
   25965     void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const;
   25966 
   25967     void drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const;
   25968 
   25969     void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const;
   25970 
   25971     void drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const;
   25972 
   25973     void dispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const;
   25974 
   25975     void dispatchIndirect( Buffer buffer, DeviceSize offset ) const;
   25976 
   25977     void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy* pRegions ) const;
   25978 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25979     void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy<const BufferCopy> regions ) const;
   25980 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25981 
   25982     void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageCopy* pRegions ) const;
   25983 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25984     void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageCopy> regions ) const;
   25985 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25986 
   25987     void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageBlit* pRegions, Filter filter ) const;
   25988 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25989     void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageBlit> regions, Filter filter ) const;
   25990 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25991 
   25992     void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const BufferImageCopy* pRegions ) const;
   25993 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25994     void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const BufferImageCopy> regions ) const;
   25995 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   25996 
   25997     void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, uint32_t regionCount, const BufferImageCopy* pRegions ) const;
   25998 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   25999     void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, ArrayProxy<const BufferImageCopy> regions ) const;
   26000 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26001 
   26002     void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void* pData ) const;
   26003 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26004     template <typename T>
   26005     void updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy<const T> data ) const;
   26006 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26007 
   26008     void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const;
   26009 
   26010     void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue* pColor, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const;
   26011 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26012     void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ArrayProxy<const ImageSubresourceRange> ranges ) const;
   26013 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26014 
   26015     void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const;
   26016 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26017     void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ArrayProxy<const ImageSubresourceRange> ranges ) const;
   26018 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26019 
   26020     void clearAttachments( uint32_t attachmentCount, const ClearAttachment* pAttachments, uint32_t rectCount, const ClearRect* pRects ) const;
   26021 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26022     void clearAttachments( ArrayProxy<const ClearAttachment> attachments, ArrayProxy<const ClearRect> rects ) const;
   26023 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26024 
   26025     void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageResolve* pRegions ) const;
   26026 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26027     void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageResolve> regions ) const;
   26028 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26029 
   26030     void setEvent( Event event, PipelineStageFlags stageMask ) const;
   26031 
   26032     void resetEvent( Event event, PipelineStageFlags stageMask ) const;
   26033 
   26034     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;
   26035 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26036     void waitEvents( ArrayProxy<const Event> events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const;
   26037 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26038 
   26039     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;
   26040 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26041     void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const;
   26042 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26043 
   26044     void beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const;
   26045 
   26046     void endQuery( QueryPool queryPool, uint32_t query ) const;
   26047 
   26048     void resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const;
   26049 
   26050     void writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const;
   26051 
   26052     void copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const;
   26053 
   26054     void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues ) const;
   26055 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26056     template <typename T>
   26057     void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, ArrayProxy<const T> values ) const;
   26058 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26059 
   26060     void beginRenderPass( const RenderPassBeginInfo* pRenderPassBegin, SubpassContents contents ) const;
   26061 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26062     void beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents ) const;
   26063 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26064 
   26065     void nextSubpass( SubpassContents contents ) const;
   26066 
   26067     void endRenderPass() const;
   26068 
   26069     void executeCommands( uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const;
   26070 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26071     void executeCommands( ArrayProxy<const CommandBuffer> commandBuffers ) const;
   26072 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26073 
   26074     void debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT* pMarkerInfo ) const;
   26075 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26076     void debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT & markerInfo ) const;
   26077 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26078 
   26079     void debugMarkerEndEXT() const;
   26080 
   26081     void debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT* pMarkerInfo ) const;
   26082 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26083     void debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT & markerInfo ) const;
   26084 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26085 
   26086     void drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const;
   26087 
   26088     void drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const;
   26089 
   26090     void processCommandsNVX( const CmdProcessCommandsInfoNVX* pProcessCommandsInfo ) const;
   26091 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26092     void processCommandsNVX( const CmdProcessCommandsInfoNVX & processCommandsInfo ) const;
   26093 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26094 
   26095     void reserveSpaceForCommandsNVX( const CmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo ) const;
   26096 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26097     void reserveSpaceForCommandsNVX( const CmdReserveSpaceForCommandsInfoNVX & reserveSpaceInfo ) const;
   26098 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26099 
   26100     void pushDescriptorSetKHR( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites ) const;
   26101 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26102     void pushDescriptorSetKHR( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t set, ArrayProxy<const WriteDescriptorSet> descriptorWrites ) const;
   26103 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26104 
   26105     void setDeviceMaskKHX( uint32_t deviceMask ) const;
   26106 
   26107     void dispatchBaseKHX( uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const;
   26108 
   26109     void pushDescriptorSetWithTemplateKHR( DescriptorUpdateTemplateKHR descriptorUpdateTemplate, PipelineLayout layout, uint32_t set, const void* pData ) const;
   26110 
   26111     void setViewportWScalingNV( uint32_t firstViewport, uint32_t viewportCount, const ViewportWScalingNV* pViewportWScalings ) const;
   26112 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26113     void setViewportWScalingNV( uint32_t firstViewport, ArrayProxy<const ViewportWScalingNV> viewportWScalings ) const;
   26114 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26115 
   26116     void setDiscardRectangleEXT( uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const Rect2D* pDiscardRectangles ) const;
   26117 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26118     void setDiscardRectangleEXT( uint32_t firstDiscardRectangle, ArrayProxy<const Rect2D> discardRectangles ) const;
   26119 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26120 
   26121     void setSampleLocationsEXT( const SampleLocationsInfoEXT* pSampleLocationsInfo ) const;
   26122 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26123     void setSampleLocationsEXT( const SampleLocationsInfoEXT & sampleLocationsInfo ) const;
   26124 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26125 
   26126 
   26127 
   26128     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCommandBuffer() const
   26129     {
   26130       return m_commandBuffer;
   26131     }
   26132 
   26133     explicit operator bool() const
   26134     {
   26135       return m_commandBuffer != VK_NULL_HANDLE;
   26136     }
   26137 
   26138     bool operator!() const
   26139     {
   26140       return m_commandBuffer == VK_NULL_HANDLE;
   26141     }
   26142 
   26143   private:
   26144     VkCommandBuffer m_commandBuffer;
   26145   };
   26146 
   26147   static_assert( sizeof( CommandBuffer ) == sizeof( VkCommandBuffer ), "handle and wrapper have different size!" );
   26148 
   26149   VULKAN_HPP_INLINE Result CommandBuffer::begin( const CommandBufferBeginInfo* pBeginInfo ) const
   26150   {
   26151     return static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( pBeginInfo ) ) );
   26152   }
   26153 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26154   VULKAN_HPP_INLINE ResultValueType<void>::type CommandBuffer::begin( const CommandBufferBeginInfo & beginInfo ) const
   26155   {
   26156     Result result = static_cast<Result>( vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast<const VkCommandBufferBeginInfo*>( &beginInfo ) ) );
   26157     return createResultValue( result, "VULKAN_HPP_NAMESPACE::CommandBuffer::begin" );
   26158   }
   26159 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26160 
   26161 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26162   VULKAN_HPP_INLINE Result CommandBuffer::end() const
   26163   {
   26164     return static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
   26165   }
   26166 #else
   26167   VULKAN_HPP_INLINE ResultValueType<void>::type CommandBuffer::end() const
   26168   {
   26169     Result result = static_cast<Result>( vkEndCommandBuffer( m_commandBuffer ) );
   26170     return createResultValue( result, "VULKAN_HPP_NAMESPACE::CommandBuffer::end" );
   26171   }
   26172 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26173 
   26174 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26175   VULKAN_HPP_INLINE Result CommandBuffer::reset( CommandBufferResetFlags flags ) const
   26176   {
   26177     return static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
   26178   }
   26179 #else
   26180   VULKAN_HPP_INLINE ResultValueType<void>::type CommandBuffer::reset( CommandBufferResetFlags flags ) const
   26181   {
   26182     Result result = static_cast<Result>( vkResetCommandBuffer( m_commandBuffer, static_cast<VkCommandBufferResetFlags>( flags ) ) );
   26183     return createResultValue( result, "VULKAN_HPP_NAMESPACE::CommandBuffer::reset" );
   26184   }
   26185 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26186 
   26187   VULKAN_HPP_INLINE void CommandBuffer::bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline ) const
   26188   {
   26189     vkCmdBindPipeline( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipeline>( pipeline ) );
   26190   }
   26191 
   26192   VULKAN_HPP_INLINE void CommandBuffer::setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport* pViewports ) const
   26193   {
   26194     vkCmdSetViewport( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast<const VkViewport*>( pViewports ) );
   26195   }
   26196 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26197   VULKAN_HPP_INLINE void CommandBuffer::setViewport( uint32_t firstViewport, ArrayProxy<const Viewport> viewports ) const
   26198   {
   26199     vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size() , reinterpret_cast<const VkViewport*>( viewports.data() ) );
   26200   }
   26201 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26202 
   26203   VULKAN_HPP_INLINE void CommandBuffer::setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D* pScissors ) const
   26204   {
   26205     vkCmdSetScissor( m_commandBuffer, firstScissor, scissorCount, reinterpret_cast<const VkRect2D*>( pScissors ) );
   26206   }
   26207 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26208   VULKAN_HPP_INLINE void CommandBuffer::setScissor( uint32_t firstScissor, ArrayProxy<const Rect2D> scissors ) const
   26209   {
   26210     vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size() , reinterpret_cast<const VkRect2D*>( scissors.data() ) );
   26211   }
   26212 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26213 
   26214   VULKAN_HPP_INLINE void CommandBuffer::setLineWidth( float lineWidth ) const
   26215   {
   26216     vkCmdSetLineWidth( m_commandBuffer, lineWidth );
   26217   }
   26218 
   26219   VULKAN_HPP_INLINE void CommandBuffer::setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const
   26220   {
   26221     vkCmdSetDepthBias( m_commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
   26222   }
   26223 
   26224   VULKAN_HPP_INLINE void CommandBuffer::setBlendConstants( const float blendConstants[4] ) const
   26225   {
   26226     vkCmdSetBlendConstants( m_commandBuffer, blendConstants );
   26227   }
   26228 
   26229   VULKAN_HPP_INLINE void CommandBuffer::setDepthBounds( float minDepthBounds, float maxDepthBounds ) const
   26230   {
   26231     vkCmdSetDepthBounds( m_commandBuffer, minDepthBounds, maxDepthBounds );
   26232   }
   26233 
   26234   VULKAN_HPP_INLINE void CommandBuffer::setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask ) const
   26235   {
   26236     vkCmdSetStencilCompareMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), compareMask );
   26237   }
   26238 
   26239   VULKAN_HPP_INLINE void CommandBuffer::setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask ) const
   26240   {
   26241     vkCmdSetStencilWriteMask( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), writeMask );
   26242   }
   26243 
   26244   VULKAN_HPP_INLINE void CommandBuffer::setStencilReference( StencilFaceFlags faceMask, uint32_t reference ) const
   26245   {
   26246     vkCmdSetStencilReference( m_commandBuffer, static_cast<VkStencilFaceFlags>( faceMask ), reference );
   26247   }
   26248 
   26249   VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets ) const
   26250   {
   26251     vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ), dynamicOffsetCount, pDynamicOffsets );
   26252   }
   26253 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26254   VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, ArrayProxy<const DescriptorSet> descriptorSets, ArrayProxy<const uint32_t> dynamicOffsets ) const
   26255   {
   26256     vkCmdBindDescriptorSets( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), firstSet, descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ), dynamicOffsets.size() , dynamicOffsets.data() );
   26257   }
   26258 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26259 
   26260   VULKAN_HPP_INLINE void CommandBuffer::bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType ) const
   26261   {
   26262     vkCmdBindIndexBuffer( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkIndexType>( indexType ) );
   26263   }
   26264 
   26265   VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const Buffer* pBuffers, const DeviceSize* pOffsets ) const
   26266   {
   26267     vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, bindingCount, reinterpret_cast<const VkBuffer*>( pBuffers ), pOffsets );
   26268   }
   26269 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26270   VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers( uint32_t firstBinding, ArrayProxy<const Buffer> buffers, ArrayProxy<const DeviceSize> offsets ) const
   26271   {
   26272 #ifdef VULKAN_HPP_NO_EXCEPTIONS
   26273     assert( buffers.size() == offsets.size() );
   26274 #else
   26275     if ( buffers.size() != offsets.size() )
   26276     {
   26277       throw LogicError( "VULKAN_HPP_NAMESPACE::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" );
   26278     }
   26279 #endif  // VULKAN_HPP_NO_EXCEPTIONS
   26280     vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, buffers.size() , reinterpret_cast<const VkBuffer*>( buffers.data() ), offsets.data() );
   26281   }
   26282 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26283 
   26284   VULKAN_HPP_INLINE void CommandBuffer::draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const
   26285   {
   26286     vkCmdDraw( m_commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
   26287   }
   26288 
   26289   VULKAN_HPP_INLINE void CommandBuffer::drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const
   26290   {
   26291     vkCmdDrawIndexed( m_commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
   26292   }
   26293 
   26294   VULKAN_HPP_INLINE void CommandBuffer::drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
   26295   {
   26296     vkCmdDrawIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
   26297   }
   26298 
   26299   VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride ) const
   26300   {
   26301     vkCmdDrawIndexedIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, drawCount, stride );
   26302   }
   26303 
   26304   VULKAN_HPP_INLINE void CommandBuffer::dispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const
   26305   {
   26306     vkCmdDispatch( m_commandBuffer, groupCountX, groupCountY, groupCountZ );
   26307   }
   26308 
   26309   VULKAN_HPP_INLINE void CommandBuffer::dispatchIndirect( Buffer buffer, DeviceSize offset ) const
   26310   {
   26311     vkCmdDispatchIndirect( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset );
   26312   }
   26313 
   26314   VULKAN_HPP_INLINE void CommandBuffer::copyBuffer( Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy* pRegions ) const
   26315   {
   26316     vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferCopy*>( pRegions ) );
   26317   }
   26318 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26319   VULKAN_HPP_INLINE void CommandBuffer::copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy<const BufferCopy> regions ) const
   26320   {
   26321     vkCmdCopyBuffer( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferCopy*>( regions.data() ) );
   26322   }
   26323 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26324 
   26325   VULKAN_HPP_INLINE void CommandBuffer::copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageCopy* pRegions ) const
   26326   {
   26327     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 ) );
   26328   }
   26329 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26330   VULKAN_HPP_INLINE void CommandBuffer::copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageCopy> regions ) const
   26331   {
   26332     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() ) );
   26333   }
   26334 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26335 
   26336   VULKAN_HPP_INLINE void CommandBuffer::blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageBlit* pRegions, Filter filter ) const
   26337   {
   26338     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 ) );
   26339   }
   26340 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26341   VULKAN_HPP_INLINE void CommandBuffer::blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageBlit> regions, Filter filter ) const
   26342   {
   26343     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 ) );
   26344   }
   26345 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26346 
   26347   VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const BufferImageCopy* pRegions ) const
   26348   {
   26349     vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
   26350   }
   26351 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26352   VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const BufferImageCopy> regions ) const
   26353   {
   26354     vkCmdCopyBufferToImage( m_commandBuffer, static_cast<VkBuffer>( srcBuffer ), static_cast<VkImage>( dstImage ), static_cast<VkImageLayout>( dstImageLayout ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
   26355   }
   26356 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26357 
   26358   VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, uint32_t regionCount, const BufferImageCopy* pRegions ) const
   26359   {
   26360     vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regionCount, reinterpret_cast<const VkBufferImageCopy*>( pRegions ) );
   26361   }
   26362 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26363   VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, ArrayProxy<const BufferImageCopy> regions ) const
   26364   {
   26365     vkCmdCopyImageToBuffer( m_commandBuffer, static_cast<VkImage>( srcImage ), static_cast<VkImageLayout>( srcImageLayout ), static_cast<VkBuffer>( dstBuffer ), regions.size() , reinterpret_cast<const VkBufferImageCopy*>( regions.data() ) );
   26366   }
   26367 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26368 
   26369   VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void* pData ) const
   26370   {
   26371     vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, dataSize, pData );
   26372   }
   26373 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26374   template <typename T>
   26375   VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy<const T> data ) const
   26376   {
   26377     vkCmdUpdateBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, data.size() * sizeof( T ) , reinterpret_cast<const void*>( data.data() ) );
   26378   }
   26379 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26380 
   26381   VULKAN_HPP_INLINE void CommandBuffer::fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data ) const
   26382   {
   26383     vkCmdFillBuffer( m_commandBuffer, static_cast<VkBuffer>( dstBuffer ), dstOffset, size, data );
   26384   }
   26385 
   26386   VULKAN_HPP_INLINE void CommandBuffer::clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue* pColor, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
   26387   {
   26388     vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( pColor ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
   26389   }
   26390 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26391   VULKAN_HPP_INLINE void CommandBuffer::clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ArrayProxy<const ImageSubresourceRange> ranges ) const
   26392   {
   26393     vkCmdClearColorImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearColorValue*>( &color ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
   26394   }
   26395 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26396 
   26397   VULKAN_HPP_INLINE void CommandBuffer::clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const ImageSubresourceRange* pRanges ) const
   26398   {
   26399     vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( pDepthStencil ), rangeCount, reinterpret_cast<const VkImageSubresourceRange*>( pRanges ) );
   26400   }
   26401 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26402   VULKAN_HPP_INLINE void CommandBuffer::clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ArrayProxy<const ImageSubresourceRange> ranges ) const
   26403   {
   26404     vkCmdClearDepthStencilImage( m_commandBuffer, static_cast<VkImage>( image ), static_cast<VkImageLayout>( imageLayout ), reinterpret_cast<const VkClearDepthStencilValue*>( &depthStencil ), ranges.size() , reinterpret_cast<const VkImageSubresourceRange*>( ranges.data() ) );
   26405   }
   26406 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26407 
   26408   VULKAN_HPP_INLINE void CommandBuffer::clearAttachments( uint32_t attachmentCount, const ClearAttachment* pAttachments, uint32_t rectCount, const ClearRect* pRects ) const
   26409   {
   26410     vkCmdClearAttachments( m_commandBuffer, attachmentCount, reinterpret_cast<const VkClearAttachment*>( pAttachments ), rectCount, reinterpret_cast<const VkClearRect*>( pRects ) );
   26411   }
   26412 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26413   VULKAN_HPP_INLINE void CommandBuffer::clearAttachments( ArrayProxy<const ClearAttachment> attachments, ArrayProxy<const ClearRect> rects ) const
   26414   {
   26415     vkCmdClearAttachments( m_commandBuffer, attachments.size() , reinterpret_cast<const VkClearAttachment*>( attachments.data() ), rects.size() , reinterpret_cast<const VkClearRect*>( rects.data() ) );
   26416   }
   26417 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26418 
   26419   VULKAN_HPP_INLINE void CommandBuffer::resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, uint32_t regionCount, const ImageResolve* pRegions ) const
   26420   {
   26421     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 ) );
   26422   }
   26423 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26424   VULKAN_HPP_INLINE void CommandBuffer::resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ArrayProxy<const ImageResolve> regions ) const
   26425   {
   26426     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() ) );
   26427   }
   26428 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26429 
   26430   VULKAN_HPP_INLINE void CommandBuffer::setEvent( Event event, PipelineStageFlags stageMask ) const
   26431   {
   26432     vkCmdSetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
   26433   }
   26434 
   26435   VULKAN_HPP_INLINE void CommandBuffer::resetEvent( Event event, PipelineStageFlags stageMask ) const
   26436   {
   26437     vkCmdResetEvent( m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags>( stageMask ) );
   26438   }
   26439 
   26440   VULKAN_HPP_INLINE void CommandBuffer::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
   26441   {
   26442     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 ) );
   26443   }
   26444 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26445   VULKAN_HPP_INLINE void CommandBuffer::waitEvents( ArrayProxy<const Event> events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
   26446   {
   26447     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() ) );
   26448   }
   26449 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26450 
   26451   VULKAN_HPP_INLINE void CommandBuffer::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
   26452   {
   26453     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 ) );
   26454   }
   26455 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26456   VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, ArrayProxy<const MemoryBarrier> memoryBarriers, ArrayProxy<const BufferMemoryBarrier> bufferMemoryBarriers, ArrayProxy<const ImageMemoryBarrier> imageMemoryBarriers ) const
   26457   {
   26458     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() ) );
   26459   }
   26460 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26461 
   26462   VULKAN_HPP_INLINE void CommandBuffer::beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags ) const
   26463   {
   26464     vkCmdBeginQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query, static_cast<VkQueryControlFlags>( flags ) );
   26465   }
   26466 
   26467   VULKAN_HPP_INLINE void CommandBuffer::endQuery( QueryPool queryPool, uint32_t query ) const
   26468   {
   26469     vkCmdEndQuery( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), query );
   26470   }
   26471 
   26472   VULKAN_HPP_INLINE void CommandBuffer::resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const
   26473   {
   26474     vkCmdResetQueryPool( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount );
   26475   }
   26476 
   26477   VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query ) const
   26478   {
   26479     vkCmdWriteTimestamp( m_commandBuffer, static_cast<VkPipelineStageFlagBits>( pipelineStage ), static_cast<VkQueryPool>( queryPool ), query );
   26480   }
   26481 
   26482   VULKAN_HPP_INLINE void CommandBuffer::copyQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Buffer dstBuffer, DeviceSize dstOffset, DeviceSize stride, QueryResultFlags flags ) const
   26483   {
   26484     vkCmdCopyQueryPoolResults( m_commandBuffer, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, static_cast<VkBuffer>( dstBuffer ), dstOffset, stride, static_cast<VkQueryResultFlags>( flags ) );
   26485   }
   26486 
   26487   VULKAN_HPP_INLINE void CommandBuffer::pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues ) const
   26488   {
   26489     vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, size, pValues );
   26490   }
   26491 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26492   template <typename T>
   26493   VULKAN_HPP_INLINE void CommandBuffer::pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, ArrayProxy<const T> values ) const
   26494   {
   26495     vkCmdPushConstants( m_commandBuffer, static_cast<VkPipelineLayout>( layout ), static_cast<VkShaderStageFlags>( stageFlags ), offset, values.size() * sizeof( T ) , reinterpret_cast<const void*>( values.data() ) );
   26496   }
   26497 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26498 
   26499   VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass( const RenderPassBeginInfo* pRenderPassBegin, SubpassContents contents ) const
   26500   {
   26501     vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( pRenderPassBegin ), static_cast<VkSubpassContents>( contents ) );
   26502   }
   26503 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26504   VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents ) const
   26505   {
   26506     vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast<const VkRenderPassBeginInfo*>( &renderPassBegin ), static_cast<VkSubpassContents>( contents ) );
   26507   }
   26508 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26509 
   26510   VULKAN_HPP_INLINE void CommandBuffer::nextSubpass( SubpassContents contents ) const
   26511   {
   26512     vkCmdNextSubpass( m_commandBuffer, static_cast<VkSubpassContents>( contents ) );
   26513   }
   26514 
   26515   VULKAN_HPP_INLINE void CommandBuffer::endRenderPass() const
   26516   {
   26517     vkCmdEndRenderPass( m_commandBuffer );
   26518   }
   26519 
   26520   VULKAN_HPP_INLINE void CommandBuffer::executeCommands( uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
   26521   {
   26522     vkCmdExecuteCommands( m_commandBuffer, commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
   26523   }
   26524 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26525   VULKAN_HPP_INLINE void CommandBuffer::executeCommands( ArrayProxy<const CommandBuffer> commandBuffers ) const
   26526   {
   26527     vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
   26528   }
   26529 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26530 
   26531   VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
   26532   {
   26533     vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
   26534   }
   26535 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26536   VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT & markerInfo ) const
   26537   {
   26538     vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
   26539   }
   26540 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26541 
   26542   VULKAN_HPP_INLINE void CommandBuffer::debugMarkerEndEXT() const
   26543   {
   26544     vkCmdDebugMarkerEndEXT( m_commandBuffer );
   26545   }
   26546 
   26547   VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT* pMarkerInfo ) const
   26548   {
   26549     vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>( pMarkerInfo ) );
   26550   }
   26551 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26552   VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT & markerInfo ) const
   26553   {
   26554     vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<const VkDebugMarkerMarkerInfoEXT*>( &markerInfo ) );
   26555   }
   26556 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26557 
   26558   VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
   26559   {
   26560     vkCmdDrawIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
   26561   }
   26562 
   26563   VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountAMD( Buffer buffer, DeviceSize offset, Buffer countBuffer, DeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) const
   26564   {
   26565     vkCmdDrawIndexedIndirectCountAMD( m_commandBuffer, static_cast<VkBuffer>( buffer ), offset, static_cast<VkBuffer>( countBuffer ), countBufferOffset, maxDrawCount, stride );
   26566   }
   26567 
   26568   VULKAN_HPP_INLINE void CommandBuffer::processCommandsNVX( const CmdProcessCommandsInfoNVX* pProcessCommandsInfo ) const
   26569   {
   26570     vkCmdProcessCommandsNVX( m_commandBuffer, reinterpret_cast<const VkCmdProcessCommandsInfoNVX*>( pProcessCommandsInfo ) );
   26571   }
   26572 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26573   VULKAN_HPP_INLINE void CommandBuffer::processCommandsNVX( const CmdProcessCommandsInfoNVX & processCommandsInfo ) const
   26574   {
   26575     vkCmdProcessCommandsNVX( m_commandBuffer, reinterpret_cast<const VkCmdProcessCommandsInfoNVX*>( &processCommandsInfo ) );
   26576   }
   26577 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26578 
   26579   VULKAN_HPP_INLINE void CommandBuffer::reserveSpaceForCommandsNVX( const CmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo ) const
   26580   {
   26581     vkCmdReserveSpaceForCommandsNVX( m_commandBuffer, reinterpret_cast<const VkCmdReserveSpaceForCommandsInfoNVX*>( pReserveSpaceInfo ) );
   26582   }
   26583 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26584   VULKAN_HPP_INLINE void CommandBuffer::reserveSpaceForCommandsNVX( const CmdReserveSpaceForCommandsInfoNVX & reserveSpaceInfo ) const
   26585   {
   26586     vkCmdReserveSpaceForCommandsNVX( m_commandBuffer, reinterpret_cast<const VkCmdReserveSpaceForCommandsInfoNVX*>( &reserveSpaceInfo ) );
   26587   }
   26588 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26589 
   26590   VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetKHR( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites ) const
   26591   {
   26592     vkCmdPushDescriptorSetKHR( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), set, descriptorWriteCount, reinterpret_cast<const VkWriteDescriptorSet*>( pDescriptorWrites ) );
   26593   }
   26594 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26595   VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetKHR( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t set, ArrayProxy<const WriteDescriptorSet> descriptorWrites ) const
   26596   {
   26597     vkCmdPushDescriptorSetKHR( m_commandBuffer, static_cast<VkPipelineBindPoint>( pipelineBindPoint ), static_cast<VkPipelineLayout>( layout ), set, descriptorWrites.size() , reinterpret_cast<const VkWriteDescriptorSet*>( descriptorWrites.data() ) );
   26598   }
   26599 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26600 
   26601   VULKAN_HPP_INLINE void CommandBuffer::setDeviceMaskKHX( uint32_t deviceMask ) const
   26602   {
   26603     vkCmdSetDeviceMaskKHX( m_commandBuffer, deviceMask );
   26604   }
   26605 
   26606   VULKAN_HPP_INLINE void CommandBuffer::dispatchBaseKHX( uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const
   26607   {
   26608     vkCmdDispatchBaseKHX( m_commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ );
   26609   }
   26610 
   26611   VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR( DescriptorUpdateTemplateKHR descriptorUpdateTemplate, PipelineLayout layout, uint32_t set, const void* pData ) const
   26612   {
   26613     vkCmdPushDescriptorSetWithTemplateKHR( m_commandBuffer, static_cast<VkDescriptorUpdateTemplateKHR>( descriptorUpdateTemplate ), static_cast<VkPipelineLayout>( layout ), set, pData );
   26614   }
   26615 
   26616   VULKAN_HPP_INLINE void CommandBuffer::setViewportWScalingNV( uint32_t firstViewport, uint32_t viewportCount, const ViewportWScalingNV* pViewportWScalings ) const
   26617   {
   26618     vkCmdSetViewportWScalingNV( m_commandBuffer, firstViewport, viewportCount, reinterpret_cast<const VkViewportWScalingNV*>( pViewportWScalings ) );
   26619   }
   26620 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26621   VULKAN_HPP_INLINE void CommandBuffer::setViewportWScalingNV( uint32_t firstViewport, ArrayProxy<const ViewportWScalingNV> viewportWScalings ) const
   26622   {
   26623     vkCmdSetViewportWScalingNV( m_commandBuffer, firstViewport, viewportWScalings.size() , reinterpret_cast<const VkViewportWScalingNV*>( viewportWScalings.data() ) );
   26624   }
   26625 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26626 
   26627   VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleEXT( uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const Rect2D* pDiscardRectangles ) const
   26628   {
   26629     vkCmdSetDiscardRectangleEXT( m_commandBuffer, firstDiscardRectangle, discardRectangleCount, reinterpret_cast<const VkRect2D*>( pDiscardRectangles ) );
   26630   }
   26631 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26632   VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleEXT( uint32_t firstDiscardRectangle, ArrayProxy<const Rect2D> discardRectangles ) const
   26633   {
   26634     vkCmdSetDiscardRectangleEXT( m_commandBuffer, firstDiscardRectangle, discardRectangles.size() , reinterpret_cast<const VkRect2D*>( discardRectangles.data() ) );
   26635   }
   26636 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26637 
   26638   VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEXT( const SampleLocationsInfoEXT* pSampleLocationsInfo ) const
   26639   {
   26640     vkCmdSetSampleLocationsEXT( m_commandBuffer, reinterpret_cast<const VkSampleLocationsInfoEXT*>( pSampleLocationsInfo ) );
   26641   }
   26642 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26643   VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEXT( const SampleLocationsInfoEXT & sampleLocationsInfo ) const
   26644   {
   26645     vkCmdSetSampleLocationsEXT( m_commandBuffer, reinterpret_cast<const VkSampleLocationsInfoEXT*>( &sampleLocationsInfo ) );
   26646   }
   26647 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26648 
   26649   struct SubmitInfo
   26650   {
   26651     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 )
   26652       : waitSemaphoreCount( waitSemaphoreCount_ )
   26653       , pWaitSemaphores( pWaitSemaphores_ )
   26654       , pWaitDstStageMask( pWaitDstStageMask_ )
   26655       , commandBufferCount( commandBufferCount_ )
   26656       , pCommandBuffers( pCommandBuffers_ )
   26657       , signalSemaphoreCount( signalSemaphoreCount_ )
   26658       , pSignalSemaphores( pSignalSemaphores_ )
   26659     {
   26660     }
   26661 
   26662     SubmitInfo( VkSubmitInfo const & rhs )
   26663     {
   26664       memcpy( this, &rhs, sizeof( SubmitInfo ) );
   26665     }
   26666 
   26667     SubmitInfo& operator=( VkSubmitInfo const & rhs )
   26668     {
   26669       memcpy( this, &rhs, sizeof( SubmitInfo ) );
   26670       return *this;
   26671     }
   26672     SubmitInfo& setPNext( const void* pNext_ )
   26673     {
   26674       pNext = pNext_;
   26675       return *this;
   26676     }
   26677 
   26678     SubmitInfo& setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ )
   26679     {
   26680       waitSemaphoreCount = waitSemaphoreCount_;
   26681       return *this;
   26682     }
   26683 
   26684     SubmitInfo& setPWaitSemaphores( const Semaphore* pWaitSemaphores_ )
   26685     {
   26686       pWaitSemaphores = pWaitSemaphores_;
   26687       return *this;
   26688     }
   26689 
   26690     SubmitInfo& setPWaitDstStageMask( const PipelineStageFlags* pWaitDstStageMask_ )
   26691     {
   26692       pWaitDstStageMask = pWaitDstStageMask_;
   26693       return *this;
   26694     }
   26695 
   26696     SubmitInfo& setCommandBufferCount( uint32_t commandBufferCount_ )
   26697     {
   26698       commandBufferCount = commandBufferCount_;
   26699       return *this;
   26700     }
   26701 
   26702     SubmitInfo& setPCommandBuffers( const CommandBuffer* pCommandBuffers_ )
   26703     {
   26704       pCommandBuffers = pCommandBuffers_;
   26705       return *this;
   26706     }
   26707 
   26708     SubmitInfo& setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ )
   26709     {
   26710       signalSemaphoreCount = signalSemaphoreCount_;
   26711       return *this;
   26712     }
   26713 
   26714     SubmitInfo& setPSignalSemaphores( const Semaphore* pSignalSemaphores_ )
   26715     {
   26716       pSignalSemaphores = pSignalSemaphores_;
   26717       return *this;
   26718     }
   26719 
   26720     operator const VkSubmitInfo&() const
   26721     {
   26722       return *reinterpret_cast<const VkSubmitInfo*>(this);
   26723     }
   26724 
   26725     bool operator==( SubmitInfo const& rhs ) const
   26726     {
   26727       return ( sType == rhs.sType )
   26728           && ( pNext == rhs.pNext )
   26729           && ( waitSemaphoreCount == rhs.waitSemaphoreCount )
   26730           && ( pWaitSemaphores == rhs.pWaitSemaphores )
   26731           && ( pWaitDstStageMask == rhs.pWaitDstStageMask )
   26732           && ( commandBufferCount == rhs.commandBufferCount )
   26733           && ( pCommandBuffers == rhs.pCommandBuffers )
   26734           && ( signalSemaphoreCount == rhs.signalSemaphoreCount )
   26735           && ( pSignalSemaphores == rhs.pSignalSemaphores );
   26736     }
   26737 
   26738     bool operator!=( SubmitInfo const& rhs ) const
   26739     {
   26740       return !operator==( rhs );
   26741     }
   26742 
   26743   private:
   26744     StructureType sType = StructureType::eSubmitInfo;
   26745 
   26746   public:
   26747     const void* pNext = nullptr;
   26748     uint32_t waitSemaphoreCount;
   26749     const Semaphore* pWaitSemaphores;
   26750     const PipelineStageFlags* pWaitDstStageMask;
   26751     uint32_t commandBufferCount;
   26752     const CommandBuffer* pCommandBuffers;
   26753     uint32_t signalSemaphoreCount;
   26754     const Semaphore* pSignalSemaphores;
   26755   };
   26756   static_assert( sizeof( SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" );
   26757 
   26758   class Queue
   26759   {
   26760   public:
   26761     Queue()
   26762       : m_queue(VK_NULL_HANDLE)
   26763     {}
   26764 
   26765     Queue( std::nullptr_t )
   26766       : m_queue(VK_NULL_HANDLE)
   26767     {}
   26768 
   26769     VULKAN_HPP_TYPESAFE_EXPLICIT Queue( VkQueue queue )
   26770       : m_queue( queue )
   26771     {}
   26772 
   26773 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   26774     Queue & operator=(VkQueue queue)
   26775     {
   26776       m_queue = queue;
   26777       return *this;
   26778     }
   26779 #endif
   26780 
   26781     Queue & operator=( std::nullptr_t )
   26782     {
   26783       m_queue = VK_NULL_HANDLE;
   26784       return *this;
   26785     }
   26786 
   26787     bool operator==( Queue const & rhs ) const
   26788     {
   26789       return m_queue == rhs.m_queue;
   26790     }
   26791 
   26792     bool operator!=(Queue const & rhs ) const
   26793     {
   26794       return m_queue != rhs.m_queue;
   26795     }
   26796 
   26797     bool operator<(Queue const & rhs ) const
   26798     {
   26799       return m_queue < rhs.m_queue;
   26800     }
   26801 
   26802     Result submit( uint32_t submitCount, const SubmitInfo* pSubmits, Fence fence ) const;
   26803 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26804     ResultValueType<void>::type submit( ArrayProxy<const SubmitInfo> submits, Fence fence ) const;
   26805 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26806 
   26807 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26808     Result waitIdle() const;
   26809 #else
   26810     ResultValueType<void>::type waitIdle() const;
   26811 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26812 
   26813     Result bindSparse( uint32_t bindInfoCount, const BindSparseInfo* pBindInfo, Fence fence ) const;
   26814 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26815     ResultValueType<void>::type bindSparse( ArrayProxy<const BindSparseInfo> bindInfo, Fence fence ) const;
   26816 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26817 
   26818     Result presentKHR( const PresentInfoKHR* pPresentInfo ) const;
   26819 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26820     Result presentKHR( const PresentInfoKHR & presentInfo ) const;
   26821 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26822 
   26823 
   26824 
   26825     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkQueue() const
   26826     {
   26827       return m_queue;
   26828     }
   26829 
   26830     explicit operator bool() const
   26831     {
   26832       return m_queue != VK_NULL_HANDLE;
   26833     }
   26834 
   26835     bool operator!() const
   26836     {
   26837       return m_queue == VK_NULL_HANDLE;
   26838     }
   26839 
   26840   private:
   26841     VkQueue m_queue;
   26842   };
   26843 
   26844   static_assert( sizeof( Queue ) == sizeof( VkQueue ), "handle and wrapper have different size!" );
   26845 
   26846   VULKAN_HPP_INLINE Result Queue::submit( uint32_t submitCount, const SubmitInfo* pSubmits, Fence fence ) const
   26847   {
   26848     return static_cast<Result>( vkQueueSubmit( m_queue, submitCount, reinterpret_cast<const VkSubmitInfo*>( pSubmits ), static_cast<VkFence>( fence ) ) );
   26849   }
   26850 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26851   VULKAN_HPP_INLINE ResultValueType<void>::type Queue::submit( ArrayProxy<const SubmitInfo> submits, Fence fence ) const
   26852   {
   26853     Result result = static_cast<Result>( vkQueueSubmit( m_queue, submits.size() , reinterpret_cast<const VkSubmitInfo*>( submits.data() ), static_cast<VkFence>( fence ) ) );
   26854     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Queue::submit" );
   26855   }
   26856 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26857 
   26858 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26859   VULKAN_HPP_INLINE Result Queue::waitIdle() const
   26860   {
   26861     return static_cast<Result>( vkQueueWaitIdle( m_queue ) );
   26862   }
   26863 #else
   26864   VULKAN_HPP_INLINE ResultValueType<void>::type Queue::waitIdle() const
   26865   {
   26866     Result result = static_cast<Result>( vkQueueWaitIdle( m_queue ) );
   26867     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Queue::waitIdle" );
   26868   }
   26869 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26870 
   26871   VULKAN_HPP_INLINE Result Queue::bindSparse( uint32_t bindInfoCount, const BindSparseInfo* pBindInfo, Fence fence ) const
   26872   {
   26873     return static_cast<Result>( vkQueueBindSparse( m_queue, bindInfoCount, reinterpret_cast<const VkBindSparseInfo*>( pBindInfo ), static_cast<VkFence>( fence ) ) );
   26874   }
   26875 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26876   VULKAN_HPP_INLINE ResultValueType<void>::type Queue::bindSparse( ArrayProxy<const BindSparseInfo> bindInfo, Fence fence ) const
   26877   {
   26878     Result result = static_cast<Result>( vkQueueBindSparse( m_queue, bindInfo.size() , reinterpret_cast<const VkBindSparseInfo*>( bindInfo.data() ), static_cast<VkFence>( fence ) ) );
   26879     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Queue::bindSparse" );
   26880   }
   26881 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26882 
   26883   VULKAN_HPP_INLINE Result Queue::presentKHR( const PresentInfoKHR* pPresentInfo ) const
   26884   {
   26885     return static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( pPresentInfo ) ) );
   26886   }
   26887 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   26888   VULKAN_HPP_INLINE Result Queue::presentKHR( const PresentInfoKHR & presentInfo ) const
   26889   {
   26890     Result result = static_cast<Result>( vkQueuePresentKHR( m_queue, reinterpret_cast<const VkPresentInfoKHR*>( &presentInfo ) ) );
   26891     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } );
   26892   }
   26893 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   26894 
   26895 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   26896   class BufferDeleter;
   26897   template <> class UniqueHandleTraits<Buffer> {public: using deleter = BufferDeleter; };
   26898   using UniqueBuffer = UniqueHandle<Buffer>;
   26899   class BufferViewDeleter;
   26900   template <> class UniqueHandleTraits<BufferView> {public: using deleter = BufferViewDeleter; };
   26901   using UniqueBufferView = UniqueHandle<BufferView>;
   26902   class CommandBufferDeleter;
   26903   template <> class UniqueHandleTraits<CommandBuffer> {public: using deleter = CommandBufferDeleter; };
   26904   using UniqueCommandBuffer = UniqueHandle<CommandBuffer>;
   26905   class CommandPoolDeleter;
   26906   template <> class UniqueHandleTraits<CommandPool> {public: using deleter = CommandPoolDeleter; };
   26907   using UniqueCommandPool = UniqueHandle<CommandPool>;
   26908   class DescriptorPoolDeleter;
   26909   template <> class UniqueHandleTraits<DescriptorPool> {public: using deleter = DescriptorPoolDeleter; };
   26910   using UniqueDescriptorPool = UniqueHandle<DescriptorPool>;
   26911   class DescriptorSetDeleter;
   26912   template <> class UniqueHandleTraits<DescriptorSet> {public: using deleter = DescriptorSetDeleter; };
   26913   using UniqueDescriptorSet = UniqueHandle<DescriptorSet>;
   26914   class DescriptorSetLayoutDeleter;
   26915   template <> class UniqueHandleTraits<DescriptorSetLayout> {public: using deleter = DescriptorSetLayoutDeleter; };
   26916   using UniqueDescriptorSetLayout = UniqueHandle<DescriptorSetLayout>;
   26917   class DescriptorUpdateTemplateKHRDeleter;
   26918   template <> class UniqueHandleTraits<DescriptorUpdateTemplateKHR> {public: using deleter = DescriptorUpdateTemplateKHRDeleter; };
   26919   using UniqueDescriptorUpdateTemplateKHR = UniqueHandle<DescriptorUpdateTemplateKHR>;
   26920   class DeviceMemoryDeleter;
   26921   template <> class UniqueHandleTraits<DeviceMemory> {public: using deleter = DeviceMemoryDeleter; };
   26922   using UniqueDeviceMemory = UniqueHandle<DeviceMemory>;
   26923   class EventDeleter;
   26924   template <> class UniqueHandleTraits<Event> {public: using deleter = EventDeleter; };
   26925   using UniqueEvent = UniqueHandle<Event>;
   26926   class FenceDeleter;
   26927   template <> class UniqueHandleTraits<Fence> {public: using deleter = FenceDeleter; };
   26928   using UniqueFence = UniqueHandle<Fence>;
   26929   class FramebufferDeleter;
   26930   template <> class UniqueHandleTraits<Framebuffer> {public: using deleter = FramebufferDeleter; };
   26931   using UniqueFramebuffer = UniqueHandle<Framebuffer>;
   26932   class ImageDeleter;
   26933   template <> class UniqueHandleTraits<Image> {public: using deleter = ImageDeleter; };
   26934   using UniqueImage = UniqueHandle<Image>;
   26935   class ImageViewDeleter;
   26936   template <> class UniqueHandleTraits<ImageView> {public: using deleter = ImageViewDeleter; };
   26937   using UniqueImageView = UniqueHandle<ImageView>;
   26938   class IndirectCommandsLayoutNVXDeleter;
   26939   template <> class UniqueHandleTraits<IndirectCommandsLayoutNVX> {public: using deleter = IndirectCommandsLayoutNVXDeleter; };
   26940   using UniqueIndirectCommandsLayoutNVX = UniqueHandle<IndirectCommandsLayoutNVX>;
   26941   class ObjectTableNVXDeleter;
   26942   template <> class UniqueHandleTraits<ObjectTableNVX> {public: using deleter = ObjectTableNVXDeleter; };
   26943   using UniqueObjectTableNVX = UniqueHandle<ObjectTableNVX>;
   26944   class PipelineDeleter;
   26945   template <> class UniqueHandleTraits<Pipeline> {public: using deleter = PipelineDeleter; };
   26946   using UniquePipeline = UniqueHandle<Pipeline>;
   26947   class PipelineCacheDeleter;
   26948   template <> class UniqueHandleTraits<PipelineCache> {public: using deleter = PipelineCacheDeleter; };
   26949   using UniquePipelineCache = UniqueHandle<PipelineCache>;
   26950   class PipelineLayoutDeleter;
   26951   template <> class UniqueHandleTraits<PipelineLayout> {public: using deleter = PipelineLayoutDeleter; };
   26952   using UniquePipelineLayout = UniqueHandle<PipelineLayout>;
   26953   class QueryPoolDeleter;
   26954   template <> class UniqueHandleTraits<QueryPool> {public: using deleter = QueryPoolDeleter; };
   26955   using UniqueQueryPool = UniqueHandle<QueryPool>;
   26956   class RenderPassDeleter;
   26957   template <> class UniqueHandleTraits<RenderPass> {public: using deleter = RenderPassDeleter; };
   26958   using UniqueRenderPass = UniqueHandle<RenderPass>;
   26959   class SamplerDeleter;
   26960   template <> class UniqueHandleTraits<Sampler> {public: using deleter = SamplerDeleter; };
   26961   using UniqueSampler = UniqueHandle<Sampler>;
   26962   class SamplerYcbcrConversionKHRDeleter;
   26963   template <> class UniqueHandleTraits<SamplerYcbcrConversionKHR> {public: using deleter = SamplerYcbcrConversionKHRDeleter; };
   26964   using UniqueSamplerYcbcrConversionKHR = UniqueHandle<SamplerYcbcrConversionKHR>;
   26965   class SemaphoreDeleter;
   26966   template <> class UniqueHandleTraits<Semaphore> {public: using deleter = SemaphoreDeleter; };
   26967   using UniqueSemaphore = UniqueHandle<Semaphore>;
   26968   class ShaderModuleDeleter;
   26969   template <> class UniqueHandleTraits<ShaderModule> {public: using deleter = ShaderModuleDeleter; };
   26970   using UniqueShaderModule = UniqueHandle<ShaderModule>;
   26971   class SwapchainKHRDeleter;
   26972   template <> class UniqueHandleTraits<SwapchainKHR> {public: using deleter = SwapchainKHRDeleter; };
   26973   using UniqueSwapchainKHR = UniqueHandle<SwapchainKHR>;
   26974   class ValidationCacheEXTDeleter;
   26975   template <> class UniqueHandleTraits<ValidationCacheEXT> {public: using deleter = ValidationCacheEXTDeleter; };
   26976   using UniqueValidationCacheEXT = UniqueHandle<ValidationCacheEXT>;
   26977 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   26978 
   26979   class Device
   26980   {
   26981   public:
   26982     Device()
   26983       : m_device(VK_NULL_HANDLE)
   26984     {}
   26985 
   26986     Device( std::nullptr_t )
   26987       : m_device(VK_NULL_HANDLE)
   26988     {}
   26989 
   26990     VULKAN_HPP_TYPESAFE_EXPLICIT Device( VkDevice device )
   26991       : m_device( device )
   26992     {}
   26993 
   26994 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   26995     Device & operator=(VkDevice device)
   26996     {
   26997       m_device = device;
   26998       return *this;
   26999     }
   27000 #endif
   27001 
   27002     Device & operator=( std::nullptr_t )
   27003     {
   27004       m_device = VK_NULL_HANDLE;
   27005       return *this;
   27006     }
   27007 
   27008     bool operator==( Device const & rhs ) const
   27009     {
   27010       return m_device == rhs.m_device;
   27011     }
   27012 
   27013     bool operator!=(Device const & rhs ) const
   27014     {
   27015       return m_device != rhs.m_device;
   27016     }
   27017 
   27018     bool operator<(Device const & rhs ) const
   27019     {
   27020       return m_device < rhs.m_device;
   27021     }
   27022 
   27023     PFN_vkVoidFunction getProcAddr( const char* pName ) const;
   27024 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27025     PFN_vkVoidFunction getProcAddr( const std::string & name ) const;
   27026 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27027 
   27028     void destroy( const AllocationCallbacks* pAllocator ) const;
   27029 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27030     void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27031 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27032 
   27033     void getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue* pQueue ) const;
   27034 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27035     Queue getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const;
   27036 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27037 
   27038 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27039     Result waitIdle() const;
   27040 #else
   27041     ResultValueType<void>::type waitIdle() const;
   27042 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27043 
   27044     Result allocateMemory( const MemoryAllocateInfo* pAllocateInfo, const AllocationCallbacks* pAllocator, DeviceMemory* pMemory ) const;
   27045 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27046     ResultValueType<DeviceMemory>::type allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27047 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27048     ResultValueType<UniqueDeviceMemory>::type allocateMemoryUnique( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27049 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27050 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27051 
   27052     void freeMemory( DeviceMemory memory, const AllocationCallbacks* pAllocator ) const;
   27053 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27054     void freeMemory( DeviceMemory memory, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27055 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27056 
   27057     Result mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void** ppData ) const;
   27058 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27059     ResultValueType<void*>::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags = MemoryMapFlags() ) const;
   27060 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27061 
   27062     void unmapMemory( DeviceMemory memory ) const;
   27063 
   27064     Result flushMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const;
   27065 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27066     ResultValueType<void>::type flushMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const;
   27067 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27068 
   27069     Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const;
   27070 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27071     ResultValueType<void>::type invalidateMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const;
   27072 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27073 
   27074     void getMemoryCommitment( DeviceMemory memory, DeviceSize* pCommittedMemoryInBytes ) const;
   27075 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27076     DeviceSize getMemoryCommitment( DeviceMemory memory ) const;
   27077 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27078 
   27079     void getBufferMemoryRequirements( Buffer buffer, MemoryRequirements* pMemoryRequirements ) const;
   27080 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27081     MemoryRequirements getBufferMemoryRequirements( Buffer buffer ) const;
   27082 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27083 
   27084 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27085     Result bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const;
   27086 #else
   27087     ResultValueType<void>::type bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const;
   27088 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27089 
   27090     void getImageMemoryRequirements( Image image, MemoryRequirements* pMemoryRequirements ) const;
   27091 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27092     MemoryRequirements getImageMemoryRequirements( Image image ) const;
   27093 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27094 
   27095 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27096     Result bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const;
   27097 #else
   27098     ResultValueType<void>::type bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const;
   27099 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27100 
   27101     void getImageSparseMemoryRequirements( Image image, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements* pSparseMemoryRequirements ) const;
   27102 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27103     template <typename Allocator = std::allocator<SparseImageMemoryRequirements>>
   27104     std::vector<SparseImageMemoryRequirements,Allocator> getImageSparseMemoryRequirements( Image image ) const;
   27105 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27106 
   27107     Result createFence( const FenceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const;
   27108 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27109     ResultValueType<Fence>::type createFence( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27110 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27111     ResultValueType<UniqueFence>::type createFenceUnique( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27112 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27113 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27114 
   27115     void destroyFence( Fence fence, const AllocationCallbacks* pAllocator ) const;
   27116 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27117     void destroyFence( Fence fence, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27118 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27119 
   27120     Result resetFences( uint32_t fenceCount, const Fence* pFences ) const;
   27121 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27122     ResultValueType<void>::type resetFences( ArrayProxy<const Fence> fences ) const;
   27123 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27124 
   27125     Result getFenceStatus( Fence fence ) const;
   27126 
   27127     Result waitForFences( uint32_t fenceCount, const Fence* pFences, Bool32 waitAll, uint64_t timeout ) const;
   27128 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27129     Result waitForFences( ArrayProxy<const Fence> fences, Bool32 waitAll, uint64_t timeout ) const;
   27130 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27131 
   27132     Result createSemaphore( const SemaphoreCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Semaphore* pSemaphore ) const;
   27133 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27134     ResultValueType<Semaphore>::type createSemaphore( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27135 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27136     ResultValueType<UniqueSemaphore>::type createSemaphoreUnique( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27137 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27138 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27139 
   27140     void destroySemaphore( Semaphore semaphore, const AllocationCallbacks* pAllocator ) const;
   27141 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27142     void destroySemaphore( Semaphore semaphore, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27143 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27144 
   27145     Result createEvent( const EventCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Event* pEvent ) const;
   27146 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27147     ResultValueType<Event>::type createEvent( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27148 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27149     ResultValueType<UniqueEvent>::type createEventUnique( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27150 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27151 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27152 
   27153     void destroyEvent( Event event, const AllocationCallbacks* pAllocator ) const;
   27154 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27155     void destroyEvent( Event event, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27156 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27157 
   27158     Result getEventStatus( Event event ) const;
   27159 
   27160 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27161     Result setEvent( Event event ) const;
   27162 #else
   27163     ResultValueType<void>::type setEvent( Event event ) const;
   27164 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27165 
   27166 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27167     Result resetEvent( Event event ) const;
   27168 #else
   27169     ResultValueType<void>::type resetEvent( Event event ) const;
   27170 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27171 
   27172     Result createQueryPool( const QueryPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, QueryPool* pQueryPool ) const;
   27173 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27174     ResultValueType<QueryPool>::type createQueryPool( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27175 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27176     ResultValueType<UniqueQueryPool>::type createQueryPoolUnique( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27177 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27178 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27179 
   27180     void destroyQueryPool( QueryPool queryPool, const AllocationCallbacks* pAllocator ) const;
   27181 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27182     void destroyQueryPool( QueryPool queryPool, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27183 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27184 
   27185     Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, DeviceSize stride, QueryResultFlags flags ) const;
   27186 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27187     template <typename T>
   27188     Result getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, ArrayProxy<T> data, DeviceSize stride, QueryResultFlags flags ) const;
   27189 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27190 
   27191     Result createBuffer( const BufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Buffer* pBuffer ) const;
   27192 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27193     ResultValueType<Buffer>::type createBuffer( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27194 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27195     ResultValueType<UniqueBuffer>::type createBufferUnique( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27196 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27197 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27198 
   27199     void destroyBuffer( Buffer buffer, const AllocationCallbacks* pAllocator ) const;
   27200 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27201     void destroyBuffer( Buffer buffer, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27202 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27203 
   27204     Result createBufferView( const BufferViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, BufferView* pView ) const;
   27205 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27206     ResultValueType<BufferView>::type createBufferView( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27207 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27208     ResultValueType<UniqueBufferView>::type createBufferViewUnique( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27209 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27210 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27211 
   27212     void destroyBufferView( BufferView bufferView, const AllocationCallbacks* pAllocator ) const;
   27213 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27214     void destroyBufferView( BufferView bufferView, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27215 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27216 
   27217     Result createImage( const ImageCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Image* pImage ) const;
   27218 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27219     ResultValueType<Image>::type createImage( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27220 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27221     ResultValueType<UniqueImage>::type createImageUnique( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27222 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27223 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27224 
   27225     void destroyImage( Image image, const AllocationCallbacks* pAllocator ) const;
   27226 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27227     void destroyImage( Image image, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27228 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27229 
   27230     void getImageSubresourceLayout( Image image, const ImageSubresource* pSubresource, SubresourceLayout* pLayout ) const;
   27231 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27232     SubresourceLayout getImageSubresourceLayout( Image image, const ImageSubresource & subresource ) const;
   27233 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27234 
   27235     Result createImageView( const ImageViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ImageView* pView ) const;
   27236 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27237     ResultValueType<ImageView>::type createImageView( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27238 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27239     ResultValueType<UniqueImageView>::type createImageViewUnique( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27240 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27241 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27242 
   27243     void destroyImageView( ImageView imageView, const AllocationCallbacks* pAllocator ) const;
   27244 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27245     void destroyImageView( ImageView imageView, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27246 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27247 
   27248     Result createShaderModule( const ShaderModuleCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ShaderModule* pShaderModule ) const;
   27249 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27250     ResultValueType<ShaderModule>::type createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27251 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27252     ResultValueType<UniqueShaderModule>::type createShaderModuleUnique( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27253 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27254 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27255 
   27256     void destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks* pAllocator ) const;
   27257 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27258     void destroyShaderModule( ShaderModule shaderModule, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27259 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27260 
   27261     Result createPipelineCache( const PipelineCacheCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineCache* pPipelineCache ) const;
   27262 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27263     ResultValueType<PipelineCache>::type createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27264 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27265     ResultValueType<UniquePipelineCache>::type createPipelineCacheUnique( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27266 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27267 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27268 
   27269     void destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks* pAllocator ) const;
   27270 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27271     void destroyPipelineCache( PipelineCache pipelineCache, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27272 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27273 
   27274     Result getPipelineCacheData( PipelineCache pipelineCache, size_t* pDataSize, void* pData ) const;
   27275 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27276     template <typename Allocator = std::allocator<uint8_t>>
   27277     typename ResultValueType<std::vector<uint8_t,Allocator>>::type getPipelineCacheData( PipelineCache pipelineCache ) const;
   27278 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27279 
   27280     Result mergePipelineCaches( PipelineCache dstCache, uint32_t srcCacheCount, const PipelineCache* pSrcCaches ) const;
   27281 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27282     ResultValueType<void>::type mergePipelineCaches( PipelineCache dstCache, ArrayProxy<const PipelineCache> srcCaches ) const;
   27283 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27284 
   27285     Result createGraphicsPipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const GraphicsPipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const;
   27286 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27287     template <typename Allocator = std::allocator<Pipeline>>
   27288     typename ResultValueType<std::vector<Pipeline,Allocator>>::type createGraphicsPipelines( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27289     ResultValueType<Pipeline>::type createGraphicsPipeline( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27290 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27291     template <typename Allocator = std::allocator<Pipeline>>
   27292     typename ResultValueType<std::vector<UniquePipeline,Allocator>>::type createGraphicsPipelinesUnique( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27293     ResultValueType<UniquePipeline>::type createGraphicsPipelineUnique( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27294 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27295 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27296 
   27297     Result createComputePipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const ComputePipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const;
   27298 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27299     template <typename Allocator = std::allocator<Pipeline>>
   27300     typename ResultValueType<std::vector<Pipeline,Allocator>>::type createComputePipelines( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27301     ResultValueType<Pipeline>::type createComputePipeline( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27302 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27303     template <typename Allocator = std::allocator<Pipeline>>
   27304     typename ResultValueType<std::vector<UniquePipeline,Allocator>>::type createComputePipelinesUnique( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27305     ResultValueType<UniquePipeline>::type createComputePipelineUnique( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27306 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27307 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27308 
   27309     void destroyPipeline( Pipeline pipeline, const AllocationCallbacks* pAllocator ) const;
   27310 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27311     void destroyPipeline( Pipeline pipeline, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27312 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27313 
   27314     Result createPipelineLayout( const PipelineLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineLayout* pPipelineLayout ) const;
   27315 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27316     ResultValueType<PipelineLayout>::type createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27317 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27318     ResultValueType<UniquePipelineLayout>::type createPipelineLayoutUnique( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27319 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27320 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27321 
   27322     void destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks* pAllocator ) const;
   27323 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27324     void destroyPipelineLayout( PipelineLayout pipelineLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27325 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27326 
   27327     Result createSampler( const SamplerCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Sampler* pSampler ) const;
   27328 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27329     ResultValueType<Sampler>::type createSampler( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27330 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27331     ResultValueType<UniqueSampler>::type createSamplerUnique( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27332 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27333 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27334 
   27335     void destroySampler( Sampler sampler, const AllocationCallbacks* pAllocator ) const;
   27336 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27337     void destroySampler( Sampler sampler, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27338 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27339 
   27340     Result createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorSetLayout* pSetLayout ) const;
   27341 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27342     ResultValueType<DescriptorSetLayout>::type createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27343 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27344     ResultValueType<UniqueDescriptorSetLayout>::type createDescriptorSetLayoutUnique( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27345 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27346 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27347 
   27348     void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks* pAllocator ) const;
   27349 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27350     void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27351 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27352 
   27353     Result createDescriptorPool( const DescriptorPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorPool* pDescriptorPool ) const;
   27354 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27355     ResultValueType<DescriptorPool>::type createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27356 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27357     ResultValueType<UniqueDescriptorPool>::type createDescriptorPoolUnique( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27358 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27359 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27360 
   27361     void destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks* pAllocator ) const;
   27362 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27363     void destroyDescriptorPool( DescriptorPool descriptorPool, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27364 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27365 
   27366 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27367     Result resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const;
   27368 #else
   27369     ResultValueType<void>::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags = DescriptorPoolResetFlags() ) const;
   27370 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27371 
   27372     Result allocateDescriptorSets( const DescriptorSetAllocateInfo* pAllocateInfo, DescriptorSet* pDescriptorSets ) const;
   27373 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27374     template <typename Allocator = std::allocator<DescriptorSet>>
   27375     typename ResultValueType<std::vector<DescriptorSet,Allocator>>::type allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo ) const;
   27376 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27377     template <typename Allocator = std::allocator<DescriptorSet>>
   27378     typename ResultValueType<std::vector<UniqueDescriptorSet,Allocator>>::type allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo ) const;
   27379 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27380 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27381 
   27382     Result freeDescriptorSets( DescriptorPool descriptorPool, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets ) const;
   27383 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27384     ResultValueType<void>::type freeDescriptorSets( DescriptorPool descriptorPool, ArrayProxy<const DescriptorSet> descriptorSets ) const;
   27385 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27386 
   27387     void updateDescriptorSets( uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const CopyDescriptorSet* pDescriptorCopies ) const;
   27388 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27389     void updateDescriptorSets( ArrayProxy<const WriteDescriptorSet> descriptorWrites, ArrayProxy<const CopyDescriptorSet> descriptorCopies ) const;
   27390 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27391 
   27392     Result createFramebuffer( const FramebufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Framebuffer* pFramebuffer ) const;
   27393 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27394     ResultValueType<Framebuffer>::type createFramebuffer( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27395 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27396     ResultValueType<UniqueFramebuffer>::type createFramebufferUnique( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27397 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27398 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27399 
   27400     void destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks* pAllocator ) const;
   27401 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27402     void destroyFramebuffer( Framebuffer framebuffer, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27403 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27404 
   27405     Result createRenderPass( const RenderPassCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, RenderPass* pRenderPass ) const;
   27406 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27407     ResultValueType<RenderPass>::type createRenderPass( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27408 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27409     ResultValueType<UniqueRenderPass>::type createRenderPassUnique( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27410 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27411 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27412 
   27413     void destroyRenderPass( RenderPass renderPass, const AllocationCallbacks* pAllocator ) const;
   27414 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27415     void destroyRenderPass( RenderPass renderPass, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27416 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27417 
   27418     void getRenderAreaGranularity( RenderPass renderPass, Extent2D* pGranularity ) const;
   27419 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27420     Extent2D getRenderAreaGranularity( RenderPass renderPass ) const;
   27421 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27422 
   27423     Result createCommandPool( const CommandPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, CommandPool* pCommandPool ) const;
   27424 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27425     ResultValueType<CommandPool>::type createCommandPool( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27426 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27427     ResultValueType<UniqueCommandPool>::type createCommandPoolUnique( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27428 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27429 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27430 
   27431     void destroyCommandPool( CommandPool commandPool, const AllocationCallbacks* pAllocator ) const;
   27432 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27433     void destroyCommandPool( CommandPool commandPool, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27434 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27435 
   27436 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27437     Result resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const;
   27438 #else
   27439     ResultValueType<void>::type resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const;
   27440 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27441 
   27442     Result allocateCommandBuffers( const CommandBufferAllocateInfo* pAllocateInfo, CommandBuffer* pCommandBuffers ) const;
   27443 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27444     template <typename Allocator = std::allocator<CommandBuffer>>
   27445     typename ResultValueType<std::vector<CommandBuffer,Allocator>>::type allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo ) const;
   27446 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27447     template <typename Allocator = std::allocator<CommandBuffer>>
   27448     typename ResultValueType<std::vector<UniqueCommandBuffer,Allocator>>::type allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo ) const;
   27449 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27450 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27451 
   27452     void freeCommandBuffers( CommandPool commandPool, uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const;
   27453 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27454     void freeCommandBuffers( CommandPool commandPool, ArrayProxy<const CommandBuffer> commandBuffers ) const;
   27455 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27456 
   27457     Result createSharedSwapchainsKHR( uint32_t swapchainCount, const SwapchainCreateInfoKHR* pCreateInfos, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchains ) const;
   27458 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27459     template <typename Allocator = std::allocator<SwapchainKHR>>
   27460     typename ResultValueType<std::vector<SwapchainKHR,Allocator>>::type createSharedSwapchainsKHR( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27461     ResultValueType<SwapchainKHR>::type createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27462 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27463     template <typename Allocator = std::allocator<SwapchainKHR>>
   27464     typename ResultValueType<std::vector<UniqueSwapchainKHR,Allocator>>::type createSharedSwapchainsKHRUnique( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27465     ResultValueType<UniqueSwapchainKHR>::type createSharedSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27466 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27467 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27468 
   27469     Result createSwapchainKHR( const SwapchainCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchain ) const;
   27470 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27471     ResultValueType<SwapchainKHR>::type createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27472 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27473     ResultValueType<UniqueSwapchainKHR>::type createSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27474 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27475 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27476 
   27477     void destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks* pAllocator ) const;
   27478 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27479     void destroySwapchainKHR( SwapchainKHR swapchain, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27480 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27481 
   27482     Result getSwapchainImagesKHR( SwapchainKHR swapchain, uint32_t* pSwapchainImageCount, Image* pSwapchainImages ) const;
   27483 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27484     template <typename Allocator = std::allocator<Image>>
   27485     typename ResultValueType<std::vector<Image,Allocator>>::type getSwapchainImagesKHR( SwapchainKHR swapchain ) const;
   27486 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27487 
   27488     Result acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t* pImageIndex ) const;
   27489 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27490     ResultValue<uint32_t> acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence ) const;
   27491 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27492 
   27493     Result debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT* pNameInfo ) const;
   27494 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27495     ResultValueType<void>::type debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT & nameInfo ) const;
   27496 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27497 
   27498     Result debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT* pTagInfo ) const;
   27499 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27500     ResultValueType<void>::type debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT & tagInfo ) const;
   27501 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27502 
   27503 #ifdef VK_USE_PLATFORM_WIN32_KHR
   27504     Result getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle ) const;
   27505 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27506     ResultValueType<HANDLE>::type getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType ) const;
   27507 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27508 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   27509 
   27510     Result createIndirectCommandsLayoutNVX( const IndirectCommandsLayoutCreateInfoNVX* pCreateInfo, const AllocationCallbacks* pAllocator, IndirectCommandsLayoutNVX* pIndirectCommandsLayout ) const;
   27511 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27512     ResultValueType<IndirectCommandsLayoutNVX>::type createIndirectCommandsLayoutNVX( const IndirectCommandsLayoutCreateInfoNVX & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27513 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27514     ResultValueType<UniqueIndirectCommandsLayoutNVX>::type createIndirectCommandsLayoutNVXUnique( const IndirectCommandsLayoutCreateInfoNVX & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27515 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27516 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27517 
   27518     void destroyIndirectCommandsLayoutNVX( IndirectCommandsLayoutNVX indirectCommandsLayout, const AllocationCallbacks* pAllocator ) const;
   27519 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27520     void destroyIndirectCommandsLayoutNVX( IndirectCommandsLayoutNVX indirectCommandsLayout, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27521 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27522 
   27523     Result createObjectTableNVX( const ObjectTableCreateInfoNVX* pCreateInfo, const AllocationCallbacks* pAllocator, ObjectTableNVX* pObjectTable ) const;
   27524 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27525     ResultValueType<ObjectTableNVX>::type createObjectTableNVX( const ObjectTableCreateInfoNVX & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27526 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27527     ResultValueType<UniqueObjectTableNVX>::type createObjectTableNVXUnique( const ObjectTableCreateInfoNVX & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27528 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27529 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27530 
   27531     void destroyObjectTableNVX( ObjectTableNVX objectTable, const AllocationCallbacks* pAllocator ) const;
   27532 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27533     void destroyObjectTableNVX( ObjectTableNVX objectTable, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27534 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27535 
   27536     Result registerObjectsNVX( ObjectTableNVX objectTable, uint32_t objectCount, const ObjectTableEntryNVX* const* ppObjectTableEntries, const uint32_t* pObjectIndices ) const;
   27537 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27538     ResultValueType<void>::type registerObjectsNVX( ObjectTableNVX objectTable, ArrayProxy<const ObjectTableEntryNVX* const> pObjectTableEntries, ArrayProxy<const uint32_t> objectIndices ) const;
   27539 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27540 
   27541     Result unregisterObjectsNVX( ObjectTableNVX objectTable, uint32_t objectCount, const ObjectEntryTypeNVX* pObjectEntryTypes, const uint32_t* pObjectIndices ) const;
   27542 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27543     ResultValueType<void>::type unregisterObjectsNVX( ObjectTableNVX objectTable, ArrayProxy<const ObjectEntryTypeNVX> objectEntryTypes, ArrayProxy<const uint32_t> objectIndices ) const;
   27544 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27545 
   27546 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27547     void trimCommandPoolKHR( CommandPool commandPool, CommandPoolTrimFlagsKHR flags ) const;
   27548 #else
   27549     void trimCommandPoolKHR( CommandPool commandPool, CommandPoolTrimFlagsKHR flags = CommandPoolTrimFlagsKHR() ) const;
   27550 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27551 
   27552 #ifdef VK_USE_PLATFORM_WIN32_KHR
   27553     Result getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle ) const;
   27554 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27555     ResultValueType<HANDLE>::type getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
   27556 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27557 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   27558 
   27559 #ifdef VK_USE_PLATFORM_WIN32_KHR
   27560     Result getMemoryWin32HandlePropertiesKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType, HANDLE handle, MemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties ) const;
   27561 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27562     ResultValueType<MemoryWin32HandlePropertiesKHR>::type getMemoryWin32HandlePropertiesKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType, HANDLE handle ) const;
   27563 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27564 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   27565 
   27566     Result getMemoryFdKHR( const MemoryGetFdInfoKHR* pGetFdInfo, int* pFd ) const;
   27567 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27568     ResultValueType<int>::type getMemoryFdKHR( const MemoryGetFdInfoKHR & getFdInfo ) const;
   27569 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27570 
   27571     Result getMemoryFdPropertiesKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType, int fd, MemoryFdPropertiesKHR* pMemoryFdProperties ) const;
   27572 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27573     ResultValueType<MemoryFdPropertiesKHR>::type getMemoryFdPropertiesKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType, int fd ) const;
   27574 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27575 
   27576 #ifdef VK_USE_PLATFORM_WIN32_KHR
   27577     Result getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle ) const;
   27578 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27579     ResultValueType<HANDLE>::type getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
   27580 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27581 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   27582 
   27583 #ifdef VK_USE_PLATFORM_WIN32_KHR
   27584     Result importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo ) const;
   27585 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27586     ResultValueType<void>::type importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const;
   27587 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27588 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   27589 
   27590     Result getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd ) const;
   27591 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27592     ResultValueType<int>::type getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR & getFdInfo ) const;
   27593 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27594 
   27595     Result importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo ) const;
   27596 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27597     ResultValueType<void>::type importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const;
   27598 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27599 
   27600 #ifdef VK_USE_PLATFORM_WIN32_KHR
   27601     Result getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle ) const;
   27602 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27603     ResultValueType<HANDLE>::type getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
   27604 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27605 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   27606 
   27607 #ifdef VK_USE_PLATFORM_WIN32_KHR
   27608     Result importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo ) const;
   27609 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27610     ResultValueType<void>::type importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const;
   27611 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27612 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   27613 
   27614     Result getFenceFdKHR( const FenceGetFdInfoKHR* pGetFdInfo, int* pFd ) const;
   27615 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27616     ResultValueType<int>::type getFenceFdKHR( const FenceGetFdInfoKHR & getFdInfo ) const;
   27617 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27618 
   27619     Result importFenceFdKHR( const ImportFenceFdInfoKHR* pImportFenceFdInfo ) const;
   27620 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27621     ResultValueType<void>::type importFenceFdKHR( const ImportFenceFdInfoKHR & importFenceFdInfo ) const;
   27622 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27623 
   27624     Result displayPowerControlEXT( DisplayKHR display, const DisplayPowerInfoEXT* pDisplayPowerInfo ) const;
   27625 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27626     ResultValueType<void>::type displayPowerControlEXT( DisplayKHR display, const DisplayPowerInfoEXT & displayPowerInfo ) const;
   27627 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27628 
   27629     Result registerEventEXT( const DeviceEventInfoEXT* pDeviceEventInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const;
   27630 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27631     ResultValueType<Fence>::type registerEventEXT( const DeviceEventInfoEXT & deviceEventInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27632 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27633 
   27634     Result registerDisplayEventEXT( DisplayKHR display, const DisplayEventInfoEXT* pDisplayEventInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const;
   27635 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27636     ResultValueType<Fence>::type registerDisplayEventEXT( DisplayKHR display, const DisplayEventInfoEXT & displayEventInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27637 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27638 
   27639     Result getSwapchainCounterEXT( SwapchainKHR swapchain, SurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue ) const;
   27640 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27641     ResultValue<uint64_t> getSwapchainCounterEXT( SwapchainKHR swapchain, SurfaceCounterFlagBitsEXT counter ) const;
   27642 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27643 
   27644     void getGroupPeerMemoryFeaturesKHX( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, PeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures ) const;
   27645 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27646     PeerMemoryFeatureFlagsKHX getGroupPeerMemoryFeaturesKHX( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const;
   27647 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27648 
   27649     Result bindBufferMemory2KHR( uint32_t bindInfoCount, const BindBufferMemoryInfoKHR* pBindInfos ) const;
   27650 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27651     ResultValueType<void>::type bindBufferMemory2KHR( ArrayProxy<const BindBufferMemoryInfoKHR> bindInfos ) const;
   27652 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27653 
   27654     Result bindImageMemory2KHR( uint32_t bindInfoCount, const BindImageMemoryInfoKHR* pBindInfos ) const;
   27655 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27656     ResultValueType<void>::type bindImageMemory2KHR( ArrayProxy<const BindImageMemoryInfoKHR> bindInfos ) const;
   27657 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27658 
   27659     Result getGroupPresentCapabilitiesKHX( DeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities ) const;
   27660 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27661     ResultValueType<DeviceGroupPresentCapabilitiesKHX>::type getGroupPresentCapabilitiesKHX() const;
   27662 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27663 
   27664     Result getGroupSurfacePresentModesKHX( SurfaceKHR surface, DeviceGroupPresentModeFlagsKHX* pModes ) const;
   27665 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27666     ResultValueType<DeviceGroupPresentModeFlagsKHX>::type getGroupSurfacePresentModesKHX( SurfaceKHR surface ) const;
   27667 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27668 
   27669     Result acquireNextImage2KHX( const AcquireNextImageInfoKHX* pAcquireInfo, uint32_t* pImageIndex ) const;
   27670 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27671     ResultValue<uint32_t> acquireNextImage2KHX( const AcquireNextImageInfoKHX & acquireInfo ) const;
   27672 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27673 
   27674     Result createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate ) const;
   27675 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27676     ResultValueType<DescriptorUpdateTemplateKHR>::type createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27677 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27678     ResultValueType<UniqueDescriptorUpdateTemplateKHR>::type createDescriptorUpdateTemplateKHRUnique( const DescriptorUpdateTemplateCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27679 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27680 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27681 
   27682     void destroyDescriptorUpdateTemplateKHR( DescriptorUpdateTemplateKHR descriptorUpdateTemplate, const AllocationCallbacks* pAllocator ) const;
   27683 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27684     void destroyDescriptorUpdateTemplateKHR( DescriptorUpdateTemplateKHR descriptorUpdateTemplate, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27685 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27686 
   27687     void updateDescriptorSetWithTemplateKHR( DescriptorSet descriptorSet, DescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData ) const;
   27688 
   27689     void setHdrMetadataEXT( uint32_t swapchainCount, const SwapchainKHR* pSwapchains, const HdrMetadataEXT* pMetadata ) const;
   27690 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27691     void setHdrMetadataEXT( ArrayProxy<const SwapchainKHR> swapchains, ArrayProxy<const HdrMetadataEXT> metadata ) const;
   27692 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27693 
   27694     Result getSwapchainStatusKHR( SwapchainKHR swapchain ) const;
   27695 
   27696     Result getRefreshCycleDurationGOOGLE( SwapchainKHR swapchain, RefreshCycleDurationGOOGLE* pDisplayTimingProperties ) const;
   27697 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27698     ResultValueType<RefreshCycleDurationGOOGLE>::type getRefreshCycleDurationGOOGLE( SwapchainKHR swapchain ) const;
   27699 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27700 
   27701     Result getPastPresentationTimingGOOGLE( SwapchainKHR swapchain, uint32_t* pPresentationTimingCount, PastPresentationTimingGOOGLE* pPresentationTimings ) const;
   27702 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27703     template <typename Allocator = std::allocator<PastPresentationTimingGOOGLE>>
   27704     typename ResultValueType<std::vector<PastPresentationTimingGOOGLE,Allocator>>::type getPastPresentationTimingGOOGLE( SwapchainKHR swapchain ) const;
   27705 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27706 
   27707     void getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2KHR* pInfo, MemoryRequirements2KHR* pMemoryRequirements ) const;
   27708 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27709     MemoryRequirements2KHR getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2KHR & info ) const;
   27710     template <typename ...T>
   27711     StructureChain<T...> getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2KHR & info ) const;
   27712 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27713 
   27714     void getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2KHR* pInfo, MemoryRequirements2KHR* pMemoryRequirements ) const;
   27715 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27716     MemoryRequirements2KHR getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2KHR & info ) const;
   27717     template <typename ...T>
   27718     StructureChain<T...> getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2KHR & info ) const;
   27719 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27720 
   27721     void getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2KHR* pInfo, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements2KHR* pSparseMemoryRequirements ) const;
   27722 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27723     template <typename Allocator = std::allocator<SparseImageMemoryRequirements2KHR>>
   27724     std::vector<SparseImageMemoryRequirements2KHR,Allocator> getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2KHR & info ) const;
   27725 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27726 
   27727     Result createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SamplerYcbcrConversionKHR* pYcbcrConversion ) const;
   27728 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27729     ResultValueType<SamplerYcbcrConversionKHR>::type createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27730 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27731     ResultValueType<UniqueSamplerYcbcrConversionKHR>::type createSamplerYcbcrConversionKHRUnique( const SamplerYcbcrConversionCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27732 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27733 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27734 
   27735     void destroySamplerYcbcrConversionKHR( SamplerYcbcrConversionKHR ycbcrConversion, const AllocationCallbacks* pAllocator ) const;
   27736 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27737     void destroySamplerYcbcrConversionKHR( SamplerYcbcrConversionKHR ycbcrConversion, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27738 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27739 
   27740     Result createValidationCacheEXT( const ValidationCacheCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, ValidationCacheEXT* pValidationCache ) const;
   27741 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27742     ResultValueType<ValidationCacheEXT>::type createValidationCacheEXT( const ValidationCacheCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27743 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27744     ResultValueType<UniqueValidationCacheEXT>::type createValidationCacheEXTUnique( const ValidationCacheCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27745 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   27746 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27747 
   27748     void destroyValidationCacheEXT( ValidationCacheEXT validationCache, const AllocationCallbacks* pAllocator ) const;
   27749 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27750     void destroyValidationCacheEXT( ValidationCacheEXT validationCache, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   27751 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27752 
   27753     Result getValidationCacheDataEXT( ValidationCacheEXT validationCache, size_t* pDataSize, void* pData ) const;
   27754 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27755     template <typename Allocator = std::allocator<uint8_t>>
   27756     typename ResultValueType<std::vector<uint8_t,Allocator>>::type getValidationCacheDataEXT( ValidationCacheEXT validationCache ) const;
   27757 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27758 
   27759     Result mergeValidationCachesEXT( ValidationCacheEXT dstCache, uint32_t srcCacheCount, const ValidationCacheEXT* pSrcCaches ) const;
   27760 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27761     ResultValueType<void>::type mergeValidationCachesEXT( ValidationCacheEXT dstCache, ArrayProxy<const ValidationCacheEXT> srcCaches ) const;
   27762 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27763 
   27764     Result getShaderInfoAMD( Pipeline pipeline, ShaderStageFlagBits shaderStage, ShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo ) const;
   27765 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27766     template <typename Allocator = std::allocator<uint8_t>>
   27767     typename ResultValueType<std::vector<uint8_t,Allocator>>::type getShaderInfoAMD( Pipeline pipeline, ShaderStageFlagBits shaderStage, ShaderInfoTypeAMD infoType ) const;
   27768 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27769 
   27770     Result getMemoryHostPointerPropertiesEXT( ExternalMemoryHandleTypeFlagBitsKHR handleType, const void* pHostPointer, MemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties ) const;
   27771 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   27772     ResultValueType<MemoryHostPointerPropertiesEXT>::type getMemoryHostPointerPropertiesEXT( ExternalMemoryHandleTypeFlagBitsKHR handleType, const void* pHostPointer ) const;
   27773 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   27774 
   27775 
   27776 
   27777     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDevice() const
   27778     {
   27779       return m_device;
   27780     }
   27781 
   27782     explicit operator bool() const
   27783     {
   27784       return m_device != VK_NULL_HANDLE;
   27785     }
   27786 
   27787     bool operator!() const
   27788     {
   27789       return m_device == VK_NULL_HANDLE;
   27790     }
   27791 
   27792   private:
   27793     VkDevice m_device;
   27794   };
   27795 
   27796   static_assert( sizeof( Device ) == sizeof( VkDevice ), "handle and wrapper have different size!" );
   27797 
   27798 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   27799   class BufferDeleter
   27800   {
   27801   public:
   27802     BufferDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   27803       : m_device( device )
   27804       , m_allocator( allocator )
   27805     {}
   27806 
   27807     Device getDevice() const { return m_device; }
   27808     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   27809 
   27810   protected:
   27811     void destroy( Buffer buffer )
   27812     {
   27813       m_device.destroyBuffer( buffer, m_allocator );
   27814     }
   27815 
   27816   private:
   27817     Device m_device;
   27818     Optional<const AllocationCallbacks> m_allocator;
   27819   };
   27820 
   27821   class BufferViewDeleter
   27822   {
   27823   public:
   27824     BufferViewDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   27825       : m_device( device )
   27826       , m_allocator( allocator )
   27827     {}
   27828 
   27829     Device getDevice() const { return m_device; }
   27830     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   27831 
   27832   protected:
   27833     void destroy( BufferView bufferView )
   27834     {
   27835       m_device.destroyBufferView( bufferView, m_allocator );
   27836     }
   27837 
   27838   private:
   27839     Device m_device;
   27840     Optional<const AllocationCallbacks> m_allocator;
   27841   };
   27842 
   27843   class CommandBufferDeleter
   27844   {
   27845   public:
   27846     CommandBufferDeleter( Device device = Device(), CommandPool commandPool = CommandPool() )
   27847       : m_device( device )
   27848       , m_commandPool( commandPool )
   27849     {}
   27850 
   27851     Device getDevice() const { return m_device; }
   27852     CommandPool getCommandPool() const { return m_commandPool; }
   27853 
   27854   protected:
   27855     void destroy( CommandBuffer commandBuffer )
   27856     {
   27857       m_device.freeCommandBuffers( m_commandPool, commandBuffer );
   27858     }
   27859 
   27860   private:
   27861     Device m_device;
   27862     CommandPool m_commandPool;
   27863   };
   27864 
   27865   class CommandPoolDeleter
   27866   {
   27867   public:
   27868     CommandPoolDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   27869       : m_device( device )
   27870       , m_allocator( allocator )
   27871     {}
   27872 
   27873     Device getDevice() const { return m_device; }
   27874     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   27875 
   27876   protected:
   27877     void destroy( CommandPool commandPool )
   27878     {
   27879       m_device.destroyCommandPool( commandPool, m_allocator );
   27880     }
   27881 
   27882   private:
   27883     Device m_device;
   27884     Optional<const AllocationCallbacks> m_allocator;
   27885   };
   27886 
   27887   class DescriptorPoolDeleter
   27888   {
   27889   public:
   27890     DescriptorPoolDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   27891       : m_device( device )
   27892       , m_allocator( allocator )
   27893     {}
   27894 
   27895     Device getDevice() const { return m_device; }
   27896     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   27897 
   27898   protected:
   27899     void destroy( DescriptorPool descriptorPool )
   27900     {
   27901       m_device.destroyDescriptorPool( descriptorPool, m_allocator );
   27902     }
   27903 
   27904   private:
   27905     Device m_device;
   27906     Optional<const AllocationCallbacks> m_allocator;
   27907   };
   27908 
   27909   class DescriptorSetDeleter
   27910   {
   27911   public:
   27912     DescriptorSetDeleter( Device device = Device(), DescriptorPool descriptorPool = DescriptorPool() )
   27913       : m_device( device )
   27914       , m_descriptorPool( descriptorPool )
   27915     {}
   27916 
   27917     Device getDevice() const { return m_device; }
   27918     DescriptorPool getDescriptorPool() const { return m_descriptorPool; }
   27919 
   27920   protected:
   27921     void destroy( DescriptorSet descriptorSet )
   27922     {
   27923       m_device.freeDescriptorSets( m_descriptorPool, descriptorSet );
   27924     }
   27925 
   27926   private:
   27927     Device m_device;
   27928     DescriptorPool m_descriptorPool;
   27929   };
   27930 
   27931   class DescriptorSetLayoutDeleter
   27932   {
   27933   public:
   27934     DescriptorSetLayoutDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   27935       : m_device( device )
   27936       , m_allocator( allocator )
   27937     {}
   27938 
   27939     Device getDevice() const { return m_device; }
   27940     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   27941 
   27942   protected:
   27943     void destroy( DescriptorSetLayout descriptorSetLayout )
   27944     {
   27945       m_device.destroyDescriptorSetLayout( descriptorSetLayout, m_allocator );
   27946     }
   27947 
   27948   private:
   27949     Device m_device;
   27950     Optional<const AllocationCallbacks> m_allocator;
   27951   };
   27952 
   27953   class DescriptorUpdateTemplateKHRDeleter
   27954   {
   27955   public:
   27956     DescriptorUpdateTemplateKHRDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   27957       : m_device( device )
   27958       , m_allocator( allocator )
   27959     {}
   27960 
   27961     Device getDevice() const { return m_device; }
   27962     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   27963 
   27964   protected:
   27965     void destroy( DescriptorUpdateTemplateKHR descriptorUpdateTemplateKHR )
   27966     {
   27967       m_device.destroyDescriptorUpdateTemplateKHR( descriptorUpdateTemplateKHR, m_allocator );
   27968     }
   27969 
   27970   private:
   27971     Device m_device;
   27972     Optional<const AllocationCallbacks> m_allocator;
   27973   };
   27974 
   27975   class DeviceMemoryDeleter
   27976   {
   27977   public:
   27978     DeviceMemoryDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   27979       : m_device( device )
   27980       , m_allocator( allocator )
   27981     {}
   27982 
   27983     Device getDevice() const { return m_device; }
   27984     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   27985 
   27986   protected:
   27987     void destroy( DeviceMemory deviceMemory )
   27988     {
   27989       m_device.freeMemory( deviceMemory, m_allocator );
   27990     }
   27991 
   27992   private:
   27993     Device m_device;
   27994     Optional<const AllocationCallbacks> m_allocator;
   27995   };
   27996 
   27997   class EventDeleter
   27998   {
   27999   public:
   28000     EventDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28001       : m_device( device )
   28002       , m_allocator( allocator )
   28003     {}
   28004 
   28005     Device getDevice() const { return m_device; }
   28006     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28007 
   28008   protected:
   28009     void destroy( Event event )
   28010     {
   28011       m_device.destroyEvent( event, m_allocator );
   28012     }
   28013 
   28014   private:
   28015     Device m_device;
   28016     Optional<const AllocationCallbacks> m_allocator;
   28017   };
   28018 
   28019   class FenceDeleter
   28020   {
   28021   public:
   28022     FenceDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28023       : m_device( device )
   28024       , m_allocator( allocator )
   28025     {}
   28026 
   28027     Device getDevice() const { return m_device; }
   28028     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28029 
   28030   protected:
   28031     void destroy( Fence fence )
   28032     {
   28033       m_device.destroyFence( fence, m_allocator );
   28034     }
   28035 
   28036   private:
   28037     Device m_device;
   28038     Optional<const AllocationCallbacks> m_allocator;
   28039   };
   28040 
   28041   class FramebufferDeleter
   28042   {
   28043   public:
   28044     FramebufferDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28045       : m_device( device )
   28046       , m_allocator( allocator )
   28047     {}
   28048 
   28049     Device getDevice() const { return m_device; }
   28050     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28051 
   28052   protected:
   28053     void destroy( Framebuffer framebuffer )
   28054     {
   28055       m_device.destroyFramebuffer( framebuffer, m_allocator );
   28056     }
   28057 
   28058   private:
   28059     Device m_device;
   28060     Optional<const AllocationCallbacks> m_allocator;
   28061   };
   28062 
   28063   class ImageDeleter
   28064   {
   28065   public:
   28066     ImageDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28067       : m_device( device )
   28068       , m_allocator( allocator )
   28069     {}
   28070 
   28071     Device getDevice() const { return m_device; }
   28072     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28073 
   28074   protected:
   28075     void destroy( Image image )
   28076     {
   28077       m_device.destroyImage( image, m_allocator );
   28078     }
   28079 
   28080   private:
   28081     Device m_device;
   28082     Optional<const AllocationCallbacks> m_allocator;
   28083   };
   28084 
   28085   class ImageViewDeleter
   28086   {
   28087   public:
   28088     ImageViewDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28089       : m_device( device )
   28090       , m_allocator( allocator )
   28091     {}
   28092 
   28093     Device getDevice() const { return m_device; }
   28094     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28095 
   28096   protected:
   28097     void destroy( ImageView imageView )
   28098     {
   28099       m_device.destroyImageView( imageView, m_allocator );
   28100     }
   28101 
   28102   private:
   28103     Device m_device;
   28104     Optional<const AllocationCallbacks> m_allocator;
   28105   };
   28106 
   28107   class IndirectCommandsLayoutNVXDeleter
   28108   {
   28109   public:
   28110     IndirectCommandsLayoutNVXDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28111       : m_device( device )
   28112       , m_allocator( allocator )
   28113     {}
   28114 
   28115     Device getDevice() const { return m_device; }
   28116     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28117 
   28118   protected:
   28119     void destroy( IndirectCommandsLayoutNVX indirectCommandsLayoutNVX )
   28120     {
   28121       m_device.destroyIndirectCommandsLayoutNVX( indirectCommandsLayoutNVX, m_allocator );
   28122     }
   28123 
   28124   private:
   28125     Device m_device;
   28126     Optional<const AllocationCallbacks> m_allocator;
   28127   };
   28128 
   28129   class ObjectTableNVXDeleter
   28130   {
   28131   public:
   28132     ObjectTableNVXDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28133       : m_device( device )
   28134       , m_allocator( allocator )
   28135     {}
   28136 
   28137     Device getDevice() const { return m_device; }
   28138     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28139 
   28140   protected:
   28141     void destroy( ObjectTableNVX objectTableNVX )
   28142     {
   28143       m_device.destroyObjectTableNVX( objectTableNVX, m_allocator );
   28144     }
   28145 
   28146   private:
   28147     Device m_device;
   28148     Optional<const AllocationCallbacks> m_allocator;
   28149   };
   28150 
   28151   class PipelineDeleter
   28152   {
   28153   public:
   28154     PipelineDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28155       : m_device( device )
   28156       , m_allocator( allocator )
   28157     {}
   28158 
   28159     Device getDevice() const { return m_device; }
   28160     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28161 
   28162   protected:
   28163     void destroy( Pipeline pipeline )
   28164     {
   28165       m_device.destroyPipeline( pipeline, m_allocator );
   28166     }
   28167 
   28168   private:
   28169     Device m_device;
   28170     Optional<const AllocationCallbacks> m_allocator;
   28171   };
   28172 
   28173   class PipelineCacheDeleter
   28174   {
   28175   public:
   28176     PipelineCacheDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28177       : m_device( device )
   28178       , m_allocator( allocator )
   28179     {}
   28180 
   28181     Device getDevice() const { return m_device; }
   28182     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28183 
   28184   protected:
   28185     void destroy( PipelineCache pipelineCache )
   28186     {
   28187       m_device.destroyPipelineCache( pipelineCache, m_allocator );
   28188     }
   28189 
   28190   private:
   28191     Device m_device;
   28192     Optional<const AllocationCallbacks> m_allocator;
   28193   };
   28194 
   28195   class PipelineLayoutDeleter
   28196   {
   28197   public:
   28198     PipelineLayoutDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28199       : m_device( device )
   28200       , m_allocator( allocator )
   28201     {}
   28202 
   28203     Device getDevice() const { return m_device; }
   28204     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28205 
   28206   protected:
   28207     void destroy( PipelineLayout pipelineLayout )
   28208     {
   28209       m_device.destroyPipelineLayout( pipelineLayout, m_allocator );
   28210     }
   28211 
   28212   private:
   28213     Device m_device;
   28214     Optional<const AllocationCallbacks> m_allocator;
   28215   };
   28216 
   28217   class QueryPoolDeleter
   28218   {
   28219   public:
   28220     QueryPoolDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28221       : m_device( device )
   28222       , m_allocator( allocator )
   28223     {}
   28224 
   28225     Device getDevice() const { return m_device; }
   28226     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28227 
   28228   protected:
   28229     void destroy( QueryPool queryPool )
   28230     {
   28231       m_device.destroyQueryPool( queryPool, m_allocator );
   28232     }
   28233 
   28234   private:
   28235     Device m_device;
   28236     Optional<const AllocationCallbacks> m_allocator;
   28237   };
   28238 
   28239   class RenderPassDeleter
   28240   {
   28241   public:
   28242     RenderPassDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28243       : m_device( device )
   28244       , m_allocator( allocator )
   28245     {}
   28246 
   28247     Device getDevice() const { return m_device; }
   28248     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28249 
   28250   protected:
   28251     void destroy( RenderPass renderPass )
   28252     {
   28253       m_device.destroyRenderPass( renderPass, m_allocator );
   28254     }
   28255 
   28256   private:
   28257     Device m_device;
   28258     Optional<const AllocationCallbacks> m_allocator;
   28259   };
   28260 
   28261   class SamplerDeleter
   28262   {
   28263   public:
   28264     SamplerDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28265       : m_device( device )
   28266       , m_allocator( allocator )
   28267     {}
   28268 
   28269     Device getDevice() const { return m_device; }
   28270     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28271 
   28272   protected:
   28273     void destroy( Sampler sampler )
   28274     {
   28275       m_device.destroySampler( sampler, m_allocator );
   28276     }
   28277 
   28278   private:
   28279     Device m_device;
   28280     Optional<const AllocationCallbacks> m_allocator;
   28281   };
   28282 
   28283   class SamplerYcbcrConversionKHRDeleter
   28284   {
   28285   public:
   28286     SamplerYcbcrConversionKHRDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28287       : m_device( device )
   28288       , m_allocator( allocator )
   28289     {}
   28290 
   28291     Device getDevice() const { return m_device; }
   28292     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28293 
   28294   protected:
   28295     void destroy( SamplerYcbcrConversionKHR samplerYcbcrConversionKHR )
   28296     {
   28297       m_device.destroySamplerYcbcrConversionKHR( samplerYcbcrConversionKHR, m_allocator );
   28298     }
   28299 
   28300   private:
   28301     Device m_device;
   28302     Optional<const AllocationCallbacks> m_allocator;
   28303   };
   28304 
   28305   class SemaphoreDeleter
   28306   {
   28307   public:
   28308     SemaphoreDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28309       : m_device( device )
   28310       , m_allocator( allocator )
   28311     {}
   28312 
   28313     Device getDevice() const { return m_device; }
   28314     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28315 
   28316   protected:
   28317     void destroy( Semaphore semaphore )
   28318     {
   28319       m_device.destroySemaphore( semaphore, m_allocator );
   28320     }
   28321 
   28322   private:
   28323     Device m_device;
   28324     Optional<const AllocationCallbacks> m_allocator;
   28325   };
   28326 
   28327   class ShaderModuleDeleter
   28328   {
   28329   public:
   28330     ShaderModuleDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28331       : m_device( device )
   28332       , m_allocator( allocator )
   28333     {}
   28334 
   28335     Device getDevice() const { return m_device; }
   28336     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28337 
   28338   protected:
   28339     void destroy( ShaderModule shaderModule )
   28340     {
   28341       m_device.destroyShaderModule( shaderModule, m_allocator );
   28342     }
   28343 
   28344   private:
   28345     Device m_device;
   28346     Optional<const AllocationCallbacks> m_allocator;
   28347   };
   28348 
   28349   class SwapchainKHRDeleter
   28350   {
   28351   public:
   28352     SwapchainKHRDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28353       : m_device( device )
   28354       , m_allocator( allocator )
   28355     {}
   28356 
   28357     Device getDevice() const { return m_device; }
   28358     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28359 
   28360   protected:
   28361     void destroy( SwapchainKHR swapchainKHR )
   28362     {
   28363       m_device.destroySwapchainKHR( swapchainKHR, m_allocator );
   28364     }
   28365 
   28366   private:
   28367     Device m_device;
   28368     Optional<const AllocationCallbacks> m_allocator;
   28369   };
   28370 
   28371   class ValidationCacheEXTDeleter
   28372   {
   28373   public:
   28374     ValidationCacheEXTDeleter( Device device = Device(), Optional<const AllocationCallbacks> allocator = nullptr )
   28375       : m_device( device )
   28376       , m_allocator( allocator )
   28377     {}
   28378 
   28379     Device getDevice() const { return m_device; }
   28380     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   28381 
   28382   protected:
   28383     void destroy( ValidationCacheEXT validationCacheEXT )
   28384     {
   28385       m_device.destroyValidationCacheEXT( validationCacheEXT, m_allocator );
   28386     }
   28387 
   28388   private:
   28389     Device m_device;
   28390     Optional<const AllocationCallbacks> m_allocator;
   28391   };
   28392 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28393 
   28394   VULKAN_HPP_INLINE PFN_vkVoidFunction Device::getProcAddr( const char* pName ) const
   28395   {
   28396     return vkGetDeviceProcAddr( m_device, pName );
   28397   }
   28398 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28399   VULKAN_HPP_INLINE PFN_vkVoidFunction Device::getProcAddr( const std::string & name ) const
   28400   {
   28401     return vkGetDeviceProcAddr( m_device, name.c_str() );
   28402   }
   28403 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28404 
   28405   VULKAN_HPP_INLINE void Device::destroy( const AllocationCallbacks* pAllocator ) const
   28406   {
   28407     vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28408   }
   28409 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28410   VULKAN_HPP_INLINE void Device::destroy( Optional<const AllocationCallbacks> allocator ) const
   28411   {
   28412     vkDestroyDevice( m_device, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28413   }
   28414 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28415 
   28416   VULKAN_HPP_INLINE void Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue* pQueue ) const
   28417   {
   28418     vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( pQueue ) );
   28419   }
   28420 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28421   VULKAN_HPP_INLINE Queue Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const
   28422   {
   28423     Queue queue;
   28424     vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast<VkQueue*>( &queue ) );
   28425     return queue;
   28426   }
   28427 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28428 
   28429 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28430   VULKAN_HPP_INLINE Result Device::waitIdle() const
   28431   {
   28432     return static_cast<Result>( vkDeviceWaitIdle( m_device ) );
   28433   }
   28434 #else
   28435   VULKAN_HPP_INLINE ResultValueType<void>::type Device::waitIdle() const
   28436   {
   28437     Result result = static_cast<Result>( vkDeviceWaitIdle( m_device ) );
   28438     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::waitIdle" );
   28439   }
   28440 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28441 
   28442   VULKAN_HPP_INLINE Result Device::allocateMemory( const MemoryAllocateInfo* pAllocateInfo, const AllocationCallbacks* pAllocator, DeviceMemory* pMemory ) const
   28443   {
   28444     return static_cast<Result>( vkAllocateMemory( m_device, reinterpret_cast<const VkMemoryAllocateInfo*>( pAllocateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDeviceMemory*>( pMemory ) ) );
   28445   }
   28446 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28447   VULKAN_HPP_INLINE ResultValueType<DeviceMemory>::type Device::allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator ) const
   28448   {
   28449     DeviceMemory memory;
   28450     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 ) ) );
   28451     return createResultValue( result, memory, "VULKAN_HPP_NAMESPACE::Device::allocateMemory" );
   28452   }
   28453 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28454   VULKAN_HPP_INLINE ResultValueType<UniqueDeviceMemory>::type Device::allocateMemoryUnique( const MemoryAllocateInfo & allocateInfo, Optional<const AllocationCallbacks> allocator ) const
   28455   {
   28456     DeviceMemory memory;
   28457     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 ) ) );
   28458 
   28459     DeviceMemoryDeleter deleter( *this, allocator );
   28460     return createResultValue( result, memory, "VULKAN_HPP_NAMESPACE::Device::allocateMemoryUnique", deleter );
   28461   }
   28462 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28463 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28464 
   28465   VULKAN_HPP_INLINE void Device::freeMemory( DeviceMemory memory, const AllocationCallbacks* pAllocator ) const
   28466   {
   28467     vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28468   }
   28469 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28470   VULKAN_HPP_INLINE void Device::freeMemory( DeviceMemory memory, Optional<const AllocationCallbacks> allocator ) const
   28471   {
   28472     vkFreeMemory( m_device, static_cast<VkDeviceMemory>( memory ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28473   }
   28474 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28475 
   28476   VULKAN_HPP_INLINE Result Device::mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void** ppData ) const
   28477   {
   28478     return static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), ppData ) );
   28479   }
   28480 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28481   VULKAN_HPP_INLINE ResultValueType<void*>::type Device::mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags ) const
   28482   {
   28483     void* pData;
   28484     Result result = static_cast<Result>( vkMapMemory( m_device, static_cast<VkDeviceMemory>( memory ), offset, size, static_cast<VkMemoryMapFlags>( flags ), &pData ) );
   28485     return createResultValue( result, pData, "VULKAN_HPP_NAMESPACE::Device::mapMemory" );
   28486   }
   28487 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28488 
   28489   VULKAN_HPP_INLINE void Device::unmapMemory( DeviceMemory memory ) const
   28490   {
   28491     vkUnmapMemory( m_device, static_cast<VkDeviceMemory>( memory ) );
   28492   }
   28493 
   28494   VULKAN_HPP_INLINE Result Device::flushMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
   28495   {
   28496     return static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
   28497   }
   28498 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28499   VULKAN_HPP_INLINE ResultValueType<void>::type Device::flushMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
   28500   {
   28501     Result result = static_cast<Result>( vkFlushMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
   28502     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::flushMappedMemoryRanges" );
   28503   }
   28504 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28505 
   28506   VULKAN_HPP_INLINE Result Device::invalidateMappedMemoryRanges( uint32_t memoryRangeCount, const MappedMemoryRange* pMemoryRanges ) const
   28507   {
   28508     return static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRangeCount, reinterpret_cast<const VkMappedMemoryRange*>( pMemoryRanges ) ) );
   28509   }
   28510 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28511   VULKAN_HPP_INLINE ResultValueType<void>::type Device::invalidateMappedMemoryRanges( ArrayProxy<const MappedMemoryRange> memoryRanges ) const
   28512   {
   28513     Result result = static_cast<Result>( vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size() , reinterpret_cast<const VkMappedMemoryRange*>( memoryRanges.data() ) ) );
   28514     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::invalidateMappedMemoryRanges" );
   28515   }
   28516 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28517 
   28518   VULKAN_HPP_INLINE void Device::getMemoryCommitment( DeviceMemory memory, DeviceSize* pCommittedMemoryInBytes ) const
   28519   {
   28520     vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), pCommittedMemoryInBytes );
   28521   }
   28522 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28523   VULKAN_HPP_INLINE DeviceSize Device::getMemoryCommitment( DeviceMemory memory ) const
   28524   {
   28525     DeviceSize committedMemoryInBytes;
   28526     vkGetDeviceMemoryCommitment( m_device, static_cast<VkDeviceMemory>( memory ), &committedMemoryInBytes );
   28527     return committedMemoryInBytes;
   28528   }
   28529 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28530 
   28531   VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements( Buffer buffer, MemoryRequirements* pMemoryRequirements ) const
   28532   {
   28533     vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
   28534   }
   28535 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28536   VULKAN_HPP_INLINE MemoryRequirements Device::getBufferMemoryRequirements( Buffer buffer ) const
   28537   {
   28538     MemoryRequirements memoryRequirements;
   28539     vkGetBufferMemoryRequirements( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
   28540     return memoryRequirements;
   28541   }
   28542 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28543 
   28544 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28545   VULKAN_HPP_INLINE Result Device::bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
   28546   {
   28547     return static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
   28548   }
   28549 #else
   28550   VULKAN_HPP_INLINE ResultValueType<void>::type Device::bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset ) const
   28551   {
   28552     Result result = static_cast<Result>( vkBindBufferMemory( m_device, static_cast<VkBuffer>( buffer ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
   28553     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::bindBufferMemory" );
   28554   }
   28555 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28556 
   28557   VULKAN_HPP_INLINE void Device::getImageMemoryRequirements( Image image, MemoryRequirements* pMemoryRequirements ) const
   28558   {
   28559     vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( pMemoryRequirements ) );
   28560   }
   28561 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28562   VULKAN_HPP_INLINE MemoryRequirements Device::getImageMemoryRequirements( Image image ) const
   28563   {
   28564     MemoryRequirements memoryRequirements;
   28565     vkGetImageMemoryRequirements( m_device, static_cast<VkImage>( image ), reinterpret_cast<VkMemoryRequirements*>( &memoryRequirements ) );
   28566     return memoryRequirements;
   28567   }
   28568 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28569 
   28570 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28571   VULKAN_HPP_INLINE Result Device::bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
   28572   {
   28573     return static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
   28574   }
   28575 #else
   28576   VULKAN_HPP_INLINE ResultValueType<void>::type Device::bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset ) const
   28577   {
   28578     Result result = static_cast<Result>( vkBindImageMemory( m_device, static_cast<VkImage>( image ), static_cast<VkDeviceMemory>( memory ), memoryOffset ) );
   28579     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::bindImageMemory" );
   28580   }
   28581 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28582 
   28583   VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements( Image image, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements* pSparseMemoryRequirements ) const
   28584   {
   28585     vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), pSparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( pSparseMemoryRequirements ) );
   28586   }
   28587 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28588   template <typename Allocator>
   28589   VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements,Allocator> Device::getImageSparseMemoryRequirements( Image image ) const
   28590   {
   28591     std::vector<SparseImageMemoryRequirements,Allocator> sparseMemoryRequirements;
   28592     uint32_t sparseMemoryRequirementCount;
   28593     vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, nullptr );
   28594     sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
   28595     vkGetImageSparseMemoryRequirements( m_device, static_cast<VkImage>( image ), &sparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements*>( sparseMemoryRequirements.data() ) );
   28596     return sparseMemoryRequirements;
   28597   }
   28598 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28599 
   28600   VULKAN_HPP_INLINE Result Device::createFence( const FenceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
   28601   {
   28602     return static_cast<Result>( vkCreateFence( m_device, reinterpret_cast<const VkFenceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
   28603   }
   28604 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28605   VULKAN_HPP_INLINE ResultValueType<Fence>::type Device::createFence( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28606   {
   28607     Fence fence;
   28608     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 ) ) );
   28609     return createResultValue( result, fence, "VULKAN_HPP_NAMESPACE::Device::createFence" );
   28610   }
   28611 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28612   VULKAN_HPP_INLINE ResultValueType<UniqueFence>::type Device::createFenceUnique( const FenceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28613   {
   28614     Fence fence;
   28615     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 ) ) );
   28616 
   28617     FenceDeleter deleter( *this, allocator );
   28618     return createResultValue( result, fence, "VULKAN_HPP_NAMESPACE::Device::createFenceUnique", deleter );
   28619   }
   28620 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28621 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28622 
   28623   VULKAN_HPP_INLINE void Device::destroyFence( Fence fence, const AllocationCallbacks* pAllocator ) const
   28624   {
   28625     vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28626   }
   28627 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28628   VULKAN_HPP_INLINE void Device::destroyFence( Fence fence, Optional<const AllocationCallbacks> allocator ) const
   28629   {
   28630     vkDestroyFence( m_device, static_cast<VkFence>( fence ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28631   }
   28632 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28633 
   28634   VULKAN_HPP_INLINE Result Device::resetFences( uint32_t fenceCount, const Fence* pFences ) const
   28635   {
   28636     return static_cast<Result>( vkResetFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ) ) );
   28637   }
   28638 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28639   VULKAN_HPP_INLINE ResultValueType<void>::type Device::resetFences( ArrayProxy<const Fence> fences ) const
   28640   {
   28641     Result result = static_cast<Result>( vkResetFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ) ) );
   28642     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::resetFences" );
   28643   }
   28644 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28645 
   28646 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28647   VULKAN_HPP_INLINE Result Device::getFenceStatus( Fence fence ) const
   28648   {
   28649     return static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
   28650   }
   28651 #else
   28652   VULKAN_HPP_INLINE Result Device::getFenceStatus( Fence fence ) const
   28653   {
   28654     Result result = static_cast<Result>( vkGetFenceStatus( m_device, static_cast<VkFence>( fence ) ) );
   28655     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::getFenceStatus", { Result::eSuccess, Result::eNotReady } );
   28656   }
   28657 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28658 
   28659   VULKAN_HPP_INLINE Result Device::waitForFences( uint32_t fenceCount, const Fence* pFences, Bool32 waitAll, uint64_t timeout ) const
   28660   {
   28661     return static_cast<Result>( vkWaitForFences( m_device, fenceCount, reinterpret_cast<const VkFence*>( pFences ), waitAll, timeout ) );
   28662   }
   28663 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28664   VULKAN_HPP_INLINE Result Device::waitForFences( ArrayProxy<const Fence> fences, Bool32 waitAll, uint64_t timeout ) const
   28665   {
   28666     Result result = static_cast<Result>( vkWaitForFences( m_device, fences.size() , reinterpret_cast<const VkFence*>( fences.data() ), waitAll, timeout ) );
   28667     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::waitForFences", { Result::eSuccess, Result::eTimeout } );
   28668   }
   28669 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28670 
   28671   VULKAN_HPP_INLINE Result Device::createSemaphore( const SemaphoreCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Semaphore* pSemaphore ) const
   28672   {
   28673     return static_cast<Result>( vkCreateSemaphore( m_device, reinterpret_cast<const VkSemaphoreCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSemaphore*>( pSemaphore ) ) );
   28674   }
   28675 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28676   VULKAN_HPP_INLINE ResultValueType<Semaphore>::type Device::createSemaphore( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28677   {
   28678     Semaphore semaphore;
   28679     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 ) ) );
   28680     return createResultValue( result, semaphore, "VULKAN_HPP_NAMESPACE::Device::createSemaphore" );
   28681   }
   28682 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28683   VULKAN_HPP_INLINE ResultValueType<UniqueSemaphore>::type Device::createSemaphoreUnique( const SemaphoreCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28684   {
   28685     Semaphore semaphore;
   28686     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 ) ) );
   28687 
   28688     SemaphoreDeleter deleter( *this, allocator );
   28689     return createResultValue( result, semaphore, "VULKAN_HPP_NAMESPACE::Device::createSemaphoreUnique", deleter );
   28690   }
   28691 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28692 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28693 
   28694   VULKAN_HPP_INLINE void Device::destroySemaphore( Semaphore semaphore, const AllocationCallbacks* pAllocator ) const
   28695   {
   28696     vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28697   }
   28698 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28699   VULKAN_HPP_INLINE void Device::destroySemaphore( Semaphore semaphore, Optional<const AllocationCallbacks> allocator ) const
   28700   {
   28701     vkDestroySemaphore( m_device, static_cast<VkSemaphore>( semaphore ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28702   }
   28703 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28704 
   28705   VULKAN_HPP_INLINE Result Device::createEvent( const EventCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Event* pEvent ) const
   28706   {
   28707     return static_cast<Result>( vkCreateEvent( m_device, reinterpret_cast<const VkEventCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkEvent*>( pEvent ) ) );
   28708   }
   28709 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28710   VULKAN_HPP_INLINE ResultValueType<Event>::type Device::createEvent( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28711   {
   28712     Event event;
   28713     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 ) ) );
   28714     return createResultValue( result, event, "VULKAN_HPP_NAMESPACE::Device::createEvent" );
   28715   }
   28716 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28717   VULKAN_HPP_INLINE ResultValueType<UniqueEvent>::type Device::createEventUnique( const EventCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28718   {
   28719     Event event;
   28720     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 ) ) );
   28721 
   28722     EventDeleter deleter( *this, allocator );
   28723     return createResultValue( result, event, "VULKAN_HPP_NAMESPACE::Device::createEventUnique", deleter );
   28724   }
   28725 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28726 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28727 
   28728   VULKAN_HPP_INLINE void Device::destroyEvent( Event event, const AllocationCallbacks* pAllocator ) const
   28729   {
   28730     vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28731   }
   28732 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28733   VULKAN_HPP_INLINE void Device::destroyEvent( Event event, Optional<const AllocationCallbacks> allocator ) const
   28734   {
   28735     vkDestroyEvent( m_device, static_cast<VkEvent>( event ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28736   }
   28737 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28738 
   28739 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28740   VULKAN_HPP_INLINE Result Device::getEventStatus( Event event ) const
   28741   {
   28742     return static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
   28743   }
   28744 #else
   28745   VULKAN_HPP_INLINE Result Device::getEventStatus( Event event ) const
   28746   {
   28747     Result result = static_cast<Result>( vkGetEventStatus( m_device, static_cast<VkEvent>( event ) ) );
   28748     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::getEventStatus", { Result::eEventSet, Result::eEventReset } );
   28749   }
   28750 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28751 
   28752 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28753   VULKAN_HPP_INLINE Result Device::setEvent( Event event ) const
   28754   {
   28755     return static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
   28756   }
   28757 #else
   28758   VULKAN_HPP_INLINE ResultValueType<void>::type Device::setEvent( Event event ) const
   28759   {
   28760     Result result = static_cast<Result>( vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
   28761     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::setEvent" );
   28762   }
   28763 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28764 
   28765 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28766   VULKAN_HPP_INLINE Result Device::resetEvent( Event event ) const
   28767   {
   28768     return static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
   28769   }
   28770 #else
   28771   VULKAN_HPP_INLINE ResultValueType<void>::type Device::resetEvent( Event event ) const
   28772   {
   28773     Result result = static_cast<Result>( vkResetEvent( m_device, static_cast<VkEvent>( event ) ) );
   28774     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::resetEvent" );
   28775   }
   28776 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28777 
   28778   VULKAN_HPP_INLINE Result Device::createQueryPool( const QueryPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, QueryPool* pQueryPool ) const
   28779   {
   28780     return static_cast<Result>( vkCreateQueryPool( m_device, reinterpret_cast<const VkQueryPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkQueryPool*>( pQueryPool ) ) );
   28781   }
   28782 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28783   VULKAN_HPP_INLINE ResultValueType<QueryPool>::type Device::createQueryPool( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28784   {
   28785     QueryPool queryPool;
   28786     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 ) ) );
   28787     return createResultValue( result, queryPool, "VULKAN_HPP_NAMESPACE::Device::createQueryPool" );
   28788   }
   28789 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28790   VULKAN_HPP_INLINE ResultValueType<UniqueQueryPool>::type Device::createQueryPoolUnique( const QueryPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28791   {
   28792     QueryPool queryPool;
   28793     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 ) ) );
   28794 
   28795     QueryPoolDeleter deleter( *this, allocator );
   28796     return createResultValue( result, queryPool, "VULKAN_HPP_NAMESPACE::Device::createQueryPoolUnique", deleter );
   28797   }
   28798 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28799 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28800 
   28801   VULKAN_HPP_INLINE void Device::destroyQueryPool( QueryPool queryPool, const AllocationCallbacks* pAllocator ) const
   28802   {
   28803     vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28804   }
   28805 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28806   VULKAN_HPP_INLINE void Device::destroyQueryPool( QueryPool queryPool, Optional<const AllocationCallbacks> allocator ) const
   28807   {
   28808     vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( queryPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28809   }
   28810 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28811 
   28812   VULKAN_HPP_INLINE Result Device::getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, DeviceSize stride, QueryResultFlags flags ) const
   28813   {
   28814     return static_cast<Result>( vkGetQueryPoolResults( m_device, static_cast<VkQueryPool>( queryPool ), firstQuery, queryCount, dataSize, pData, stride, static_cast<VkQueryResultFlags>( flags ) ) );
   28815   }
   28816 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28817   template <typename T>
   28818   VULKAN_HPP_INLINE Result Device::getQueryPoolResults( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, ArrayProxy<T> data, DeviceSize stride, QueryResultFlags flags ) const
   28819   {
   28820     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 ) ) );
   28821     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::getQueryPoolResults", { Result::eSuccess, Result::eNotReady } );
   28822   }
   28823 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28824 
   28825   VULKAN_HPP_INLINE Result Device::createBuffer( const BufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Buffer* pBuffer ) const
   28826   {
   28827     return static_cast<Result>( vkCreateBuffer( m_device, reinterpret_cast<const VkBufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBuffer*>( pBuffer ) ) );
   28828   }
   28829 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28830   VULKAN_HPP_INLINE ResultValueType<Buffer>::type Device::createBuffer( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28831   {
   28832     Buffer buffer;
   28833     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 ) ) );
   28834     return createResultValue( result, buffer, "VULKAN_HPP_NAMESPACE::Device::createBuffer" );
   28835   }
   28836 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28837   VULKAN_HPP_INLINE ResultValueType<UniqueBuffer>::type Device::createBufferUnique( const BufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28838   {
   28839     Buffer buffer;
   28840     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 ) ) );
   28841 
   28842     BufferDeleter deleter( *this, allocator );
   28843     return createResultValue( result, buffer, "VULKAN_HPP_NAMESPACE::Device::createBufferUnique", deleter );
   28844   }
   28845 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28846 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28847 
   28848   VULKAN_HPP_INLINE void Device::destroyBuffer( Buffer buffer, const AllocationCallbacks* pAllocator ) const
   28849   {
   28850     vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28851   }
   28852 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28853   VULKAN_HPP_INLINE void Device::destroyBuffer( Buffer buffer, Optional<const AllocationCallbacks> allocator ) const
   28854   {
   28855     vkDestroyBuffer( m_device, static_cast<VkBuffer>( buffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28856   }
   28857 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28858 
   28859   VULKAN_HPP_INLINE Result Device::createBufferView( const BufferViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, BufferView* pView ) const
   28860   {
   28861     return static_cast<Result>( vkCreateBufferView( m_device, reinterpret_cast<const VkBufferViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkBufferView*>( pView ) ) );
   28862   }
   28863 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28864   VULKAN_HPP_INLINE ResultValueType<BufferView>::type Device::createBufferView( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28865   {
   28866     BufferView view;
   28867     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 ) ) );
   28868     return createResultValue( result, view, "VULKAN_HPP_NAMESPACE::Device::createBufferView" );
   28869   }
   28870 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28871   VULKAN_HPP_INLINE ResultValueType<UniqueBufferView>::type Device::createBufferViewUnique( const BufferViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28872   {
   28873     BufferView view;
   28874     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 ) ) );
   28875 
   28876     BufferViewDeleter deleter( *this, allocator );
   28877     return createResultValue( result, view, "VULKAN_HPP_NAMESPACE::Device::createBufferViewUnique", deleter );
   28878   }
   28879 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28880 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28881 
   28882   VULKAN_HPP_INLINE void Device::destroyBufferView( BufferView bufferView, const AllocationCallbacks* pAllocator ) const
   28883   {
   28884     vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28885   }
   28886 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28887   VULKAN_HPP_INLINE void Device::destroyBufferView( BufferView bufferView, Optional<const AllocationCallbacks> allocator ) const
   28888   {
   28889     vkDestroyBufferView( m_device, static_cast<VkBufferView>( bufferView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28890   }
   28891 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28892 
   28893   VULKAN_HPP_INLINE Result Device::createImage( const ImageCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Image* pImage ) const
   28894   {
   28895     return static_cast<Result>( vkCreateImage( m_device, reinterpret_cast<const VkImageCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImage*>( pImage ) ) );
   28896   }
   28897 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28898   VULKAN_HPP_INLINE ResultValueType<Image>::type Device::createImage( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28899   {
   28900     Image image;
   28901     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 ) ) );
   28902     return createResultValue( result, image, "VULKAN_HPP_NAMESPACE::Device::createImage" );
   28903   }
   28904 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28905   VULKAN_HPP_INLINE ResultValueType<UniqueImage>::type Device::createImageUnique( const ImageCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28906   {
   28907     Image image;
   28908     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 ) ) );
   28909 
   28910     ImageDeleter deleter( *this, allocator );
   28911     return createResultValue( result, image, "VULKAN_HPP_NAMESPACE::Device::createImageUnique", deleter );
   28912   }
   28913 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28914 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28915 
   28916   VULKAN_HPP_INLINE void Device::destroyImage( Image image, const AllocationCallbacks* pAllocator ) const
   28917   {
   28918     vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28919   }
   28920 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28921   VULKAN_HPP_INLINE void Device::destroyImage( Image image, Optional<const AllocationCallbacks> allocator ) const
   28922   {
   28923     vkDestroyImage( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28924   }
   28925 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28926 
   28927   VULKAN_HPP_INLINE void Device::getImageSubresourceLayout( Image image, const ImageSubresource* pSubresource, SubresourceLayout* pLayout ) const
   28928   {
   28929     vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( pSubresource ), reinterpret_cast<VkSubresourceLayout*>( pLayout ) );
   28930   }
   28931 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28932   VULKAN_HPP_INLINE SubresourceLayout Device::getImageSubresourceLayout( Image image, const ImageSubresource & subresource ) const
   28933   {
   28934     SubresourceLayout layout;
   28935     vkGetImageSubresourceLayout( m_device, static_cast<VkImage>( image ), reinterpret_cast<const VkImageSubresource*>( &subresource ), reinterpret_cast<VkSubresourceLayout*>( &layout ) );
   28936     return layout;
   28937   }
   28938 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28939 
   28940   VULKAN_HPP_INLINE Result Device::createImageView( const ImageViewCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ImageView* pView ) const
   28941   {
   28942     return static_cast<Result>( vkCreateImageView( m_device, reinterpret_cast<const VkImageViewCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkImageView*>( pView ) ) );
   28943   }
   28944 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28945   VULKAN_HPP_INLINE ResultValueType<ImageView>::type Device::createImageView( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28946   {
   28947     ImageView view;
   28948     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 ) ) );
   28949     return createResultValue( result, view, "VULKAN_HPP_NAMESPACE::Device::createImageView" );
   28950   }
   28951 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28952   VULKAN_HPP_INLINE ResultValueType<UniqueImageView>::type Device::createImageViewUnique( const ImageViewCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28953   {
   28954     ImageView view;
   28955     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 ) ) );
   28956 
   28957     ImageViewDeleter deleter( *this, allocator );
   28958     return createResultValue( result, view, "VULKAN_HPP_NAMESPACE::Device::createImageViewUnique", deleter );
   28959   }
   28960 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28961 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28962 
   28963   VULKAN_HPP_INLINE void Device::destroyImageView( ImageView imageView, const AllocationCallbacks* pAllocator ) const
   28964   {
   28965     vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   28966   }
   28967 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28968   VULKAN_HPP_INLINE void Device::destroyImageView( ImageView imageView, Optional<const AllocationCallbacks> allocator ) const
   28969   {
   28970     vkDestroyImageView( m_device, static_cast<VkImageView>( imageView ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   28971   }
   28972 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28973 
   28974   VULKAN_HPP_INLINE Result Device::createShaderModule( const ShaderModuleCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, ShaderModule* pShaderModule ) const
   28975   {
   28976     return static_cast<Result>( vkCreateShaderModule( m_device, reinterpret_cast<const VkShaderModuleCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkShaderModule*>( pShaderModule ) ) );
   28977   }
   28978 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   28979   VULKAN_HPP_INLINE ResultValueType<ShaderModule>::type Device::createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28980   {
   28981     ShaderModule shaderModule;
   28982     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 ) ) );
   28983     return createResultValue( result, shaderModule, "VULKAN_HPP_NAMESPACE::Device::createShaderModule" );
   28984   }
   28985 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   28986   VULKAN_HPP_INLINE ResultValueType<UniqueShaderModule>::type Device::createShaderModuleUnique( const ShaderModuleCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   28987   {
   28988     ShaderModule shaderModule;
   28989     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 ) ) );
   28990 
   28991     ShaderModuleDeleter deleter( *this, allocator );
   28992     return createResultValue( result, shaderModule, "VULKAN_HPP_NAMESPACE::Device::createShaderModuleUnique", deleter );
   28993   }
   28994 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   28995 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   28996 
   28997   VULKAN_HPP_INLINE void Device::destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks* pAllocator ) const
   28998   {
   28999     vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29000   }
   29001 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29002   VULKAN_HPP_INLINE void Device::destroyShaderModule( ShaderModule shaderModule, Optional<const AllocationCallbacks> allocator ) const
   29003   {
   29004     vkDestroyShaderModule( m_device, static_cast<VkShaderModule>( shaderModule ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29005   }
   29006 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29007 
   29008   VULKAN_HPP_INLINE Result Device::createPipelineCache( const PipelineCacheCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineCache* pPipelineCache ) const
   29009   {
   29010     return static_cast<Result>( vkCreatePipelineCache( m_device, reinterpret_cast<const VkPipelineCacheCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineCache*>( pPipelineCache ) ) );
   29011   }
   29012 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29013   VULKAN_HPP_INLINE ResultValueType<PipelineCache>::type Device::createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29014   {
   29015     PipelineCache pipelineCache;
   29016     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 ) ) );
   29017     return createResultValue( result, pipelineCache, "VULKAN_HPP_NAMESPACE::Device::createPipelineCache" );
   29018   }
   29019 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29020   VULKAN_HPP_INLINE ResultValueType<UniquePipelineCache>::type Device::createPipelineCacheUnique( const PipelineCacheCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29021   {
   29022     PipelineCache pipelineCache;
   29023     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 ) ) );
   29024 
   29025     PipelineCacheDeleter deleter( *this, allocator );
   29026     return createResultValue( result, pipelineCache, "VULKAN_HPP_NAMESPACE::Device::createPipelineCacheUnique", deleter );
   29027   }
   29028 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29029 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29030 
   29031   VULKAN_HPP_INLINE void Device::destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks* pAllocator ) const
   29032   {
   29033     vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29034   }
   29035 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29036   VULKAN_HPP_INLINE void Device::destroyPipelineCache( PipelineCache pipelineCache, Optional<const AllocationCallbacks> allocator ) const
   29037   {
   29038     vkDestroyPipelineCache( m_device, static_cast<VkPipelineCache>( pipelineCache ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29039   }
   29040 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29041 
   29042   VULKAN_HPP_INLINE Result Device::getPipelineCacheData( PipelineCache pipelineCache, size_t* pDataSize, void* pData ) const
   29043   {
   29044     return static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), pDataSize, pData ) );
   29045   }
   29046 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29047   template <typename Allocator>
   29048   VULKAN_HPP_INLINE typename ResultValueType<std::vector<uint8_t,Allocator>>::type Device::getPipelineCacheData( PipelineCache pipelineCache ) const
   29049   {
   29050     std::vector<uint8_t,Allocator> data;
   29051     size_t dataSize;
   29052     Result result;
   29053     do
   29054     {
   29055       result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, nullptr ) );
   29056       if ( ( result == Result::eSuccess ) && dataSize )
   29057       {
   29058         data.resize( dataSize );
   29059         result = static_cast<Result>( vkGetPipelineCacheData( m_device, static_cast<VkPipelineCache>( pipelineCache ), &dataSize, reinterpret_cast<void*>( data.data() ) ) );
   29060       }
   29061     } while ( result == Result::eIncomplete );
   29062     assert( dataSize <= data.size() );
   29063     data.resize( dataSize );
   29064     return createResultValue( result, data, "VULKAN_HPP_NAMESPACE::Device::getPipelineCacheData" );
   29065   }
   29066 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29067 
   29068   VULKAN_HPP_INLINE Result Device::mergePipelineCaches( PipelineCache dstCache, uint32_t srcCacheCount, const PipelineCache* pSrcCaches ) const
   29069   {
   29070     return static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCacheCount, reinterpret_cast<const VkPipelineCache*>( pSrcCaches ) ) );
   29071   }
   29072 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29073   VULKAN_HPP_INLINE ResultValueType<void>::type Device::mergePipelineCaches( PipelineCache dstCache, ArrayProxy<const PipelineCache> srcCaches ) const
   29074   {
   29075     Result result = static_cast<Result>( vkMergePipelineCaches( m_device, static_cast<VkPipelineCache>( dstCache ), srcCaches.size() , reinterpret_cast<const VkPipelineCache*>( srcCaches.data() ) ) );
   29076     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::mergePipelineCaches" );
   29077   }
   29078 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29079 
   29080   VULKAN_HPP_INLINE Result Device::createGraphicsPipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const GraphicsPipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
   29081   {
   29082     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 ) ) );
   29083   }
   29084 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29085   template <typename Allocator>
   29086   VULKAN_HPP_INLINE typename ResultValueType<std::vector<Pipeline,Allocator>>::type Device::createGraphicsPipelines( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator ) const
   29087   {
   29088     std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
   29089     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() ) ) );
   29090     return createResultValue( result, pipelines, "VULKAN_HPP_NAMESPACE::Device::createGraphicsPipelines" );
   29091   }
   29092   VULKAN_HPP_INLINE ResultValueType<Pipeline>::type Device::createGraphicsPipeline( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29093   {
   29094     Pipeline pipeline;
   29095     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 ) ) );
   29096     return createResultValue( result, pipeline, "VULKAN_HPP_NAMESPACE::Device::createGraphicsPipeline" );
   29097   }
   29098 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29099   template <typename Allocator>
   29100   VULKAN_HPP_INLINE typename ResultValueType<std::vector<UniquePipeline,Allocator>>::type Device::createGraphicsPipelinesUnique( PipelineCache pipelineCache, ArrayProxy<const GraphicsPipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator ) const
   29101   {
   29102     std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
   29103     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() ) ) );
   29104 
   29105     PipelineDeleter deleter( *this, allocator );
   29106     std::vector<UniquePipeline> uniquePipelines;
   29107     uniquePipelines.reserve( pipelines.size() );
   29108     for ( auto const& pipeline : pipelines )
   29109     {
   29110       uniquePipelines.push_back( UniquePipeline( pipeline, deleter ) );
   29111     }
   29112 
   29113     return createResultValue( result, uniquePipelines, "VULKAN_HPP_NAMESPACE::Device::createGraphicsPipelinesUnique" );
   29114   }
   29115   VULKAN_HPP_INLINE ResultValueType<UniquePipeline>::type Device::createGraphicsPipelineUnique( PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29116   {
   29117     Pipeline pipeline;
   29118     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 ) ) );
   29119 
   29120     PipelineDeleter deleter( *this, allocator );
   29121     return createResultValue( result, pipeline, "VULKAN_HPP_NAMESPACE::Device::createGraphicsPipelineUnique", deleter );
   29122   }
   29123 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29124 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29125 
   29126   VULKAN_HPP_INLINE Result Device::createComputePipelines( PipelineCache pipelineCache, uint32_t createInfoCount, const ComputePipelineCreateInfo* pCreateInfos, const AllocationCallbacks* pAllocator, Pipeline* pPipelines ) const
   29127   {
   29128     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 ) ) );
   29129   }
   29130 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29131   template <typename Allocator>
   29132   VULKAN_HPP_INLINE typename ResultValueType<std::vector<Pipeline,Allocator>>::type Device::createComputePipelines( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator ) const
   29133   {
   29134     std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
   29135     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() ) ) );
   29136     return createResultValue( result, pipelines, "VULKAN_HPP_NAMESPACE::Device::createComputePipelines" );
   29137   }
   29138   VULKAN_HPP_INLINE ResultValueType<Pipeline>::type Device::createComputePipeline( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29139   {
   29140     Pipeline pipeline;
   29141     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 ) ) );
   29142     return createResultValue( result, pipeline, "VULKAN_HPP_NAMESPACE::Device::createComputePipeline" );
   29143   }
   29144 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29145   template <typename Allocator>
   29146   VULKAN_HPP_INLINE typename ResultValueType<std::vector<UniquePipeline,Allocator>>::type Device::createComputePipelinesUnique( PipelineCache pipelineCache, ArrayProxy<const ComputePipelineCreateInfo> createInfos, Optional<const AllocationCallbacks> allocator ) const
   29147   {
   29148     std::vector<Pipeline,Allocator> pipelines( createInfos.size() );
   29149     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() ) ) );
   29150 
   29151     PipelineDeleter deleter( *this, allocator );
   29152     std::vector<UniquePipeline> uniquePipelines;
   29153     uniquePipelines.reserve( pipelines.size() );
   29154     for ( auto const& pipeline : pipelines )
   29155     {
   29156       uniquePipelines.push_back( UniquePipeline( pipeline, deleter ) );
   29157     }
   29158 
   29159     return createResultValue( result, uniquePipelines, "VULKAN_HPP_NAMESPACE::Device::createComputePipelinesUnique" );
   29160   }
   29161   VULKAN_HPP_INLINE ResultValueType<UniquePipeline>::type Device::createComputePipelineUnique( PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29162   {
   29163     Pipeline pipeline;
   29164     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 ) ) );
   29165 
   29166     PipelineDeleter deleter( *this, allocator );
   29167     return createResultValue( result, pipeline, "VULKAN_HPP_NAMESPACE::Device::createComputePipelineUnique", deleter );
   29168   }
   29169 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29170 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29171 
   29172   VULKAN_HPP_INLINE void Device::destroyPipeline( Pipeline pipeline, const AllocationCallbacks* pAllocator ) const
   29173   {
   29174     vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29175   }
   29176 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29177   VULKAN_HPP_INLINE void Device::destroyPipeline( Pipeline pipeline, Optional<const AllocationCallbacks> allocator ) const
   29178   {
   29179     vkDestroyPipeline( m_device, static_cast<VkPipeline>( pipeline ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29180   }
   29181 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29182 
   29183   VULKAN_HPP_INLINE Result Device::createPipelineLayout( const PipelineLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, PipelineLayout* pPipelineLayout ) const
   29184   {
   29185     return static_cast<Result>( vkCreatePipelineLayout( m_device, reinterpret_cast<const VkPipelineLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkPipelineLayout*>( pPipelineLayout ) ) );
   29186   }
   29187 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29188   VULKAN_HPP_INLINE ResultValueType<PipelineLayout>::type Device::createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29189   {
   29190     PipelineLayout pipelineLayout;
   29191     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 ) ) );
   29192     return createResultValue( result, pipelineLayout, "VULKAN_HPP_NAMESPACE::Device::createPipelineLayout" );
   29193   }
   29194 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29195   VULKAN_HPP_INLINE ResultValueType<UniquePipelineLayout>::type Device::createPipelineLayoutUnique( const PipelineLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29196   {
   29197     PipelineLayout pipelineLayout;
   29198     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 ) ) );
   29199 
   29200     PipelineLayoutDeleter deleter( *this, allocator );
   29201     return createResultValue( result, pipelineLayout, "VULKAN_HPP_NAMESPACE::Device::createPipelineLayoutUnique", deleter );
   29202   }
   29203 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29204 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29205 
   29206   VULKAN_HPP_INLINE void Device::destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks* pAllocator ) const
   29207   {
   29208     vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29209   }
   29210 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29211   VULKAN_HPP_INLINE void Device::destroyPipelineLayout( PipelineLayout pipelineLayout, Optional<const AllocationCallbacks> allocator ) const
   29212   {
   29213     vkDestroyPipelineLayout( m_device, static_cast<VkPipelineLayout>( pipelineLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29214   }
   29215 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29216 
   29217   VULKAN_HPP_INLINE Result Device::createSampler( const SamplerCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Sampler* pSampler ) const
   29218   {
   29219     return static_cast<Result>( vkCreateSampler( m_device, reinterpret_cast<const VkSamplerCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSampler*>( pSampler ) ) );
   29220   }
   29221 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29222   VULKAN_HPP_INLINE ResultValueType<Sampler>::type Device::createSampler( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29223   {
   29224     Sampler sampler;
   29225     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 ) ) );
   29226     return createResultValue( result, sampler, "VULKAN_HPP_NAMESPACE::Device::createSampler" );
   29227   }
   29228 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29229   VULKAN_HPP_INLINE ResultValueType<UniqueSampler>::type Device::createSamplerUnique( const SamplerCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29230   {
   29231     Sampler sampler;
   29232     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 ) ) );
   29233 
   29234     SamplerDeleter deleter( *this, allocator );
   29235     return createResultValue( result, sampler, "VULKAN_HPP_NAMESPACE::Device::createSamplerUnique", deleter );
   29236   }
   29237 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29238 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29239 
   29240   VULKAN_HPP_INLINE void Device::destroySampler( Sampler sampler, const AllocationCallbacks* pAllocator ) const
   29241   {
   29242     vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29243   }
   29244 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29245   VULKAN_HPP_INLINE void Device::destroySampler( Sampler sampler, Optional<const AllocationCallbacks> allocator ) const
   29246   {
   29247     vkDestroySampler( m_device, static_cast<VkSampler>( sampler ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29248   }
   29249 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29250 
   29251   VULKAN_HPP_INLINE Result Device::createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorSetLayout* pSetLayout ) const
   29252   {
   29253     return static_cast<Result>( vkCreateDescriptorSetLayout( m_device, reinterpret_cast<const VkDescriptorSetLayoutCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorSetLayout*>( pSetLayout ) ) );
   29254   }
   29255 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29256   VULKAN_HPP_INLINE ResultValueType<DescriptorSetLayout>::type Device::createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29257   {
   29258     DescriptorSetLayout setLayout;
   29259     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 ) ) );
   29260     return createResultValue( result, setLayout, "VULKAN_HPP_NAMESPACE::Device::createDescriptorSetLayout" );
   29261   }
   29262 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29263   VULKAN_HPP_INLINE ResultValueType<UniqueDescriptorSetLayout>::type Device::createDescriptorSetLayoutUnique( const DescriptorSetLayoutCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29264   {
   29265     DescriptorSetLayout setLayout;
   29266     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 ) ) );
   29267 
   29268     DescriptorSetLayoutDeleter deleter( *this, allocator );
   29269     return createResultValue( result, setLayout, "VULKAN_HPP_NAMESPACE::Device::createDescriptorSetLayoutUnique", deleter );
   29270   }
   29271 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29272 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29273 
   29274   VULKAN_HPP_INLINE void Device::destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks* pAllocator ) const
   29275   {
   29276     vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29277   }
   29278 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29279   VULKAN_HPP_INLINE void Device::destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, Optional<const AllocationCallbacks> allocator ) const
   29280   {
   29281     vkDestroyDescriptorSetLayout( m_device, static_cast<VkDescriptorSetLayout>( descriptorSetLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29282   }
   29283 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29284 
   29285   VULKAN_HPP_INLINE Result Device::createDescriptorPool( const DescriptorPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorPool* pDescriptorPool ) const
   29286   {
   29287     return static_cast<Result>( vkCreateDescriptorPool( m_device, reinterpret_cast<const VkDescriptorPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorPool*>( pDescriptorPool ) ) );
   29288   }
   29289 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29290   VULKAN_HPP_INLINE ResultValueType<DescriptorPool>::type Device::createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29291   {
   29292     DescriptorPool descriptorPool;
   29293     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 ) ) );
   29294     return createResultValue( result, descriptorPool, "VULKAN_HPP_NAMESPACE::Device::createDescriptorPool" );
   29295   }
   29296 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29297   VULKAN_HPP_INLINE ResultValueType<UniqueDescriptorPool>::type Device::createDescriptorPoolUnique( const DescriptorPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29298   {
   29299     DescriptorPool descriptorPool;
   29300     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 ) ) );
   29301 
   29302     DescriptorPoolDeleter deleter( *this, allocator );
   29303     return createResultValue( result, descriptorPool, "VULKAN_HPP_NAMESPACE::Device::createDescriptorPoolUnique", deleter );
   29304   }
   29305 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29306 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29307 
   29308   VULKAN_HPP_INLINE void Device::destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks* pAllocator ) const
   29309   {
   29310     vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29311   }
   29312 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29313   VULKAN_HPP_INLINE void Device::destroyDescriptorPool( DescriptorPool descriptorPool, Optional<const AllocationCallbacks> allocator ) const
   29314   {
   29315     vkDestroyDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29316   }
   29317 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29318 
   29319 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29320   VULKAN_HPP_INLINE Result Device::resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const
   29321   {
   29322     return static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
   29323   }
   29324 #else
   29325   VULKAN_HPP_INLINE ResultValueType<void>::type Device::resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const
   29326   {
   29327     Result result = static_cast<Result>( vkResetDescriptorPool( m_device, static_cast<VkDescriptorPool>( descriptorPool ), static_cast<VkDescriptorPoolResetFlags>( flags ) ) );
   29328     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::resetDescriptorPool" );
   29329   }
   29330 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29331 
   29332   VULKAN_HPP_INLINE Result Device::allocateDescriptorSets( const DescriptorSetAllocateInfo* pAllocateInfo, DescriptorSet* pDescriptorSets ) const
   29333   {
   29334     return static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkDescriptorSet*>( pDescriptorSets ) ) );
   29335   }
   29336 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29337   template <typename Allocator>
   29338   VULKAN_HPP_INLINE typename ResultValueType<std::vector<DescriptorSet,Allocator>>::type Device::allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo ) const
   29339   {
   29340     std::vector<DescriptorSet,Allocator> descriptorSets( allocateInfo.descriptorSetCount );
   29341     Result result = static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkDescriptorSet*>( descriptorSets.data() ) ) );
   29342     return createResultValue( result, descriptorSets, "VULKAN_HPP_NAMESPACE::Device::allocateDescriptorSets" );
   29343   }
   29344 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29345   template <typename Allocator>
   29346   VULKAN_HPP_INLINE typename ResultValueType<std::vector<UniqueDescriptorSet,Allocator>>::type Device::allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo ) const
   29347   {
   29348     std::vector<DescriptorSet,Allocator> descriptorSets( allocateInfo.descriptorSetCount );
   29349     Result result = static_cast<Result>( vkAllocateDescriptorSets( m_device, reinterpret_cast<const VkDescriptorSetAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkDescriptorSet*>( descriptorSets.data() ) ) );
   29350 
   29351     DescriptorSetDeleter deleter( *this, allocateInfo.descriptorPool );
   29352     std::vector<UniqueDescriptorSet> uniqueDescriptorSets;
   29353     uniqueDescriptorSets.reserve( descriptorSets.size() );
   29354     for ( auto const& descriptorSet : descriptorSets )
   29355     {
   29356       uniqueDescriptorSets.push_back( UniqueDescriptorSet( descriptorSet, deleter ) );
   29357     }
   29358 
   29359     return createResultValue( result, uniqueDescriptorSets, "VULKAN_HPP_NAMESPACE::Device::allocateDescriptorSetsUnique" );
   29360   }
   29361 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29362 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29363 
   29364   VULKAN_HPP_INLINE Result Device::freeDescriptorSets( DescriptorPool descriptorPool, uint32_t descriptorSetCount, const DescriptorSet* pDescriptorSets ) const
   29365   {
   29366     return static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSetCount, reinterpret_cast<const VkDescriptorSet*>( pDescriptorSets ) ) );
   29367   }
   29368 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29369   VULKAN_HPP_INLINE ResultValueType<void>::type Device::freeDescriptorSets( DescriptorPool descriptorPool, ArrayProxy<const DescriptorSet> descriptorSets ) const
   29370   {
   29371     Result result = static_cast<Result>( vkFreeDescriptorSets( m_device, static_cast<VkDescriptorPool>( descriptorPool ), descriptorSets.size() , reinterpret_cast<const VkDescriptorSet*>( descriptorSets.data() ) ) );
   29372     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::freeDescriptorSets" );
   29373   }
   29374 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29375 
   29376   VULKAN_HPP_INLINE void Device::updateDescriptorSets( uint32_t descriptorWriteCount, const WriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const CopyDescriptorSet* pDescriptorCopies ) const
   29377   {
   29378     vkUpdateDescriptorSets( m_device, descriptorWriteCount, reinterpret_cast<const VkWriteDescriptorSet*>( pDescriptorWrites ), descriptorCopyCount, reinterpret_cast<const VkCopyDescriptorSet*>( pDescriptorCopies ) );
   29379   }
   29380 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29381   VULKAN_HPP_INLINE void Device::updateDescriptorSets( ArrayProxy<const WriteDescriptorSet> descriptorWrites, ArrayProxy<const CopyDescriptorSet> descriptorCopies ) const
   29382   {
   29383     vkUpdateDescriptorSets( m_device, descriptorWrites.size() , reinterpret_cast<const VkWriteDescriptorSet*>( descriptorWrites.data() ), descriptorCopies.size() , reinterpret_cast<const VkCopyDescriptorSet*>( descriptorCopies.data() ) );
   29384   }
   29385 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29386 
   29387   VULKAN_HPP_INLINE Result Device::createFramebuffer( const FramebufferCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Framebuffer* pFramebuffer ) const
   29388   {
   29389     return static_cast<Result>( vkCreateFramebuffer( m_device, reinterpret_cast<const VkFramebufferCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFramebuffer*>( pFramebuffer ) ) );
   29390   }
   29391 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29392   VULKAN_HPP_INLINE ResultValueType<Framebuffer>::type Device::createFramebuffer( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29393   {
   29394     Framebuffer framebuffer;
   29395     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 ) ) );
   29396     return createResultValue( result, framebuffer, "VULKAN_HPP_NAMESPACE::Device::createFramebuffer" );
   29397   }
   29398 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29399   VULKAN_HPP_INLINE ResultValueType<UniqueFramebuffer>::type Device::createFramebufferUnique( const FramebufferCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29400   {
   29401     Framebuffer framebuffer;
   29402     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 ) ) );
   29403 
   29404     FramebufferDeleter deleter( *this, allocator );
   29405     return createResultValue( result, framebuffer, "VULKAN_HPP_NAMESPACE::Device::createFramebufferUnique", deleter );
   29406   }
   29407 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29408 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29409 
   29410   VULKAN_HPP_INLINE void Device::destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks* pAllocator ) const
   29411   {
   29412     vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29413   }
   29414 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29415   VULKAN_HPP_INLINE void Device::destroyFramebuffer( Framebuffer framebuffer, Optional<const AllocationCallbacks> allocator ) const
   29416   {
   29417     vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( framebuffer ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29418   }
   29419 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29420 
   29421   VULKAN_HPP_INLINE Result Device::createRenderPass( const RenderPassCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, RenderPass* pRenderPass ) const
   29422   {
   29423     return static_cast<Result>( vkCreateRenderPass( m_device, reinterpret_cast<const VkRenderPassCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkRenderPass*>( pRenderPass ) ) );
   29424   }
   29425 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29426   VULKAN_HPP_INLINE ResultValueType<RenderPass>::type Device::createRenderPass( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29427   {
   29428     RenderPass renderPass;
   29429     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 ) ) );
   29430     return createResultValue( result, renderPass, "VULKAN_HPP_NAMESPACE::Device::createRenderPass" );
   29431   }
   29432 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29433   VULKAN_HPP_INLINE ResultValueType<UniqueRenderPass>::type Device::createRenderPassUnique( const RenderPassCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29434   {
   29435     RenderPass renderPass;
   29436     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 ) ) );
   29437 
   29438     RenderPassDeleter deleter( *this, allocator );
   29439     return createResultValue( result, renderPass, "VULKAN_HPP_NAMESPACE::Device::createRenderPassUnique", deleter );
   29440   }
   29441 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29442 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29443 
   29444   VULKAN_HPP_INLINE void Device::destroyRenderPass( RenderPass renderPass, const AllocationCallbacks* pAllocator ) const
   29445   {
   29446     vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29447   }
   29448 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29449   VULKAN_HPP_INLINE void Device::destroyRenderPass( RenderPass renderPass, Optional<const AllocationCallbacks> allocator ) const
   29450   {
   29451     vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29452   }
   29453 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29454 
   29455   VULKAN_HPP_INLINE void Device::getRenderAreaGranularity( RenderPass renderPass, Extent2D* pGranularity ) const
   29456   {
   29457     vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( pGranularity ) );
   29458   }
   29459 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29460   VULKAN_HPP_INLINE Extent2D Device::getRenderAreaGranularity( RenderPass renderPass ) const
   29461   {
   29462     Extent2D granularity;
   29463     vkGetRenderAreaGranularity( m_device, static_cast<VkRenderPass>( renderPass ), reinterpret_cast<VkExtent2D*>( &granularity ) );
   29464     return granularity;
   29465   }
   29466 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29467 
   29468   VULKAN_HPP_INLINE Result Device::createCommandPool( const CommandPoolCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, CommandPool* pCommandPool ) const
   29469   {
   29470     return static_cast<Result>( vkCreateCommandPool( m_device, reinterpret_cast<const VkCommandPoolCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkCommandPool*>( pCommandPool ) ) );
   29471   }
   29472 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29473   VULKAN_HPP_INLINE ResultValueType<CommandPool>::type Device::createCommandPool( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29474   {
   29475     CommandPool commandPool;
   29476     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 ) ) );
   29477     return createResultValue( result, commandPool, "VULKAN_HPP_NAMESPACE::Device::createCommandPool" );
   29478   }
   29479 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29480   VULKAN_HPP_INLINE ResultValueType<UniqueCommandPool>::type Device::createCommandPoolUnique( const CommandPoolCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29481   {
   29482     CommandPool commandPool;
   29483     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 ) ) );
   29484 
   29485     CommandPoolDeleter deleter( *this, allocator );
   29486     return createResultValue( result, commandPool, "VULKAN_HPP_NAMESPACE::Device::createCommandPoolUnique", deleter );
   29487   }
   29488 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29489 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29490 
   29491   VULKAN_HPP_INLINE void Device::destroyCommandPool( CommandPool commandPool, const AllocationCallbacks* pAllocator ) const
   29492   {
   29493     vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29494   }
   29495 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29496   VULKAN_HPP_INLINE void Device::destroyCommandPool( CommandPool commandPool, Optional<const AllocationCallbacks> allocator ) const
   29497   {
   29498     vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29499   }
   29500 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29501 
   29502 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29503   VULKAN_HPP_INLINE Result Device::resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
   29504   {
   29505     return static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
   29506   }
   29507 #else
   29508   VULKAN_HPP_INLINE ResultValueType<void>::type Device::resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags ) const
   29509   {
   29510     Result result = static_cast<Result>( vkResetCommandPool( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolResetFlags>( flags ) ) );
   29511     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::resetCommandPool" );
   29512   }
   29513 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29514 
   29515   VULKAN_HPP_INLINE Result Device::allocateCommandBuffers( const CommandBufferAllocateInfo* pAllocateInfo, CommandBuffer* pCommandBuffers ) const
   29516   {
   29517     return static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( pAllocateInfo ), reinterpret_cast<VkCommandBuffer*>( pCommandBuffers ) ) );
   29518   }
   29519 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29520   template <typename Allocator>
   29521   VULKAN_HPP_INLINE typename ResultValueType<std::vector<CommandBuffer,Allocator>>::type Device::allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo ) const
   29522   {
   29523     std::vector<CommandBuffer,Allocator> commandBuffers( allocateInfo.commandBufferCount );
   29524     Result result = static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkCommandBuffer*>( commandBuffers.data() ) ) );
   29525     return createResultValue( result, commandBuffers, "VULKAN_HPP_NAMESPACE::Device::allocateCommandBuffers" );
   29526   }
   29527 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29528   template <typename Allocator>
   29529   VULKAN_HPP_INLINE typename ResultValueType<std::vector<UniqueCommandBuffer,Allocator>>::type Device::allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo ) const
   29530   {
   29531     std::vector<CommandBuffer,Allocator> commandBuffers( allocateInfo.commandBufferCount );
   29532     Result result = static_cast<Result>( vkAllocateCommandBuffers( m_device, reinterpret_cast<const VkCommandBufferAllocateInfo*>( &allocateInfo ), reinterpret_cast<VkCommandBuffer*>( commandBuffers.data() ) ) );
   29533 
   29534     CommandBufferDeleter deleter( *this, allocateInfo.commandPool );
   29535     std::vector<UniqueCommandBuffer> uniqueCommandBuffers;
   29536     uniqueCommandBuffers.reserve( commandBuffers.size() );
   29537     for ( auto const& commandBuffer : commandBuffers )
   29538     {
   29539       uniqueCommandBuffers.push_back( UniqueCommandBuffer( commandBuffer, deleter ) );
   29540     }
   29541 
   29542     return createResultValue( result, uniqueCommandBuffers, "VULKAN_HPP_NAMESPACE::Device::allocateCommandBuffersUnique" );
   29543   }
   29544 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29545 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29546 
   29547   VULKAN_HPP_INLINE void Device::freeCommandBuffers( CommandPool commandPool, uint32_t commandBufferCount, const CommandBuffer* pCommandBuffers ) const
   29548   {
   29549     vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBufferCount, reinterpret_cast<const VkCommandBuffer*>( pCommandBuffers ) );
   29550   }
   29551 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29552   VULKAN_HPP_INLINE void Device::freeCommandBuffers( CommandPool commandPool, ArrayProxy<const CommandBuffer> commandBuffers ) const
   29553   {
   29554     vkFreeCommandBuffers( m_device, static_cast<VkCommandPool>( commandPool ), commandBuffers.size() , reinterpret_cast<const VkCommandBuffer*>( commandBuffers.data() ) );
   29555   }
   29556 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29557 
   29558   VULKAN_HPP_INLINE Result Device::createSharedSwapchainsKHR( uint32_t swapchainCount, const SwapchainCreateInfoKHR* pCreateInfos, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchains ) const
   29559   {
   29560     return static_cast<Result>( vkCreateSharedSwapchainsKHR( m_device, swapchainCount, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfos ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchains ) ) );
   29561   }
   29562 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29563   template <typename Allocator>
   29564   VULKAN_HPP_INLINE typename ResultValueType<std::vector<SwapchainKHR,Allocator>>::type Device::createSharedSwapchainsKHR( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator ) const
   29565   {
   29566     std::vector<SwapchainKHR,Allocator> swapchains( createInfos.size() );
   29567     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() ) ) );
   29568     return createResultValue( result, swapchains, "VULKAN_HPP_NAMESPACE::Device::createSharedSwapchainsKHR" );
   29569   }
   29570   VULKAN_HPP_INLINE ResultValueType<SwapchainKHR>::type Device::createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29571   {
   29572     SwapchainKHR swapchain;
   29573     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 ) ) );
   29574     return createResultValue( result, swapchain, "VULKAN_HPP_NAMESPACE::Device::createSharedSwapchainKHR" );
   29575   }
   29576 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29577   template <typename Allocator>
   29578   VULKAN_HPP_INLINE typename ResultValueType<std::vector<UniqueSwapchainKHR,Allocator>>::type Device::createSharedSwapchainsKHRUnique( ArrayProxy<const SwapchainCreateInfoKHR> createInfos, Optional<const AllocationCallbacks> allocator ) const
   29579   {
   29580     std::vector<SwapchainKHR,Allocator> swapchains( createInfos.size() );
   29581     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() ) ) );
   29582 
   29583     SwapchainKHRDeleter deleter( *this, allocator );
   29584     std::vector<UniqueSwapchainKHR> uniqueSwapchains;
   29585     uniqueSwapchains.reserve( swapchains.size() );
   29586     for ( auto const& swapchain : swapchains )
   29587     {
   29588       uniqueSwapchains.push_back( UniqueSwapchainKHR( swapchain, deleter ) );
   29589     }
   29590 
   29591     return createResultValue( result, uniqueSwapchains, "VULKAN_HPP_NAMESPACE::Device::createSharedSwapchainsKHRUnique" );
   29592   }
   29593   VULKAN_HPP_INLINE ResultValueType<UniqueSwapchainKHR>::type Device::createSharedSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29594   {
   29595     SwapchainKHR swapchain;
   29596     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 ) ) );
   29597 
   29598     SwapchainKHRDeleter deleter( *this, allocator );
   29599     return createResultValue( result, swapchain, "VULKAN_HPP_NAMESPACE::Device::createSharedSwapchainKHRUnique", deleter );
   29600   }
   29601 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29602 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29603 
   29604   VULKAN_HPP_INLINE Result Device::createSwapchainKHR( const SwapchainCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SwapchainKHR* pSwapchain ) const
   29605   {
   29606     return static_cast<Result>( vkCreateSwapchainKHR( m_device, reinterpret_cast<const VkSwapchainCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSwapchainKHR*>( pSwapchain ) ) );
   29607   }
   29608 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29609   VULKAN_HPP_INLINE ResultValueType<SwapchainKHR>::type Device::createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29610   {
   29611     SwapchainKHR swapchain;
   29612     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 ) ) );
   29613     return createResultValue( result, swapchain, "VULKAN_HPP_NAMESPACE::Device::createSwapchainKHR" );
   29614   }
   29615 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29616   VULKAN_HPP_INLINE ResultValueType<UniqueSwapchainKHR>::type Device::createSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29617   {
   29618     SwapchainKHR swapchain;
   29619     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 ) ) );
   29620 
   29621     SwapchainKHRDeleter deleter( *this, allocator );
   29622     return createResultValue( result, swapchain, "VULKAN_HPP_NAMESPACE::Device::createSwapchainKHRUnique", deleter );
   29623   }
   29624 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29625 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29626 
   29627   VULKAN_HPP_INLINE void Device::destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks* pAllocator ) const
   29628   {
   29629     vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29630   }
   29631 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29632   VULKAN_HPP_INLINE void Device::destroySwapchainKHR( SwapchainKHR swapchain, Optional<const AllocationCallbacks> allocator ) const
   29633   {
   29634     vkDestroySwapchainKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29635   }
   29636 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29637 
   29638   VULKAN_HPP_INLINE Result Device::getSwapchainImagesKHR( SwapchainKHR swapchain, uint32_t* pSwapchainImageCount, Image* pSwapchainImages ) const
   29639   {
   29640     return static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), pSwapchainImageCount, reinterpret_cast<VkImage*>( pSwapchainImages ) ) );
   29641   }
   29642 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29643   template <typename Allocator>
   29644   VULKAN_HPP_INLINE typename ResultValueType<std::vector<Image,Allocator>>::type Device::getSwapchainImagesKHR( SwapchainKHR swapchain ) const
   29645   {
   29646     std::vector<Image,Allocator> swapchainImages;
   29647     uint32_t swapchainImageCount;
   29648     Result result;
   29649     do
   29650     {
   29651       result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, nullptr ) );
   29652       if ( ( result == Result::eSuccess ) && swapchainImageCount )
   29653       {
   29654         swapchainImages.resize( swapchainImageCount );
   29655         result = static_cast<Result>( vkGetSwapchainImagesKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), &swapchainImageCount, reinterpret_cast<VkImage*>( swapchainImages.data() ) ) );
   29656       }
   29657     } while ( result == Result::eIncomplete );
   29658     assert( swapchainImageCount <= swapchainImages.size() );
   29659     swapchainImages.resize( swapchainImageCount );
   29660     return createResultValue( result, swapchainImages, "VULKAN_HPP_NAMESPACE::Device::getSwapchainImagesKHR" );
   29661   }
   29662 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29663 
   29664   VULKAN_HPP_INLINE Result Device::acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t* pImageIndex ) const
   29665   {
   29666     return static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), pImageIndex ) );
   29667   }
   29668 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29669   VULKAN_HPP_INLINE ResultValue<uint32_t> Device::acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence ) const
   29670   {
   29671     uint32_t imageIndex;
   29672     Result result = static_cast<Result>( vkAcquireNextImageKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ), timeout, static_cast<VkSemaphore>( semaphore ), static_cast<VkFence>( fence ), &imageIndex ) );
   29673     return createResultValue( result, imageIndex, "VULKAN_HPP_NAMESPACE::Device::acquireNextImageKHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } );
   29674   }
   29675 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29676 
   29677   VULKAN_HPP_INLINE Result Device::debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT* pNameInfo ) const
   29678   {
   29679     return static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>( pNameInfo ) ) );
   29680   }
   29681 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29682   VULKAN_HPP_INLINE ResultValueType<void>::type Device::debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT & nameInfo ) const
   29683   {
   29684     Result result = static_cast<Result>( vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT*>( &nameInfo ) ) );
   29685     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::debugMarkerSetObjectNameEXT" );
   29686   }
   29687 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29688 
   29689   VULKAN_HPP_INLINE Result Device::debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT* pTagInfo ) const
   29690   {
   29691     return static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>( pTagInfo ) ) );
   29692   }
   29693 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29694   VULKAN_HPP_INLINE ResultValueType<void>::type Device::debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT & tagInfo ) const
   29695   {
   29696     Result result = static_cast<Result>( vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT*>( &tagInfo ) ) );
   29697     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::debugMarkerSetObjectTagEXT" );
   29698   }
   29699 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29700 
   29701 #ifdef VK_USE_PLATFORM_WIN32_KHR
   29702   VULKAN_HPP_INLINE Result Device::getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle ) const
   29703   {
   29704     return static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), pHandle ) );
   29705   }
   29706 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29707   VULKAN_HPP_INLINE ResultValueType<HANDLE>::type Device::getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType ) const
   29708   {
   29709     HANDLE handle;
   29710     Result result = static_cast<Result>( vkGetMemoryWin32HandleNV( m_device, static_cast<VkDeviceMemory>( memory ), static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ), &handle ) );
   29711     return createResultValue( result, handle, "VULKAN_HPP_NAMESPACE::Device::getMemoryWin32HandleNV" );
   29712   }
   29713 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29714 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   29715 
   29716   VULKAN_HPP_INLINE Result Device::createIndirectCommandsLayoutNVX( const IndirectCommandsLayoutCreateInfoNVX* pCreateInfo, const AllocationCallbacks* pAllocator, IndirectCommandsLayoutNVX* pIndirectCommandsLayout ) const
   29717   {
   29718     return static_cast<Result>( vkCreateIndirectCommandsLayoutNVX( m_device, reinterpret_cast<const VkIndirectCommandsLayoutCreateInfoNVX*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkIndirectCommandsLayoutNVX*>( pIndirectCommandsLayout ) ) );
   29719   }
   29720 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29721   VULKAN_HPP_INLINE ResultValueType<IndirectCommandsLayoutNVX>::type Device::createIndirectCommandsLayoutNVX( const IndirectCommandsLayoutCreateInfoNVX & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29722   {
   29723     IndirectCommandsLayoutNVX indirectCommandsLayout;
   29724     Result result = static_cast<Result>( vkCreateIndirectCommandsLayoutNVX( m_device, reinterpret_cast<const VkIndirectCommandsLayoutCreateInfoNVX*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkIndirectCommandsLayoutNVX*>( &indirectCommandsLayout ) ) );
   29725     return createResultValue( result, indirectCommandsLayout, "VULKAN_HPP_NAMESPACE::Device::createIndirectCommandsLayoutNVX" );
   29726   }
   29727 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29728   VULKAN_HPP_INLINE ResultValueType<UniqueIndirectCommandsLayoutNVX>::type Device::createIndirectCommandsLayoutNVXUnique( const IndirectCommandsLayoutCreateInfoNVX & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29729   {
   29730     IndirectCommandsLayoutNVX indirectCommandsLayout;
   29731     Result result = static_cast<Result>( vkCreateIndirectCommandsLayoutNVX( m_device, reinterpret_cast<const VkIndirectCommandsLayoutCreateInfoNVX*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkIndirectCommandsLayoutNVX*>( &indirectCommandsLayout ) ) );
   29732 
   29733     IndirectCommandsLayoutNVXDeleter deleter( *this, allocator );
   29734     return createResultValue( result, indirectCommandsLayout, "VULKAN_HPP_NAMESPACE::Device::createIndirectCommandsLayoutNVXUnique", deleter );
   29735   }
   29736 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29737 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29738 
   29739   VULKAN_HPP_INLINE void Device::destroyIndirectCommandsLayoutNVX( IndirectCommandsLayoutNVX indirectCommandsLayout, const AllocationCallbacks* pAllocator ) const
   29740   {
   29741     vkDestroyIndirectCommandsLayoutNVX( m_device, static_cast<VkIndirectCommandsLayoutNVX>( indirectCommandsLayout ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29742   }
   29743 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29744   VULKAN_HPP_INLINE void Device::destroyIndirectCommandsLayoutNVX( IndirectCommandsLayoutNVX indirectCommandsLayout, Optional<const AllocationCallbacks> allocator ) const
   29745   {
   29746     vkDestroyIndirectCommandsLayoutNVX( m_device, static_cast<VkIndirectCommandsLayoutNVX>( indirectCommandsLayout ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29747   }
   29748 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29749 
   29750   VULKAN_HPP_INLINE Result Device::createObjectTableNVX( const ObjectTableCreateInfoNVX* pCreateInfo, const AllocationCallbacks* pAllocator, ObjectTableNVX* pObjectTable ) const
   29751   {
   29752     return static_cast<Result>( vkCreateObjectTableNVX( m_device, reinterpret_cast<const VkObjectTableCreateInfoNVX*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkObjectTableNVX*>( pObjectTable ) ) );
   29753   }
   29754 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29755   VULKAN_HPP_INLINE ResultValueType<ObjectTableNVX>::type Device::createObjectTableNVX( const ObjectTableCreateInfoNVX & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29756   {
   29757     ObjectTableNVX objectTable;
   29758     Result result = static_cast<Result>( vkCreateObjectTableNVX( m_device, reinterpret_cast<const VkObjectTableCreateInfoNVX*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkObjectTableNVX*>( &objectTable ) ) );
   29759     return createResultValue( result, objectTable, "VULKAN_HPP_NAMESPACE::Device::createObjectTableNVX" );
   29760   }
   29761 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   29762   VULKAN_HPP_INLINE ResultValueType<UniqueObjectTableNVX>::type Device::createObjectTableNVXUnique( const ObjectTableCreateInfoNVX & createInfo, Optional<const AllocationCallbacks> allocator ) const
   29763   {
   29764     ObjectTableNVX objectTable;
   29765     Result result = static_cast<Result>( vkCreateObjectTableNVX( m_device, reinterpret_cast<const VkObjectTableCreateInfoNVX*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkObjectTableNVX*>( &objectTable ) ) );
   29766 
   29767     ObjectTableNVXDeleter deleter( *this, allocator );
   29768     return createResultValue( result, objectTable, "VULKAN_HPP_NAMESPACE::Device::createObjectTableNVXUnique", deleter );
   29769   }
   29770 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   29771 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29772 
   29773   VULKAN_HPP_INLINE void Device::destroyObjectTableNVX( ObjectTableNVX objectTable, const AllocationCallbacks* pAllocator ) const
   29774   {
   29775     vkDestroyObjectTableNVX( m_device, static_cast<VkObjectTableNVX>( objectTable ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   29776   }
   29777 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29778   VULKAN_HPP_INLINE void Device::destroyObjectTableNVX( ObjectTableNVX objectTable, Optional<const AllocationCallbacks> allocator ) const
   29779   {
   29780     vkDestroyObjectTableNVX( m_device, static_cast<VkObjectTableNVX>( objectTable ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   29781   }
   29782 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29783 
   29784   VULKAN_HPP_INLINE Result Device::registerObjectsNVX( ObjectTableNVX objectTable, uint32_t objectCount, const ObjectTableEntryNVX* const* ppObjectTableEntries, const uint32_t* pObjectIndices ) const
   29785   {
   29786     return static_cast<Result>( vkRegisterObjectsNVX( m_device, static_cast<VkObjectTableNVX>( objectTable ), objectCount, reinterpret_cast<const VkObjectTableEntryNVX* const*>( ppObjectTableEntries ), pObjectIndices ) );
   29787   }
   29788 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29789   VULKAN_HPP_INLINE ResultValueType<void>::type Device::registerObjectsNVX( ObjectTableNVX objectTable, ArrayProxy<const ObjectTableEntryNVX* const> pObjectTableEntries, ArrayProxy<const uint32_t> objectIndices ) const
   29790   {
   29791 #ifdef VULKAN_HPP_NO_EXCEPTIONS
   29792     assert( pObjectTableEntries.size() == objectIndices.size() );
   29793 #else
   29794     if ( pObjectTableEntries.size() != objectIndices.size() )
   29795     {
   29796       throw LogicError( "VULKAN_HPP_NAMESPACE::Device::registerObjectsNVX: pObjectTableEntries.size() != objectIndices.size()" );
   29797     }
   29798 #endif  // VULKAN_HPP_NO_EXCEPTIONS
   29799     Result result = static_cast<Result>( vkRegisterObjectsNVX( m_device, static_cast<VkObjectTableNVX>( objectTable ), pObjectTableEntries.size() , reinterpret_cast<const VkObjectTableEntryNVX* const*>( pObjectTableEntries.data() ), objectIndices.data() ) );
   29800     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::registerObjectsNVX" );
   29801   }
   29802 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29803 
   29804   VULKAN_HPP_INLINE Result Device::unregisterObjectsNVX( ObjectTableNVX objectTable, uint32_t objectCount, const ObjectEntryTypeNVX* pObjectEntryTypes, const uint32_t* pObjectIndices ) const
   29805   {
   29806     return static_cast<Result>( vkUnregisterObjectsNVX( m_device, static_cast<VkObjectTableNVX>( objectTable ), objectCount, reinterpret_cast<const VkObjectEntryTypeNVX*>( pObjectEntryTypes ), pObjectIndices ) );
   29807   }
   29808 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29809   VULKAN_HPP_INLINE ResultValueType<void>::type Device::unregisterObjectsNVX( ObjectTableNVX objectTable, ArrayProxy<const ObjectEntryTypeNVX> objectEntryTypes, ArrayProxy<const uint32_t> objectIndices ) const
   29810   {
   29811 #ifdef VULKAN_HPP_NO_EXCEPTIONS
   29812     assert( objectEntryTypes.size() == objectIndices.size() );
   29813 #else
   29814     if ( objectEntryTypes.size() != objectIndices.size() )
   29815     {
   29816       throw LogicError( "VULKAN_HPP_NAMESPACE::Device::unregisterObjectsNVX: objectEntryTypes.size() != objectIndices.size()" );
   29817     }
   29818 #endif  // VULKAN_HPP_NO_EXCEPTIONS
   29819     Result result = static_cast<Result>( vkUnregisterObjectsNVX( m_device, static_cast<VkObjectTableNVX>( objectTable ), objectEntryTypes.size() , reinterpret_cast<const VkObjectEntryTypeNVX*>( objectEntryTypes.data() ), objectIndices.data() ) );
   29820     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::unregisterObjectsNVX" );
   29821   }
   29822 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29823 
   29824   VULKAN_HPP_INLINE void Device::trimCommandPoolKHR( CommandPool commandPool, CommandPoolTrimFlagsKHR flags ) const
   29825   {
   29826     vkTrimCommandPoolKHR( m_device, static_cast<VkCommandPool>( commandPool ), static_cast<VkCommandPoolTrimFlagsKHR>( flags ) );
   29827   }
   29828 
   29829 #ifdef VK_USE_PLATFORM_WIN32_KHR
   29830   VULKAN_HPP_INLINE Result Device::getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle ) const
   29831   {
   29832     return static_cast<Result>( vkGetMemoryWin32HandleKHR( m_device, reinterpret_cast<const VkMemoryGetWin32HandleInfoKHR*>( pGetWin32HandleInfo ), pHandle ) );
   29833   }
   29834 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29835   VULKAN_HPP_INLINE ResultValueType<HANDLE>::type Device::getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const
   29836   {
   29837     HANDLE handle;
   29838     Result result = static_cast<Result>( vkGetMemoryWin32HandleKHR( m_device, reinterpret_cast<const VkMemoryGetWin32HandleInfoKHR*>( &getWin32HandleInfo ), &handle ) );
   29839     return createResultValue( result, handle, "VULKAN_HPP_NAMESPACE::Device::getMemoryWin32HandleKHR" );
   29840   }
   29841 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29842 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   29843 
   29844 #ifdef VK_USE_PLATFORM_WIN32_KHR
   29845   VULKAN_HPP_INLINE Result Device::getMemoryWin32HandlePropertiesKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType, HANDLE handle, MemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties ) const
   29846   {
   29847     return static_cast<Result>( vkGetMemoryWin32HandlePropertiesKHR( m_device, static_cast<VkExternalMemoryHandleTypeFlagBitsKHR>( handleType ), handle, reinterpret_cast<VkMemoryWin32HandlePropertiesKHR*>( pMemoryWin32HandleProperties ) ) );
   29848   }
   29849 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29850   VULKAN_HPP_INLINE ResultValueType<MemoryWin32HandlePropertiesKHR>::type Device::getMemoryWin32HandlePropertiesKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType, HANDLE handle ) const
   29851   {
   29852     MemoryWin32HandlePropertiesKHR memoryWin32HandleProperties;
   29853     Result result = static_cast<Result>( vkGetMemoryWin32HandlePropertiesKHR( m_device, static_cast<VkExternalMemoryHandleTypeFlagBitsKHR>( handleType ), handle, reinterpret_cast<VkMemoryWin32HandlePropertiesKHR*>( &memoryWin32HandleProperties ) ) );
   29854     return createResultValue( result, memoryWin32HandleProperties, "VULKAN_HPP_NAMESPACE::Device::getMemoryWin32HandlePropertiesKHR" );
   29855   }
   29856 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29857 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   29858 
   29859   VULKAN_HPP_INLINE Result Device::getMemoryFdKHR( const MemoryGetFdInfoKHR* pGetFdInfo, int* pFd ) const
   29860   {
   29861     return static_cast<Result>( vkGetMemoryFdKHR( m_device, reinterpret_cast<const VkMemoryGetFdInfoKHR*>( pGetFdInfo ), pFd ) );
   29862   }
   29863 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29864   VULKAN_HPP_INLINE ResultValueType<int>::type Device::getMemoryFdKHR( const MemoryGetFdInfoKHR & getFdInfo ) const
   29865   {
   29866     int fd;
   29867     Result result = static_cast<Result>( vkGetMemoryFdKHR( m_device, reinterpret_cast<const VkMemoryGetFdInfoKHR*>( &getFdInfo ), &fd ) );
   29868     return createResultValue( result, fd, "VULKAN_HPP_NAMESPACE::Device::getMemoryFdKHR" );
   29869   }
   29870 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29871 
   29872   VULKAN_HPP_INLINE Result Device::getMemoryFdPropertiesKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType, int fd, MemoryFdPropertiesKHR* pMemoryFdProperties ) const
   29873   {
   29874     return static_cast<Result>( vkGetMemoryFdPropertiesKHR( m_device, static_cast<VkExternalMemoryHandleTypeFlagBitsKHR>( handleType ), fd, reinterpret_cast<VkMemoryFdPropertiesKHR*>( pMemoryFdProperties ) ) );
   29875   }
   29876 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29877   VULKAN_HPP_INLINE ResultValueType<MemoryFdPropertiesKHR>::type Device::getMemoryFdPropertiesKHR( ExternalMemoryHandleTypeFlagBitsKHR handleType, int fd ) const
   29878   {
   29879     MemoryFdPropertiesKHR memoryFdProperties;
   29880     Result result = static_cast<Result>( vkGetMemoryFdPropertiesKHR( m_device, static_cast<VkExternalMemoryHandleTypeFlagBitsKHR>( handleType ), fd, reinterpret_cast<VkMemoryFdPropertiesKHR*>( &memoryFdProperties ) ) );
   29881     return createResultValue( result, memoryFdProperties, "VULKAN_HPP_NAMESPACE::Device::getMemoryFdPropertiesKHR" );
   29882   }
   29883 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29884 
   29885 #ifdef VK_USE_PLATFORM_WIN32_KHR
   29886   VULKAN_HPP_INLINE Result Device::getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle ) const
   29887   {
   29888     return static_cast<Result>( vkGetSemaphoreWin32HandleKHR( m_device, reinterpret_cast<const VkSemaphoreGetWin32HandleInfoKHR*>( pGetWin32HandleInfo ), pHandle ) );
   29889   }
   29890 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29891   VULKAN_HPP_INLINE ResultValueType<HANDLE>::type Device::getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const
   29892   {
   29893     HANDLE handle;
   29894     Result result = static_cast<Result>( vkGetSemaphoreWin32HandleKHR( m_device, reinterpret_cast<const VkSemaphoreGetWin32HandleInfoKHR*>( &getWin32HandleInfo ), &handle ) );
   29895     return createResultValue( result, handle, "VULKAN_HPP_NAMESPACE::Device::getSemaphoreWin32HandleKHR" );
   29896   }
   29897 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29898 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   29899 
   29900 #ifdef VK_USE_PLATFORM_WIN32_KHR
   29901   VULKAN_HPP_INLINE Result Device::importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo ) const
   29902   {
   29903     return static_cast<Result>( vkImportSemaphoreWin32HandleKHR( m_device, reinterpret_cast<const VkImportSemaphoreWin32HandleInfoKHR*>( pImportSemaphoreWin32HandleInfo ) ) );
   29904   }
   29905 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29906   VULKAN_HPP_INLINE ResultValueType<void>::type Device::importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const
   29907   {
   29908     Result result = static_cast<Result>( vkImportSemaphoreWin32HandleKHR( m_device, reinterpret_cast<const VkImportSemaphoreWin32HandleInfoKHR*>( &importSemaphoreWin32HandleInfo ) ) );
   29909     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::importSemaphoreWin32HandleKHR" );
   29910   }
   29911 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29912 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   29913 
   29914   VULKAN_HPP_INLINE Result Device::getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd ) const
   29915   {
   29916     return static_cast<Result>( vkGetSemaphoreFdKHR( m_device, reinterpret_cast<const VkSemaphoreGetFdInfoKHR*>( pGetFdInfo ), pFd ) );
   29917   }
   29918 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29919   VULKAN_HPP_INLINE ResultValueType<int>::type Device::getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR & getFdInfo ) const
   29920   {
   29921     int fd;
   29922     Result result = static_cast<Result>( vkGetSemaphoreFdKHR( m_device, reinterpret_cast<const VkSemaphoreGetFdInfoKHR*>( &getFdInfo ), &fd ) );
   29923     return createResultValue( result, fd, "VULKAN_HPP_NAMESPACE::Device::getSemaphoreFdKHR" );
   29924   }
   29925 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29926 
   29927   VULKAN_HPP_INLINE Result Device::importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo ) const
   29928   {
   29929     return static_cast<Result>( vkImportSemaphoreFdKHR( m_device, reinterpret_cast<const VkImportSemaphoreFdInfoKHR*>( pImportSemaphoreFdInfo ) ) );
   29930   }
   29931 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29932   VULKAN_HPP_INLINE ResultValueType<void>::type Device::importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const
   29933   {
   29934     Result result = static_cast<Result>( vkImportSemaphoreFdKHR( m_device, reinterpret_cast<const VkImportSemaphoreFdInfoKHR*>( &importSemaphoreFdInfo ) ) );
   29935     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::importSemaphoreFdKHR" );
   29936   }
   29937 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29938 
   29939 #ifdef VK_USE_PLATFORM_WIN32_KHR
   29940   VULKAN_HPP_INLINE Result Device::getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle ) const
   29941   {
   29942     return static_cast<Result>( vkGetFenceWin32HandleKHR( m_device, reinterpret_cast<const VkFenceGetWin32HandleInfoKHR*>( pGetWin32HandleInfo ), pHandle ) );
   29943   }
   29944 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29945   VULKAN_HPP_INLINE ResultValueType<HANDLE>::type Device::getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const
   29946   {
   29947     HANDLE handle;
   29948     Result result = static_cast<Result>( vkGetFenceWin32HandleKHR( m_device, reinterpret_cast<const VkFenceGetWin32HandleInfoKHR*>( &getWin32HandleInfo ), &handle ) );
   29949     return createResultValue( result, handle, "VULKAN_HPP_NAMESPACE::Device::getFenceWin32HandleKHR" );
   29950   }
   29951 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29952 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   29953 
   29954 #ifdef VK_USE_PLATFORM_WIN32_KHR
   29955   VULKAN_HPP_INLINE Result Device::importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo ) const
   29956   {
   29957     return static_cast<Result>( vkImportFenceWin32HandleKHR( m_device, reinterpret_cast<const VkImportFenceWin32HandleInfoKHR*>( pImportFenceWin32HandleInfo ) ) );
   29958   }
   29959 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29960   VULKAN_HPP_INLINE ResultValueType<void>::type Device::importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const
   29961   {
   29962     Result result = static_cast<Result>( vkImportFenceWin32HandleKHR( m_device, reinterpret_cast<const VkImportFenceWin32HandleInfoKHR*>( &importFenceWin32HandleInfo ) ) );
   29963     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::importFenceWin32HandleKHR" );
   29964   }
   29965 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29966 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   29967 
   29968   VULKAN_HPP_INLINE Result Device::getFenceFdKHR( const FenceGetFdInfoKHR* pGetFdInfo, int* pFd ) const
   29969   {
   29970     return static_cast<Result>( vkGetFenceFdKHR( m_device, reinterpret_cast<const VkFenceGetFdInfoKHR*>( pGetFdInfo ), pFd ) );
   29971   }
   29972 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29973   VULKAN_HPP_INLINE ResultValueType<int>::type Device::getFenceFdKHR( const FenceGetFdInfoKHR & getFdInfo ) const
   29974   {
   29975     int fd;
   29976     Result result = static_cast<Result>( vkGetFenceFdKHR( m_device, reinterpret_cast<const VkFenceGetFdInfoKHR*>( &getFdInfo ), &fd ) );
   29977     return createResultValue( result, fd, "VULKAN_HPP_NAMESPACE::Device::getFenceFdKHR" );
   29978   }
   29979 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29980 
   29981   VULKAN_HPP_INLINE Result Device::importFenceFdKHR( const ImportFenceFdInfoKHR* pImportFenceFdInfo ) const
   29982   {
   29983     return static_cast<Result>( vkImportFenceFdKHR( m_device, reinterpret_cast<const VkImportFenceFdInfoKHR*>( pImportFenceFdInfo ) ) );
   29984   }
   29985 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29986   VULKAN_HPP_INLINE ResultValueType<void>::type Device::importFenceFdKHR( const ImportFenceFdInfoKHR & importFenceFdInfo ) const
   29987   {
   29988     Result result = static_cast<Result>( vkImportFenceFdKHR( m_device, reinterpret_cast<const VkImportFenceFdInfoKHR*>( &importFenceFdInfo ) ) );
   29989     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::importFenceFdKHR" );
   29990   }
   29991 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   29992 
   29993   VULKAN_HPP_INLINE Result Device::displayPowerControlEXT( DisplayKHR display, const DisplayPowerInfoEXT* pDisplayPowerInfo ) const
   29994   {
   29995     return static_cast<Result>( vkDisplayPowerControlEXT( m_device, static_cast<VkDisplayKHR>( display ), reinterpret_cast<const VkDisplayPowerInfoEXT*>( pDisplayPowerInfo ) ) );
   29996   }
   29997 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   29998   VULKAN_HPP_INLINE ResultValueType<void>::type Device::displayPowerControlEXT( DisplayKHR display, const DisplayPowerInfoEXT & displayPowerInfo ) const
   29999   {
   30000     Result result = static_cast<Result>( vkDisplayPowerControlEXT( m_device, static_cast<VkDisplayKHR>( display ), reinterpret_cast<const VkDisplayPowerInfoEXT*>( &displayPowerInfo ) ) );
   30001     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::displayPowerControlEXT" );
   30002   }
   30003 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30004 
   30005   VULKAN_HPP_INLINE Result Device::registerEventEXT( const DeviceEventInfoEXT* pDeviceEventInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
   30006   {
   30007     return static_cast<Result>( vkRegisterDeviceEventEXT( m_device, reinterpret_cast<const VkDeviceEventInfoEXT*>( pDeviceEventInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
   30008   }
   30009 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30010   VULKAN_HPP_INLINE ResultValueType<Fence>::type Device::registerEventEXT( const DeviceEventInfoEXT & deviceEventInfo, Optional<const AllocationCallbacks> allocator ) const
   30011   {
   30012     Fence fence;
   30013     Result result = static_cast<Result>( vkRegisterDeviceEventEXT( m_device, reinterpret_cast<const VkDeviceEventInfoEXT*>( &deviceEventInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkFence*>( &fence ) ) );
   30014     return createResultValue( result, fence, "VULKAN_HPP_NAMESPACE::Device::registerEventEXT" );
   30015   }
   30016 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30017 
   30018   VULKAN_HPP_INLINE Result Device::registerDisplayEventEXT( DisplayKHR display, const DisplayEventInfoEXT* pDisplayEventInfo, const AllocationCallbacks* pAllocator, Fence* pFence ) const
   30019   {
   30020     return static_cast<Result>( vkRegisterDisplayEventEXT( m_device, static_cast<VkDisplayKHR>( display ), reinterpret_cast<const VkDisplayEventInfoEXT*>( pDisplayEventInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkFence*>( pFence ) ) );
   30021   }
   30022 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30023   VULKAN_HPP_INLINE ResultValueType<Fence>::type Device::registerDisplayEventEXT( DisplayKHR display, const DisplayEventInfoEXT & displayEventInfo, Optional<const AllocationCallbacks> allocator ) const
   30024   {
   30025     Fence fence;
   30026     Result result = static_cast<Result>( vkRegisterDisplayEventEXT( m_device, static_cast<VkDisplayKHR>( display ), reinterpret_cast<const VkDisplayEventInfoEXT*>( &displayEventInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkFence*>( &fence ) ) );
   30027     return createResultValue( result, fence, "VULKAN_HPP_NAMESPACE::Device::registerDisplayEventEXT" );
   30028   }
   30029 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30030 
   30031   VULKAN_HPP_INLINE Result Device::getSwapchainCounterEXT( SwapchainKHR swapchain, SurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue ) const
   30032   {
   30033     return static_cast<Result>( vkGetSwapchainCounterEXT( m_device, static_cast<VkSwapchainKHR>( swapchain ), static_cast<VkSurfaceCounterFlagBitsEXT>( counter ), pCounterValue ) );
   30034   }
   30035 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30036   VULKAN_HPP_INLINE ResultValue<uint64_t> Device::getSwapchainCounterEXT( SwapchainKHR swapchain, SurfaceCounterFlagBitsEXT counter ) const
   30037   {
   30038     uint64_t counterValue;
   30039     Result result = static_cast<Result>( vkGetSwapchainCounterEXT( m_device, static_cast<VkSwapchainKHR>( swapchain ), static_cast<VkSurfaceCounterFlagBitsEXT>( counter ), &counterValue ) );
   30040     return createResultValue( result, counterValue, "VULKAN_HPP_NAMESPACE::Device::getSwapchainCounterEXT", { Result::eSuccess, Result::eErrorDeviceLost, Result::eErrorOutOfDateKHR } );
   30041   }
   30042 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30043 
   30044   VULKAN_HPP_INLINE void Device::getGroupPeerMemoryFeaturesKHX( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, PeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures ) const
   30045   {
   30046     vkGetDeviceGroupPeerMemoryFeaturesKHX( m_device, heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast<VkPeerMemoryFeatureFlagsKHX*>( pPeerMemoryFeatures ) );
   30047   }
   30048 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30049   VULKAN_HPP_INLINE PeerMemoryFeatureFlagsKHX Device::getGroupPeerMemoryFeaturesKHX( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const
   30050   {
   30051     PeerMemoryFeatureFlagsKHX peerMemoryFeatures;
   30052     vkGetDeviceGroupPeerMemoryFeaturesKHX( m_device, heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast<VkPeerMemoryFeatureFlagsKHX*>( &peerMemoryFeatures ) );
   30053     return peerMemoryFeatures;
   30054   }
   30055 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30056 
   30057   VULKAN_HPP_INLINE Result Device::bindBufferMemory2KHR( uint32_t bindInfoCount, const BindBufferMemoryInfoKHR* pBindInfos ) const
   30058   {
   30059     return static_cast<Result>( vkBindBufferMemory2KHR( m_device, bindInfoCount, reinterpret_cast<const VkBindBufferMemoryInfoKHR*>( pBindInfos ) ) );
   30060   }
   30061 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30062   VULKAN_HPP_INLINE ResultValueType<void>::type Device::bindBufferMemory2KHR( ArrayProxy<const BindBufferMemoryInfoKHR> bindInfos ) const
   30063   {
   30064     Result result = static_cast<Result>( vkBindBufferMemory2KHR( m_device, bindInfos.size() , reinterpret_cast<const VkBindBufferMemoryInfoKHR*>( bindInfos.data() ) ) );
   30065     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::bindBufferMemory2KHR" );
   30066   }
   30067 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30068 
   30069   VULKAN_HPP_INLINE Result Device::bindImageMemory2KHR( uint32_t bindInfoCount, const BindImageMemoryInfoKHR* pBindInfos ) const
   30070   {
   30071     return static_cast<Result>( vkBindImageMemory2KHR( m_device, bindInfoCount, reinterpret_cast<const VkBindImageMemoryInfoKHR*>( pBindInfos ) ) );
   30072   }
   30073 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30074   VULKAN_HPP_INLINE ResultValueType<void>::type Device::bindImageMemory2KHR( ArrayProxy<const BindImageMemoryInfoKHR> bindInfos ) const
   30075   {
   30076     Result result = static_cast<Result>( vkBindImageMemory2KHR( m_device, bindInfos.size() , reinterpret_cast<const VkBindImageMemoryInfoKHR*>( bindInfos.data() ) ) );
   30077     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::bindImageMemory2KHR" );
   30078   }
   30079 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30080 
   30081   VULKAN_HPP_INLINE Result Device::getGroupPresentCapabilitiesKHX( DeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities ) const
   30082   {
   30083     return static_cast<Result>( vkGetDeviceGroupPresentCapabilitiesKHX( m_device, reinterpret_cast<VkDeviceGroupPresentCapabilitiesKHX*>( pDeviceGroupPresentCapabilities ) ) );
   30084   }
   30085 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30086   VULKAN_HPP_INLINE ResultValueType<DeviceGroupPresentCapabilitiesKHX>::type Device::getGroupPresentCapabilitiesKHX() const
   30087   {
   30088     DeviceGroupPresentCapabilitiesKHX deviceGroupPresentCapabilities;
   30089     Result result = static_cast<Result>( vkGetDeviceGroupPresentCapabilitiesKHX( m_device, reinterpret_cast<VkDeviceGroupPresentCapabilitiesKHX*>( &deviceGroupPresentCapabilities ) ) );
   30090     return createResultValue( result, deviceGroupPresentCapabilities, "VULKAN_HPP_NAMESPACE::Device::getGroupPresentCapabilitiesKHX" );
   30091   }
   30092 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30093 
   30094   VULKAN_HPP_INLINE Result Device::getGroupSurfacePresentModesKHX( SurfaceKHR surface, DeviceGroupPresentModeFlagsKHX* pModes ) const
   30095   {
   30096     return static_cast<Result>( vkGetDeviceGroupSurfacePresentModesKHX( m_device, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkDeviceGroupPresentModeFlagsKHX*>( pModes ) ) );
   30097   }
   30098 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30099   VULKAN_HPP_INLINE ResultValueType<DeviceGroupPresentModeFlagsKHX>::type Device::getGroupSurfacePresentModesKHX( SurfaceKHR surface ) const
   30100   {
   30101     DeviceGroupPresentModeFlagsKHX modes;
   30102     Result result = static_cast<Result>( vkGetDeviceGroupSurfacePresentModesKHX( m_device, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkDeviceGroupPresentModeFlagsKHX*>( &modes ) ) );
   30103     return createResultValue( result, modes, "VULKAN_HPP_NAMESPACE::Device::getGroupSurfacePresentModesKHX" );
   30104   }
   30105 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30106 
   30107   VULKAN_HPP_INLINE Result Device::acquireNextImage2KHX( const AcquireNextImageInfoKHX* pAcquireInfo, uint32_t* pImageIndex ) const
   30108   {
   30109     return static_cast<Result>( vkAcquireNextImage2KHX( m_device, reinterpret_cast<const VkAcquireNextImageInfoKHX*>( pAcquireInfo ), pImageIndex ) );
   30110   }
   30111 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30112   VULKAN_HPP_INLINE ResultValue<uint32_t> Device::acquireNextImage2KHX( const AcquireNextImageInfoKHX & acquireInfo ) const
   30113   {
   30114     uint32_t imageIndex;
   30115     Result result = static_cast<Result>( vkAcquireNextImage2KHX( m_device, reinterpret_cast<const VkAcquireNextImageInfoKHX*>( &acquireInfo ), &imageIndex ) );
   30116     return createResultValue( result, imageIndex, "VULKAN_HPP_NAMESPACE::Device::acquireNextImage2KHX", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } );
   30117   }
   30118 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30119 
   30120   VULKAN_HPP_INLINE Result Device::createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate ) const
   30121   {
   30122     return static_cast<Result>( vkCreateDescriptorUpdateTemplateKHR( m_device, reinterpret_cast<const VkDescriptorUpdateTemplateCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDescriptorUpdateTemplateKHR*>( pDescriptorUpdateTemplate ) ) );
   30123   }
   30124 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30125   VULKAN_HPP_INLINE ResultValueType<DescriptorUpdateTemplateKHR>::type Device::createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   30126   {
   30127     DescriptorUpdateTemplateKHR descriptorUpdateTemplate;
   30128     Result result = static_cast<Result>( vkCreateDescriptorUpdateTemplateKHR( m_device, reinterpret_cast<const VkDescriptorUpdateTemplateCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkDescriptorUpdateTemplateKHR*>( &descriptorUpdateTemplate ) ) );
   30129     return createResultValue( result, descriptorUpdateTemplate, "VULKAN_HPP_NAMESPACE::Device::createDescriptorUpdateTemplateKHR" );
   30130   }
   30131 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   30132   VULKAN_HPP_INLINE ResultValueType<UniqueDescriptorUpdateTemplateKHR>::type Device::createDescriptorUpdateTemplateKHRUnique( const DescriptorUpdateTemplateCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   30133   {
   30134     DescriptorUpdateTemplateKHR descriptorUpdateTemplate;
   30135     Result result = static_cast<Result>( vkCreateDescriptorUpdateTemplateKHR( m_device, reinterpret_cast<const VkDescriptorUpdateTemplateCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkDescriptorUpdateTemplateKHR*>( &descriptorUpdateTemplate ) ) );
   30136 
   30137     DescriptorUpdateTemplateKHRDeleter deleter( *this, allocator );
   30138     return createResultValue( result, descriptorUpdateTemplate, "VULKAN_HPP_NAMESPACE::Device::createDescriptorUpdateTemplateKHRUnique", deleter );
   30139   }
   30140 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   30141 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30142 
   30143   VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplateKHR( DescriptorUpdateTemplateKHR descriptorUpdateTemplate, const AllocationCallbacks* pAllocator ) const
   30144   {
   30145     vkDestroyDescriptorUpdateTemplateKHR( m_device, static_cast<VkDescriptorUpdateTemplateKHR>( descriptorUpdateTemplate ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   30146   }
   30147 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30148   VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplateKHR( DescriptorUpdateTemplateKHR descriptorUpdateTemplate, Optional<const AllocationCallbacks> allocator ) const
   30149   {
   30150     vkDestroyDescriptorUpdateTemplateKHR( m_device, static_cast<VkDescriptorUpdateTemplateKHR>( descriptorUpdateTemplate ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   30151   }
   30152 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30153 
   30154   VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplateKHR( DescriptorSet descriptorSet, DescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData ) const
   30155   {
   30156     vkUpdateDescriptorSetWithTemplateKHR( m_device, static_cast<VkDescriptorSet>( descriptorSet ), static_cast<VkDescriptorUpdateTemplateKHR>( descriptorUpdateTemplate ), pData );
   30157   }
   30158 
   30159   VULKAN_HPP_INLINE void Device::setHdrMetadataEXT( uint32_t swapchainCount, const SwapchainKHR* pSwapchains, const HdrMetadataEXT* pMetadata ) const
   30160   {
   30161     vkSetHdrMetadataEXT( m_device, swapchainCount, reinterpret_cast<const VkSwapchainKHR*>( pSwapchains ), reinterpret_cast<const VkHdrMetadataEXT*>( pMetadata ) );
   30162   }
   30163 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30164   VULKAN_HPP_INLINE void Device::setHdrMetadataEXT( ArrayProxy<const SwapchainKHR> swapchains, ArrayProxy<const HdrMetadataEXT> metadata ) const
   30165   {
   30166 #ifdef VULKAN_HPP_NO_EXCEPTIONS
   30167     assert( swapchains.size() == metadata.size() );
   30168 #else
   30169     if ( swapchains.size() != metadata.size() )
   30170     {
   30171       throw LogicError( "VULKAN_HPP_NAMESPACE::Device::setHdrMetadataEXT: swapchains.size() != metadata.size()" );
   30172     }
   30173 #endif  // VULKAN_HPP_NO_EXCEPTIONS
   30174     vkSetHdrMetadataEXT( m_device, swapchains.size() , reinterpret_cast<const VkSwapchainKHR*>( swapchains.data() ), reinterpret_cast<const VkHdrMetadataEXT*>( metadata.data() ) );
   30175   }
   30176 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30177 
   30178 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30179   VULKAN_HPP_INLINE Result Device::getSwapchainStatusKHR( SwapchainKHR swapchain ) const
   30180   {
   30181     return static_cast<Result>( vkGetSwapchainStatusKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ) ) );
   30182   }
   30183 #else
   30184   VULKAN_HPP_INLINE Result Device::getSwapchainStatusKHR( SwapchainKHR swapchain ) const
   30185   {
   30186     Result result = static_cast<Result>( vkGetSwapchainStatusKHR( m_device, static_cast<VkSwapchainKHR>( swapchain ) ) );
   30187     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::getSwapchainStatusKHR", { Result::eSuccess, Result::eSuboptimalKHR } );
   30188   }
   30189 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30190 
   30191   VULKAN_HPP_INLINE Result Device::getRefreshCycleDurationGOOGLE( SwapchainKHR swapchain, RefreshCycleDurationGOOGLE* pDisplayTimingProperties ) const
   30192   {
   30193     return static_cast<Result>( vkGetRefreshCycleDurationGOOGLE( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<VkRefreshCycleDurationGOOGLE*>( pDisplayTimingProperties ) ) );
   30194   }
   30195 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30196   VULKAN_HPP_INLINE ResultValueType<RefreshCycleDurationGOOGLE>::type Device::getRefreshCycleDurationGOOGLE( SwapchainKHR swapchain ) const
   30197   {
   30198     RefreshCycleDurationGOOGLE displayTimingProperties;
   30199     Result result = static_cast<Result>( vkGetRefreshCycleDurationGOOGLE( m_device, static_cast<VkSwapchainKHR>( swapchain ), reinterpret_cast<VkRefreshCycleDurationGOOGLE*>( &displayTimingProperties ) ) );
   30200     return createResultValue( result, displayTimingProperties, "VULKAN_HPP_NAMESPACE::Device::getRefreshCycleDurationGOOGLE" );
   30201   }
   30202 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30203 
   30204   VULKAN_HPP_INLINE Result Device::getPastPresentationTimingGOOGLE( SwapchainKHR swapchain, uint32_t* pPresentationTimingCount, PastPresentationTimingGOOGLE* pPresentationTimings ) const
   30205   {
   30206     return static_cast<Result>( vkGetPastPresentationTimingGOOGLE( m_device, static_cast<VkSwapchainKHR>( swapchain ), pPresentationTimingCount, reinterpret_cast<VkPastPresentationTimingGOOGLE*>( pPresentationTimings ) ) );
   30207   }
   30208 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30209   template <typename Allocator>
   30210   VULKAN_HPP_INLINE typename ResultValueType<std::vector<PastPresentationTimingGOOGLE,Allocator>>::type Device::getPastPresentationTimingGOOGLE( SwapchainKHR swapchain ) const
   30211   {
   30212     std::vector<PastPresentationTimingGOOGLE,Allocator> presentationTimings;
   30213     uint32_t presentationTimingCount;
   30214     Result result;
   30215     do
   30216     {
   30217       result = static_cast<Result>( vkGetPastPresentationTimingGOOGLE( m_device, static_cast<VkSwapchainKHR>( swapchain ), &presentationTimingCount, nullptr ) );
   30218       if ( ( result == Result::eSuccess ) && presentationTimingCount )
   30219       {
   30220         presentationTimings.resize( presentationTimingCount );
   30221         result = static_cast<Result>( vkGetPastPresentationTimingGOOGLE( m_device, static_cast<VkSwapchainKHR>( swapchain ), &presentationTimingCount, reinterpret_cast<VkPastPresentationTimingGOOGLE*>( presentationTimings.data() ) ) );
   30222       }
   30223     } while ( result == Result::eIncomplete );
   30224     assert( presentationTimingCount <= presentationTimings.size() );
   30225     presentationTimings.resize( presentationTimingCount );
   30226     return createResultValue( result, presentationTimings, "VULKAN_HPP_NAMESPACE::Device::getPastPresentationTimingGOOGLE" );
   30227   }
   30228 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30229 
   30230   VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2KHR* pInfo, MemoryRequirements2KHR* pMemoryRequirements ) const
   30231   {
   30232     vkGetBufferMemoryRequirements2KHR( m_device, reinterpret_cast<const VkBufferMemoryRequirementsInfo2KHR*>( pInfo ), reinterpret_cast<VkMemoryRequirements2KHR*>( pMemoryRequirements ) );
   30233   }
   30234 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30235   VULKAN_HPP_INLINE MemoryRequirements2KHR Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2KHR & info ) const
   30236   {
   30237     MemoryRequirements2KHR memoryRequirements;
   30238     vkGetBufferMemoryRequirements2KHR( m_device, reinterpret_cast<const VkBufferMemoryRequirementsInfo2KHR*>( &info ), reinterpret_cast<VkMemoryRequirements2KHR*>( &memoryRequirements ) );
   30239     return memoryRequirements;
   30240   }
   30241   template <typename ...T>
   30242   VULKAN_HPP_INLINE StructureChain<T...> Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2KHR & info ) const
   30243   {
   30244     StructureChain<T...> structureChain;
   30245     MemoryRequirements2KHR& memoryRequirements = structureChain.template get<MemoryRequirements2KHR>();
   30246     vkGetBufferMemoryRequirements2KHR( m_device, reinterpret_cast<const VkBufferMemoryRequirementsInfo2KHR*>( &info ), reinterpret_cast<VkMemoryRequirements2KHR*>( &memoryRequirements ) );
   30247     return structureChain;
   30248   }
   30249 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30250 
   30251   VULKAN_HPP_INLINE void Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2KHR* pInfo, MemoryRequirements2KHR* pMemoryRequirements ) const
   30252   {
   30253     vkGetImageMemoryRequirements2KHR( m_device, reinterpret_cast<const VkImageMemoryRequirementsInfo2KHR*>( pInfo ), reinterpret_cast<VkMemoryRequirements2KHR*>( pMemoryRequirements ) );
   30254   }
   30255 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30256   VULKAN_HPP_INLINE MemoryRequirements2KHR Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2KHR & info ) const
   30257   {
   30258     MemoryRequirements2KHR memoryRequirements;
   30259     vkGetImageMemoryRequirements2KHR( m_device, reinterpret_cast<const VkImageMemoryRequirementsInfo2KHR*>( &info ), reinterpret_cast<VkMemoryRequirements2KHR*>( &memoryRequirements ) );
   30260     return memoryRequirements;
   30261   }
   30262   template <typename ...T>
   30263   VULKAN_HPP_INLINE StructureChain<T...> Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2KHR & info ) const
   30264   {
   30265     StructureChain<T...> structureChain;
   30266     MemoryRequirements2KHR& memoryRequirements = structureChain.template get<MemoryRequirements2KHR>();
   30267     vkGetImageMemoryRequirements2KHR( m_device, reinterpret_cast<const VkImageMemoryRequirementsInfo2KHR*>( &info ), reinterpret_cast<VkMemoryRequirements2KHR*>( &memoryRequirements ) );
   30268     return structureChain;
   30269   }
   30270 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30271 
   30272   VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2KHR* pInfo, uint32_t* pSparseMemoryRequirementCount, SparseImageMemoryRequirements2KHR* pSparseMemoryRequirements ) const
   30273   {
   30274     vkGetImageSparseMemoryRequirements2KHR( m_device, reinterpret_cast<const VkImageSparseMemoryRequirementsInfo2KHR*>( pInfo ), pSparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements2KHR*>( pSparseMemoryRequirements ) );
   30275   }
   30276 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30277   template <typename Allocator>
   30278   VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2KHR,Allocator> Device::getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2KHR & info ) const
   30279   {
   30280     std::vector<SparseImageMemoryRequirements2KHR,Allocator> sparseMemoryRequirements;
   30281     uint32_t sparseMemoryRequirementCount;
   30282     vkGetImageSparseMemoryRequirements2KHR( m_device, reinterpret_cast<const VkImageSparseMemoryRequirementsInfo2KHR*>( &info ), &sparseMemoryRequirementCount, nullptr );
   30283     sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
   30284     vkGetImageSparseMemoryRequirements2KHR( m_device, reinterpret_cast<const VkImageSparseMemoryRequirementsInfo2KHR*>( &info ), &sparseMemoryRequirementCount, reinterpret_cast<VkSparseImageMemoryRequirements2KHR*>( sparseMemoryRequirements.data() ) );
   30285     return sparseMemoryRequirements;
   30286   }
   30287 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30288 
   30289   VULKAN_HPP_INLINE Result Device::createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SamplerYcbcrConversionKHR* pYcbcrConversion ) const
   30290   {
   30291     return static_cast<Result>( vkCreateSamplerYcbcrConversionKHR( m_device, reinterpret_cast<const VkSamplerYcbcrConversionCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSamplerYcbcrConversionKHR*>( pYcbcrConversion ) ) );
   30292   }
   30293 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30294   VULKAN_HPP_INLINE ResultValueType<SamplerYcbcrConversionKHR>::type Device::createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   30295   {
   30296     SamplerYcbcrConversionKHR ycbcrConversion;
   30297     Result result = static_cast<Result>( vkCreateSamplerYcbcrConversionKHR( m_device, reinterpret_cast<const VkSamplerYcbcrConversionCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSamplerYcbcrConversionKHR*>( &ycbcrConversion ) ) );
   30298     return createResultValue( result, ycbcrConversion, "VULKAN_HPP_NAMESPACE::Device::createSamplerYcbcrConversionKHR" );
   30299   }
   30300 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   30301   VULKAN_HPP_INLINE ResultValueType<UniqueSamplerYcbcrConversionKHR>::type Device::createSamplerYcbcrConversionKHRUnique( const SamplerYcbcrConversionCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   30302   {
   30303     SamplerYcbcrConversionKHR ycbcrConversion;
   30304     Result result = static_cast<Result>( vkCreateSamplerYcbcrConversionKHR( m_device, reinterpret_cast<const VkSamplerYcbcrConversionCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSamplerYcbcrConversionKHR*>( &ycbcrConversion ) ) );
   30305 
   30306     SamplerYcbcrConversionKHRDeleter deleter( *this, allocator );
   30307     return createResultValue( result, ycbcrConversion, "VULKAN_HPP_NAMESPACE::Device::createSamplerYcbcrConversionKHRUnique", deleter );
   30308   }
   30309 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   30310 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30311 
   30312   VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversionKHR( SamplerYcbcrConversionKHR ycbcrConversion, const AllocationCallbacks* pAllocator ) const
   30313   {
   30314     vkDestroySamplerYcbcrConversionKHR( m_device, static_cast<VkSamplerYcbcrConversionKHR>( ycbcrConversion ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   30315   }
   30316 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30317   VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversionKHR( SamplerYcbcrConversionKHR ycbcrConversion, Optional<const AllocationCallbacks> allocator ) const
   30318   {
   30319     vkDestroySamplerYcbcrConversionKHR( m_device, static_cast<VkSamplerYcbcrConversionKHR>( ycbcrConversion ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   30320   }
   30321 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30322 
   30323   VULKAN_HPP_INLINE Result Device::createValidationCacheEXT( const ValidationCacheCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, ValidationCacheEXT* pValidationCache ) const
   30324   {
   30325     return static_cast<Result>( vkCreateValidationCacheEXT( m_device, reinterpret_cast<const VkValidationCacheCreateInfoEXT*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkValidationCacheEXT*>( pValidationCache ) ) );
   30326   }
   30327 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30328   VULKAN_HPP_INLINE ResultValueType<ValidationCacheEXT>::type Device::createValidationCacheEXT( const ValidationCacheCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator ) const
   30329   {
   30330     ValidationCacheEXT validationCache;
   30331     Result result = static_cast<Result>( vkCreateValidationCacheEXT( m_device, reinterpret_cast<const VkValidationCacheCreateInfoEXT*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkValidationCacheEXT*>( &validationCache ) ) );
   30332     return createResultValue( result, validationCache, "VULKAN_HPP_NAMESPACE::Device::createValidationCacheEXT" );
   30333   }
   30334 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   30335   VULKAN_HPP_INLINE ResultValueType<UniqueValidationCacheEXT>::type Device::createValidationCacheEXTUnique( const ValidationCacheCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator ) const
   30336   {
   30337     ValidationCacheEXT validationCache;
   30338     Result result = static_cast<Result>( vkCreateValidationCacheEXT( m_device, reinterpret_cast<const VkValidationCacheCreateInfoEXT*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkValidationCacheEXT*>( &validationCache ) ) );
   30339 
   30340     ValidationCacheEXTDeleter deleter( *this, allocator );
   30341     return createResultValue( result, validationCache, "VULKAN_HPP_NAMESPACE::Device::createValidationCacheEXTUnique", deleter );
   30342   }
   30343 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   30344 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30345 
   30346   VULKAN_HPP_INLINE void Device::destroyValidationCacheEXT( ValidationCacheEXT validationCache, const AllocationCallbacks* pAllocator ) const
   30347   {
   30348     vkDestroyValidationCacheEXT( m_device, static_cast<VkValidationCacheEXT>( validationCache ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   30349   }
   30350 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30351   VULKAN_HPP_INLINE void Device::destroyValidationCacheEXT( ValidationCacheEXT validationCache, Optional<const AllocationCallbacks> allocator ) const
   30352   {
   30353     vkDestroyValidationCacheEXT( m_device, static_cast<VkValidationCacheEXT>( validationCache ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   30354   }
   30355 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30356 
   30357   VULKAN_HPP_INLINE Result Device::getValidationCacheDataEXT( ValidationCacheEXT validationCache, size_t* pDataSize, void* pData ) const
   30358   {
   30359     return static_cast<Result>( vkGetValidationCacheDataEXT( m_device, static_cast<VkValidationCacheEXT>( validationCache ), pDataSize, pData ) );
   30360   }
   30361 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30362   template <typename Allocator>
   30363   VULKAN_HPP_INLINE typename ResultValueType<std::vector<uint8_t,Allocator>>::type Device::getValidationCacheDataEXT( ValidationCacheEXT validationCache ) const
   30364   {
   30365     std::vector<uint8_t,Allocator> data;
   30366     size_t dataSize;
   30367     Result result;
   30368     do
   30369     {
   30370       result = static_cast<Result>( vkGetValidationCacheDataEXT( m_device, static_cast<VkValidationCacheEXT>( validationCache ), &dataSize, nullptr ) );
   30371       if ( ( result == Result::eSuccess ) && dataSize )
   30372       {
   30373         data.resize( dataSize );
   30374         result = static_cast<Result>( vkGetValidationCacheDataEXT( m_device, static_cast<VkValidationCacheEXT>( validationCache ), &dataSize, reinterpret_cast<void*>( data.data() ) ) );
   30375       }
   30376     } while ( result == Result::eIncomplete );
   30377     assert( dataSize <= data.size() );
   30378     data.resize( dataSize );
   30379     return createResultValue( result, data, "VULKAN_HPP_NAMESPACE::Device::getValidationCacheDataEXT" );
   30380   }
   30381 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30382 
   30383   VULKAN_HPP_INLINE Result Device::mergeValidationCachesEXT( ValidationCacheEXT dstCache, uint32_t srcCacheCount, const ValidationCacheEXT* pSrcCaches ) const
   30384   {
   30385     return static_cast<Result>( vkMergeValidationCachesEXT( m_device, static_cast<VkValidationCacheEXT>( dstCache ), srcCacheCount, reinterpret_cast<const VkValidationCacheEXT*>( pSrcCaches ) ) );
   30386   }
   30387 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30388   VULKAN_HPP_INLINE ResultValueType<void>::type Device::mergeValidationCachesEXT( ValidationCacheEXT dstCache, ArrayProxy<const ValidationCacheEXT> srcCaches ) const
   30389   {
   30390     Result result = static_cast<Result>( vkMergeValidationCachesEXT( m_device, static_cast<VkValidationCacheEXT>( dstCache ), srcCaches.size() , reinterpret_cast<const VkValidationCacheEXT*>( srcCaches.data() ) ) );
   30391     return createResultValue( result, "VULKAN_HPP_NAMESPACE::Device::mergeValidationCachesEXT" );
   30392   }
   30393 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30394 
   30395   VULKAN_HPP_INLINE Result Device::getShaderInfoAMD( Pipeline pipeline, ShaderStageFlagBits shaderStage, ShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo ) const
   30396   {
   30397     return static_cast<Result>( vkGetShaderInfoAMD( m_device, static_cast<VkPipeline>( pipeline ), static_cast<VkShaderStageFlagBits>( shaderStage ), static_cast<VkShaderInfoTypeAMD>( infoType ), pInfoSize, pInfo ) );
   30398   }
   30399 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30400   template <typename Allocator>
   30401   VULKAN_HPP_INLINE typename ResultValueType<std::vector<uint8_t,Allocator>>::type Device::getShaderInfoAMD( Pipeline pipeline, ShaderStageFlagBits shaderStage, ShaderInfoTypeAMD infoType ) const
   30402   {
   30403     std::vector<uint8_t,Allocator> info;
   30404     size_t infoSize;
   30405     Result result;
   30406     do
   30407     {
   30408       result = static_cast<Result>( vkGetShaderInfoAMD( m_device, static_cast<VkPipeline>( pipeline ), static_cast<VkShaderStageFlagBits>( shaderStage ), static_cast<VkShaderInfoTypeAMD>( infoType ), &infoSize, nullptr ) );
   30409       if ( ( result == Result::eSuccess ) && infoSize )
   30410       {
   30411         info.resize( infoSize );
   30412         result = static_cast<Result>( vkGetShaderInfoAMD( m_device, static_cast<VkPipeline>( pipeline ), static_cast<VkShaderStageFlagBits>( shaderStage ), static_cast<VkShaderInfoTypeAMD>( infoType ), &infoSize, reinterpret_cast<void*>( info.data() ) ) );
   30413       }
   30414     } while ( result == Result::eIncomplete );
   30415     assert( infoSize <= info.size() );
   30416     info.resize( infoSize );
   30417     return createResultValue( result, info, "VULKAN_HPP_NAMESPACE::Device::getShaderInfoAMD" );
   30418   }
   30419 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30420 
   30421   VULKAN_HPP_INLINE Result Device::getMemoryHostPointerPropertiesEXT( ExternalMemoryHandleTypeFlagBitsKHR handleType, const void* pHostPointer, MemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties ) const
   30422   {
   30423     return static_cast<Result>( vkGetMemoryHostPointerPropertiesEXT( m_device, static_cast<VkExternalMemoryHandleTypeFlagBitsKHR>( handleType ), pHostPointer, reinterpret_cast<VkMemoryHostPointerPropertiesEXT*>( pMemoryHostPointerProperties ) ) );
   30424   }
   30425 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30426   VULKAN_HPP_INLINE ResultValueType<MemoryHostPointerPropertiesEXT>::type Device::getMemoryHostPointerPropertiesEXT( ExternalMemoryHandleTypeFlagBitsKHR handleType, const void* pHostPointer ) const
   30427   {
   30428     MemoryHostPointerPropertiesEXT memoryHostPointerProperties;
   30429     Result result = static_cast<Result>( vkGetMemoryHostPointerPropertiesEXT( m_device, static_cast<VkExternalMemoryHandleTypeFlagBitsKHR>( handleType ), pHostPointer, reinterpret_cast<VkMemoryHostPointerPropertiesEXT*>( &memoryHostPointerProperties ) ) );
   30430     return createResultValue( result, memoryHostPointerProperties, "VULKAN_HPP_NAMESPACE::Device::getMemoryHostPointerPropertiesEXT" );
   30431   }
   30432 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30433 
   30434 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   30435   class DeviceDeleter;
   30436   template <> class UniqueHandleTraits<Device> {public: using deleter = DeviceDeleter; };
   30437   using UniqueDevice = UniqueHandle<Device>;
   30438 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   30439 
   30440   class PhysicalDevice
   30441   {
   30442   public:
   30443     PhysicalDevice()
   30444       : m_physicalDevice(VK_NULL_HANDLE)
   30445     {}
   30446 
   30447     PhysicalDevice( std::nullptr_t )
   30448       : m_physicalDevice(VK_NULL_HANDLE)
   30449     {}
   30450 
   30451     VULKAN_HPP_TYPESAFE_EXPLICIT PhysicalDevice( VkPhysicalDevice physicalDevice )
   30452       : m_physicalDevice( physicalDevice )
   30453     {}
   30454 
   30455 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   30456     PhysicalDevice & operator=(VkPhysicalDevice physicalDevice)
   30457     {
   30458       m_physicalDevice = physicalDevice;
   30459       return *this;
   30460     }
   30461 #endif
   30462 
   30463     PhysicalDevice & operator=( std::nullptr_t )
   30464     {
   30465       m_physicalDevice = VK_NULL_HANDLE;
   30466       return *this;
   30467     }
   30468 
   30469     bool operator==( PhysicalDevice const & rhs ) const
   30470     {
   30471       return m_physicalDevice == rhs.m_physicalDevice;
   30472     }
   30473 
   30474     bool operator!=(PhysicalDevice const & rhs ) const
   30475     {
   30476       return m_physicalDevice != rhs.m_physicalDevice;
   30477     }
   30478 
   30479     bool operator<(PhysicalDevice const & rhs ) const
   30480     {
   30481       return m_physicalDevice < rhs.m_physicalDevice;
   30482     }
   30483 
   30484     void getProperties( PhysicalDeviceProperties* pProperties ) const;
   30485 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30486     PhysicalDeviceProperties getProperties() const;
   30487 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30488 
   30489     void getQueueFamilyProperties( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties* pQueueFamilyProperties ) const;
   30490 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30491     template <typename Allocator = std::allocator<QueueFamilyProperties>>
   30492     std::vector<QueueFamilyProperties,Allocator> getQueueFamilyProperties() const;
   30493 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30494 
   30495     void getMemoryProperties( PhysicalDeviceMemoryProperties* pMemoryProperties ) const;
   30496 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30497     PhysicalDeviceMemoryProperties getMemoryProperties() const;
   30498 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30499 
   30500     void getFeatures( PhysicalDeviceFeatures* pFeatures ) const;
   30501 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30502     PhysicalDeviceFeatures getFeatures() const;
   30503 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30504 
   30505     void getFormatProperties( Format format, FormatProperties* pFormatProperties ) const;
   30506 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30507     FormatProperties getFormatProperties( Format format ) const;
   30508 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30509 
   30510     Result getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ImageFormatProperties* pImageFormatProperties ) const;
   30511 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30512     ResultValueType<ImageFormatProperties>::type getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags ) const;
   30513 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30514 
   30515     Result createDevice( const DeviceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Device* pDevice ) const;
   30516 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30517     ResultValueType<Device>::type createDevice( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   30518 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   30519     ResultValueType<UniqueDevice>::type createDeviceUnique( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   30520 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   30521 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30522 
   30523     Result enumerateDeviceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties ) const;
   30524 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30525     template <typename Allocator = std::allocator<LayerProperties>>
   30526     typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateDeviceLayerProperties() const;
   30527 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30528 
   30529     Result enumerateDeviceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties ) const;
   30530 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30531     template <typename Allocator = std::allocator<ExtensionProperties>>
   30532     typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type enumerateDeviceExtensionProperties( Optional<const std::string> layerName = nullptr ) const;
   30533 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30534 
   30535     void getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, uint32_t* pPropertyCount, SparseImageFormatProperties* pProperties ) const;
   30536 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30537     template <typename Allocator = std::allocator<SparseImageFormatProperties>>
   30538     std::vector<SparseImageFormatProperties,Allocator> getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling ) const;
   30539 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30540 
   30541     Result getDisplayPropertiesKHR( uint32_t* pPropertyCount, DisplayPropertiesKHR* pProperties ) const;
   30542 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30543     template <typename Allocator = std::allocator<DisplayPropertiesKHR>>
   30544     typename ResultValueType<std::vector<DisplayPropertiesKHR,Allocator>>::type getDisplayPropertiesKHR() const;
   30545 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30546 
   30547     Result getDisplayPlanePropertiesKHR( uint32_t* pPropertyCount, DisplayPlanePropertiesKHR* pProperties ) const;
   30548 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30549     template <typename Allocator = std::allocator<DisplayPlanePropertiesKHR>>
   30550     typename ResultValueType<std::vector<DisplayPlanePropertiesKHR,Allocator>>::type getDisplayPlanePropertiesKHR() const;
   30551 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30552 
   30553     Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, uint32_t* pDisplayCount, DisplayKHR* pDisplays ) const;
   30554 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30555     template <typename Allocator = std::allocator<DisplayKHR>>
   30556     typename ResultValueType<std::vector<DisplayKHR,Allocator>>::type getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const;
   30557 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30558 
   30559     Result getDisplayModePropertiesKHR( DisplayKHR display, uint32_t* pPropertyCount, DisplayModePropertiesKHR* pProperties ) const;
   30560 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30561     template <typename Allocator = std::allocator<DisplayModePropertiesKHR>>
   30562     typename ResultValueType<std::vector<DisplayModePropertiesKHR,Allocator>>::type getDisplayModePropertiesKHR( DisplayKHR display ) const;
   30563 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30564 
   30565     Result createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DisplayModeKHR* pMode ) const;
   30566 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30567     ResultValueType<DisplayModeKHR>::type createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   30568 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30569 
   30570     Result getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, DisplayPlaneCapabilitiesKHR* pCapabilities ) const;
   30571 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30572     ResultValueType<DisplayPlaneCapabilitiesKHR>::type getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex ) const;
   30573 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30574 
   30575 #ifdef VK_USE_PLATFORM_MIR_KHR
   30576     Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection* connection ) const;
   30577 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30578     Bool32 getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection & connection ) const;
   30579 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30580 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   30581 
   30582     Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32* pSupported ) const;
   30583 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30584     ResultValueType<Bool32>::type getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface ) const;
   30585 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30586 
   30587     Result getSurfaceCapabilitiesKHR( SurfaceKHR surface, SurfaceCapabilitiesKHR* pSurfaceCapabilities ) const;
   30588 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30589     ResultValueType<SurfaceCapabilitiesKHR>::type getSurfaceCapabilitiesKHR( SurfaceKHR surface ) const;
   30590 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30591 
   30592     Result getSurfaceFormatsKHR( SurfaceKHR surface, uint32_t* pSurfaceFormatCount, SurfaceFormatKHR* pSurfaceFormats ) const;
   30593 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30594     template <typename Allocator = std::allocator<SurfaceFormatKHR>>
   30595     typename ResultValueType<std::vector<SurfaceFormatKHR,Allocator>>::type getSurfaceFormatsKHR( SurfaceKHR surface ) const;
   30596 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30597 
   30598     Result getSurfacePresentModesKHR( SurfaceKHR surface, uint32_t* pPresentModeCount, PresentModeKHR* pPresentModes ) const;
   30599 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30600     template <typename Allocator = std::allocator<PresentModeKHR>>
   30601     typename ResultValueType<std::vector<PresentModeKHR,Allocator>>::type getSurfacePresentModesKHR( SurfaceKHR surface ) const;
   30602 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30603 
   30604 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   30605     Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display* display ) const;
   30606 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30607     Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const;
   30608 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30609 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   30610 
   30611 #ifdef VK_USE_PLATFORM_WIN32_KHR
   30612     Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const;
   30613 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   30614 
   30615 #ifdef VK_USE_PLATFORM_XLIB_KHR
   30616     Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID ) const;
   30617 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30618     Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const;
   30619 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30620 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   30621 
   30622 #ifdef VK_USE_PLATFORM_XCB_KHR
   30623     Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id ) const;
   30624 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30625     Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const;
   30626 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30627 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   30628 
   30629     Result getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType, ExternalImageFormatPropertiesNV* pExternalImageFormatProperties ) const;
   30630 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30631     ResultValueType<ExternalImageFormatPropertiesNV>::type getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType ) const;
   30632 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30633 
   30634     void getGeneratedCommandsPropertiesNVX( DeviceGeneratedCommandsFeaturesNVX* pFeatures, DeviceGeneratedCommandsLimitsNVX* pLimits ) const;
   30635 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30636     DeviceGeneratedCommandsLimitsNVX getGeneratedCommandsPropertiesNVX( DeviceGeneratedCommandsFeaturesNVX & features ) const;
   30637 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30638 
   30639     void getFeatures2KHR( PhysicalDeviceFeatures2KHR* pFeatures ) const;
   30640 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30641     PhysicalDeviceFeatures2KHR getFeatures2KHR() const;
   30642     template <typename ...T>
   30643     StructureChain<T...> getFeatures2KHR() const;
   30644 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30645 
   30646     void getProperties2KHR( PhysicalDeviceProperties2KHR* pProperties ) const;
   30647 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30648     PhysicalDeviceProperties2KHR getProperties2KHR() const;
   30649     template <typename ...T>
   30650     StructureChain<T...> getProperties2KHR() const;
   30651 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30652 
   30653     void getFormatProperties2KHR( Format format, FormatProperties2KHR* pFormatProperties ) const;
   30654 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30655     FormatProperties2KHR getFormatProperties2KHR( Format format ) const;
   30656 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30657 
   30658     Result getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo, ImageFormatProperties2KHR* pImageFormatProperties ) const;
   30659 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30660     ResultValueType<ImageFormatProperties2KHR>::type getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2KHR & imageFormatInfo ) const;
   30661     template <typename ...T>
   30662     typename ResultValueType<StructureChain<T...>>::type getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2KHR & imageFormatInfo ) const;
   30663 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30664 
   30665     void getQueueFamilyProperties2KHR( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties2KHR* pQueueFamilyProperties ) const;
   30666 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30667     template <typename Allocator = std::allocator<QueueFamilyProperties2KHR>>
   30668     std::vector<QueueFamilyProperties2KHR,Allocator> getQueueFamilyProperties2KHR() const;
   30669 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30670 
   30671     void getMemoryProperties2KHR( PhysicalDeviceMemoryProperties2KHR* pMemoryProperties ) const;
   30672 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30673     PhysicalDeviceMemoryProperties2KHR getMemoryProperties2KHR() const;
   30674 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30675 
   30676     void getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo, uint32_t* pPropertyCount, SparseImageFormatProperties2KHR* pProperties ) const;
   30677 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30678     template <typename Allocator = std::allocator<SparseImageFormatProperties2KHR>>
   30679     std::vector<SparseImageFormatProperties2KHR,Allocator> getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2KHR & formatInfo ) const;
   30680 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30681 
   30682     void getExternalBufferPropertiesKHR( const PhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo, ExternalBufferPropertiesKHR* pExternalBufferProperties ) const;
   30683 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30684     ExternalBufferPropertiesKHR getExternalBufferPropertiesKHR( const PhysicalDeviceExternalBufferInfoKHR & externalBufferInfo ) const;
   30685 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30686 
   30687     void getExternalSemaphorePropertiesKHR( const PhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo, ExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties ) const;
   30688 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30689     ExternalSemaphorePropertiesKHR getExternalSemaphorePropertiesKHR( const PhysicalDeviceExternalSemaphoreInfoKHR & externalSemaphoreInfo ) const;
   30690 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30691 
   30692     void getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo, ExternalFencePropertiesKHR* pExternalFenceProperties ) const;
   30693 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30694     ExternalFencePropertiesKHR getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfoKHR & externalFenceInfo ) const;
   30695 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30696 
   30697 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30698     Result releaseDisplayEXT( DisplayKHR display ) const;
   30699 #else
   30700     ResultValueType<void>::type releaseDisplayEXT( DisplayKHR display ) const;
   30701 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30702 
   30703 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
   30704     Result acquireXlibDisplayEXT( Display* dpy, DisplayKHR display ) const;
   30705 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30706     ResultValueType<Display>::type acquireXlibDisplayEXT( DisplayKHR display ) const;
   30707 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30708 #endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/
   30709 
   30710 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
   30711     Result getRandROutputDisplayEXT( Display* dpy, RROutput rrOutput, DisplayKHR* pDisplay ) const;
   30712 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30713     ResultValueType<DisplayKHR>::type getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput ) const;
   30714 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30715 #endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/
   30716 
   30717     Result getSurfaceCapabilities2EXT( SurfaceKHR surface, SurfaceCapabilities2EXT* pSurfaceCapabilities ) const;
   30718 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30719     ResultValueType<SurfaceCapabilities2EXT>::type getSurfaceCapabilities2EXT( SurfaceKHR surface ) const;
   30720 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30721 
   30722     Result getPresentRectanglesKHX( SurfaceKHR surface, uint32_t* pRectCount, Rect2D* pRects ) const;
   30723 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30724     template <typename Allocator = std::allocator<Rect2D>>
   30725     typename ResultValueType<std::vector<Rect2D,Allocator>>::type getPresentRectanglesKHX( SurfaceKHR surface ) const;
   30726 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30727 
   30728     void getMultisamplePropertiesEXT( SampleCountFlagBits samples, MultisamplePropertiesEXT* pMultisampleProperties ) const;
   30729 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30730     MultisamplePropertiesEXT getMultisamplePropertiesEXT( SampleCountFlagBits samples ) const;
   30731 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30732 
   30733     Result getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, SurfaceCapabilities2KHR* pSurfaceCapabilities ) const;
   30734 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30735     ResultValueType<SurfaceCapabilities2KHR>::type getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
   30736     template <typename ...T>
   30737     typename ResultValueType<StructureChain<T...>>::type getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
   30738 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30739 
   30740     Result getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, SurfaceFormat2KHR* pSurfaceFormats ) const;
   30741 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30742     template <typename Allocator = std::allocator<SurfaceFormat2KHR>>
   30743     typename ResultValueType<std::vector<SurfaceFormat2KHR,Allocator>>::type getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
   30744 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30745 
   30746 
   30747 
   30748     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPhysicalDevice() const
   30749     {
   30750       return m_physicalDevice;
   30751     }
   30752 
   30753     explicit operator bool() const
   30754     {
   30755       return m_physicalDevice != VK_NULL_HANDLE;
   30756     }
   30757 
   30758     bool operator!() const
   30759     {
   30760       return m_physicalDevice == VK_NULL_HANDLE;
   30761     }
   30762 
   30763   private:
   30764     VkPhysicalDevice m_physicalDevice;
   30765   };
   30766 
   30767   static_assert( sizeof( PhysicalDevice ) == sizeof( VkPhysicalDevice ), "handle and wrapper have different size!" );
   30768 
   30769 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   30770   class DeviceDeleter
   30771   {
   30772   public:
   30773     DeviceDeleter( Optional<const AllocationCallbacks> allocator = nullptr )
   30774       : m_allocator( allocator )
   30775     {}
   30776 
   30777     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   30778 
   30779   protected:
   30780     void destroy( Device device )
   30781     {
   30782       device.destroy( m_allocator );
   30783     }
   30784 
   30785   private:
   30786     Optional<const AllocationCallbacks> m_allocator;
   30787   };
   30788 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   30789 
   30790   VULKAN_HPP_INLINE void PhysicalDevice::getProperties( PhysicalDeviceProperties* pProperties ) const
   30791   {
   30792     vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( pProperties ) );
   30793   }
   30794 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30795   VULKAN_HPP_INLINE PhysicalDeviceProperties PhysicalDevice::getProperties() const
   30796   {
   30797     PhysicalDeviceProperties properties;
   30798     vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties*>( &properties ) );
   30799     return properties;
   30800   }
   30801 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30802 
   30803   VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyProperties( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties* pQueueFamilyProperties ) const
   30804   {
   30805     vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( pQueueFamilyProperties ) );
   30806   }
   30807 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30808   template <typename Allocator>
   30809   VULKAN_HPP_INLINE std::vector<QueueFamilyProperties,Allocator> PhysicalDevice::getQueueFamilyProperties() const
   30810   {
   30811     std::vector<QueueFamilyProperties,Allocator> queueFamilyProperties;
   30812     uint32_t queueFamilyPropertyCount;
   30813     vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr );
   30814     queueFamilyProperties.resize( queueFamilyPropertyCount );
   30815     vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties*>( queueFamilyProperties.data() ) );
   30816     return queueFamilyProperties;
   30817   }
   30818 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30819 
   30820   VULKAN_HPP_INLINE void PhysicalDevice::getMemoryProperties( PhysicalDeviceMemoryProperties* pMemoryProperties ) const
   30821   {
   30822     vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( pMemoryProperties ) );
   30823   }
   30824 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30825   VULKAN_HPP_INLINE PhysicalDeviceMemoryProperties PhysicalDevice::getMemoryProperties() const
   30826   {
   30827     PhysicalDeviceMemoryProperties memoryProperties;
   30828     vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties*>( &memoryProperties ) );
   30829     return memoryProperties;
   30830   }
   30831 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30832 
   30833   VULKAN_HPP_INLINE void PhysicalDevice::getFeatures( PhysicalDeviceFeatures* pFeatures ) const
   30834   {
   30835     vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( pFeatures ) );
   30836   }
   30837 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30838   VULKAN_HPP_INLINE PhysicalDeviceFeatures PhysicalDevice::getFeatures() const
   30839   {
   30840     PhysicalDeviceFeatures features;
   30841     vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures*>( &features ) );
   30842     return features;
   30843   }
   30844 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30845 
   30846   VULKAN_HPP_INLINE void PhysicalDevice::getFormatProperties( Format format, FormatProperties* pFormatProperties ) const
   30847   {
   30848     vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( pFormatProperties ) );
   30849   }
   30850 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30851   VULKAN_HPP_INLINE FormatProperties PhysicalDevice::getFormatProperties( Format format ) const
   30852   {
   30853     FormatProperties formatProperties;
   30854     vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties*>( &formatProperties ) );
   30855     return formatProperties;
   30856   }
   30857 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30858 
   30859   VULKAN_HPP_INLINE Result PhysicalDevice::getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ImageFormatProperties* pImageFormatProperties ) const
   30860   {
   30861     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 ) ) );
   30862   }
   30863 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30864   VULKAN_HPP_INLINE ResultValueType<ImageFormatProperties>::type PhysicalDevice::getImageFormatProperties( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags ) const
   30865   {
   30866     ImageFormatProperties imageFormatProperties;
   30867     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 ) ) );
   30868     return createResultValue( result, imageFormatProperties, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getImageFormatProperties" );
   30869   }
   30870 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30871 
   30872   VULKAN_HPP_INLINE Result PhysicalDevice::createDevice( const DeviceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Device* pDevice ) const
   30873   {
   30874     return static_cast<Result>( vkCreateDevice( m_physicalDevice, reinterpret_cast<const VkDeviceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDevice*>( pDevice ) ) );
   30875   }
   30876 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30877   VULKAN_HPP_INLINE ResultValueType<Device>::type PhysicalDevice::createDevice( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   30878   {
   30879     Device device;
   30880     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 ) ) );
   30881     return createResultValue( result, device, "VULKAN_HPP_NAMESPACE::PhysicalDevice::createDevice" );
   30882   }
   30883 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   30884   VULKAN_HPP_INLINE ResultValueType<UniqueDevice>::type PhysicalDevice::createDeviceUnique( const DeviceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator ) const
   30885   {
   30886     Device device;
   30887     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 ) ) );
   30888 
   30889     DeviceDeleter deleter( allocator );
   30890     return createResultValue( result, device, "VULKAN_HPP_NAMESPACE::PhysicalDevice::createDeviceUnique", deleter );
   30891   }
   30892 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   30893 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30894 
   30895   VULKAN_HPP_INLINE Result PhysicalDevice::enumerateDeviceLayerProperties( uint32_t* pPropertyCount, LayerProperties* pProperties ) const
   30896   {
   30897     return static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, pPropertyCount, reinterpret_cast<VkLayerProperties*>( pProperties ) ) );
   30898   }
   30899 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30900   template <typename Allocator>
   30901   VULKAN_HPP_INLINE typename ResultValueType<std::vector<LayerProperties,Allocator>>::type PhysicalDevice::enumerateDeviceLayerProperties() const
   30902   {
   30903     std::vector<LayerProperties,Allocator> properties;
   30904     uint32_t propertyCount;
   30905     Result result;
   30906     do
   30907     {
   30908       result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) );
   30909       if ( ( result == Result::eSuccess ) && propertyCount )
   30910       {
   30911         properties.resize( propertyCount );
   30912         result = static_cast<Result>( vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties*>( properties.data() ) ) );
   30913       }
   30914     } while ( result == Result::eIncomplete );
   30915     assert( propertyCount <= properties.size() );
   30916     properties.resize( propertyCount );
   30917     return createResultValue( result, properties, "VULKAN_HPP_NAMESPACE::PhysicalDevice::enumerateDeviceLayerProperties" );
   30918   }
   30919 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30920 
   30921   VULKAN_HPP_INLINE Result PhysicalDevice::enumerateDeviceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, ExtensionProperties* pProperties ) const
   30922   {
   30923     return static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, pLayerName, pPropertyCount, reinterpret_cast<VkExtensionProperties*>( pProperties ) ) );
   30924   }
   30925 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30926   template <typename Allocator>
   30927   VULKAN_HPP_INLINE typename ResultValueType<std::vector<ExtensionProperties,Allocator>>::type PhysicalDevice::enumerateDeviceExtensionProperties( Optional<const std::string> layerName ) const
   30928   {
   30929     std::vector<ExtensionProperties,Allocator> properties;
   30930     uint32_t propertyCount;
   30931     Result result;
   30932     do
   30933     {
   30934       result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) );
   30935       if ( ( result == Result::eSuccess ) && propertyCount )
   30936       {
   30937         properties.resize( propertyCount );
   30938         result = static_cast<Result>( vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast<VkExtensionProperties*>( properties.data() ) ) );
   30939       }
   30940     } while ( result == Result::eIncomplete );
   30941     assert( propertyCount <= properties.size() );
   30942     properties.resize( propertyCount );
   30943     return createResultValue( result, properties, "VULKAN_HPP_NAMESPACE::PhysicalDevice::enumerateDeviceExtensionProperties" );
   30944   }
   30945 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30946 
   30947   VULKAN_HPP_INLINE void PhysicalDevice::getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, uint32_t* pPropertyCount, SparseImageFormatProperties* pProperties ) const
   30948   {
   30949     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 ) );
   30950   }
   30951 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30952   template <typename Allocator>
   30953   VULKAN_HPP_INLINE std::vector<SparseImageFormatProperties,Allocator> PhysicalDevice::getSparseImageFormatProperties( Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling ) const
   30954   {
   30955     std::vector<SparseImageFormatProperties,Allocator> properties;
   30956     uint32_t propertyCount;
   30957     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 );
   30958     properties.resize( propertyCount );
   30959     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() ) );
   30960     return properties;
   30961   }
   30962 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30963 
   30964   VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPropertiesKHR( uint32_t* pPropertyCount, DisplayPropertiesKHR* pProperties ) const
   30965   {
   30966     return static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( pProperties ) ) );
   30967   }
   30968 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30969   template <typename Allocator>
   30970   VULKAN_HPP_INLINE typename ResultValueType<std::vector<DisplayPropertiesKHR,Allocator>>::type PhysicalDevice::getDisplayPropertiesKHR() const
   30971   {
   30972     std::vector<DisplayPropertiesKHR,Allocator> properties;
   30973     uint32_t propertyCount;
   30974     Result result;
   30975     do
   30976     {
   30977       result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
   30978       if ( ( result == Result::eSuccess ) && propertyCount )
   30979       {
   30980         properties.resize( propertyCount );
   30981         result = static_cast<Result>( vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR*>( properties.data() ) ) );
   30982       }
   30983     } while ( result == Result::eIncomplete );
   30984     assert( propertyCount <= properties.size() );
   30985     properties.resize( propertyCount );
   30986     return createResultValue( result, properties, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getDisplayPropertiesKHR" );
   30987   }
   30988 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   30989 
   30990   VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlanePropertiesKHR( uint32_t* pPropertyCount, DisplayPlanePropertiesKHR* pProperties ) const
   30991   {
   30992     return static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, pPropertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( pProperties ) ) );
   30993   }
   30994 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   30995   template <typename Allocator>
   30996   VULKAN_HPP_INLINE typename ResultValueType<std::vector<DisplayPlanePropertiesKHR,Allocator>>::type PhysicalDevice::getDisplayPlanePropertiesKHR() const
   30997   {
   30998     std::vector<DisplayPlanePropertiesKHR,Allocator> properties;
   30999     uint32_t propertyCount;
   31000     Result result;
   31001     do
   31002     {
   31003       result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) );
   31004       if ( ( result == Result::eSuccess ) && propertyCount )
   31005       {
   31006         properties.resize( propertyCount );
   31007         result = static_cast<Result>( vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR*>( properties.data() ) ) );
   31008       }
   31009     } while ( result == Result::eIncomplete );
   31010     assert( propertyCount <= properties.size() );
   31011     properties.resize( propertyCount );
   31012     return createResultValue( result, properties, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getDisplayPlanePropertiesKHR" );
   31013   }
   31014 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31015 
   31016   VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, uint32_t* pDisplayCount, DisplayKHR* pDisplays ) const
   31017   {
   31018     return static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, pDisplayCount, reinterpret_cast<VkDisplayKHR*>( pDisplays ) ) );
   31019   }
   31020 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31021   template <typename Allocator>
   31022   VULKAN_HPP_INLINE typename ResultValueType<std::vector<DisplayKHR,Allocator>>::type PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const
   31023   {
   31024     std::vector<DisplayKHR,Allocator> displays;
   31025     uint32_t displayCount;
   31026     Result result;
   31027     do
   31028     {
   31029       result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) );
   31030       if ( ( result == Result::eSuccess ) && displayCount )
   31031       {
   31032         displays.resize( displayCount );
   31033         result = static_cast<Result>( vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR*>( displays.data() ) ) );
   31034       }
   31035     } while ( result == Result::eIncomplete );
   31036     assert( displayCount <= displays.size() );
   31037     displays.resize( displayCount );
   31038     return createResultValue( result, displays, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
   31039   }
   31040 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31041 
   31042   VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayModePropertiesKHR( DisplayKHR display, uint32_t* pPropertyCount, DisplayModePropertiesKHR* pProperties ) const
   31043   {
   31044     return static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), pPropertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( pProperties ) ) );
   31045   }
   31046 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31047   template <typename Allocator>
   31048   VULKAN_HPP_INLINE typename ResultValueType<std::vector<DisplayModePropertiesKHR,Allocator>>::type PhysicalDevice::getDisplayModePropertiesKHR( DisplayKHR display ) const
   31049   {
   31050     std::vector<DisplayModePropertiesKHR,Allocator> properties;
   31051     uint32_t propertyCount;
   31052     Result result;
   31053     do
   31054     {
   31055       result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, nullptr ) );
   31056       if ( ( result == Result::eSuccess ) && propertyCount )
   31057       {
   31058         properties.resize( propertyCount );
   31059         result = static_cast<Result>( vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast<VkDisplayKHR>( display ), &propertyCount, reinterpret_cast<VkDisplayModePropertiesKHR*>( properties.data() ) ) );
   31060       }
   31061     } while ( result == Result::eIncomplete );
   31062     assert( propertyCount <= properties.size() );
   31063     properties.resize( propertyCount );
   31064     return createResultValue( result, properties, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getDisplayModePropertiesKHR" );
   31065   }
   31066 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31067 
   31068   VULKAN_HPP_INLINE Result PhysicalDevice::createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, DisplayModeKHR* pMode ) const
   31069   {
   31070     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 ) ) );
   31071   }
   31072 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31073   VULKAN_HPP_INLINE ResultValueType<DisplayModeKHR>::type PhysicalDevice::createDisplayModeKHR( DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   31074   {
   31075     DisplayModeKHR mode;
   31076     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 ) ) );
   31077     return createResultValue( result, mode, "VULKAN_HPP_NAMESPACE::PhysicalDevice::createDisplayModeKHR" );
   31078   }
   31079 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31080 
   31081   VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, DisplayPlaneCapabilitiesKHR* pCapabilities ) const
   31082   {
   31083     return static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( pCapabilities ) ) );
   31084   }
   31085 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31086   VULKAN_HPP_INLINE ResultValueType<DisplayPlaneCapabilitiesKHR>::type PhysicalDevice::getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex ) const
   31087   {
   31088     DisplayPlaneCapabilitiesKHR capabilities;
   31089     Result result = static_cast<Result>( vkGetDisplayPlaneCapabilitiesKHR( m_physicalDevice, static_cast<VkDisplayModeKHR>( mode ), planeIndex, reinterpret_cast<VkDisplayPlaneCapabilitiesKHR*>( &capabilities ) ) );
   31090     return createResultValue( result, capabilities, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" );
   31091   }
   31092 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31093 
   31094 #ifdef VK_USE_PLATFORM_MIR_KHR
   31095   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection* connection ) const
   31096   {
   31097     return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection );
   31098   }
   31099 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31100   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getMirPresentationSupportKHR( uint32_t queueFamilyIndex, MirConnection & connection ) const
   31101   {
   31102     return vkGetPhysicalDeviceMirPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection );
   31103   }
   31104 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31105 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   31106 
   31107   VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32* pSupported ) const
   31108   {
   31109     return static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), pSupported ) );
   31110   }
   31111 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31112   VULKAN_HPP_INLINE ResultValueType<Bool32>::type PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface ) const
   31113   {
   31114     Bool32 supported;
   31115     Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceSupportKHR( m_physicalDevice, queueFamilyIndex, static_cast<VkSurfaceKHR>( surface ), &supported ) );
   31116     return createResultValue( result, supported, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getSurfaceSupportKHR" );
   31117   }
   31118 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31119 
   31120   VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceCapabilitiesKHR( SurfaceKHR surface, SurfaceCapabilitiesKHR* pSurfaceCapabilities ) const
   31121   {
   31122     return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( pSurfaceCapabilities ) ) );
   31123   }
   31124 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31125   VULKAN_HPP_INLINE ResultValueType<SurfaceCapabilitiesKHR>::type PhysicalDevice::getSurfaceCapabilitiesKHR( SurfaceKHR surface ) const
   31126   {
   31127     SurfaceCapabilitiesKHR surfaceCapabilities;
   31128     Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilitiesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilitiesKHR*>( &surfaceCapabilities ) ) );
   31129     return createResultValue( result, surfaceCapabilities, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getSurfaceCapabilitiesKHR" );
   31130   }
   31131 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31132 
   31133   VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceFormatsKHR( SurfaceKHR surface, uint32_t* pSurfaceFormatCount, SurfaceFormatKHR* pSurfaceFormats ) const
   31134   {
   31135     return static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pSurfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( pSurfaceFormats ) ) );
   31136   }
   31137 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31138   template <typename Allocator>
   31139   VULKAN_HPP_INLINE typename ResultValueType<std::vector<SurfaceFormatKHR,Allocator>>::type PhysicalDevice::getSurfaceFormatsKHR( SurfaceKHR surface ) const
   31140   {
   31141     std::vector<SurfaceFormatKHR,Allocator> surfaceFormats;
   31142     uint32_t surfaceFormatCount;
   31143     Result result;
   31144     do
   31145     {
   31146       result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, nullptr ) );
   31147       if ( ( result == Result::eSuccess ) && surfaceFormatCount )
   31148       {
   31149         surfaceFormats.resize( surfaceFormatCount );
   31150         result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormatKHR*>( surfaceFormats.data() ) ) );
   31151       }
   31152     } while ( result == Result::eIncomplete );
   31153     assert( surfaceFormatCount <= surfaceFormats.size() );
   31154     surfaceFormats.resize( surfaceFormatCount );
   31155     return createResultValue( result, surfaceFormats, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getSurfaceFormatsKHR" );
   31156   }
   31157 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31158 
   31159   VULKAN_HPP_INLINE Result PhysicalDevice::getSurfacePresentModesKHR( SurfaceKHR surface, uint32_t* pPresentModeCount, PresentModeKHR* pPresentModes ) const
   31160   {
   31161     return static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pPresentModeCount, reinterpret_cast<VkPresentModeKHR*>( pPresentModes ) ) );
   31162   }
   31163 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31164   template <typename Allocator>
   31165   VULKAN_HPP_INLINE typename ResultValueType<std::vector<PresentModeKHR,Allocator>>::type PhysicalDevice::getSurfacePresentModesKHR( SurfaceKHR surface ) const
   31166   {
   31167     std::vector<PresentModeKHR,Allocator> presentModes;
   31168     uint32_t presentModeCount;
   31169     Result result;
   31170     do
   31171     {
   31172       result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, nullptr ) );
   31173       if ( ( result == Result::eSuccess ) && presentModeCount )
   31174       {
   31175         presentModes.resize( presentModeCount );
   31176         result = static_cast<Result>( vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &presentModeCount, reinterpret_cast<VkPresentModeKHR*>( presentModes.data() ) ) );
   31177       }
   31178     } while ( result == Result::eIncomplete );
   31179     assert( presentModeCount <= presentModes.size() );
   31180     presentModes.resize( presentModeCount );
   31181     return createResultValue( result, presentModes, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getSurfacePresentModesKHR" );
   31182   }
   31183 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31184 
   31185 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   31186   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display* display ) const
   31187   {
   31188     return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, display );
   31189   }
   31190 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31191   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const
   31192   {
   31193     return vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display );
   31194   }
   31195 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31196 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   31197 
   31198 #ifdef VK_USE_PLATFORM_WIN32_KHR
   31199   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const
   31200   {
   31201     return vkGetPhysicalDeviceWin32PresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
   31202   }
   31203 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   31204 
   31205 #ifdef VK_USE_PLATFORM_XLIB_KHR
   31206   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID ) const
   31207   {
   31208     return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, dpy, visualID );
   31209   }
   31210 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31211   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const
   31212   {
   31213     return vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID );
   31214   }
   31215 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31216 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   31217 
   31218 #ifdef VK_USE_PLATFORM_XCB_KHR
   31219   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id ) const
   31220   {
   31221     return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, connection, visual_id );
   31222   }
   31223 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31224   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const
   31225   {
   31226     return vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id );
   31227   }
   31228 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31229 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   31230 
   31231   VULKAN_HPP_INLINE Result PhysicalDevice::getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType, ExternalImageFormatPropertiesNV* pExternalImageFormatProperties ) const
   31232   {
   31233     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 ) ) );
   31234   }
   31235 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31236   VULKAN_HPP_INLINE ResultValueType<ExternalImageFormatPropertiesNV>::type PhysicalDevice::getExternalImageFormatPropertiesNV( Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, ExternalMemoryHandleTypeFlagsNV externalHandleType ) const
   31237   {
   31238     ExternalImageFormatPropertiesNV externalImageFormatProperties;
   31239     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 ) ) );
   31240     return createResultValue( result, externalImageFormatProperties, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getExternalImageFormatPropertiesNV" );
   31241   }
   31242 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31243 
   31244   VULKAN_HPP_INLINE void PhysicalDevice::getGeneratedCommandsPropertiesNVX( DeviceGeneratedCommandsFeaturesNVX* pFeatures, DeviceGeneratedCommandsLimitsNVX* pLimits ) const
   31245   {
   31246     vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX( m_physicalDevice, reinterpret_cast<VkDeviceGeneratedCommandsFeaturesNVX*>( pFeatures ), reinterpret_cast<VkDeviceGeneratedCommandsLimitsNVX*>( pLimits ) );
   31247   }
   31248 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31249   VULKAN_HPP_INLINE DeviceGeneratedCommandsLimitsNVX PhysicalDevice::getGeneratedCommandsPropertiesNVX( DeviceGeneratedCommandsFeaturesNVX & features ) const
   31250   {
   31251     DeviceGeneratedCommandsLimitsNVX limits;
   31252     vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX( m_physicalDevice, reinterpret_cast<VkDeviceGeneratedCommandsFeaturesNVX*>( &features ), reinterpret_cast<VkDeviceGeneratedCommandsLimitsNVX*>( &limits ) );
   31253     return limits;
   31254   }
   31255 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31256 
   31257   VULKAN_HPP_INLINE void PhysicalDevice::getFeatures2KHR( PhysicalDeviceFeatures2KHR* pFeatures ) const
   31258   {
   31259     vkGetPhysicalDeviceFeatures2KHR( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures2KHR*>( pFeatures ) );
   31260   }
   31261 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31262   VULKAN_HPP_INLINE PhysicalDeviceFeatures2KHR PhysicalDevice::getFeatures2KHR() const
   31263   {
   31264     PhysicalDeviceFeatures2KHR features;
   31265     vkGetPhysicalDeviceFeatures2KHR( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures2KHR*>( &features ) );
   31266     return features;
   31267   }
   31268   template <typename ...T>
   31269   VULKAN_HPP_INLINE StructureChain<T...> PhysicalDevice::getFeatures2KHR() const
   31270   {
   31271     StructureChain<T...> structureChain;
   31272     PhysicalDeviceFeatures2KHR& features = structureChain.template get<PhysicalDeviceFeatures2KHR>();
   31273     vkGetPhysicalDeviceFeatures2KHR( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceFeatures2KHR*>( &features ) );
   31274     return structureChain;
   31275   }
   31276 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31277 
   31278   VULKAN_HPP_INLINE void PhysicalDevice::getProperties2KHR( PhysicalDeviceProperties2KHR* pProperties ) const
   31279   {
   31280     vkGetPhysicalDeviceProperties2KHR( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties2KHR*>( pProperties ) );
   31281   }
   31282 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31283   VULKAN_HPP_INLINE PhysicalDeviceProperties2KHR PhysicalDevice::getProperties2KHR() const
   31284   {
   31285     PhysicalDeviceProperties2KHR properties;
   31286     vkGetPhysicalDeviceProperties2KHR( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties2KHR*>( &properties ) );
   31287     return properties;
   31288   }
   31289   template <typename ...T>
   31290   VULKAN_HPP_INLINE StructureChain<T...> PhysicalDevice::getProperties2KHR() const
   31291   {
   31292     StructureChain<T...> structureChain;
   31293     PhysicalDeviceProperties2KHR& properties = structureChain.template get<PhysicalDeviceProperties2KHR>();
   31294     vkGetPhysicalDeviceProperties2KHR( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceProperties2KHR*>( &properties ) );
   31295     return structureChain;
   31296   }
   31297 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31298 
   31299   VULKAN_HPP_INLINE void PhysicalDevice::getFormatProperties2KHR( Format format, FormatProperties2KHR* pFormatProperties ) const
   31300   {
   31301     vkGetPhysicalDeviceFormatProperties2KHR( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties2KHR*>( pFormatProperties ) );
   31302   }
   31303 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31304   VULKAN_HPP_INLINE FormatProperties2KHR PhysicalDevice::getFormatProperties2KHR( Format format ) const
   31305   {
   31306     FormatProperties2KHR formatProperties;
   31307     vkGetPhysicalDeviceFormatProperties2KHR( m_physicalDevice, static_cast<VkFormat>( format ), reinterpret_cast<VkFormatProperties2KHR*>( &formatProperties ) );
   31308     return formatProperties;
   31309   }
   31310 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31311 
   31312   VULKAN_HPP_INLINE Result PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo, ImageFormatProperties2KHR* pImageFormatProperties ) const
   31313   {
   31314     return static_cast<Result>( vkGetPhysicalDeviceImageFormatProperties2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceImageFormatInfo2KHR*>( pImageFormatInfo ), reinterpret_cast<VkImageFormatProperties2KHR*>( pImageFormatProperties ) ) );
   31315   }
   31316 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31317   VULKAN_HPP_INLINE ResultValueType<ImageFormatProperties2KHR>::type PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2KHR & imageFormatInfo ) const
   31318   {
   31319     ImageFormatProperties2KHR imageFormatProperties;
   31320     Result result = static_cast<Result>( vkGetPhysicalDeviceImageFormatProperties2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceImageFormatInfo2KHR*>( &imageFormatInfo ), reinterpret_cast<VkImageFormatProperties2KHR*>( &imageFormatProperties ) ) );
   31321     return createResultValue( result, imageFormatProperties, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getImageFormatProperties2KHR" );
   31322   }
   31323   template <typename ...T>
   31324   VULKAN_HPP_INLINE typename ResultValueType<StructureChain<T...>>::type PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2KHR & imageFormatInfo ) const
   31325   {
   31326     StructureChain<T...> structureChain;
   31327     ImageFormatProperties2KHR& imageFormatProperties = structureChain.template get<ImageFormatProperties2KHR>();
   31328     Result result = static_cast<Result>( vkGetPhysicalDeviceImageFormatProperties2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceImageFormatInfo2KHR*>( &imageFormatInfo ), reinterpret_cast<VkImageFormatProperties2KHR*>( &imageFormatProperties ) ) );
   31329     return createResultValue( result, structureChain, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getImageFormatProperties2KHR" );
   31330   }
   31331 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31332 
   31333   VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyProperties2KHR( uint32_t* pQueueFamilyPropertyCount, QueueFamilyProperties2KHR* pQueueFamilyProperties ) const
   31334   {
   31335     vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, pQueueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties2KHR*>( pQueueFamilyProperties ) );
   31336   }
   31337 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31338   template <typename Allocator>
   31339   VULKAN_HPP_INLINE std::vector<QueueFamilyProperties2KHR,Allocator> PhysicalDevice::getQueueFamilyProperties2KHR() const
   31340   {
   31341     std::vector<QueueFamilyProperties2KHR,Allocator> queueFamilyProperties;
   31342     uint32_t queueFamilyPropertyCount;
   31343     vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr );
   31344     queueFamilyProperties.resize( queueFamilyPropertyCount );
   31345     vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast<VkQueueFamilyProperties2KHR*>( queueFamilyProperties.data() ) );
   31346     return queueFamilyProperties;
   31347   }
   31348 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31349 
   31350   VULKAN_HPP_INLINE void PhysicalDevice::getMemoryProperties2KHR( PhysicalDeviceMemoryProperties2KHR* pMemoryProperties ) const
   31351   {
   31352     vkGetPhysicalDeviceMemoryProperties2KHR( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties2KHR*>( pMemoryProperties ) );
   31353   }
   31354 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31355   VULKAN_HPP_INLINE PhysicalDeviceMemoryProperties2KHR PhysicalDevice::getMemoryProperties2KHR() const
   31356   {
   31357     PhysicalDeviceMemoryProperties2KHR memoryProperties;
   31358     vkGetPhysicalDeviceMemoryProperties2KHR( m_physicalDevice, reinterpret_cast<VkPhysicalDeviceMemoryProperties2KHR*>( &memoryProperties ) );
   31359     return memoryProperties;
   31360   }
   31361 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31362 
   31363   VULKAN_HPP_INLINE void PhysicalDevice::getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo, uint32_t* pPropertyCount, SparseImageFormatProperties2KHR* pProperties ) const
   31364   {
   31365     vkGetPhysicalDeviceSparseImageFormatProperties2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSparseImageFormatInfo2KHR*>( pFormatInfo ), pPropertyCount, reinterpret_cast<VkSparseImageFormatProperties2KHR*>( pProperties ) );
   31366   }
   31367 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31368   template <typename Allocator>
   31369   VULKAN_HPP_INLINE std::vector<SparseImageFormatProperties2KHR,Allocator> PhysicalDevice::getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2KHR & formatInfo ) const
   31370   {
   31371     std::vector<SparseImageFormatProperties2KHR,Allocator> properties;
   31372     uint32_t propertyCount;
   31373     vkGetPhysicalDeviceSparseImageFormatProperties2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSparseImageFormatInfo2KHR*>( &formatInfo ), &propertyCount, nullptr );
   31374     properties.resize( propertyCount );
   31375     vkGetPhysicalDeviceSparseImageFormatProperties2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSparseImageFormatInfo2KHR*>( &formatInfo ), &propertyCount, reinterpret_cast<VkSparseImageFormatProperties2KHR*>( properties.data() ) );
   31376     return properties;
   31377   }
   31378 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31379 
   31380   VULKAN_HPP_INLINE void PhysicalDevice::getExternalBufferPropertiesKHR( const PhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo, ExternalBufferPropertiesKHR* pExternalBufferProperties ) const
   31381   {
   31382     vkGetPhysicalDeviceExternalBufferPropertiesKHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceExternalBufferInfoKHR*>( pExternalBufferInfo ), reinterpret_cast<VkExternalBufferPropertiesKHR*>( pExternalBufferProperties ) );
   31383   }
   31384 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31385   VULKAN_HPP_INLINE ExternalBufferPropertiesKHR PhysicalDevice::getExternalBufferPropertiesKHR( const PhysicalDeviceExternalBufferInfoKHR & externalBufferInfo ) const
   31386   {
   31387     ExternalBufferPropertiesKHR externalBufferProperties;
   31388     vkGetPhysicalDeviceExternalBufferPropertiesKHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceExternalBufferInfoKHR*>( &externalBufferInfo ), reinterpret_cast<VkExternalBufferPropertiesKHR*>( &externalBufferProperties ) );
   31389     return externalBufferProperties;
   31390   }
   31391 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31392 
   31393   VULKAN_HPP_INLINE void PhysicalDevice::getExternalSemaphorePropertiesKHR( const PhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo, ExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties ) const
   31394   {
   31395     vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceExternalSemaphoreInfoKHR*>( pExternalSemaphoreInfo ), reinterpret_cast<VkExternalSemaphorePropertiesKHR*>( pExternalSemaphoreProperties ) );
   31396   }
   31397 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31398   VULKAN_HPP_INLINE ExternalSemaphorePropertiesKHR PhysicalDevice::getExternalSemaphorePropertiesKHR( const PhysicalDeviceExternalSemaphoreInfoKHR & externalSemaphoreInfo ) const
   31399   {
   31400     ExternalSemaphorePropertiesKHR externalSemaphoreProperties;
   31401     vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceExternalSemaphoreInfoKHR*>( &externalSemaphoreInfo ), reinterpret_cast<VkExternalSemaphorePropertiesKHR*>( &externalSemaphoreProperties ) );
   31402     return externalSemaphoreProperties;
   31403   }
   31404 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31405 
   31406   VULKAN_HPP_INLINE void PhysicalDevice::getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo, ExternalFencePropertiesKHR* pExternalFenceProperties ) const
   31407   {
   31408     vkGetPhysicalDeviceExternalFencePropertiesKHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceExternalFenceInfoKHR*>( pExternalFenceInfo ), reinterpret_cast<VkExternalFencePropertiesKHR*>( pExternalFenceProperties ) );
   31409   }
   31410 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31411   VULKAN_HPP_INLINE ExternalFencePropertiesKHR PhysicalDevice::getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfoKHR & externalFenceInfo ) const
   31412   {
   31413     ExternalFencePropertiesKHR externalFenceProperties;
   31414     vkGetPhysicalDeviceExternalFencePropertiesKHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceExternalFenceInfoKHR*>( &externalFenceInfo ), reinterpret_cast<VkExternalFencePropertiesKHR*>( &externalFenceProperties ) );
   31415     return externalFenceProperties;
   31416   }
   31417 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31418 
   31419 #ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31420   VULKAN_HPP_INLINE Result PhysicalDevice::releaseDisplayEXT( DisplayKHR display ) const
   31421   {
   31422     return static_cast<Result>( vkReleaseDisplayEXT( m_physicalDevice, static_cast<VkDisplayKHR>( display ) ) );
   31423   }
   31424 #else
   31425   VULKAN_HPP_INLINE ResultValueType<void>::type PhysicalDevice::releaseDisplayEXT( DisplayKHR display ) const
   31426   {
   31427     Result result = static_cast<Result>( vkReleaseDisplayEXT( m_physicalDevice, static_cast<VkDisplayKHR>( display ) ) );
   31428     return createResultValue( result, "VULKAN_HPP_NAMESPACE::PhysicalDevice::releaseDisplayEXT" );
   31429   }
   31430 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31431 
   31432 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
   31433   VULKAN_HPP_INLINE Result PhysicalDevice::acquireXlibDisplayEXT( Display* dpy, DisplayKHR display ) const
   31434   {
   31435     return static_cast<Result>( vkAcquireXlibDisplayEXT( m_physicalDevice, dpy, static_cast<VkDisplayKHR>( display ) ) );
   31436   }
   31437 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31438   VULKAN_HPP_INLINE ResultValueType<Display>::type PhysicalDevice::acquireXlibDisplayEXT( DisplayKHR display ) const
   31439   {
   31440     Display dpy;
   31441     Result result = static_cast<Result>( vkAcquireXlibDisplayEXT( m_physicalDevice, &dpy, static_cast<VkDisplayKHR>( display ) ) );
   31442     return createResultValue( result, dpy, "VULKAN_HPP_NAMESPACE::PhysicalDevice::acquireXlibDisplayEXT" );
   31443   }
   31444 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31445 #endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/
   31446 
   31447 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
   31448   VULKAN_HPP_INLINE Result PhysicalDevice::getRandROutputDisplayEXT( Display* dpy, RROutput rrOutput, DisplayKHR* pDisplay ) const
   31449   {
   31450     return static_cast<Result>( vkGetRandROutputDisplayEXT( m_physicalDevice, dpy, rrOutput, reinterpret_cast<VkDisplayKHR*>( pDisplay ) ) );
   31451   }
   31452 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31453   VULKAN_HPP_INLINE ResultValueType<DisplayKHR>::type PhysicalDevice::getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput ) const
   31454   {
   31455     DisplayKHR display;
   31456     Result result = static_cast<Result>( vkGetRandROutputDisplayEXT( m_physicalDevice, &dpy, rrOutput, reinterpret_cast<VkDisplayKHR*>( &display ) ) );
   31457     return createResultValue( result, display, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getRandROutputDisplayEXT" );
   31458   }
   31459 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31460 #endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/
   31461 
   31462   VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceCapabilities2EXT( SurfaceKHR surface, SurfaceCapabilities2EXT* pSurfaceCapabilities ) const
   31463   {
   31464     return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilities2EXT( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilities2EXT*>( pSurfaceCapabilities ) ) );
   31465   }
   31466 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31467   VULKAN_HPP_INLINE ResultValueType<SurfaceCapabilities2EXT>::type PhysicalDevice::getSurfaceCapabilities2EXT( SurfaceKHR surface ) const
   31468   {
   31469     SurfaceCapabilities2EXT surfaceCapabilities;
   31470     Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilities2EXT( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<VkSurfaceCapabilities2EXT*>( &surfaceCapabilities ) ) );
   31471     return createResultValue( result, surfaceCapabilities, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getSurfaceCapabilities2EXT" );
   31472   }
   31473 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31474 
   31475   VULKAN_HPP_INLINE Result PhysicalDevice::getPresentRectanglesKHX( SurfaceKHR surface, uint32_t* pRectCount, Rect2D* pRects ) const
   31476   {
   31477     return static_cast<Result>( vkGetPhysicalDevicePresentRectanglesKHX( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), pRectCount, reinterpret_cast<VkRect2D*>( pRects ) ) );
   31478   }
   31479 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31480   template <typename Allocator>
   31481   VULKAN_HPP_INLINE typename ResultValueType<std::vector<Rect2D,Allocator>>::type PhysicalDevice::getPresentRectanglesKHX( SurfaceKHR surface ) const
   31482   {
   31483     std::vector<Rect2D,Allocator> rects;
   31484     uint32_t rectCount;
   31485     Result result;
   31486     do
   31487     {
   31488       result = static_cast<Result>( vkGetPhysicalDevicePresentRectanglesKHX( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &rectCount, nullptr ) );
   31489       if ( ( result == Result::eSuccess ) && rectCount )
   31490       {
   31491         rects.resize( rectCount );
   31492         result = static_cast<Result>( vkGetPhysicalDevicePresentRectanglesKHX( m_physicalDevice, static_cast<VkSurfaceKHR>( surface ), &rectCount, reinterpret_cast<VkRect2D*>( rects.data() ) ) );
   31493       }
   31494     } while ( result == Result::eIncomplete );
   31495     assert( rectCount <= rects.size() );
   31496     rects.resize( rectCount );
   31497     return createResultValue( result, rects, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getPresentRectanglesKHX" );
   31498   }
   31499 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31500 
   31501   VULKAN_HPP_INLINE void PhysicalDevice::getMultisamplePropertiesEXT( SampleCountFlagBits samples, MultisamplePropertiesEXT* pMultisampleProperties ) const
   31502   {
   31503     vkGetPhysicalDeviceMultisamplePropertiesEXT( m_physicalDevice, static_cast<VkSampleCountFlagBits>( samples ), reinterpret_cast<VkMultisamplePropertiesEXT*>( pMultisampleProperties ) );
   31504   }
   31505 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31506   VULKAN_HPP_INLINE MultisamplePropertiesEXT PhysicalDevice::getMultisamplePropertiesEXT( SampleCountFlagBits samples ) const
   31507   {
   31508     MultisamplePropertiesEXT multisampleProperties;
   31509     vkGetPhysicalDeviceMultisamplePropertiesEXT( m_physicalDevice, static_cast<VkSampleCountFlagBits>( samples ), reinterpret_cast<VkMultisamplePropertiesEXT*>( &multisampleProperties ) );
   31510     return multisampleProperties;
   31511   }
   31512 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31513 
   31514   VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, SurfaceCapabilities2KHR* pSurfaceCapabilities ) const
   31515   {
   31516     return static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilities2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR*>( pSurfaceInfo ), reinterpret_cast<VkSurfaceCapabilities2KHR*>( pSurfaceCapabilities ) ) );
   31517   }
   31518 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31519   VULKAN_HPP_INLINE ResultValueType<SurfaceCapabilities2KHR>::type PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
   31520   {
   31521     SurfaceCapabilities2KHR surfaceCapabilities;
   31522     Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilities2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR*>( &surfaceInfo ), reinterpret_cast<VkSurfaceCapabilities2KHR*>( &surfaceCapabilities ) ) );
   31523     return createResultValue( result, surfaceCapabilities, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getSurfaceCapabilities2KHR" );
   31524   }
   31525   template <typename ...T>
   31526   VULKAN_HPP_INLINE typename ResultValueType<StructureChain<T...>>::type PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
   31527   {
   31528     StructureChain<T...> structureChain;
   31529     SurfaceCapabilities2KHR& surfaceCapabilities = structureChain.template get<SurfaceCapabilities2KHR>();
   31530     Result result = static_cast<Result>( vkGetPhysicalDeviceSurfaceCapabilities2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR*>( &surfaceInfo ), reinterpret_cast<VkSurfaceCapabilities2KHR*>( &surfaceCapabilities ) ) );
   31531     return createResultValue( result, structureChain, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getSurfaceCapabilities2KHR" );
   31532   }
   31533 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31534 
   31535   VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, SurfaceFormat2KHR* pSurfaceFormats ) const
   31536   {
   31537     return static_cast<Result>( vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR*>( pSurfaceInfo ), pSurfaceFormatCount, reinterpret_cast<VkSurfaceFormat2KHR*>( pSurfaceFormats ) ) );
   31538   }
   31539 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31540   template <typename Allocator>
   31541   VULKAN_HPP_INLINE typename ResultValueType<std::vector<SurfaceFormat2KHR,Allocator>>::type PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
   31542   {
   31543     std::vector<SurfaceFormat2KHR,Allocator> surfaceFormats;
   31544     uint32_t surfaceFormatCount;
   31545     Result result;
   31546     do
   31547     {
   31548       result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR*>( &surfaceInfo ), &surfaceFormatCount, nullptr ) );
   31549       if ( ( result == Result::eSuccess ) && surfaceFormatCount )
   31550       {
   31551         surfaceFormats.resize( surfaceFormatCount );
   31552         result = static_cast<Result>( vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR*>( &surfaceInfo ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormat2KHR*>( surfaceFormats.data() ) ) );
   31553       }
   31554     } while ( result == Result::eIncomplete );
   31555     assert( surfaceFormatCount <= surfaceFormats.size() );
   31556     surfaceFormats.resize( surfaceFormatCount );
   31557     return createResultValue( result, surfaceFormats, "VULKAN_HPP_NAMESPACE::PhysicalDevice::getSurfaceFormats2KHR" );
   31558   }
   31559 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31560 
   31561   struct CmdProcessCommandsInfoNVX
   31562   {
   31563     CmdProcessCommandsInfoNVX( ObjectTableNVX objectTable_ = ObjectTableNVX(), IndirectCommandsLayoutNVX indirectCommandsLayout_ = IndirectCommandsLayoutNVX(), uint32_t indirectCommandsTokenCount_ = 0, const IndirectCommandsTokenNVX* pIndirectCommandsTokens_ = nullptr, uint32_t maxSequencesCount_ = 0, CommandBuffer targetCommandBuffer_ = CommandBuffer(), Buffer sequencesCountBuffer_ = Buffer(), DeviceSize sequencesCountOffset_ = 0, Buffer sequencesIndexBuffer_ = Buffer(), DeviceSize sequencesIndexOffset_ = 0 )
   31564       : objectTable( objectTable_ )
   31565       , indirectCommandsLayout( indirectCommandsLayout_ )
   31566       , indirectCommandsTokenCount( indirectCommandsTokenCount_ )
   31567       , pIndirectCommandsTokens( pIndirectCommandsTokens_ )
   31568       , maxSequencesCount( maxSequencesCount_ )
   31569       , targetCommandBuffer( targetCommandBuffer_ )
   31570       , sequencesCountBuffer( sequencesCountBuffer_ )
   31571       , sequencesCountOffset( sequencesCountOffset_ )
   31572       , sequencesIndexBuffer( sequencesIndexBuffer_ )
   31573       , sequencesIndexOffset( sequencesIndexOffset_ )
   31574     {
   31575     }
   31576 
   31577     CmdProcessCommandsInfoNVX( VkCmdProcessCommandsInfoNVX const & rhs )
   31578     {
   31579       memcpy( this, &rhs, sizeof( CmdProcessCommandsInfoNVX ) );
   31580     }
   31581 
   31582     CmdProcessCommandsInfoNVX& operator=( VkCmdProcessCommandsInfoNVX const & rhs )
   31583     {
   31584       memcpy( this, &rhs, sizeof( CmdProcessCommandsInfoNVX ) );
   31585       return *this;
   31586     }
   31587     CmdProcessCommandsInfoNVX& setPNext( const void* pNext_ )
   31588     {
   31589       pNext = pNext_;
   31590       return *this;
   31591     }
   31592 
   31593     CmdProcessCommandsInfoNVX& setObjectTable( ObjectTableNVX objectTable_ )
   31594     {
   31595       objectTable = objectTable_;
   31596       return *this;
   31597     }
   31598 
   31599     CmdProcessCommandsInfoNVX& setIndirectCommandsLayout( IndirectCommandsLayoutNVX indirectCommandsLayout_ )
   31600     {
   31601       indirectCommandsLayout = indirectCommandsLayout_;
   31602       return *this;
   31603     }
   31604 
   31605     CmdProcessCommandsInfoNVX& setIndirectCommandsTokenCount( uint32_t indirectCommandsTokenCount_ )
   31606     {
   31607       indirectCommandsTokenCount = indirectCommandsTokenCount_;
   31608       return *this;
   31609     }
   31610 
   31611     CmdProcessCommandsInfoNVX& setPIndirectCommandsTokens( const IndirectCommandsTokenNVX* pIndirectCommandsTokens_ )
   31612     {
   31613       pIndirectCommandsTokens = pIndirectCommandsTokens_;
   31614       return *this;
   31615     }
   31616 
   31617     CmdProcessCommandsInfoNVX& setMaxSequencesCount( uint32_t maxSequencesCount_ )
   31618     {
   31619       maxSequencesCount = maxSequencesCount_;
   31620       return *this;
   31621     }
   31622 
   31623     CmdProcessCommandsInfoNVX& setTargetCommandBuffer( CommandBuffer targetCommandBuffer_ )
   31624     {
   31625       targetCommandBuffer = targetCommandBuffer_;
   31626       return *this;
   31627     }
   31628 
   31629     CmdProcessCommandsInfoNVX& setSequencesCountBuffer( Buffer sequencesCountBuffer_ )
   31630     {
   31631       sequencesCountBuffer = sequencesCountBuffer_;
   31632       return *this;
   31633     }
   31634 
   31635     CmdProcessCommandsInfoNVX& setSequencesCountOffset( DeviceSize sequencesCountOffset_ )
   31636     {
   31637       sequencesCountOffset = sequencesCountOffset_;
   31638       return *this;
   31639     }
   31640 
   31641     CmdProcessCommandsInfoNVX& setSequencesIndexBuffer( Buffer sequencesIndexBuffer_ )
   31642     {
   31643       sequencesIndexBuffer = sequencesIndexBuffer_;
   31644       return *this;
   31645     }
   31646 
   31647     CmdProcessCommandsInfoNVX& setSequencesIndexOffset( DeviceSize sequencesIndexOffset_ )
   31648     {
   31649       sequencesIndexOffset = sequencesIndexOffset_;
   31650       return *this;
   31651     }
   31652 
   31653     operator const VkCmdProcessCommandsInfoNVX&() const
   31654     {
   31655       return *reinterpret_cast<const VkCmdProcessCommandsInfoNVX*>(this);
   31656     }
   31657 
   31658     bool operator==( CmdProcessCommandsInfoNVX const& rhs ) const
   31659     {
   31660       return ( sType == rhs.sType )
   31661           && ( pNext == rhs.pNext )
   31662           && ( objectTable == rhs.objectTable )
   31663           && ( indirectCommandsLayout == rhs.indirectCommandsLayout )
   31664           && ( indirectCommandsTokenCount == rhs.indirectCommandsTokenCount )
   31665           && ( pIndirectCommandsTokens == rhs.pIndirectCommandsTokens )
   31666           && ( maxSequencesCount == rhs.maxSequencesCount )
   31667           && ( targetCommandBuffer == rhs.targetCommandBuffer )
   31668           && ( sequencesCountBuffer == rhs.sequencesCountBuffer )
   31669           && ( sequencesCountOffset == rhs.sequencesCountOffset )
   31670           && ( sequencesIndexBuffer == rhs.sequencesIndexBuffer )
   31671           && ( sequencesIndexOffset == rhs.sequencesIndexOffset );
   31672     }
   31673 
   31674     bool operator!=( CmdProcessCommandsInfoNVX const& rhs ) const
   31675     {
   31676       return !operator==( rhs );
   31677     }
   31678 
   31679   private:
   31680     StructureType sType = StructureType::eCmdProcessCommandsInfoNVX;
   31681 
   31682   public:
   31683     const void* pNext = nullptr;
   31684     ObjectTableNVX objectTable;
   31685     IndirectCommandsLayoutNVX indirectCommandsLayout;
   31686     uint32_t indirectCommandsTokenCount;
   31687     const IndirectCommandsTokenNVX* pIndirectCommandsTokens;
   31688     uint32_t maxSequencesCount;
   31689     CommandBuffer targetCommandBuffer;
   31690     Buffer sequencesCountBuffer;
   31691     DeviceSize sequencesCountOffset;
   31692     Buffer sequencesIndexBuffer;
   31693     DeviceSize sequencesIndexOffset;
   31694   };
   31695   static_assert( sizeof( CmdProcessCommandsInfoNVX ) == sizeof( VkCmdProcessCommandsInfoNVX ), "struct and wrapper have different size!" );
   31696 
   31697   struct PhysicalDeviceGroupPropertiesKHX
   31698   {
   31699     operator const VkPhysicalDeviceGroupPropertiesKHX&() const
   31700     {
   31701       return *reinterpret_cast<const VkPhysicalDeviceGroupPropertiesKHX*>(this);
   31702     }
   31703 
   31704     bool operator==( PhysicalDeviceGroupPropertiesKHX const& rhs ) const
   31705     {
   31706       return ( sType == rhs.sType )
   31707           && ( pNext == rhs.pNext )
   31708           && ( physicalDeviceCount == rhs.physicalDeviceCount )
   31709           && ( memcmp( physicalDevices, rhs.physicalDevices, VK_MAX_DEVICE_GROUP_SIZE_KHX * sizeof( PhysicalDevice ) ) == 0 )
   31710           && ( subsetAllocation == rhs.subsetAllocation );
   31711     }
   31712 
   31713     bool operator!=( PhysicalDeviceGroupPropertiesKHX const& rhs ) const
   31714     {
   31715       return !operator==( rhs );
   31716     }
   31717 
   31718   private:
   31719     StructureType sType = StructureType::ePhysicalDeviceGroupPropertiesKHX;
   31720 
   31721   public:
   31722     void* pNext = nullptr;
   31723     uint32_t physicalDeviceCount;
   31724     PhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE_KHX];
   31725     Bool32 subsetAllocation;
   31726   };
   31727   static_assert( sizeof( PhysicalDeviceGroupPropertiesKHX ) == sizeof( VkPhysicalDeviceGroupPropertiesKHX ), "struct and wrapper have different size!" );
   31728 
   31729 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31730   class DebugReportCallbackEXTDeleter;
   31731   template <> class UniqueHandleTraits<DebugReportCallbackEXT> {public: using deleter = DebugReportCallbackEXTDeleter; };
   31732   using UniqueDebugReportCallbackEXT = UniqueHandle<DebugReportCallbackEXT>;
   31733   class SurfaceKHRDeleter;
   31734   template <> class UniqueHandleTraits<SurfaceKHR> {public: using deleter = SurfaceKHRDeleter; };
   31735   using UniqueSurfaceKHR = UniqueHandle<SurfaceKHR>;
   31736 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31737 
   31738   class Instance
   31739   {
   31740   public:
   31741     Instance()
   31742       : m_instance(VK_NULL_HANDLE)
   31743     {}
   31744 
   31745     Instance( std::nullptr_t )
   31746       : m_instance(VK_NULL_HANDLE)
   31747     {}
   31748 
   31749     VULKAN_HPP_TYPESAFE_EXPLICIT Instance( VkInstance instance )
   31750       : m_instance( instance )
   31751     {}
   31752 
   31753 #if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
   31754     Instance & operator=(VkInstance instance)
   31755     {
   31756       m_instance = instance;
   31757       return *this;
   31758     }
   31759 #endif
   31760 
   31761     Instance & operator=( std::nullptr_t )
   31762     {
   31763       m_instance = VK_NULL_HANDLE;
   31764       return *this;
   31765     }
   31766 
   31767     bool operator==( Instance const & rhs ) const
   31768     {
   31769       return m_instance == rhs.m_instance;
   31770     }
   31771 
   31772     bool operator!=(Instance const & rhs ) const
   31773     {
   31774       return m_instance != rhs.m_instance;
   31775     }
   31776 
   31777     bool operator<(Instance const & rhs ) const
   31778     {
   31779       return m_instance < rhs.m_instance;
   31780     }
   31781 
   31782     void destroy( const AllocationCallbacks* pAllocator ) const;
   31783 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31784     void destroy( Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31785 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31786 
   31787     Result enumeratePhysicalDevices( uint32_t* pPhysicalDeviceCount, PhysicalDevice* pPhysicalDevices ) const;
   31788 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31789     template <typename Allocator = std::allocator<PhysicalDevice>>
   31790     typename ResultValueType<std::vector<PhysicalDevice,Allocator>>::type enumeratePhysicalDevices() const;
   31791 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31792 
   31793     PFN_vkVoidFunction getProcAddr( const char* pName ) const;
   31794 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31795     PFN_vkVoidFunction getProcAddr( const std::string & name ) const;
   31796 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31797 
   31798 #ifdef VK_USE_PLATFORM_ANDROID_KHR
   31799     Result createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31800 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31801     ResultValueType<SurfaceKHR>::type createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31802 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31803     ResultValueType<UniqueSurfaceKHR>::type createAndroidSurfaceKHRUnique( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31804 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31805 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31806 #endif /*VK_USE_PLATFORM_ANDROID_KHR*/
   31807 
   31808     Result createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31809 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31810     ResultValueType<SurfaceKHR>::type createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31811 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31812     ResultValueType<UniqueSurfaceKHR>::type createDisplayPlaneSurfaceKHRUnique( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31813 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31814 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31815 
   31816 #ifdef VK_USE_PLATFORM_MIR_KHR
   31817     Result createMirSurfaceKHR( const MirSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31818 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31819     ResultValueType<SurfaceKHR>::type createMirSurfaceKHR( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31820 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31821     ResultValueType<UniqueSurfaceKHR>::type createMirSurfaceKHRUnique( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31822 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31823 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31824 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   31825 
   31826     void destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks* pAllocator ) const;
   31827 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31828     void destroySurfaceKHR( SurfaceKHR surface, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31829 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31830 
   31831 #ifdef VK_USE_PLATFORM_VI_NN
   31832     Result createViSurfaceNN( const ViSurfaceCreateInfoNN* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31833 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31834     ResultValueType<SurfaceKHR>::type createViSurfaceNN( const ViSurfaceCreateInfoNN & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31835 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31836     ResultValueType<UniqueSurfaceKHR>::type createViSurfaceNNUnique( const ViSurfaceCreateInfoNN & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31837 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31838 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31839 #endif /*VK_USE_PLATFORM_VI_NN*/
   31840 
   31841 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   31842     Result createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31843 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31844     ResultValueType<SurfaceKHR>::type createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31845 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31846     ResultValueType<UniqueSurfaceKHR>::type createWaylandSurfaceKHRUnique( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31847 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31848 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31849 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   31850 
   31851 #ifdef VK_USE_PLATFORM_WIN32_KHR
   31852     Result createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31853 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31854     ResultValueType<SurfaceKHR>::type createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31855 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31856     ResultValueType<UniqueSurfaceKHR>::type createWin32SurfaceKHRUnique( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31857 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31858 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31859 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   31860 
   31861 #ifdef VK_USE_PLATFORM_XLIB_KHR
   31862     Result createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31863 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31864     ResultValueType<SurfaceKHR>::type createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31865 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31866     ResultValueType<UniqueSurfaceKHR>::type createXlibSurfaceKHRUnique( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31867 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31868 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31869 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   31870 
   31871 #ifdef VK_USE_PLATFORM_XCB_KHR
   31872     Result createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31873 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31874     ResultValueType<SurfaceKHR>::type createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31875 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31876     ResultValueType<UniqueSurfaceKHR>::type createXcbSurfaceKHRUnique( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31877 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31878 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31879 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   31880 
   31881     Result createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, DebugReportCallbackEXT* pCallback ) const;
   31882 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31883     ResultValueType<DebugReportCallbackEXT>::type createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31884 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31885     ResultValueType<UniqueDebugReportCallbackEXT>::type createDebugReportCallbackEXTUnique( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31886 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31887 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31888 
   31889     void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, const AllocationCallbacks* pAllocator ) const;
   31890 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31891     void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31892 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31893 
   31894     void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage ) const;
   31895 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31896     void debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const std::string & layerPrefix, const std::string & message ) const;
   31897 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31898 
   31899     Result enumeratePhysicalDeviceGroupsKHX( uint32_t* pPhysicalDeviceGroupCount, PhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties ) const;
   31900 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31901     template <typename Allocator = std::allocator<PhysicalDeviceGroupPropertiesKHX>>
   31902     typename ResultValueType<std::vector<PhysicalDeviceGroupPropertiesKHX,Allocator>>::type enumeratePhysicalDeviceGroupsKHX() const;
   31903 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31904 
   31905 #ifdef VK_USE_PLATFORM_IOS_MVK
   31906     Result createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31907 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31908     ResultValueType<SurfaceKHR>::type createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31909 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31910     ResultValueType<UniqueSurfaceKHR>::type createIOSSurfaceMVKUnique( const IOSSurfaceCreateInfoMVK & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31911 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31912 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31913 #endif /*VK_USE_PLATFORM_IOS_MVK*/
   31914 
   31915 #ifdef VK_USE_PLATFORM_MACOS_MVK
   31916     Result createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const;
   31917 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31918     ResultValueType<SurfaceKHR>::type createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31919 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31920     ResultValueType<UniqueSurfaceKHR>::type createMacOSSurfaceMVKUnique( const MacOSSurfaceCreateInfoMVK & createInfo, Optional<const AllocationCallbacks> allocator = nullptr ) const;
   31921 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31922 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   31923 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
   31924 
   31925 
   31926 
   31927     VULKAN_HPP_TYPESAFE_EXPLICIT operator VkInstance() const
   31928     {
   31929       return m_instance;
   31930     }
   31931 
   31932     explicit operator bool() const
   31933     {
   31934       return m_instance != VK_NULL_HANDLE;
   31935     }
   31936 
   31937     bool operator!() const
   31938     {
   31939       return m_instance == VK_NULL_HANDLE;
   31940     }
   31941 
   31942   private:
   31943     VkInstance m_instance;
   31944   };
   31945 
   31946   static_assert( sizeof( Instance ) == sizeof( VkInstance ), "handle and wrapper have different size!" );
   31947 
   31948 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   31949   class DebugReportCallbackEXTDeleter
   31950   {
   31951   public:
   31952     DebugReportCallbackEXTDeleter( Instance instance = Instance(), Optional<const AllocationCallbacks> allocator = nullptr )
   31953       : m_instance( instance )
   31954       , m_allocator( allocator )
   31955     {}
   31956 
   31957     Instance getInstance() const { return m_instance; }
   31958     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   31959 
   31960   protected:
   31961     void destroy( DebugReportCallbackEXT debugReportCallbackEXT )
   31962     {
   31963       m_instance.destroyDebugReportCallbackEXT( debugReportCallbackEXT, m_allocator );
   31964     }
   31965 
   31966   private:
   31967     Instance m_instance;
   31968     Optional<const AllocationCallbacks> m_allocator;
   31969   };
   31970 
   31971   class SurfaceKHRDeleter
   31972   {
   31973   public:
   31974     SurfaceKHRDeleter( Instance instance = Instance(), Optional<const AllocationCallbacks> allocator = nullptr )
   31975       : m_instance( instance )
   31976       , m_allocator( allocator )
   31977     {}
   31978 
   31979     Instance getInstance() const { return m_instance; }
   31980     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   31981 
   31982   protected:
   31983     void destroy( SurfaceKHR surfaceKHR )
   31984     {
   31985       m_instance.destroySurfaceKHR( surfaceKHR, m_allocator );
   31986     }
   31987 
   31988   private:
   31989     Instance m_instance;
   31990     Optional<const AllocationCallbacks> m_allocator;
   31991   };
   31992 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   31993 
   31994   VULKAN_HPP_INLINE void Instance::destroy( const AllocationCallbacks* pAllocator ) const
   31995   {
   31996     vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   31997   }
   31998 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   31999   VULKAN_HPP_INLINE void Instance::destroy( Optional<const AllocationCallbacks> allocator ) const
   32000   {
   32001     vkDestroyInstance( m_instance, reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   32002   }
   32003 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32004 
   32005   VULKAN_HPP_INLINE Result Instance::enumeratePhysicalDevices( uint32_t* pPhysicalDeviceCount, PhysicalDevice* pPhysicalDevices ) const
   32006   {
   32007     return static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, pPhysicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( pPhysicalDevices ) ) );
   32008   }
   32009 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32010   template <typename Allocator>
   32011   VULKAN_HPP_INLINE typename ResultValueType<std::vector<PhysicalDevice,Allocator>>::type Instance::enumeratePhysicalDevices() const
   32012   {
   32013     std::vector<PhysicalDevice,Allocator> physicalDevices;
   32014     uint32_t physicalDeviceCount;
   32015     Result result;
   32016     do
   32017     {
   32018       result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) );
   32019       if ( ( result == Result::eSuccess ) && physicalDeviceCount )
   32020       {
   32021         physicalDevices.resize( physicalDeviceCount );
   32022         result = static_cast<Result>( vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice*>( physicalDevices.data() ) ) );
   32023       }
   32024     } while ( result == Result::eIncomplete );
   32025     assert( physicalDeviceCount <= physicalDevices.size() );
   32026     physicalDevices.resize( physicalDeviceCount );
   32027     return createResultValue( result, physicalDevices, "VULKAN_HPP_NAMESPACE::Instance::enumeratePhysicalDevices" );
   32028   }
   32029 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32030 
   32031   VULKAN_HPP_INLINE PFN_vkVoidFunction Instance::getProcAddr( const char* pName ) const
   32032   {
   32033     return vkGetInstanceProcAddr( m_instance, pName );
   32034   }
   32035 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32036   VULKAN_HPP_INLINE PFN_vkVoidFunction Instance::getProcAddr( const std::string & name ) const
   32037   {
   32038     return vkGetInstanceProcAddr( m_instance, name.c_str() );
   32039   }
   32040 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32041 
   32042 #ifdef VK_USE_PLATFORM_ANDROID_KHR
   32043   VULKAN_HPP_INLINE Result Instance::createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32044   {
   32045     return static_cast<Result>( vkCreateAndroidSurfaceKHR( m_instance, reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32046   }
   32047 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32048   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32049   {
   32050     SurfaceKHR surface;
   32051     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 ) ) );
   32052     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createAndroidSurfaceKHR" );
   32053   }
   32054 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32055   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createAndroidSurfaceKHRUnique( const AndroidSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32056   {
   32057     SurfaceKHR surface;
   32058     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 ) ) );
   32059 
   32060     SurfaceKHRDeleter deleter( *this, allocator );
   32061     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createAndroidSurfaceKHRUnique", deleter );
   32062   }
   32063 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32064 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32065 #endif /*VK_USE_PLATFORM_ANDROID_KHR*/
   32066 
   32067   VULKAN_HPP_INLINE Result Instance::createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32068   {
   32069     return static_cast<Result>( vkCreateDisplayPlaneSurfaceKHR( m_instance, reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32070   }
   32071 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32072   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32073   {
   32074     SurfaceKHR surface;
   32075     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 ) ) );
   32076     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createDisplayPlaneSurfaceKHR" );
   32077   }
   32078 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32079   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createDisplayPlaneSurfaceKHRUnique( const DisplaySurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32080   {
   32081     SurfaceKHR surface;
   32082     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 ) ) );
   32083 
   32084     SurfaceKHRDeleter deleter( *this, allocator );
   32085     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createDisplayPlaneSurfaceKHRUnique", deleter );
   32086   }
   32087 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32088 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32089 
   32090 #ifdef VK_USE_PLATFORM_MIR_KHR
   32091   VULKAN_HPP_INLINE Result Instance::createMirSurfaceKHR( const MirSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32092   {
   32093     return static_cast<Result>( vkCreateMirSurfaceKHR( m_instance, reinterpret_cast<const VkMirSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32094   }
   32095 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32096   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createMirSurfaceKHR( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32097   {
   32098     SurfaceKHR surface;
   32099     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 ) ) );
   32100     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createMirSurfaceKHR" );
   32101   }
   32102 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32103   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createMirSurfaceKHRUnique( const MirSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32104   {
   32105     SurfaceKHR surface;
   32106     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 ) ) );
   32107 
   32108     SurfaceKHRDeleter deleter( *this, allocator );
   32109     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createMirSurfaceKHRUnique", deleter );
   32110   }
   32111 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32112 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32113 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   32114 
   32115   VULKAN_HPP_INLINE void Instance::destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks* pAllocator ) const
   32116   {
   32117     vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   32118   }
   32119 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32120   VULKAN_HPP_INLINE void Instance::destroySurfaceKHR( SurfaceKHR surface, Optional<const AllocationCallbacks> allocator ) const
   32121   {
   32122     vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( surface ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   32123   }
   32124 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32125 
   32126 #ifdef VK_USE_PLATFORM_VI_NN
   32127   VULKAN_HPP_INLINE Result Instance::createViSurfaceNN( const ViSurfaceCreateInfoNN* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32128   {
   32129     return static_cast<Result>( vkCreateViSurfaceNN( m_instance, reinterpret_cast<const VkViSurfaceCreateInfoNN*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32130   }
   32131 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32132   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createViSurfaceNN( const ViSurfaceCreateInfoNN & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32133   {
   32134     SurfaceKHR surface;
   32135     Result result = static_cast<Result>( vkCreateViSurfaceNN( m_instance, reinterpret_cast<const VkViSurfaceCreateInfoNN*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
   32136     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createViSurfaceNN" );
   32137   }
   32138 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32139   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createViSurfaceNNUnique( const ViSurfaceCreateInfoNN & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32140   {
   32141     SurfaceKHR surface;
   32142     Result result = static_cast<Result>( vkCreateViSurfaceNN( m_instance, reinterpret_cast<const VkViSurfaceCreateInfoNN*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
   32143 
   32144     SurfaceKHRDeleter deleter( *this, allocator );
   32145     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createViSurfaceNNUnique", deleter );
   32146   }
   32147 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32148 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32149 #endif /*VK_USE_PLATFORM_VI_NN*/
   32150 
   32151 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   32152   VULKAN_HPP_INLINE Result Instance::createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32153   {
   32154     return static_cast<Result>( vkCreateWaylandSurfaceKHR( m_instance, reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32155   }
   32156 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32157   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32158   {
   32159     SurfaceKHR surface;
   32160     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 ) ) );
   32161     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createWaylandSurfaceKHR" );
   32162   }
   32163 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32164   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createWaylandSurfaceKHRUnique( const WaylandSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32165   {
   32166     SurfaceKHR surface;
   32167     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 ) ) );
   32168 
   32169     SurfaceKHRDeleter deleter( *this, allocator );
   32170     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createWaylandSurfaceKHRUnique", deleter );
   32171   }
   32172 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32173 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32174 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   32175 
   32176 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32177   VULKAN_HPP_INLINE Result Instance::createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32178   {
   32179     return static_cast<Result>( vkCreateWin32SurfaceKHR( m_instance, reinterpret_cast<const VkWin32SurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32180   }
   32181 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32182   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32183   {
   32184     SurfaceKHR surface;
   32185     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 ) ) );
   32186     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createWin32SurfaceKHR" );
   32187   }
   32188 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32189   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createWin32SurfaceKHRUnique( const Win32SurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32190   {
   32191     SurfaceKHR surface;
   32192     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 ) ) );
   32193 
   32194     SurfaceKHRDeleter deleter( *this, allocator );
   32195     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createWin32SurfaceKHRUnique", deleter );
   32196   }
   32197 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32198 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32199 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32200 
   32201 #ifdef VK_USE_PLATFORM_XLIB_KHR
   32202   VULKAN_HPP_INLINE Result Instance::createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32203   {
   32204     return static_cast<Result>( vkCreateXlibSurfaceKHR( m_instance, reinterpret_cast<const VkXlibSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32205   }
   32206 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32207   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32208   {
   32209     SurfaceKHR surface;
   32210     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 ) ) );
   32211     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createXlibSurfaceKHR" );
   32212   }
   32213 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32214   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createXlibSurfaceKHRUnique( const XlibSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32215   {
   32216     SurfaceKHR surface;
   32217     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 ) ) );
   32218 
   32219     SurfaceKHRDeleter deleter( *this, allocator );
   32220     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createXlibSurfaceKHRUnique", deleter );
   32221   }
   32222 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32223 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32224 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   32225 
   32226 #ifdef VK_USE_PLATFORM_XCB_KHR
   32227   VULKAN_HPP_INLINE Result Instance::createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32228   {
   32229     return static_cast<Result>( vkCreateXcbSurfaceKHR( m_instance, reinterpret_cast<const VkXcbSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32230   }
   32231 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32232   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32233   {
   32234     SurfaceKHR surface;
   32235     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 ) ) );
   32236     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createXcbSurfaceKHR" );
   32237   }
   32238 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32239   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createXcbSurfaceKHRUnique( const XcbSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32240   {
   32241     SurfaceKHR surface;
   32242     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 ) ) );
   32243 
   32244     SurfaceKHRDeleter deleter( *this, allocator );
   32245     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createXcbSurfaceKHRUnique", deleter );
   32246   }
   32247 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32248 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32249 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   32250 
   32251   VULKAN_HPP_INLINE Result Instance::createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT* pCreateInfo, const AllocationCallbacks* pAllocator, DebugReportCallbackEXT* pCallback ) const
   32252   {
   32253     return static_cast<Result>( vkCreateDebugReportCallbackEXT( m_instance, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkDebugReportCallbackEXT*>( pCallback ) ) );
   32254   }
   32255 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32256   VULKAN_HPP_INLINE ResultValueType<DebugReportCallbackEXT>::type Instance::createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32257   {
   32258     DebugReportCallbackEXT callback;
   32259     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 ) ) );
   32260     return createResultValue( result, callback, "VULKAN_HPP_NAMESPACE::Instance::createDebugReportCallbackEXT" );
   32261   }
   32262 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32263   VULKAN_HPP_INLINE ResultValueType<UniqueDebugReportCallbackEXT>::type Instance::createDebugReportCallbackEXTUnique( const DebugReportCallbackCreateInfoEXT & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32264   {
   32265     DebugReportCallbackEXT callback;
   32266     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 ) ) );
   32267 
   32268     DebugReportCallbackEXTDeleter deleter( *this, allocator );
   32269     return createResultValue( result, callback, "VULKAN_HPP_NAMESPACE::Instance::createDebugReportCallbackEXTUnique", deleter );
   32270   }
   32271 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32272 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32273 
   32274   VULKAN_HPP_INLINE void Instance::destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, const AllocationCallbacks* pAllocator ) const
   32275   {
   32276     vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ) );
   32277   }
   32278 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32279   VULKAN_HPP_INLINE void Instance::destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, Optional<const AllocationCallbacks> allocator ) const
   32280   {
   32281     vkDestroyDebugReportCallbackEXT( m_instance, static_cast<VkDebugReportCallbackEXT>( callback ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ) );
   32282   }
   32283 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32284 
   32285   VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage ) const
   32286   {
   32287     vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, pLayerPrefix, pMessage );
   32288   }
   32289 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32290   VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( DebugReportFlagsEXT flags, DebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const std::string & layerPrefix, const std::string & message ) const
   32291   {
   32292 #ifdef VULKAN_HPP_NO_EXCEPTIONS
   32293     assert( layerPrefix.size() == message.size() );
   32294 #else
   32295     if ( layerPrefix.size() != message.size() )
   32296     {
   32297       throw LogicError( "VULKAN_HPP_NAMESPACE::Instance::debugReportMessageEXT: layerPrefix.size() != message.size()" );
   32298     }
   32299 #endif  // VULKAN_HPP_NO_EXCEPTIONS
   32300     vkDebugReportMessageEXT( m_instance, static_cast<VkDebugReportFlagsEXT>( flags ), static_cast<VkDebugReportObjectTypeEXT>( objectType ), object, location, messageCode, layerPrefix.c_str(), message.c_str() );
   32301   }
   32302 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32303 
   32304   VULKAN_HPP_INLINE Result Instance::enumeratePhysicalDeviceGroupsKHX( uint32_t* pPhysicalDeviceGroupCount, PhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties ) const
   32305   {
   32306     return static_cast<Result>( vkEnumeratePhysicalDeviceGroupsKHX( m_instance, pPhysicalDeviceGroupCount, reinterpret_cast<VkPhysicalDeviceGroupPropertiesKHX*>( pPhysicalDeviceGroupProperties ) ) );
   32307   }
   32308 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32309   template <typename Allocator>
   32310   VULKAN_HPP_INLINE typename ResultValueType<std::vector<PhysicalDeviceGroupPropertiesKHX,Allocator>>::type Instance::enumeratePhysicalDeviceGroupsKHX() const
   32311   {
   32312     std::vector<PhysicalDeviceGroupPropertiesKHX,Allocator> physicalDeviceGroupProperties;
   32313     uint32_t physicalDeviceGroupCount;
   32314     Result result;
   32315     do
   32316     {
   32317       result = static_cast<Result>( vkEnumeratePhysicalDeviceGroupsKHX( m_instance, &physicalDeviceGroupCount, nullptr ) );
   32318       if ( ( result == Result::eSuccess ) && physicalDeviceGroupCount )
   32319       {
   32320         physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
   32321         result = static_cast<Result>( vkEnumeratePhysicalDeviceGroupsKHX( m_instance, &physicalDeviceGroupCount, reinterpret_cast<VkPhysicalDeviceGroupPropertiesKHX*>( physicalDeviceGroupProperties.data() ) ) );
   32322       }
   32323     } while ( result == Result::eIncomplete );
   32324     assert( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
   32325     physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
   32326     return createResultValue( result, physicalDeviceGroupProperties, "VULKAN_HPP_NAMESPACE::Instance::enumeratePhysicalDeviceGroupsKHX" );
   32327   }
   32328 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32329 
   32330 #ifdef VK_USE_PLATFORM_IOS_MVK
   32331   VULKAN_HPP_INLINE Result Instance::createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32332   {
   32333     return static_cast<Result>( vkCreateIOSSurfaceMVK( m_instance, reinterpret_cast<const VkIOSSurfaceCreateInfoMVK*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32334   }
   32335 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32336   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32337   {
   32338     SurfaceKHR surface;
   32339     Result result = static_cast<Result>( vkCreateIOSSurfaceMVK( m_instance, reinterpret_cast<const VkIOSSurfaceCreateInfoMVK*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
   32340     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createIOSSurfaceMVK" );
   32341   }
   32342 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32343   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createIOSSurfaceMVKUnique( const IOSSurfaceCreateInfoMVK & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32344   {
   32345     SurfaceKHR surface;
   32346     Result result = static_cast<Result>( vkCreateIOSSurfaceMVK( m_instance, reinterpret_cast<const VkIOSSurfaceCreateInfoMVK*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
   32347 
   32348     SurfaceKHRDeleter deleter( *this, allocator );
   32349     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createIOSSurfaceMVKUnique", deleter );
   32350   }
   32351 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32352 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32353 #endif /*VK_USE_PLATFORM_IOS_MVK*/
   32354 
   32355 #ifdef VK_USE_PLATFORM_MACOS_MVK
   32356   VULKAN_HPP_INLINE Result Instance::createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface ) const
   32357   {
   32358     return static_cast<Result>( vkCreateMacOSSurfaceMVK( m_instance, reinterpret_cast<const VkMacOSSurfaceCreateInfoMVK*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
   32359   }
   32360 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32361   VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32362   {
   32363     SurfaceKHR surface;
   32364     Result result = static_cast<Result>( vkCreateMacOSSurfaceMVK( m_instance, reinterpret_cast<const VkMacOSSurfaceCreateInfoMVK*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
   32365     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createMacOSSurfaceMVK" );
   32366   }
   32367 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32368   VULKAN_HPP_INLINE ResultValueType<UniqueSurfaceKHR>::type Instance::createMacOSSurfaceMVKUnique( const MacOSSurfaceCreateInfoMVK & createInfo, Optional<const AllocationCallbacks> allocator ) const
   32369   {
   32370     SurfaceKHR surface;
   32371     Result result = static_cast<Result>( vkCreateMacOSSurfaceMVK( m_instance, reinterpret_cast<const VkMacOSSurfaceCreateInfoMVK*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
   32372 
   32373     SurfaceKHRDeleter deleter( *this, allocator );
   32374     return createResultValue( result, surface, "VULKAN_HPP_NAMESPACE::Instance::createMacOSSurfaceMVKUnique", deleter );
   32375   }
   32376 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32377 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32378 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
   32379 
   32380   struct DeviceGroupDeviceCreateInfoKHX
   32381   {
   32382     DeviceGroupDeviceCreateInfoKHX( uint32_t physicalDeviceCount_ = 0, const PhysicalDevice* pPhysicalDevices_ = nullptr )
   32383       : physicalDeviceCount( physicalDeviceCount_ )
   32384       , pPhysicalDevices( pPhysicalDevices_ )
   32385     {
   32386     }
   32387 
   32388     DeviceGroupDeviceCreateInfoKHX( VkDeviceGroupDeviceCreateInfoKHX const & rhs )
   32389     {
   32390       memcpy( this, &rhs, sizeof( DeviceGroupDeviceCreateInfoKHX ) );
   32391     }
   32392 
   32393     DeviceGroupDeviceCreateInfoKHX& operator=( VkDeviceGroupDeviceCreateInfoKHX const & rhs )
   32394     {
   32395       memcpy( this, &rhs, sizeof( DeviceGroupDeviceCreateInfoKHX ) );
   32396       return *this;
   32397     }
   32398     DeviceGroupDeviceCreateInfoKHX& setPNext( const void* pNext_ )
   32399     {
   32400       pNext = pNext_;
   32401       return *this;
   32402     }
   32403 
   32404     DeviceGroupDeviceCreateInfoKHX& setPhysicalDeviceCount( uint32_t physicalDeviceCount_ )
   32405     {
   32406       physicalDeviceCount = physicalDeviceCount_;
   32407       return *this;
   32408     }
   32409 
   32410     DeviceGroupDeviceCreateInfoKHX& setPPhysicalDevices( const PhysicalDevice* pPhysicalDevices_ )
   32411     {
   32412       pPhysicalDevices = pPhysicalDevices_;
   32413       return *this;
   32414     }
   32415 
   32416     operator const VkDeviceGroupDeviceCreateInfoKHX&() const
   32417     {
   32418       return *reinterpret_cast<const VkDeviceGroupDeviceCreateInfoKHX*>(this);
   32419     }
   32420 
   32421     bool operator==( DeviceGroupDeviceCreateInfoKHX const& rhs ) const
   32422     {
   32423       return ( sType == rhs.sType )
   32424           && ( pNext == rhs.pNext )
   32425           && ( physicalDeviceCount == rhs.physicalDeviceCount )
   32426           && ( pPhysicalDevices == rhs.pPhysicalDevices );
   32427     }
   32428 
   32429     bool operator!=( DeviceGroupDeviceCreateInfoKHX const& rhs ) const
   32430     {
   32431       return !operator==( rhs );
   32432     }
   32433 
   32434   private:
   32435     StructureType sType = StructureType::eDeviceGroupDeviceCreateInfoKHX;
   32436 
   32437   public:
   32438     const void* pNext = nullptr;
   32439     uint32_t physicalDeviceCount;
   32440     const PhysicalDevice* pPhysicalDevices;
   32441   };
   32442   static_assert( sizeof( DeviceGroupDeviceCreateInfoKHX ) == sizeof( VkDeviceGroupDeviceCreateInfoKHX ), "struct and wrapper have different size!" );
   32443 
   32444 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32445   class InstanceDeleter;
   32446   template <> class UniqueHandleTraits<Instance> {public: using deleter = InstanceDeleter; };
   32447   using UniqueInstance = UniqueHandle<Instance>;
   32448 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32449 
   32450   Result createInstance( const InstanceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Instance* pInstance );
   32451 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32452   ResultValueType<Instance>::type createInstance( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr );
   32453 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32454   ResultValueType<UniqueInstance>::type createInstanceUnique( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator = nullptr );
   32455 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32456 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32457 
   32458 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32459   class InstanceDeleter
   32460   {
   32461   public:
   32462     InstanceDeleter( Optional<const AllocationCallbacks> allocator = nullptr )
   32463       : m_allocator( allocator )
   32464     {}
   32465 
   32466     Optional<const AllocationCallbacks> getAllocator() const { return m_allocator; }
   32467 
   32468   protected:
   32469     void destroy( Instance instance )
   32470     {
   32471       instance.destroy( m_allocator );
   32472     }
   32473 
   32474   private:
   32475     Optional<const AllocationCallbacks> m_allocator;
   32476   };
   32477 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32478 
   32479   VULKAN_HPP_INLINE Result createInstance( const InstanceCreateInfo* pCreateInfo, const AllocationCallbacks* pAllocator, Instance* pInstance )
   32480   {
   32481     return static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkInstance*>( pInstance ) ) );
   32482   }
   32483 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
   32484   VULKAN_HPP_INLINE ResultValueType<Instance>::type createInstance( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator )
   32485   {
   32486     Instance instance;
   32487     Result result = static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkInstance*>( &instance ) ) );
   32488     return createResultValue( result, instance, "VULKAN_HPP_NAMESPACE::createInstance" );
   32489   }
   32490 #ifndef VULKAN_HPP_NO_SMART_HANDLE
   32491   VULKAN_HPP_INLINE ResultValueType<UniqueInstance>::type createInstanceUnique( const InstanceCreateInfo & createInfo, Optional<const AllocationCallbacks> allocator )
   32492   {
   32493     Instance instance;
   32494     Result result = static_cast<Result>( vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkInstance*>( &instance ) ) );
   32495 
   32496     InstanceDeleter deleter( allocator );
   32497     return createResultValue( result, instance, "VULKAN_HPP_NAMESPACE::createInstanceUnique", deleter );
   32498   }
   32499 #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
   32500 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
   32501 
   32502 
   32503   template <> struct isStructureChainValid<PresentInfoKHR, DisplayPresentInfoKHR>{ enum { value = true }; };
   32504   template <> struct isStructureChainValid<ImageCreateInfo, DedicatedAllocationImageCreateInfoNV>{ enum { value = true }; };
   32505   template <> struct isStructureChainValid<BufferCreateInfo, DedicatedAllocationBufferCreateInfoNV>{ enum { value = true }; };
   32506   template <> struct isStructureChainValid<MemoryAllocateInfo, DedicatedAllocationMemoryAllocateInfoNV>{ enum { value = true }; };
   32507 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32508   template <> struct isStructureChainValid<MemoryAllocateInfo, ExportMemoryWin32HandleInfoNV>{ enum { value = true }; };
   32509 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32510 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32511   template <> struct isStructureChainValid<SubmitInfo, Win32KeyedMutexAcquireReleaseInfoNV>{ enum { value = true }; };
   32512 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32513   template <> struct isStructureChainValid<DeviceCreateInfo, PhysicalDeviceFeatures2KHR>{ enum { value = true }; };
   32514   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDevicePushDescriptorPropertiesKHR>{ enum { value = true }; };
   32515   template <> struct isStructureChainValid<PresentInfoKHR, PresentRegionsKHR>{ enum { value = true }; };
   32516   template <> struct isStructureChainValid<PhysicalDeviceFeatures2KHR, PhysicalDeviceVariablePointerFeaturesKHR>{ enum { value = true }; };
   32517   template <> struct isStructureChainValid<DeviceCreateInfo, PhysicalDeviceVariablePointerFeaturesKHR>{ enum { value = true }; };
   32518   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceIDPropertiesKHR>{ enum { value = true }; };
   32519 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32520   template <> struct isStructureChainValid<MemoryAllocateInfo, ExportMemoryWin32HandleInfoKHR>{ enum { value = true }; };
   32521 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32522 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32523   template <> struct isStructureChainValid<SubmitInfo, Win32KeyedMutexAcquireReleaseInfoKHR>{ enum { value = true }; };
   32524 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32525 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32526   template <> struct isStructureChainValid<SemaphoreCreateInfo, ExportSemaphoreWin32HandleInfoKHR>{ enum { value = true }; };
   32527 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32528 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32529   template <> struct isStructureChainValid<SubmitInfo, D3D12FenceSubmitInfoKHR>{ enum { value = true }; };
   32530 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32531 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32532   template <> struct isStructureChainValid<FenceCreateInfo, ExportFenceWin32HandleInfoKHR>{ enum { value = true }; };
   32533 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32534   template <> struct isStructureChainValid<PhysicalDeviceFeatures2KHR, PhysicalDeviceMultiviewFeaturesKHX>{ enum { value = true }; };
   32535   template <> struct isStructureChainValid<DeviceCreateInfo, PhysicalDeviceMultiviewFeaturesKHX>{ enum { value = true }; };
   32536   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceMultiviewPropertiesKHX>{ enum { value = true }; };
   32537   template <> struct isStructureChainValid<RenderPassCreateInfo, RenderPassMultiviewCreateInfoKHX>{ enum { value = true }; };
   32538   template <> struct isStructureChainValid<BindBufferMemoryInfoKHR, BindBufferMemoryDeviceGroupInfoKHX>{ enum { value = true }; };
   32539   template <> struct isStructureChainValid<BindImageMemoryInfoKHR, BindImageMemoryDeviceGroupInfoKHX>{ enum { value = true }; };
   32540   template <> struct isStructureChainValid<RenderPassBeginInfo, DeviceGroupRenderPassBeginInfoKHX>{ enum { value = true }; };
   32541   template <> struct isStructureChainValid<CommandBufferBeginInfo, DeviceGroupCommandBufferBeginInfoKHX>{ enum { value = true }; };
   32542   template <> struct isStructureChainValid<SubmitInfo, DeviceGroupSubmitInfoKHX>{ enum { value = true }; };
   32543   template <> struct isStructureChainValid<BindSparseInfo, DeviceGroupBindSparseInfoKHX>{ enum { value = true }; };
   32544   template <> struct isStructureChainValid<ImageCreateInfo, ImageSwapchainCreateInfoKHX>{ enum { value = true }; };
   32545   template <> struct isStructureChainValid<BindImageMemoryInfoKHR, BindImageMemorySwapchainInfoKHX>{ enum { value = true }; };
   32546   template <> struct isStructureChainValid<PresentInfoKHR, PresentTimesInfoGOOGLE>{ enum { value = true }; };
   32547   template <> struct isStructureChainValid<PipelineViewportStateCreateInfo, PipelineViewportWScalingStateCreateInfoNV>{ enum { value = true }; };
   32548   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceDiscardRectanglePropertiesEXT>{ enum { value = true }; };
   32549   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>{ enum { value = true }; };
   32550   template <> struct isStructureChainValid<PhysicalDeviceFeatures2KHR, PhysicalDevice16BitStorageFeaturesKHR>{ enum { value = true }; };
   32551   template <> struct isStructureChainValid<DeviceCreateInfo, PhysicalDevice16BitStorageFeaturesKHR>{ enum { value = true }; };
   32552   template <> struct isStructureChainValid<MemoryRequirements2KHR, MemoryDedicatedRequirementsKHR>{ enum { value = true }; };
   32553   template <> struct isStructureChainValid<MemoryAllocateInfo, MemoryDedicatedAllocateInfoKHR>{ enum { value = true }; };
   32554   template <> struct isStructureChainValid<SamplerCreateInfo, SamplerYcbcrConversionInfoKHR>{ enum { value = true }; };
   32555   template <> struct isStructureChainValid<ImageViewCreateInfo, SamplerYcbcrConversionInfoKHR>{ enum { value = true }; };
   32556   template <> struct isStructureChainValid<PhysicalDeviceFeatures2KHR, PhysicalDeviceSamplerYcbcrConversionFeaturesKHR>{ enum { value = true }; };
   32557   template <> struct isStructureChainValid<DeviceCreateInfo, PhysicalDeviceSamplerYcbcrConversionFeaturesKHR>{ enum { value = true }; };
   32558   template <> struct isStructureChainValid<ImageFormatProperties2KHR, SamplerYcbcrConversionImageFormatPropertiesKHR>{ enum { value = true }; };
   32559   template <> struct isStructureChainValid<ImageFormatProperties2KHR, TextureLODGatherFormatPropertiesAMD>{ enum { value = true }; };
   32560   template <> struct isStructureChainValid<PipelineMultisampleStateCreateInfo, PipelineCoverageToColorStateCreateInfoNV>{ enum { value = true }; };
   32561   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceSamplerFilterMinmaxPropertiesEXT>{ enum { value = true }; };
   32562   template <> struct isStructureChainValid<PhysicalDeviceFeatures2KHR, PhysicalDeviceBlendOperationAdvancedFeaturesEXT>{ enum { value = true }; };
   32563   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceBlendOperationAdvancedPropertiesEXT>{ enum { value = true }; };
   32564   template <> struct isStructureChainValid<ImageCreateInfo, ImageFormatListCreateInfoKHR>{ enum { value = true }; };
   32565   template <> struct isStructureChainValid<ShaderModuleCreateInfo, ShaderModuleValidationCacheCreateInfoEXT>{ enum { value = true }; };
   32566   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceExternalMemoryHostPropertiesEXT>{ enum { value = true }; };
   32567   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceConservativeRasterizationPropertiesEXT>{ enum { value = true }; };
   32568   template <> struct isStructureChainValid<SurfaceCapabilities2KHR, SharedPresentSurfaceCapabilitiesKHR>{ enum { value = true }; };
   32569   template <> struct isStructureChainValid<ImageViewCreateInfo, ImageViewUsageCreateInfoKHR>{ enum { value = true }; };
   32570   template <> struct isStructureChainValid<RenderPassCreateInfo, RenderPassInputAttachmentAspectCreateInfoKHR>{ enum { value = true }; };
   32571   template <> struct isStructureChainValid<BindImageMemoryInfoKHR, BindImagePlaneMemoryInfoKHR>{ enum { value = true }; };
   32572   template <> struct isStructureChainValid<ImageMemoryRequirementsInfo2KHR, ImagePlaneMemoryRequirementsInfoKHR>{ enum { value = true }; };
   32573   template <> struct isStructureChainValid<ImageMemoryBarrier, SampleLocationsInfoEXT>{ enum { value = true }; };
   32574   template <> struct isStructureChainValid<RenderPassBeginInfo, RenderPassSampleLocationsBeginInfoEXT>{ enum { value = true }; };
   32575   template <> struct isStructureChainValid<PipelineMultisampleStateCreateInfo, PipelineSampleLocationsStateCreateInfoEXT>{ enum { value = true }; };
   32576   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDeviceSampleLocationsPropertiesEXT>{ enum { value = true }; };
   32577   template <> struct isStructureChainValid<InstanceCreateInfo, DebugReportCallbackCreateInfoEXT>{ enum { value = true }; };
   32578   template <> struct isStructureChainValid<PipelineRasterizationStateCreateInfo, PipelineRasterizationStateRasterizationOrderAMD>{ enum { value = true }; };
   32579   template <> struct isStructureChainValid<ImageCreateInfo, ExternalMemoryImageCreateInfoNV>{ enum { value = true }; };
   32580   template <> struct isStructureChainValid<MemoryAllocateInfo, ExportMemoryAllocateInfoNV>{ enum { value = true }; };
   32581 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32582   template <> struct isStructureChainValid<MemoryAllocateInfo, ImportMemoryWin32HandleInfoNV>{ enum { value = true }; };
   32583 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32584   template <> struct isStructureChainValid<InstanceCreateInfo, ValidationFlagsEXT>{ enum { value = true }; };
   32585   template <> struct isStructureChainValid<PhysicalDeviceImageFormatInfo2KHR, PhysicalDeviceExternalImageFormatInfoKHR>{ enum { value = true }; };
   32586   template <> struct isStructureChainValid<ImageCreateInfo, ExternalMemoryImageCreateInfoKHR>{ enum { value = true }; };
   32587   template <> struct isStructureChainValid<BufferCreateInfo, ExternalMemoryBufferCreateInfoKHR>{ enum { value = true }; };
   32588   template <> struct isStructureChainValid<MemoryAllocateInfo, ExportMemoryAllocateInfoKHR>{ enum { value = true }; };
   32589 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32590   template <> struct isStructureChainValid<MemoryAllocateInfo, ImportMemoryWin32HandleInfoKHR>{ enum { value = true }; };
   32591 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32592   template <> struct isStructureChainValid<MemoryAllocateInfo, ImportMemoryFdInfoKHR>{ enum { value = true }; };
   32593   template <> struct isStructureChainValid<MemoryAllocateInfo, ImportMemoryHostPointerInfoEXT>{ enum { value = true }; };
   32594   template <> struct isStructureChainValid<ImageFormatProperties2KHR, ExternalImageFormatPropertiesKHR>{ enum { value = true }; };
   32595   template <> struct isStructureChainValid<SemaphoreCreateInfo, ExportSemaphoreCreateInfoKHR>{ enum { value = true }; };
   32596   template <> struct isStructureChainValid<FenceCreateInfo, ExportFenceCreateInfoKHR>{ enum { value = true }; };
   32597   template <> struct isStructureChainValid<SwapchainCreateInfoKHR, SwapchainCounterCreateInfoEXT>{ enum { value = true }; };
   32598   template <> struct isStructureChainValid<MemoryAllocateInfo, MemoryAllocateFlagsInfoKHX>{ enum { value = true }; };
   32599   template <> struct isStructureChainValid<PresentInfoKHR, DeviceGroupPresentInfoKHX>{ enum { value = true }; };
   32600   template <> struct isStructureChainValid<SwapchainCreateInfoKHR, DeviceGroupSwapchainCreateInfoKHX>{ enum { value = true }; };
   32601   template <> struct isStructureChainValid<PipelineViewportStateCreateInfo, PipelineViewportSwizzleStateCreateInfoNV>{ enum { value = true }; };
   32602   template <> struct isStructureChainValid<GraphicsPipelineCreateInfo, PipelineDiscardRectangleStateCreateInfoEXT>{ enum { value = true }; };
   32603   template <> struct isStructureChainValid<PhysicalDeviceProperties2KHR, PhysicalDevicePointClippingPropertiesKHR>{ enum { value = true }; };
   32604   template <> struct isStructureChainValid<SamplerCreateInfo, SamplerReductionModeCreateInfoEXT>{ enum { value = true }; };
   32605   template <> struct isStructureChainValid<PipelineTessellationStateCreateInfo, PipelineTessellationDomainOriginStateCreateInfoKHR>{ enum { value = true }; };
   32606   template <> struct isStructureChainValid<PipelineColorBlendStateCreateInfo, PipelineColorBlendAdvancedStateCreateInfoEXT>{ enum { value = true }; };
   32607   template <> struct isStructureChainValid<PipelineMultisampleStateCreateInfo, PipelineCoverageModulationStateCreateInfoNV>{ enum { value = true }; };
   32608   template <> struct isStructureChainValid<DeviceQueueCreateInfo, DeviceQueueGlobalPriorityCreateInfoEXT>{ enum { value = true }; };
   32609   template <> struct isStructureChainValid<PipelineRasterizationStateCreateInfo, PipelineRasterizationConservativeStateCreateInfoEXT>{ enum { value = true }; };
   32610   template <> struct isStructureChainValid<DeviceCreateInfo, DeviceGroupDeviceCreateInfoKHX>{ enum { value = true }; };
   32611   VULKAN_HPP_INLINE std::string to_string(FramebufferCreateFlagBits)
   32612   {
   32613     return "(void)";
   32614   }
   32615 
   32616   VULKAN_HPP_INLINE std::string to_string(FramebufferCreateFlags)
   32617   {
   32618     return "{}";
   32619   }
   32620 
   32621   VULKAN_HPP_INLINE std::string to_string(QueryPoolCreateFlagBits)
   32622   {
   32623     return "(void)";
   32624   }
   32625 
   32626   VULKAN_HPP_INLINE std::string to_string(QueryPoolCreateFlags)
   32627   {
   32628     return "{}";
   32629   }
   32630 
   32631   VULKAN_HPP_INLINE std::string to_string(RenderPassCreateFlagBits)
   32632   {
   32633     return "(void)";
   32634   }
   32635 
   32636   VULKAN_HPP_INLINE std::string to_string(RenderPassCreateFlags)
   32637   {
   32638     return "{}";
   32639   }
   32640 
   32641   VULKAN_HPP_INLINE std::string to_string(SamplerCreateFlagBits)
   32642   {
   32643     return "(void)";
   32644   }
   32645 
   32646   VULKAN_HPP_INLINE std::string to_string(SamplerCreateFlags)
   32647   {
   32648     return "{}";
   32649   }
   32650 
   32651   VULKAN_HPP_INLINE std::string to_string(PipelineLayoutCreateFlagBits)
   32652   {
   32653     return "(void)";
   32654   }
   32655 
   32656   VULKAN_HPP_INLINE std::string to_string(PipelineLayoutCreateFlags)
   32657   {
   32658     return "{}";
   32659   }
   32660 
   32661   VULKAN_HPP_INLINE std::string to_string(PipelineCacheCreateFlagBits)
   32662   {
   32663     return "(void)";
   32664   }
   32665 
   32666   VULKAN_HPP_INLINE std::string to_string(PipelineCacheCreateFlags)
   32667   {
   32668     return "{}";
   32669   }
   32670 
   32671   VULKAN_HPP_INLINE std::string to_string(PipelineDepthStencilStateCreateFlagBits)
   32672   {
   32673     return "(void)";
   32674   }
   32675 
   32676   VULKAN_HPP_INLINE std::string to_string(PipelineDepthStencilStateCreateFlags)
   32677   {
   32678     return "{}";
   32679   }
   32680 
   32681   VULKAN_HPP_INLINE std::string to_string(PipelineDynamicStateCreateFlagBits)
   32682   {
   32683     return "(void)";
   32684   }
   32685 
   32686   VULKAN_HPP_INLINE std::string to_string(PipelineDynamicStateCreateFlags)
   32687   {
   32688     return "{}";
   32689   }
   32690 
   32691   VULKAN_HPP_INLINE std::string to_string(PipelineColorBlendStateCreateFlagBits)
   32692   {
   32693     return "(void)";
   32694   }
   32695 
   32696   VULKAN_HPP_INLINE std::string to_string(PipelineColorBlendStateCreateFlags)
   32697   {
   32698     return "{}";
   32699   }
   32700 
   32701   VULKAN_HPP_INLINE std::string to_string(PipelineMultisampleStateCreateFlagBits)
   32702   {
   32703     return "(void)";
   32704   }
   32705 
   32706   VULKAN_HPP_INLINE std::string to_string(PipelineMultisampleStateCreateFlags)
   32707   {
   32708     return "{}";
   32709   }
   32710 
   32711   VULKAN_HPP_INLINE std::string to_string(PipelineRasterizationStateCreateFlagBits)
   32712   {
   32713     return "(void)";
   32714   }
   32715 
   32716   VULKAN_HPP_INLINE std::string to_string(PipelineRasterizationStateCreateFlags)
   32717   {
   32718     return "{}";
   32719   }
   32720 
   32721   VULKAN_HPP_INLINE std::string to_string(PipelineViewportStateCreateFlagBits)
   32722   {
   32723     return "(void)";
   32724   }
   32725 
   32726   VULKAN_HPP_INLINE std::string to_string(PipelineViewportStateCreateFlags)
   32727   {
   32728     return "{}";
   32729   }
   32730 
   32731   VULKAN_HPP_INLINE std::string to_string(PipelineTessellationStateCreateFlagBits)
   32732   {
   32733     return "(void)";
   32734   }
   32735 
   32736   VULKAN_HPP_INLINE std::string to_string(PipelineTessellationStateCreateFlags)
   32737   {
   32738     return "{}";
   32739   }
   32740 
   32741   VULKAN_HPP_INLINE std::string to_string(PipelineInputAssemblyStateCreateFlagBits)
   32742   {
   32743     return "(void)";
   32744   }
   32745 
   32746   VULKAN_HPP_INLINE std::string to_string(PipelineInputAssemblyStateCreateFlags)
   32747   {
   32748     return "{}";
   32749   }
   32750 
   32751   VULKAN_HPP_INLINE std::string to_string(PipelineVertexInputStateCreateFlagBits)
   32752   {
   32753     return "(void)";
   32754   }
   32755 
   32756   VULKAN_HPP_INLINE std::string to_string(PipelineVertexInputStateCreateFlags)
   32757   {
   32758     return "{}";
   32759   }
   32760 
   32761   VULKAN_HPP_INLINE std::string to_string(PipelineShaderStageCreateFlagBits)
   32762   {
   32763     return "(void)";
   32764   }
   32765 
   32766   VULKAN_HPP_INLINE std::string to_string(PipelineShaderStageCreateFlags)
   32767   {
   32768     return "{}";
   32769   }
   32770 
   32771   VULKAN_HPP_INLINE std::string to_string(BufferViewCreateFlagBits)
   32772   {
   32773     return "(void)";
   32774   }
   32775 
   32776   VULKAN_HPP_INLINE std::string to_string(BufferViewCreateFlags)
   32777   {
   32778     return "{}";
   32779   }
   32780 
   32781   VULKAN_HPP_INLINE std::string to_string(InstanceCreateFlagBits)
   32782   {
   32783     return "(void)";
   32784   }
   32785 
   32786   VULKAN_HPP_INLINE std::string to_string(InstanceCreateFlags)
   32787   {
   32788     return "{}";
   32789   }
   32790 
   32791   VULKAN_HPP_INLINE std::string to_string(DeviceCreateFlagBits)
   32792   {
   32793     return "(void)";
   32794   }
   32795 
   32796   VULKAN_HPP_INLINE std::string to_string(DeviceCreateFlags)
   32797   {
   32798     return "{}";
   32799   }
   32800 
   32801   VULKAN_HPP_INLINE std::string to_string(DeviceQueueCreateFlagBits)
   32802   {
   32803     return "(void)";
   32804   }
   32805 
   32806   VULKAN_HPP_INLINE std::string to_string(DeviceQueueCreateFlags)
   32807   {
   32808     return "{}";
   32809   }
   32810 
   32811   VULKAN_HPP_INLINE std::string to_string(ImageViewCreateFlagBits)
   32812   {
   32813     return "(void)";
   32814   }
   32815 
   32816   VULKAN_HPP_INLINE std::string to_string(ImageViewCreateFlags)
   32817   {
   32818     return "{}";
   32819   }
   32820 
   32821   VULKAN_HPP_INLINE std::string to_string(SemaphoreCreateFlagBits)
   32822   {
   32823     return "(void)";
   32824   }
   32825 
   32826   VULKAN_HPP_INLINE std::string to_string(SemaphoreCreateFlags)
   32827   {
   32828     return "{}";
   32829   }
   32830 
   32831   VULKAN_HPP_INLINE std::string to_string(ShaderModuleCreateFlagBits)
   32832   {
   32833     return "(void)";
   32834   }
   32835 
   32836   VULKAN_HPP_INLINE std::string to_string(ShaderModuleCreateFlags)
   32837   {
   32838     return "{}";
   32839   }
   32840 
   32841   VULKAN_HPP_INLINE std::string to_string(EventCreateFlagBits)
   32842   {
   32843     return "(void)";
   32844   }
   32845 
   32846   VULKAN_HPP_INLINE std::string to_string(EventCreateFlags)
   32847   {
   32848     return "{}";
   32849   }
   32850 
   32851   VULKAN_HPP_INLINE std::string to_string(MemoryMapFlagBits)
   32852   {
   32853     return "(void)";
   32854   }
   32855 
   32856   VULKAN_HPP_INLINE std::string to_string(MemoryMapFlags)
   32857   {
   32858     return "{}";
   32859   }
   32860 
   32861   VULKAN_HPP_INLINE std::string to_string(DescriptorPoolResetFlagBits)
   32862   {
   32863     return "(void)";
   32864   }
   32865 
   32866   VULKAN_HPP_INLINE std::string to_string(DescriptorPoolResetFlags)
   32867   {
   32868     return "{}";
   32869   }
   32870 
   32871   VULKAN_HPP_INLINE std::string to_string(DescriptorUpdateTemplateCreateFlagBitsKHR)
   32872   {
   32873     return "(void)";
   32874   }
   32875 
   32876   VULKAN_HPP_INLINE std::string to_string(DescriptorUpdateTemplateCreateFlagsKHR)
   32877   {
   32878     return "{}";
   32879   }
   32880 
   32881   VULKAN_HPP_INLINE std::string to_string(DisplayModeCreateFlagBitsKHR)
   32882   {
   32883     return "(void)";
   32884   }
   32885 
   32886   VULKAN_HPP_INLINE std::string to_string(DisplayModeCreateFlagsKHR)
   32887   {
   32888     return "{}";
   32889   }
   32890 
   32891   VULKAN_HPP_INLINE std::string to_string(DisplaySurfaceCreateFlagBitsKHR)
   32892   {
   32893     return "(void)";
   32894   }
   32895 
   32896   VULKAN_HPP_INLINE std::string to_string(DisplaySurfaceCreateFlagsKHR)
   32897   {
   32898     return "{}";
   32899   }
   32900 
   32901 #ifdef VK_USE_PLATFORM_ANDROID_KHR
   32902   VULKAN_HPP_INLINE std::string to_string(AndroidSurfaceCreateFlagBitsKHR)
   32903   {
   32904     return "(void)";
   32905   }
   32906 #endif /*VK_USE_PLATFORM_ANDROID_KHR*/
   32907 
   32908 #ifdef VK_USE_PLATFORM_ANDROID_KHR
   32909   VULKAN_HPP_INLINE std::string to_string(AndroidSurfaceCreateFlagsKHR)
   32910   {
   32911     return "{}";
   32912   }
   32913 #endif /*VK_USE_PLATFORM_ANDROID_KHR*/
   32914 
   32915 #ifdef VK_USE_PLATFORM_MIR_KHR
   32916   VULKAN_HPP_INLINE std::string to_string(MirSurfaceCreateFlagBitsKHR)
   32917   {
   32918     return "(void)";
   32919   }
   32920 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   32921 
   32922 #ifdef VK_USE_PLATFORM_MIR_KHR
   32923   VULKAN_HPP_INLINE std::string to_string(MirSurfaceCreateFlagsKHR)
   32924   {
   32925     return "{}";
   32926   }
   32927 #endif /*VK_USE_PLATFORM_MIR_KHR*/
   32928 
   32929 #ifdef VK_USE_PLATFORM_VI_NN
   32930   VULKAN_HPP_INLINE std::string to_string(ViSurfaceCreateFlagBitsNN)
   32931   {
   32932     return "(void)";
   32933   }
   32934 #endif /*VK_USE_PLATFORM_VI_NN*/
   32935 
   32936 #ifdef VK_USE_PLATFORM_VI_NN
   32937   VULKAN_HPP_INLINE std::string to_string(ViSurfaceCreateFlagsNN)
   32938   {
   32939     return "{}";
   32940   }
   32941 #endif /*VK_USE_PLATFORM_VI_NN*/
   32942 
   32943 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   32944   VULKAN_HPP_INLINE std::string to_string(WaylandSurfaceCreateFlagBitsKHR)
   32945   {
   32946     return "(void)";
   32947   }
   32948 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   32949 
   32950 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   32951   VULKAN_HPP_INLINE std::string to_string(WaylandSurfaceCreateFlagsKHR)
   32952   {
   32953     return "{}";
   32954   }
   32955 #endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
   32956 
   32957 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32958   VULKAN_HPP_INLINE std::string to_string(Win32SurfaceCreateFlagBitsKHR)
   32959   {
   32960     return "(void)";
   32961   }
   32962 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32963 
   32964 #ifdef VK_USE_PLATFORM_WIN32_KHR
   32965   VULKAN_HPP_INLINE std::string to_string(Win32SurfaceCreateFlagsKHR)
   32966   {
   32967     return "{}";
   32968   }
   32969 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
   32970 
   32971 #ifdef VK_USE_PLATFORM_XLIB_KHR
   32972   VULKAN_HPP_INLINE std::string to_string(XlibSurfaceCreateFlagBitsKHR)
   32973   {
   32974     return "(void)";
   32975   }
   32976 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   32977 
   32978 #ifdef VK_USE_PLATFORM_XLIB_KHR
   32979   VULKAN_HPP_INLINE std::string to_string(XlibSurfaceCreateFlagsKHR)
   32980   {
   32981     return "{}";
   32982   }
   32983 #endif /*VK_USE_PLATFORM_XLIB_KHR*/
   32984 
   32985 #ifdef VK_USE_PLATFORM_XCB_KHR
   32986   VULKAN_HPP_INLINE std::string to_string(XcbSurfaceCreateFlagBitsKHR)
   32987   {
   32988     return "(void)";
   32989   }
   32990 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   32991 
   32992 #ifdef VK_USE_PLATFORM_XCB_KHR
   32993   VULKAN_HPP_INLINE std::string to_string(XcbSurfaceCreateFlagsKHR)
   32994   {
   32995     return "{}";
   32996   }
   32997 #endif /*VK_USE_PLATFORM_XCB_KHR*/
   32998 
   32999 #ifdef VK_USE_PLATFORM_IOS_MVK
   33000   VULKAN_HPP_INLINE std::string to_string(IOSSurfaceCreateFlagBitsMVK)
   33001   {
   33002     return "(void)";
   33003   }
   33004 #endif /*VK_USE_PLATFORM_IOS_MVK*/
   33005 
   33006 #ifdef VK_USE_PLATFORM_IOS_MVK
   33007   VULKAN_HPP_INLINE std::string to_string(IOSSurfaceCreateFlagsMVK)
   33008   {
   33009     return "{}";
   33010   }
   33011 #endif /*VK_USE_PLATFORM_IOS_MVK*/
   33012 
   33013 #ifdef VK_USE_PLATFORM_MACOS_MVK
   33014   VULKAN_HPP_INLINE std::string to_string(MacOSSurfaceCreateFlagBitsMVK)
   33015   {
   33016     return "(void)";
   33017   }
   33018 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
   33019 
   33020 #ifdef VK_USE_PLATFORM_MACOS_MVK
   33021   VULKAN_HPP_INLINE std::string to_string(MacOSSurfaceCreateFlagsMVK)
   33022   {
   33023     return "{}";
   33024   }
   33025 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
   33026 
   33027   VULKAN_HPP_INLINE std::string to_string(CommandPoolTrimFlagBitsKHR)
   33028   {
   33029     return "(void)";
   33030   }
   33031 
   33032   VULKAN_HPP_INLINE std::string to_string(CommandPoolTrimFlagsKHR)
   33033   {
   33034     return "{}";
   33035   }
   33036 
   33037   VULKAN_HPP_INLINE std::string to_string(PipelineViewportSwizzleStateCreateFlagBitsNV)
   33038   {
   33039     return "(void)";
   33040   }
   33041 
   33042   VULKAN_HPP_INLINE std::string to_string(PipelineViewportSwizzleStateCreateFlagsNV)
   33043   {
   33044     return "{}";
   33045   }
   33046 
   33047   VULKAN_HPP_INLINE std::string to_string(PipelineDiscardRectangleStateCreateFlagBitsEXT)
   33048   {
   33049     return "(void)";
   33050   }
   33051 
   33052   VULKAN_HPP_INLINE std::string to_string(PipelineDiscardRectangleStateCreateFlagsEXT)
   33053   {
   33054     return "{}";
   33055   }
   33056 
   33057   VULKAN_HPP_INLINE std::string to_string(PipelineCoverageToColorStateCreateFlagBitsNV)
   33058   {
   33059     return "(void)";
   33060   }
   33061 
   33062   VULKAN_HPP_INLINE std::string to_string(PipelineCoverageToColorStateCreateFlagsNV)
   33063   {
   33064     return "{}";
   33065   }
   33066 
   33067   VULKAN_HPP_INLINE std::string to_string(PipelineCoverageModulationStateCreateFlagBitsNV)
   33068   {
   33069     return "(void)";
   33070   }
   33071 
   33072   VULKAN_HPP_INLINE std::string to_string(PipelineCoverageModulationStateCreateFlagsNV)
   33073   {
   33074     return "{}";
   33075   }
   33076 
   33077   VULKAN_HPP_INLINE std::string to_string(ValidationCacheCreateFlagBitsEXT)
   33078   {
   33079     return "(void)";
   33080   }
   33081 
   33082   VULKAN_HPP_INLINE std::string to_string(ValidationCacheCreateFlagsEXT)
   33083   {
   33084     return "{}";
   33085   }
   33086 
   33087   VULKAN_HPP_INLINE std::string to_string(PipelineRasterizationConservativeStateCreateFlagBitsEXT)
   33088   {
   33089     return "(void)";
   33090   }
   33091 
   33092   VULKAN_HPP_INLINE std::string to_string(PipelineRasterizationConservativeStateCreateFlagsEXT)
   33093   {
   33094     return "{}";
   33095   }
   33096 
   33097   VULKAN_HPP_INLINE std::string to_string(ImageLayout value)
   33098   {
   33099     switch (value)
   33100     {
   33101     case ImageLayout::eUndefined: return "Undefined";
   33102     case ImageLayout::eGeneral: return "General";
   33103     case ImageLayout::eColorAttachmentOptimal: return "ColorAttachmentOptimal";
   33104     case ImageLayout::eDepthStencilAttachmentOptimal: return "DepthStencilAttachmentOptimal";
   33105     case ImageLayout::eDepthStencilReadOnlyOptimal: return "DepthStencilReadOnlyOptimal";
   33106     case ImageLayout::eShaderReadOnlyOptimal: return "ShaderReadOnlyOptimal";
   33107     case ImageLayout::eTransferSrcOptimal: return "TransferSrcOptimal";
   33108     case ImageLayout::eTransferDstOptimal: return "TransferDstOptimal";
   33109     case ImageLayout::ePreinitialized: return "Preinitialized";
   33110     case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR";
   33111     case ImageLayout::eSharedPresentKHR: return "SharedPresentKHR";
   33112     case ImageLayout::eDepthReadOnlyStencilAttachmentOptimalKHR: return "DepthReadOnlyStencilAttachmentOptimalKHR";
   33113     case ImageLayout::eDepthAttachmentStencilReadOnlyOptimalKHR: return "DepthAttachmentStencilReadOnlyOptimalKHR";
   33114     default: return "invalid";
   33115     }
   33116   }
   33117 
   33118   VULKAN_HPP_INLINE std::string to_string(AttachmentLoadOp value)
   33119   {
   33120     switch (value)
   33121     {
   33122     case AttachmentLoadOp::eLoad: return "Load";
   33123     case AttachmentLoadOp::eClear: return "Clear";
   33124     case AttachmentLoadOp::eDontCare: return "DontCare";
   33125     default: return "invalid";
   33126     }
   33127   }
   33128 
   33129   VULKAN_HPP_INLINE std::string to_string(AttachmentStoreOp value)
   33130   {
   33131     switch (value)
   33132     {
   33133     case AttachmentStoreOp::eStore: return "Store";
   33134     case AttachmentStoreOp::eDontCare: return "DontCare";
   33135     default: return "invalid";
   33136     }
   33137   }
   33138 
   33139   VULKAN_HPP_INLINE std::string to_string(ImageType value)
   33140   {
   33141     switch (value)
   33142     {
   33143     case ImageType::e1D: return "1D";
   33144     case ImageType::e2D: return "2D";
   33145     case ImageType::e3D: return "3D";
   33146     default: return "invalid";
   33147     }
   33148   }
   33149 
   33150   VULKAN_HPP_INLINE std::string to_string(ImageTiling value)
   33151   {
   33152     switch (value)
   33153     {
   33154     case ImageTiling::eOptimal: return "Optimal";
   33155     case ImageTiling::eLinear: return "Linear";
   33156     default: return "invalid";
   33157     }
   33158   }
   33159 
   33160   VULKAN_HPP_INLINE std::string to_string(ImageViewType value)
   33161   {
   33162     switch (value)
   33163     {
   33164     case ImageViewType::e1D: return "1D";
   33165     case ImageViewType::e2D: return "2D";
   33166     case ImageViewType::e3D: return "3D";
   33167     case ImageViewType::eCube: return "Cube";
   33168     case ImageViewType::e1DArray: return "1DArray";
   33169     case ImageViewType::e2DArray: return "2DArray";
   33170     case ImageViewType::eCubeArray: return "CubeArray";
   33171     default: return "invalid";
   33172     }
   33173   }
   33174 
   33175   VULKAN_HPP_INLINE std::string to_string(CommandBufferLevel value)
   33176   {
   33177     switch (value)
   33178     {
   33179     case CommandBufferLevel::ePrimary: return "Primary";
   33180     case CommandBufferLevel::eSecondary: return "Secondary";
   33181     default: return "invalid";
   33182     }
   33183   }
   33184 
   33185   VULKAN_HPP_INLINE std::string to_string(ComponentSwizzle value)
   33186   {
   33187     switch (value)
   33188     {
   33189     case ComponentSwizzle::eIdentity: return "Identity";
   33190     case ComponentSwizzle::eZero: return "Zero";
   33191     case ComponentSwizzle::eOne: return "One";
   33192     case ComponentSwizzle::eR: return "R";
   33193     case ComponentSwizzle::eG: return "G";
   33194     case ComponentSwizzle::eB: return "B";
   33195     case ComponentSwizzle::eA: return "A";
   33196     default: return "invalid";
   33197     }
   33198   }
   33199 
   33200   VULKAN_HPP_INLINE std::string to_string(DescriptorType value)
   33201   {
   33202     switch (value)
   33203     {
   33204     case DescriptorType::eSampler: return "Sampler";
   33205     case DescriptorType::eCombinedImageSampler: return "CombinedImageSampler";
   33206     case DescriptorType::eSampledImage: return "SampledImage";
   33207     case DescriptorType::eStorageImage: return "StorageImage";
   33208     case DescriptorType::eUniformTexelBuffer: return "UniformTexelBuffer";
   33209     case DescriptorType::eStorageTexelBuffer: return "StorageTexelBuffer";
   33210     case DescriptorType::eUniformBuffer: return "UniformBuffer";
   33211     case DescriptorType::eStorageBuffer: return "StorageBuffer";
   33212     case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic";
   33213     case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic";
   33214     case DescriptorType::eInputAttachment: return "InputAttachment";
   33215     default: return "invalid";
   33216     }
   33217   }
   33218 
   33219   VULKAN_HPP_INLINE std::string to_string(QueryType value)
   33220   {
   33221     switch (value)
   33222     {
   33223     case QueryType::eOcclusion: return "Occlusion";
   33224     case QueryType::ePipelineStatistics: return "PipelineStatistics";
   33225     case QueryType::eTimestamp: return "Timestamp";
   33226     default: return "invalid";
   33227     }
   33228   }
   33229 
   33230   VULKAN_HPP_INLINE std::string to_string(BorderColor value)
   33231   {
   33232     switch (value)
   33233     {
   33234     case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack";
   33235     case BorderColor::eIntTransparentBlack: return "IntTransparentBlack";
   33236     case BorderColor::eFloatOpaqueBlack: return "FloatOpaqueBlack";
   33237     case BorderColor::eIntOpaqueBlack: return "IntOpaqueBlack";
   33238     case BorderColor::eFloatOpaqueWhite: return "FloatOpaqueWhite";
   33239     case BorderColor::eIntOpaqueWhite: return "IntOpaqueWhite";
   33240     default: return "invalid";
   33241     }
   33242   }
   33243 
   33244   VULKAN_HPP_INLINE std::string to_string(PipelineBindPoint value)
   33245   {
   33246     switch (value)
   33247     {
   33248     case PipelineBindPoint::eGraphics: return "Graphics";
   33249     case PipelineBindPoint::eCompute: return "Compute";
   33250     default: return "invalid";
   33251     }
   33252   }
   33253 
   33254   VULKAN_HPP_INLINE std::string to_string(PipelineCacheHeaderVersion value)
   33255   {
   33256     switch (value)
   33257     {
   33258     case PipelineCacheHeaderVersion::eOne: return "One";
   33259     default: return "invalid";
   33260     }
   33261   }
   33262 
   33263   VULKAN_HPP_INLINE std::string to_string(PrimitiveTopology value)
   33264   {
   33265     switch (value)
   33266     {
   33267     case PrimitiveTopology::ePointList: return "PointList";
   33268     case PrimitiveTopology::eLineList: return "LineList";
   33269     case PrimitiveTopology::eLineStrip: return "LineStrip";
   33270     case PrimitiveTopology::eTriangleList: return "TriangleList";
   33271     case PrimitiveTopology::eTriangleStrip: return "TriangleStrip";
   33272     case PrimitiveTopology::eTriangleFan: return "TriangleFan";
   33273     case PrimitiveTopology::eLineListWithAdjacency: return "LineListWithAdjacency";
   33274     case PrimitiveTopology::eLineStripWithAdjacency: return "LineStripWithAdjacency";
   33275     case PrimitiveTopology::eTriangleListWithAdjacency: return "TriangleListWithAdjacency";
   33276     case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency";
   33277     case PrimitiveTopology::ePatchList: return "PatchList";
   33278     default: return "invalid";
   33279     }
   33280   }
   33281 
   33282   VULKAN_HPP_INLINE std::string to_string(SharingMode value)
   33283   {
   33284     switch (value)
   33285     {
   33286     case SharingMode::eExclusive: return "Exclusive";
   33287     case SharingMode::eConcurrent: return "Concurrent";
   33288     default: return "invalid";
   33289     }
   33290   }
   33291 
   33292   VULKAN_HPP_INLINE std::string to_string(IndexType value)
   33293   {
   33294     switch (value)
   33295     {
   33296     case IndexType::eUint16: return "Uint16";
   33297     case IndexType::eUint32: return "Uint32";
   33298     default: return "invalid";
   33299     }
   33300   }
   33301 
   33302   VULKAN_HPP_INLINE std::string to_string(Filter value)
   33303   {
   33304     switch (value)
   33305     {
   33306     case Filter::eNearest: return "Nearest";
   33307     case Filter::eLinear: return "Linear";
   33308     case Filter::eCubicIMG: return "CubicIMG";
   33309     default: return "invalid";
   33310     }
   33311   }
   33312 
   33313   VULKAN_HPP_INLINE std::string to_string(SamplerMipmapMode value)
   33314   {
   33315     switch (value)
   33316     {
   33317     case SamplerMipmapMode::eNearest: return "Nearest";
   33318     case SamplerMipmapMode::eLinear: return "Linear";
   33319     default: return "invalid";
   33320     }
   33321   }
   33322 
   33323   VULKAN_HPP_INLINE std::string to_string(SamplerAddressMode value)
   33324   {
   33325     switch (value)
   33326     {
   33327     case SamplerAddressMode::eRepeat: return "Repeat";
   33328     case SamplerAddressMode::eMirroredRepeat: return "MirroredRepeat";
   33329     case SamplerAddressMode::eClampToEdge: return "ClampToEdge";
   33330     case SamplerAddressMode::eClampToBorder: return "ClampToBorder";
   33331     case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge";
   33332     default: return "invalid";
   33333     }
   33334   }
   33335 
   33336   VULKAN_HPP_INLINE std::string to_string(CompareOp value)
   33337   {
   33338     switch (value)
   33339     {
   33340     case CompareOp::eNever: return "Never";
   33341     case CompareOp::eLess: return "Less";
   33342     case CompareOp::eEqual: return "Equal";
   33343     case CompareOp::eLessOrEqual: return "LessOrEqual";
   33344     case CompareOp::eGreater: return "Greater";
   33345     case CompareOp::eNotEqual: return "NotEqual";
   33346     case CompareOp::eGreaterOrEqual: return "GreaterOrEqual";
   33347     case CompareOp::eAlways: return "Always";
   33348     default: return "invalid";
   33349     }
   33350   }
   33351 
   33352   VULKAN_HPP_INLINE std::string to_string(PolygonMode value)
   33353   {
   33354     switch (value)
   33355     {
   33356     case PolygonMode::eFill: return "Fill";
   33357     case PolygonMode::eLine: return "Line";
   33358     case PolygonMode::ePoint: return "Point";
   33359     case PolygonMode::eFillRectangleNV: return "FillRectangleNV";
   33360     default: return "invalid";
   33361     }
   33362   }
   33363 
   33364   VULKAN_HPP_INLINE std::string to_string(CullModeFlagBits value)
   33365   {
   33366     switch (value)
   33367     {
   33368     case CullModeFlagBits::eNone: return "None";
   33369     case CullModeFlagBits::eFront: return "Front";
   33370     case CullModeFlagBits::eBack: return "Back";
   33371     case CullModeFlagBits::eFrontAndBack: return "FrontAndBack";
   33372     default: return "invalid";
   33373     }
   33374   }
   33375 
   33376   VULKAN_HPP_INLINE std::string to_string(CullModeFlags value)
   33377   {
   33378     if (!value) return "{}";
   33379     std::string result;
   33380     if (value & CullModeFlagBits::eNone) result += "None | ";
   33381     if (value & CullModeFlagBits::eFront) result += "Front | ";
   33382     if (value & CullModeFlagBits::eBack) result += "Back | ";
   33383     if (value & CullModeFlagBits::eFrontAndBack) result += "FrontAndBack | ";
   33384     return "{" + result.substr(0, result.size() - 3) + "}";
   33385   }
   33386 
   33387   VULKAN_HPP_INLINE std::string to_string(FrontFace value)
   33388   {
   33389     switch (value)
   33390     {
   33391     case FrontFace::eCounterClockwise: return "CounterClockwise";
   33392     case FrontFace::eClockwise: return "Clockwise";
   33393     default: return "invalid";
   33394     }
   33395   }
   33396 
   33397   VULKAN_HPP_INLINE std::string to_string(BlendFactor value)
   33398   {
   33399     switch (value)
   33400     {
   33401     case BlendFactor::eZero: return "Zero";
   33402     case BlendFactor::eOne: return "One";
   33403     case BlendFactor::eSrcColor: return "SrcColor";
   33404     case BlendFactor::eOneMinusSrcColor: return "OneMinusSrcColor";
   33405     case BlendFactor::eDstColor: return "DstColor";
   33406     case BlendFactor::eOneMinusDstColor: return "OneMinusDstColor";
   33407     case BlendFactor::eSrcAlpha: return "SrcAlpha";
   33408     case BlendFactor::eOneMinusSrcAlpha: return "OneMinusSrcAlpha";
   33409     case BlendFactor::eDstAlpha: return "DstAlpha";
   33410     case BlendFactor::eOneMinusDstAlpha: return "OneMinusDstAlpha";
   33411     case BlendFactor::eConstantColor: return "ConstantColor";
   33412     case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor";
   33413     case BlendFactor::eConstantAlpha: return "ConstantAlpha";
   33414     case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha";
   33415     case BlendFactor::eSrcAlphaSaturate: return "SrcAlphaSaturate";
   33416     case BlendFactor::eSrc1Color: return "Src1Color";
   33417     case BlendFactor::eOneMinusSrc1Color: return "OneMinusSrc1Color";
   33418     case BlendFactor::eSrc1Alpha: return "Src1Alpha";
   33419     case BlendFactor::eOneMinusSrc1Alpha: return "OneMinusSrc1Alpha";
   33420     default: return "invalid";
   33421     }
   33422   }
   33423 
   33424   VULKAN_HPP_INLINE std::string to_string(BlendOp value)
   33425   {
   33426     switch (value)
   33427     {
   33428     case BlendOp::eAdd: return "Add";
   33429     case BlendOp::eSubtract: return "Subtract";
   33430     case BlendOp::eReverseSubtract: return "ReverseSubtract";
   33431     case BlendOp::eMin: return "Min";
   33432     case BlendOp::eMax: return "Max";
   33433     case BlendOp::eZeroEXT: return "ZeroEXT";
   33434     case BlendOp::eSrcEXT: return "SrcEXT";
   33435     case BlendOp::eDstEXT: return "DstEXT";
   33436     case BlendOp::eSrcOverEXT: return "SrcOverEXT";
   33437     case BlendOp::eDstOverEXT: return "DstOverEXT";
   33438     case BlendOp::eSrcInEXT: return "SrcInEXT";
   33439     case BlendOp::eDstInEXT: return "DstInEXT";
   33440     case BlendOp::eSrcOutEXT: return "SrcOutEXT";
   33441     case BlendOp::eDstOutEXT: return "DstOutEXT";
   33442     case BlendOp::eSrcAtopEXT: return "SrcAtopEXT";
   33443     case BlendOp::eDstAtopEXT: return "DstAtopEXT";
   33444     case BlendOp::eXorEXT: return "XorEXT";
   33445     case BlendOp::eMultiplyEXT: return "MultiplyEXT";
   33446     case BlendOp::eScreenEXT: return "ScreenEXT";
   33447     case BlendOp::eOverlayEXT: return "OverlayEXT";
   33448     case BlendOp::eDarkenEXT: return "DarkenEXT";
   33449     case BlendOp::eLightenEXT: return "LightenEXT";
   33450     case BlendOp::eColordodgeEXT: return "ColordodgeEXT";
   33451     case BlendOp::eColorburnEXT: return "ColorburnEXT";
   33452     case BlendOp::eHardlightEXT: return "HardlightEXT";
   33453     case BlendOp::eSoftlightEXT: return "SoftlightEXT";
   33454     case BlendOp::eDifferenceEXT: return "DifferenceEXT";
   33455     case BlendOp::eExclusionEXT: return "ExclusionEXT";
   33456     case BlendOp::eInvertEXT: return "InvertEXT";
   33457     case BlendOp::eInvertRgbEXT: return "InvertRgbEXT";
   33458     case BlendOp::eLineardodgeEXT: return "LineardodgeEXT";
   33459     case BlendOp::eLinearburnEXT: return "LinearburnEXT";
   33460     case BlendOp::eVividlightEXT: return "VividlightEXT";
   33461     case BlendOp::eLinearlightEXT: return "LinearlightEXT";
   33462     case BlendOp::ePinlightEXT: return "PinlightEXT";
   33463     case BlendOp::eHardmixEXT: return "HardmixEXT";
   33464     case BlendOp::eHslHueEXT: return "HslHueEXT";
   33465     case BlendOp::eHslSaturationEXT: return "HslSaturationEXT";
   33466     case BlendOp::eHslColorEXT: return "HslColorEXT";
   33467     case BlendOp::eHslLuminosityEXT: return "HslLuminosityEXT";
   33468     case BlendOp::ePlusEXT: return "PlusEXT";
   33469     case BlendOp::ePlusClampedEXT: return "PlusClampedEXT";
   33470     case BlendOp::ePlusClampedAlphaEXT: return "PlusClampedAlphaEXT";
   33471     case BlendOp::ePlusDarkerEXT: return "PlusDarkerEXT";
   33472     case BlendOp::eMinusEXT: return "MinusEXT";
   33473     case BlendOp::eMinusClampedEXT: return "MinusClampedEXT";
   33474     case BlendOp::eContrastEXT: return "ContrastEXT";
   33475     case BlendOp::eInvertOvgEXT: return "InvertOvgEXT";
   33476     case BlendOp::eRedEXT: return "RedEXT";
   33477     case BlendOp::eGreenEXT: return "GreenEXT";
   33478     case BlendOp::eBlueEXT: return "BlueEXT";
   33479     default: return "invalid";
   33480     }
   33481   }
   33482 
   33483   VULKAN_HPP_INLINE std::string to_string(StencilOp value)
   33484   {
   33485     switch (value)
   33486     {
   33487     case StencilOp::eKeep: return "Keep";
   33488     case StencilOp::eZero: return "Zero";
   33489     case StencilOp::eReplace: return "Replace";
   33490     case StencilOp::eIncrementAndClamp: return "IncrementAndClamp";
   33491     case StencilOp::eDecrementAndClamp: return "DecrementAndClamp";
   33492     case StencilOp::eInvert: return "Invert";
   33493     case StencilOp::eIncrementAndWrap: return "IncrementAndWrap";
   33494     case StencilOp::eDecrementAndWrap: return "DecrementAndWrap";
   33495     default: return "invalid";
   33496     }
   33497   }
   33498 
   33499   VULKAN_HPP_INLINE std::string to_string(LogicOp value)
   33500   {
   33501     switch (value)
   33502     {
   33503     case LogicOp::eClear: return "Clear";
   33504     case LogicOp::eAnd: return "And";
   33505     case LogicOp::eAndReverse: return "AndReverse";
   33506     case LogicOp::eCopy: return "Copy";
   33507     case LogicOp::eAndInverted: return "AndInverted";
   33508     case LogicOp::eNoOp: return "NoOp";
   33509     case LogicOp::eXor: return "Xor";
   33510     case LogicOp::eOr: return "Or";
   33511     case LogicOp::eNor: return "Nor";
   33512     case LogicOp::eEquivalent: return "Equivalent";
   33513     case LogicOp::eInvert: return "Invert";
   33514     case LogicOp::eOrReverse: return "OrReverse";
   33515     case LogicOp::eCopyInverted: return "CopyInverted";
   33516     case LogicOp::eOrInverted: return "OrInverted";
   33517     case LogicOp::eNand: return "Nand";
   33518     case LogicOp::eSet: return "Set";
   33519     default: return "invalid";
   33520     }
   33521   }
   33522 
   33523   VULKAN_HPP_INLINE std::string to_string(InternalAllocationType value)
   33524   {
   33525     switch (value)
   33526     {
   33527     case InternalAllocationType::eExecutable: return "Executable";
   33528     default: return "invalid";
   33529     }
   33530   }
   33531 
   33532   VULKAN_HPP_INLINE std::string to_string(SystemAllocationScope value)
   33533   {
   33534     switch (value)
   33535     {
   33536     case SystemAllocationScope::eCommand: return "Command";
   33537     case SystemAllocationScope::eObject: return "Object";
   33538     case SystemAllocationScope::eCache: return "Cache";
   33539     case SystemAllocationScope::eDevice: return "Device";
   33540     case SystemAllocationScope::eInstance: return "Instance";
   33541     default: return "invalid";
   33542     }
   33543   }
   33544 
   33545   VULKAN_HPP_INLINE std::string to_string(PhysicalDeviceType value)
   33546   {
   33547     switch (value)
   33548     {
   33549     case PhysicalDeviceType::eOther: return "Other";
   33550     case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu";
   33551     case PhysicalDeviceType::eDiscreteGpu: return "DiscreteGpu";
   33552     case PhysicalDeviceType::eVirtualGpu: return "VirtualGpu";
   33553     case PhysicalDeviceType::eCpu: return "Cpu";
   33554     default: return "invalid";
   33555     }
   33556   }
   33557 
   33558   VULKAN_HPP_INLINE std::string to_string(VertexInputRate value)
   33559   {
   33560     switch (value)
   33561     {
   33562     case VertexInputRate::eVertex: return "Vertex";
   33563     case VertexInputRate::eInstance: return "Instance";
   33564     default: return "invalid";
   33565     }
   33566   }
   33567 
   33568   VULKAN_HPP_INLINE std::string to_string(Format value)
   33569   {
   33570     switch (value)
   33571     {
   33572     case Format::eUndefined: return "Undefined";
   33573     case Format::eR4G4UnormPack8: return "R4G4UnormPack8";
   33574     case Format::eR4G4B4A4UnormPack16: return "R4G4B4A4UnormPack16";
   33575     case Format::eB4G4R4A4UnormPack16: return "B4G4R4A4UnormPack16";
   33576     case Format::eR5G6B5UnormPack16: return "R5G6B5UnormPack16";
   33577     case Format::eB5G6R5UnormPack16: return "B5G6R5UnormPack16";
   33578     case Format::eR5G5B5A1UnormPack16: return "R5G5B5A1UnormPack16";
   33579     case Format::eB5G5R5A1UnormPack16: return "B5G5R5A1UnormPack16";
   33580     case Format::eA1R5G5B5UnormPack16: return "A1R5G5B5UnormPack16";
   33581     case Format::eR8Unorm: return "R8Unorm";
   33582     case Format::eR8Snorm: return "R8Snorm";
   33583     case Format::eR8Uscaled: return "R8Uscaled";
   33584     case Format::eR8Sscaled: return "R8Sscaled";
   33585     case Format::eR8Uint: return "R8Uint";
   33586     case Format::eR8Sint: return "R8Sint";
   33587     case Format::eR8Srgb: return "R8Srgb";
   33588     case Format::eR8G8Unorm: return "R8G8Unorm";
   33589     case Format::eR8G8Snorm: return "R8G8Snorm";
   33590     case Format::eR8G8Uscaled: return "R8G8Uscaled";
   33591     case Format::eR8G8Sscaled: return "R8G8Sscaled";
   33592     case Format::eR8G8Uint: return "R8G8Uint";
   33593     case Format::eR8G8Sint: return "R8G8Sint";
   33594     case Format::eR8G8Srgb: return "R8G8Srgb";
   33595     case Format::eR8G8B8Unorm: return "R8G8B8Unorm";
   33596     case Format::eR8G8B8Snorm: return "R8G8B8Snorm";
   33597     case Format::eR8G8B8Uscaled: return "R8G8B8Uscaled";
   33598     case Format::eR8G8B8Sscaled: return "R8G8B8Sscaled";
   33599     case Format::eR8G8B8Uint: return "R8G8B8Uint";
   33600     case Format::eR8G8B8Sint: return "R8G8B8Sint";
   33601     case Format::eR8G8B8Srgb: return "R8G8B8Srgb";
   33602     case Format::eB8G8R8Unorm: return "B8G8R8Unorm";
   33603     case Format::eB8G8R8Snorm: return "B8G8R8Snorm";
   33604     case Format::eB8G8R8Uscaled: return "B8G8R8Uscaled";
   33605     case Format::eB8G8R8Sscaled: return "B8G8R8Sscaled";
   33606     case Format::eB8G8R8Uint: return "B8G8R8Uint";
   33607     case Format::eB8G8R8Sint: return "B8G8R8Sint";
   33608     case Format::eB8G8R8Srgb: return "B8G8R8Srgb";
   33609     case Format::eR8G8B8A8Unorm: return "R8G8B8A8Unorm";
   33610     case Format::eR8G8B8A8Snorm: return "R8G8B8A8Snorm";
   33611     case Format::eR8G8B8A8Uscaled: return "R8G8B8A8Uscaled";
   33612     case Format::eR8G8B8A8Sscaled: return "R8G8B8A8Sscaled";
   33613     case Format::eR8G8B8A8Uint: return "R8G8B8A8Uint";
   33614     case Format::eR8G8B8A8Sint: return "R8G8B8A8Sint";
   33615     case Format::eR8G8B8A8Srgb: return "R8G8B8A8Srgb";
   33616     case Format::eB8G8R8A8Unorm: return "B8G8R8A8Unorm";
   33617     case Format::eB8G8R8A8Snorm: return "B8G8R8A8Snorm";
   33618     case Format::eB8G8R8A8Uscaled: return "B8G8R8A8Uscaled";
   33619     case Format::eB8G8R8A8Sscaled: return "B8G8R8A8Sscaled";
   33620     case Format::eB8G8R8A8Uint: return "B8G8R8A8Uint";
   33621     case Format::eB8G8R8A8Sint: return "B8G8R8A8Sint";
   33622     case Format::eB8G8R8A8Srgb: return "B8G8R8A8Srgb";
   33623     case Format::eA8B8G8R8UnormPack32: return "A8B8G8R8UnormPack32";
   33624     case Format::eA8B8G8R8SnormPack32: return "A8B8G8R8SnormPack32";
   33625     case Format::eA8B8G8R8UscaledPack32: return "A8B8G8R8UscaledPack32";
   33626     case Format::eA8B8G8R8SscaledPack32: return "A8B8G8R8SscaledPack32";
   33627     case Format::eA8B8G8R8UintPack32: return "A8B8G8R8UintPack32";
   33628     case Format::eA8B8G8R8SintPack32: return "A8B8G8R8SintPack32";
   33629     case Format::eA8B8G8R8SrgbPack32: return "A8B8G8R8SrgbPack32";
   33630     case Format::eA2R10G10B10UnormPack32: return "A2R10G10B10UnormPack32";
   33631     case Format::eA2R10G10B10SnormPack32: return "A2R10G10B10SnormPack32";
   33632     case Format::eA2R10G10B10UscaledPack32: return "A2R10G10B10UscaledPack32";
   33633     case Format::eA2R10G10B10SscaledPack32: return "A2R10G10B10SscaledPack32";
   33634     case Format::eA2R10G10B10UintPack32: return "A2R10G10B10UintPack32";
   33635     case Format::eA2R10G10B10SintPack32: return "A2R10G10B10SintPack32";
   33636     case Format::eA2B10G10R10UnormPack32: return "A2B10G10R10UnormPack32";
   33637     case Format::eA2B10G10R10SnormPack32: return "A2B10G10R10SnormPack32";
   33638     case Format::eA2B10G10R10UscaledPack32: return "A2B10G10R10UscaledPack32";
   33639     case Format::eA2B10G10R10SscaledPack32: return "A2B10G10R10SscaledPack32";
   33640     case Format::eA2B10G10R10UintPack32: return "A2B10G10R10UintPack32";
   33641     case Format::eA2B10G10R10SintPack32: return "A2B10G10R10SintPack32";
   33642     case Format::eR16Unorm: return "R16Unorm";
   33643     case Format::eR16Snorm: return "R16Snorm";
   33644     case Format::eR16Uscaled: return "R16Uscaled";
   33645     case Format::eR16Sscaled: return "R16Sscaled";
   33646     case Format::eR16Uint: return "R16Uint";
   33647     case Format::eR16Sint: return "R16Sint";
   33648     case Format::eR16Sfloat: return "R16Sfloat";
   33649     case Format::eR16G16Unorm: return "R16G16Unorm";
   33650     case Format::eR16G16Snorm: return "R16G16Snorm";
   33651     case Format::eR16G16Uscaled: return "R16G16Uscaled";
   33652     case Format::eR16G16Sscaled: return "R16G16Sscaled";
   33653     case Format::eR16G16Uint: return "R16G16Uint";
   33654     case Format::eR16G16Sint: return "R16G16Sint";
   33655     case Format::eR16G16Sfloat: return "R16G16Sfloat";
   33656     case Format::eR16G16B16Unorm: return "R16G16B16Unorm";
   33657     case Format::eR16G16B16Snorm: return "R16G16B16Snorm";
   33658     case Format::eR16G16B16Uscaled: return "R16G16B16Uscaled";
   33659     case Format::eR16G16B16Sscaled: return "R16G16B16Sscaled";
   33660     case Format::eR16G16B16Uint: return "R16G16B16Uint";
   33661     case Format::eR16G16B16Sint: return "R16G16B16Sint";
   33662     case Format::eR16G16B16Sfloat: return "R16G16B16Sfloat";
   33663     case Format::eR16G16B16A16Unorm: return "R16G16B16A16Unorm";
   33664     case Format::eR16G16B16A16Snorm: return "R16G16B16A16Snorm";
   33665     case Format::eR16G16B16A16Uscaled: return "R16G16B16A16Uscaled";
   33666     case Format::eR16G16B16A16Sscaled: return "R16G16B16A16Sscaled";
   33667     case Format::eR16G16B16A16Uint: return "R16G16B16A16Uint";
   33668     case Format::eR16G16B16A16Sint: return "R16G16B16A16Sint";
   33669     case Format::eR16G16B16A16Sfloat: return "R16G16B16A16Sfloat";
   33670     case Format::eR32Uint: return "R32Uint";
   33671     case Format::eR32Sint: return "R32Sint";
   33672     case Format::eR32Sfloat: return "R32Sfloat";
   33673     case Format::eR32G32Uint: return "R32G32Uint";
   33674     case Format::eR32G32Sint: return "R32G32Sint";
   33675     case Format::eR32G32Sfloat: return "R32G32Sfloat";
   33676     case Format::eR32G32B32Uint: return "R32G32B32Uint";
   33677     case Format::eR32G32B32Sint: return "R32G32B32Sint";
   33678     case Format::eR32G32B32Sfloat: return "R32G32B32Sfloat";
   33679     case Format::eR32G32B32A32Uint: return "R32G32B32A32Uint";
   33680     case Format::eR32G32B32A32Sint: return "R32G32B32A32Sint";
   33681     case Format::eR32G32B32A32Sfloat: return "R32G32B32A32Sfloat";
   33682     case Format::eR64Uint: return "R64Uint";
   33683     case Format::eR64Sint: return "R64Sint";
   33684     case Format::eR64Sfloat: return "R64Sfloat";
   33685     case Format::eR64G64Uint: return "R64G64Uint";
   33686     case Format::eR64G64Sint: return "R64G64Sint";
   33687     case Format::eR64G64Sfloat: return "R64G64Sfloat";
   33688     case Format::eR64G64B64Uint: return "R64G64B64Uint";
   33689     case Format::eR64G64B64Sint: return "R64G64B64Sint";
   33690     case Format::eR64G64B64Sfloat: return "R64G64B64Sfloat";
   33691     case Format::eR64G64B64A64Uint: return "R64G64B64A64Uint";
   33692     case Format::eR64G64B64A64Sint: return "R64G64B64A64Sint";
   33693     case Format::eR64G64B64A64Sfloat: return "R64G64B64A64Sfloat";
   33694     case Format::eB10G11R11UfloatPack32: return "B10G11R11UfloatPack32";
   33695     case Format::eE5B9G9R9UfloatPack32: return "E5B9G9R9UfloatPack32";
   33696     case Format::eD16Unorm: return "D16Unorm";
   33697     case Format::eX8D24UnormPack32: return "X8D24UnormPack32";
   33698     case Format::eD32Sfloat: return "D32Sfloat";
   33699     case Format::eS8Uint: return "S8Uint";
   33700     case Format::eD16UnormS8Uint: return "D16UnormS8Uint";
   33701     case Format::eD24UnormS8Uint: return "D24UnormS8Uint";
   33702     case Format::eD32SfloatS8Uint: return "D32SfloatS8Uint";
   33703     case Format::eBc1RgbUnormBlock: return "Bc1RgbUnormBlock";
   33704     case Format::eBc1RgbSrgbBlock: return "Bc1RgbSrgbBlock";
   33705     case Format::eBc1RgbaUnormBlock: return "Bc1RgbaUnormBlock";
   33706     case Format::eBc1RgbaSrgbBlock: return "Bc1RgbaSrgbBlock";
   33707     case Format::eBc2UnormBlock: return "Bc2UnormBlock";
   33708     case Format::eBc2SrgbBlock: return "Bc2SrgbBlock";
   33709     case Format::eBc3UnormBlock: return "Bc3UnormBlock";
   33710     case Format::eBc3SrgbBlock: return "Bc3SrgbBlock";
   33711     case Format::eBc4UnormBlock: return "Bc4UnormBlock";
   33712     case Format::eBc4SnormBlock: return "Bc4SnormBlock";
   33713     case Format::eBc5UnormBlock: return "Bc5UnormBlock";
   33714     case Format::eBc5SnormBlock: return "Bc5SnormBlock";
   33715     case Format::eBc6HUfloatBlock: return "Bc6HUfloatBlock";
   33716     case Format::eBc6HSfloatBlock: return "Bc6HSfloatBlock";
   33717     case Format::eBc7UnormBlock: return "Bc7UnormBlock";
   33718     case Format::eBc7SrgbBlock: return "Bc7SrgbBlock";
   33719     case Format::eEtc2R8G8B8UnormBlock: return "Etc2R8G8B8UnormBlock";
   33720     case Format::eEtc2R8G8B8SrgbBlock: return "Etc2R8G8B8SrgbBlock";
   33721     case Format::eEtc2R8G8B8A1UnormBlock: return "Etc2R8G8B8A1UnormBlock";
   33722     case Format::eEtc2R8G8B8A1SrgbBlock: return "Etc2R8G8B8A1SrgbBlock";
   33723     case Format::eEtc2R8G8B8A8UnormBlock: return "Etc2R8G8B8A8UnormBlock";
   33724     case Format::eEtc2R8G8B8A8SrgbBlock: return "Etc2R8G8B8A8SrgbBlock";
   33725     case Format::eEacR11UnormBlock: return "EacR11UnormBlock";
   33726     case Format::eEacR11SnormBlock: return "EacR11SnormBlock";
   33727     case Format::eEacR11G11UnormBlock: return "EacR11G11UnormBlock";
   33728     case Format::eEacR11G11SnormBlock: return "EacR11G11SnormBlock";
   33729     case Format::eAstc4x4UnormBlock: return "Astc4x4UnormBlock";
   33730     case Format::eAstc4x4SrgbBlock: return "Astc4x4SrgbBlock";
   33731     case Format::eAstc5x4UnormBlock: return "Astc5x4UnormBlock";
   33732     case Format::eAstc5x4SrgbBlock: return "Astc5x4SrgbBlock";
   33733     case Format::eAstc5x5UnormBlock: return "Astc5x5UnormBlock";
   33734     case Format::eAstc5x5SrgbBlock: return "Astc5x5SrgbBlock";
   33735     case Format::eAstc6x5UnormBlock: return "Astc6x5UnormBlock";
   33736     case Format::eAstc6x5SrgbBlock: return "Astc6x5SrgbBlock";
   33737     case Format::eAstc6x6UnormBlock: return "Astc6x6UnormBlock";
   33738     case Format::eAstc6x6SrgbBlock: return "Astc6x6SrgbBlock";
   33739     case Format::eAstc8x5UnormBlock: return "Astc8x5UnormBlock";
   33740     case Format::eAstc8x5SrgbBlock: return "Astc8x5SrgbBlock";
   33741     case Format::eAstc8x6UnormBlock: return "Astc8x6UnormBlock";
   33742     case Format::eAstc8x6SrgbBlock: return "Astc8x6SrgbBlock";
   33743     case Format::eAstc8x8UnormBlock: return "Astc8x8UnormBlock";
   33744     case Format::eAstc8x8SrgbBlock: return "Astc8x8SrgbBlock";
   33745     case Format::eAstc10x5UnormBlock: return "Astc10x5UnormBlock";
   33746     case Format::eAstc10x5SrgbBlock: return "Astc10x5SrgbBlock";
   33747     case Format::eAstc10x6UnormBlock: return "Astc10x6UnormBlock";
   33748     case Format::eAstc10x6SrgbBlock: return "Astc10x6SrgbBlock";
   33749     case Format::eAstc10x8UnormBlock: return "Astc10x8UnormBlock";
   33750     case Format::eAstc10x8SrgbBlock: return "Astc10x8SrgbBlock";
   33751     case Format::eAstc10x10UnormBlock: return "Astc10x10UnormBlock";
   33752     case Format::eAstc10x10SrgbBlock: return "Astc10x10SrgbBlock";
   33753     case Format::eAstc12x10UnormBlock: return "Astc12x10UnormBlock";
   33754     case Format::eAstc12x10SrgbBlock: return "Astc12x10SrgbBlock";
   33755     case Format::eAstc12x12UnormBlock: return "Astc12x12UnormBlock";
   33756     case Format::eAstc12x12SrgbBlock: return "Astc12x12SrgbBlock";
   33757     case Format::ePvrtc12BppUnormBlockIMG: return "Pvrtc12BppUnormBlockIMG";
   33758     case Format::ePvrtc14BppUnormBlockIMG: return "Pvrtc14BppUnormBlockIMG";
   33759     case Format::ePvrtc22BppUnormBlockIMG: return "Pvrtc22BppUnormBlockIMG";
   33760     case Format::ePvrtc24BppUnormBlockIMG: return "Pvrtc24BppUnormBlockIMG";
   33761     case Format::ePvrtc12BppSrgbBlockIMG: return "Pvrtc12BppSrgbBlockIMG";
   33762     case Format::ePvrtc14BppSrgbBlockIMG: return "Pvrtc14BppSrgbBlockIMG";
   33763     case Format::ePvrtc22BppSrgbBlockIMG: return "Pvrtc22BppSrgbBlockIMG";
   33764     case Format::ePvrtc24BppSrgbBlockIMG: return "Pvrtc24BppSrgbBlockIMG";
   33765     case Format::eG8B8G8R8422UnormKHR: return "G8B8G8R8422UnormKHR";
   33766     case Format::eB8G8R8G8422UnormKHR: return "B8G8R8G8422UnormKHR";
   33767     case Format::eG8B8R83Plane420UnormKHR: return "G8B8R83Plane420UnormKHR";
   33768     case Format::eG8B8R82Plane420UnormKHR: return "G8B8R82Plane420UnormKHR";
   33769     case Format::eG8B8R83Plane422UnormKHR: return "G8B8R83Plane422UnormKHR";
   33770     case Format::eG8B8R82Plane422UnormKHR: return "G8B8R82Plane422UnormKHR";
   33771     case Format::eG8B8R83Plane444UnormKHR: return "G8B8R83Plane444UnormKHR";
   33772     case Format::eR10X6UnormPack16KHR: return "R10X6UnormPack16KHR";
   33773     case Format::eR10X6G10X6Unorm2Pack16KHR: return "R10X6G10X6Unorm2Pack16KHR";
   33774     case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16KHR: return "R10X6G10X6B10X6A10X6Unorm4Pack16KHR";
   33775     case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16KHR: return "G10X6B10X6G10X6R10X6422Unorm4Pack16KHR";
   33776     case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16KHR: return "B10X6G10X6R10X6G10X6422Unorm4Pack16KHR";
   33777     case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16KHR: return "G10X6B10X6R10X63Plane420Unorm3Pack16KHR";
   33778     case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16KHR: return "G10X6B10X6R10X62Plane420Unorm3Pack16KHR";
   33779     case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16KHR: return "G10X6B10X6R10X63Plane422Unorm3Pack16KHR";
   33780     case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16KHR: return "G10X6B10X6R10X62Plane422Unorm3Pack16KHR";
   33781     case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16KHR: return "G10X6B10X6R10X63Plane444Unorm3Pack16KHR";
   33782     case Format::eR12X4UnormPack16KHR: return "R12X4UnormPack16KHR";
   33783     case Format::eR12X4G12X4Unorm2Pack16KHR: return "R12X4G12X4Unorm2Pack16KHR";
   33784     case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16KHR: return "R12X4G12X4B12X4A12X4Unorm4Pack16KHR";
   33785     case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16KHR: return "G12X4B12X4G12X4R12X4422Unorm4Pack16KHR";
   33786     case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16KHR: return "B12X4G12X4R12X4G12X4422Unorm4Pack16KHR";
   33787     case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16KHR: return "G12X4B12X4R12X43Plane420Unorm3Pack16KHR";
   33788     case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16KHR: return "G12X4B12X4R12X42Plane420Unorm3Pack16KHR";
   33789     case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16KHR: return "G12X4B12X4R12X43Plane422Unorm3Pack16KHR";
   33790     case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16KHR: return "G12X4B12X4R12X42Plane422Unorm3Pack16KHR";
   33791     case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16KHR: return "G12X4B12X4R12X43Plane444Unorm3Pack16KHR";
   33792     case Format::eG16B16G16R16422UnormKHR: return "G16B16G16R16422UnormKHR";
   33793     case Format::eB16G16R16G16422UnormKHR: return "B16G16R16G16422UnormKHR";
   33794     case Format::eG16B16R163Plane420UnormKHR: return "G16B16R163Plane420UnormKHR";
   33795     case Format::eG16B16R162Plane420UnormKHR: return "G16B16R162Plane420UnormKHR";
   33796     case Format::eG16B16R163Plane422UnormKHR: return "G16B16R163Plane422UnormKHR";
   33797     case Format::eG16B16R162Plane422UnormKHR: return "G16B16R162Plane422UnormKHR";
   33798     case Format::eG16B16R163Plane444UnormKHR: return "G16B16R163Plane444UnormKHR";
   33799     default: return "invalid";
   33800     }
   33801   }
   33802 
   33803   VULKAN_HPP_INLINE std::string to_string(StructureType value)
   33804   {
   33805     switch (value)
   33806     {
   33807     case StructureType::eApplicationInfo: return "ApplicationInfo";
   33808     case StructureType::eInstanceCreateInfo: return "InstanceCreateInfo";
   33809     case StructureType::eDeviceQueueCreateInfo: return "DeviceQueueCreateInfo";
   33810     case StructureType::eDeviceCreateInfo: return "DeviceCreateInfo";
   33811     case StructureType::eSubmitInfo: return "SubmitInfo";
   33812     case StructureType::eMemoryAllocateInfo: return "MemoryAllocateInfo";
   33813     case StructureType::eMappedMemoryRange: return "MappedMemoryRange";
   33814     case StructureType::eBindSparseInfo: return "BindSparseInfo";
   33815     case StructureType::eFenceCreateInfo: return "FenceCreateInfo";
   33816     case StructureType::eSemaphoreCreateInfo: return "SemaphoreCreateInfo";
   33817     case StructureType::eEventCreateInfo: return "EventCreateInfo";
   33818     case StructureType::eQueryPoolCreateInfo: return "QueryPoolCreateInfo";
   33819     case StructureType::eBufferCreateInfo: return "BufferCreateInfo";
   33820     case StructureType::eBufferViewCreateInfo: return "BufferViewCreateInfo";
   33821     case StructureType::eImageCreateInfo: return "ImageCreateInfo";
   33822     case StructureType::eImageViewCreateInfo: return "ImageViewCreateInfo";
   33823     case StructureType::eShaderModuleCreateInfo: return "ShaderModuleCreateInfo";
   33824     case StructureType::ePipelineCacheCreateInfo: return "PipelineCacheCreateInfo";
   33825     case StructureType::ePipelineShaderStageCreateInfo: return "PipelineShaderStageCreateInfo";
   33826     case StructureType::ePipelineVertexInputStateCreateInfo: return "PipelineVertexInputStateCreateInfo";
   33827     case StructureType::ePipelineInputAssemblyStateCreateInfo: return "PipelineInputAssemblyStateCreateInfo";
   33828     case StructureType::ePipelineTessellationStateCreateInfo: return "PipelineTessellationStateCreateInfo";
   33829     case StructureType::ePipelineViewportStateCreateInfo: return "PipelineViewportStateCreateInfo";
   33830     case StructureType::ePipelineRasterizationStateCreateInfo: return "PipelineRasterizationStateCreateInfo";
   33831     case StructureType::ePipelineMultisampleStateCreateInfo: return "PipelineMultisampleStateCreateInfo";
   33832     case StructureType::ePipelineDepthStencilStateCreateInfo: return "PipelineDepthStencilStateCreateInfo";
   33833     case StructureType::ePipelineColorBlendStateCreateInfo: return "PipelineColorBlendStateCreateInfo";
   33834     case StructureType::ePipelineDynamicStateCreateInfo: return "PipelineDynamicStateCreateInfo";
   33835     case StructureType::eGraphicsPipelineCreateInfo: return "GraphicsPipelineCreateInfo";
   33836     case StructureType::eComputePipelineCreateInfo: return "ComputePipelineCreateInfo";
   33837     case StructureType::ePipelineLayoutCreateInfo: return "PipelineLayoutCreateInfo";
   33838     case StructureType::eSamplerCreateInfo: return "SamplerCreateInfo";
   33839     case StructureType::eDescriptorSetLayoutCreateInfo: return "DescriptorSetLayoutCreateInfo";
   33840     case StructureType::eDescriptorPoolCreateInfo: return "DescriptorPoolCreateInfo";
   33841     case StructureType::eDescriptorSetAllocateInfo: return "DescriptorSetAllocateInfo";
   33842     case StructureType::eWriteDescriptorSet: return "WriteDescriptorSet";
   33843     case StructureType::eCopyDescriptorSet: return "CopyDescriptorSet";
   33844     case StructureType::eFramebufferCreateInfo: return "FramebufferCreateInfo";
   33845     case StructureType::eRenderPassCreateInfo: return "RenderPassCreateInfo";
   33846     case StructureType::eCommandPoolCreateInfo: return "CommandPoolCreateInfo";
   33847     case StructureType::eCommandBufferAllocateInfo: return "CommandBufferAllocateInfo";
   33848     case StructureType::eCommandBufferInheritanceInfo: return "CommandBufferInheritanceInfo";
   33849     case StructureType::eCommandBufferBeginInfo: return "CommandBufferBeginInfo";
   33850     case StructureType::eRenderPassBeginInfo: return "RenderPassBeginInfo";
   33851     case StructureType::eBufferMemoryBarrier: return "BufferMemoryBarrier";
   33852     case StructureType::eImageMemoryBarrier: return "ImageMemoryBarrier";
   33853     case StructureType::eMemoryBarrier: return "MemoryBarrier";
   33854     case StructureType::eLoaderInstanceCreateInfo: return "LoaderInstanceCreateInfo";
   33855     case StructureType::eLoaderDeviceCreateInfo: return "LoaderDeviceCreateInfo";
   33856     case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR";
   33857     case StructureType::ePresentInfoKHR: return "PresentInfoKHR";
   33858     case StructureType::eDisplayModeCreateInfoKHR: return "DisplayModeCreateInfoKHR";
   33859     case StructureType::eDisplaySurfaceCreateInfoKHR: return "DisplaySurfaceCreateInfoKHR";
   33860     case StructureType::eDisplayPresentInfoKHR: return "DisplayPresentInfoKHR";
   33861     case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR";
   33862     case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR";
   33863     case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR";
   33864     case StructureType::eMirSurfaceCreateInfoKHR: return "MirSurfaceCreateInfoKHR";
   33865     case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR";
   33866     case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR";
   33867     case StructureType::eDebugReportCallbackCreateInfoEXT: return "DebugReportCallbackCreateInfoEXT";
   33868     case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD";
   33869     case StructureType::eDebugMarkerObjectNameInfoEXT: return "DebugMarkerObjectNameInfoEXT";
   33870     case StructureType::eDebugMarkerObjectTagInfoEXT: return "DebugMarkerObjectTagInfoEXT";
   33871     case StructureType::eDebugMarkerMarkerInfoEXT: return "DebugMarkerMarkerInfoEXT";
   33872     case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV";
   33873     case StructureType::eDedicatedAllocationBufferCreateInfoNV: return "DedicatedAllocationBufferCreateInfoNV";
   33874     case StructureType::eDedicatedAllocationMemoryAllocateInfoNV: return "DedicatedAllocationMemoryAllocateInfoNV";
   33875     case StructureType::eTextureLodGatherFormatPropertiesAMD: return "TextureLodGatherFormatPropertiesAMD";
   33876     case StructureType::eRenderPassMultiviewCreateInfoKHX: return "RenderPassMultiviewCreateInfoKHX";
   33877     case StructureType::ePhysicalDeviceMultiviewFeaturesKHX: return "PhysicalDeviceMultiviewFeaturesKHX";
   33878     case StructureType::ePhysicalDeviceMultiviewPropertiesKHX: return "PhysicalDeviceMultiviewPropertiesKHX";
   33879     case StructureType::eExternalMemoryImageCreateInfoNV: return "ExternalMemoryImageCreateInfoNV";
   33880     case StructureType::eExportMemoryAllocateInfoNV: return "ExportMemoryAllocateInfoNV";
   33881     case StructureType::eImportMemoryWin32HandleInfoNV: return "ImportMemoryWin32HandleInfoNV";
   33882     case StructureType::eExportMemoryWin32HandleInfoNV: return "ExportMemoryWin32HandleInfoNV";
   33883     case StructureType::eWin32KeyedMutexAcquireReleaseInfoNV: return "Win32KeyedMutexAcquireReleaseInfoNV";
   33884     case StructureType::ePhysicalDeviceFeatures2KHR: return "PhysicalDeviceFeatures2KHR";
   33885     case StructureType::ePhysicalDeviceProperties2KHR: return "PhysicalDeviceProperties2KHR";
   33886     case StructureType::eFormatProperties2KHR: return "FormatProperties2KHR";
   33887     case StructureType::eImageFormatProperties2KHR: return "ImageFormatProperties2KHR";
   33888     case StructureType::ePhysicalDeviceImageFormatInfo2KHR: return "PhysicalDeviceImageFormatInfo2KHR";
   33889     case StructureType::eQueueFamilyProperties2KHR: return "QueueFamilyProperties2KHR";
   33890     case StructureType::ePhysicalDeviceMemoryProperties2KHR: return "PhysicalDeviceMemoryProperties2KHR";
   33891     case StructureType::eSparseImageFormatProperties2KHR: return "SparseImageFormatProperties2KHR";
   33892     case StructureType::ePhysicalDeviceSparseImageFormatInfo2KHR: return "PhysicalDeviceSparseImageFormatInfo2KHR";
   33893     case StructureType::eMemoryAllocateFlagsInfoKHX: return "MemoryAllocateFlagsInfoKHX";
   33894     case StructureType::eDeviceGroupRenderPassBeginInfoKHX: return "DeviceGroupRenderPassBeginInfoKHX";
   33895     case StructureType::eDeviceGroupCommandBufferBeginInfoKHX: return "DeviceGroupCommandBufferBeginInfoKHX";
   33896     case StructureType::eDeviceGroupSubmitInfoKHX: return "DeviceGroupSubmitInfoKHX";
   33897     case StructureType::eDeviceGroupBindSparseInfoKHX: return "DeviceGroupBindSparseInfoKHX";
   33898     case StructureType::eAcquireNextImageInfoKHX: return "AcquireNextImageInfoKHX";
   33899     case StructureType::eBindBufferMemoryDeviceGroupInfoKHX: return "BindBufferMemoryDeviceGroupInfoKHX";
   33900     case StructureType::eBindImageMemoryDeviceGroupInfoKHX: return "BindImageMemoryDeviceGroupInfoKHX";
   33901     case StructureType::eDeviceGroupPresentCapabilitiesKHX: return "DeviceGroupPresentCapabilitiesKHX";
   33902     case StructureType::eImageSwapchainCreateInfoKHX: return "ImageSwapchainCreateInfoKHX";
   33903     case StructureType::eBindImageMemorySwapchainInfoKHX: return "BindImageMemorySwapchainInfoKHX";
   33904     case StructureType::eDeviceGroupPresentInfoKHX: return "DeviceGroupPresentInfoKHX";
   33905     case StructureType::eDeviceGroupSwapchainCreateInfoKHX: return "DeviceGroupSwapchainCreateInfoKHX";
   33906     case StructureType::eValidationFlagsEXT: return "ValidationFlagsEXT";
   33907     case StructureType::eViSurfaceCreateInfoNN: return "ViSurfaceCreateInfoNN";
   33908     case StructureType::ePhysicalDeviceGroupPropertiesKHX: return "PhysicalDeviceGroupPropertiesKHX";
   33909     case StructureType::eDeviceGroupDeviceCreateInfoKHX: return "DeviceGroupDeviceCreateInfoKHX";
   33910     case StructureType::ePhysicalDeviceExternalImageFormatInfoKHR: return "PhysicalDeviceExternalImageFormatInfoKHR";
   33911     case StructureType::eExternalImageFormatPropertiesKHR: return "ExternalImageFormatPropertiesKHR";
   33912     case StructureType::ePhysicalDeviceExternalBufferInfoKHR: return "PhysicalDeviceExternalBufferInfoKHR";
   33913     case StructureType::eExternalBufferPropertiesKHR: return "ExternalBufferPropertiesKHR";
   33914     case StructureType::ePhysicalDeviceIdPropertiesKHR: return "PhysicalDeviceIdPropertiesKHR";
   33915     case StructureType::eExternalMemoryBufferCreateInfoKHR: return "ExternalMemoryBufferCreateInfoKHR";
   33916     case StructureType::eExternalMemoryImageCreateInfoKHR: return "ExternalMemoryImageCreateInfoKHR";
   33917     case StructureType::eExportMemoryAllocateInfoKHR: return "ExportMemoryAllocateInfoKHR";
   33918     case StructureType::eImportMemoryWin32HandleInfoKHR: return "ImportMemoryWin32HandleInfoKHR";
   33919     case StructureType::eExportMemoryWin32HandleInfoKHR: return "ExportMemoryWin32HandleInfoKHR";
   33920     case StructureType::eMemoryWin32HandlePropertiesKHR: return "MemoryWin32HandlePropertiesKHR";
   33921     case StructureType::eMemoryGetWin32HandleInfoKHR: return "MemoryGetWin32HandleInfoKHR";
   33922     case StructureType::eImportMemoryFdInfoKHR: return "ImportMemoryFdInfoKHR";
   33923     case StructureType::eMemoryFdPropertiesKHR: return "MemoryFdPropertiesKHR";
   33924     case StructureType::eMemoryGetFdInfoKHR: return "MemoryGetFdInfoKHR";
   33925     case StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR: return "Win32KeyedMutexAcquireReleaseInfoKHR";
   33926     case StructureType::ePhysicalDeviceExternalSemaphoreInfoKHR: return "PhysicalDeviceExternalSemaphoreInfoKHR";
   33927     case StructureType::eExternalSemaphorePropertiesKHR: return "ExternalSemaphorePropertiesKHR";
   33928     case StructureType::eExportSemaphoreCreateInfoKHR: return "ExportSemaphoreCreateInfoKHR";
   33929     case StructureType::eImportSemaphoreWin32HandleInfoKHR: return "ImportSemaphoreWin32HandleInfoKHR";
   33930     case StructureType::eExportSemaphoreWin32HandleInfoKHR: return "ExportSemaphoreWin32HandleInfoKHR";
   33931     case StructureType::eD3D12FenceSubmitInfoKHR: return "D3D12FenceSubmitInfoKHR";
   33932     case StructureType::eSemaphoreGetWin32HandleInfoKHR: return "SemaphoreGetWin32HandleInfoKHR";
   33933     case StructureType::eImportSemaphoreFdInfoKHR: return "ImportSemaphoreFdInfoKHR";
   33934     case StructureType::eSemaphoreGetFdInfoKHR: return "SemaphoreGetFdInfoKHR";
   33935     case StructureType::ePhysicalDevicePushDescriptorPropertiesKHR: return "PhysicalDevicePushDescriptorPropertiesKHR";
   33936     case StructureType::ePhysicalDevice16BitStorageFeaturesKHR: return "PhysicalDevice16BitStorageFeaturesKHR";
   33937     case StructureType::ePresentRegionsKHR: return "PresentRegionsKHR";
   33938     case StructureType::eDescriptorUpdateTemplateCreateInfoKHR: return "DescriptorUpdateTemplateCreateInfoKHR";
   33939     case StructureType::eObjectTableCreateInfoNVX: return "ObjectTableCreateInfoNVX";
   33940     case StructureType::eIndirectCommandsLayoutCreateInfoNVX: return "IndirectCommandsLayoutCreateInfoNVX";
   33941     case StructureType::eCmdProcessCommandsInfoNVX: return "CmdProcessCommandsInfoNVX";
   33942     case StructureType::eCmdReserveSpaceForCommandsInfoNVX: return "CmdReserveSpaceForCommandsInfoNVX";
   33943     case StructureType::eDeviceGeneratedCommandsLimitsNVX: return "DeviceGeneratedCommandsLimitsNVX";
   33944     case StructureType::eDeviceGeneratedCommandsFeaturesNVX: return "DeviceGeneratedCommandsFeaturesNVX";
   33945     case StructureType::ePipelineViewportWScalingStateCreateInfoNV: return "PipelineViewportWScalingStateCreateInfoNV";
   33946     case StructureType::eSurfaceCapabilities2EXT: return "SurfaceCapabilities2EXT";
   33947     case StructureType::eDisplayPowerInfoEXT: return "DisplayPowerInfoEXT";
   33948     case StructureType::eDeviceEventInfoEXT: return "DeviceEventInfoEXT";
   33949     case StructureType::eDisplayEventInfoEXT: return "DisplayEventInfoEXT";
   33950     case StructureType::eSwapchainCounterCreateInfoEXT: return "SwapchainCounterCreateInfoEXT";
   33951     case StructureType::ePresentTimesInfoGOOGLE: return "PresentTimesInfoGOOGLE";
   33952     case StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX: return "PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX";
   33953     case StructureType::ePipelineViewportSwizzleStateCreateInfoNV: return "PipelineViewportSwizzleStateCreateInfoNV";
   33954     case StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT: return "PhysicalDeviceDiscardRectanglePropertiesEXT";
   33955     case StructureType::ePipelineDiscardRectangleStateCreateInfoEXT: return "PipelineDiscardRectangleStateCreateInfoEXT";
   33956     case StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT: return "PhysicalDeviceConservativeRasterizationPropertiesEXT";
   33957     case StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT: return "PipelineRasterizationConservativeStateCreateInfoEXT";
   33958     case StructureType::eHdrMetadataEXT: return "HdrMetadataEXT";
   33959     case StructureType::eSharedPresentSurfaceCapabilitiesKHR: return "SharedPresentSurfaceCapabilitiesKHR";
   33960     case StructureType::ePhysicalDeviceExternalFenceInfoKHR: return "PhysicalDeviceExternalFenceInfoKHR";
   33961     case StructureType::eExternalFencePropertiesKHR: return "ExternalFencePropertiesKHR";
   33962     case StructureType::eExportFenceCreateInfoKHR: return "ExportFenceCreateInfoKHR";
   33963     case StructureType::eImportFenceWin32HandleInfoKHR: return "ImportFenceWin32HandleInfoKHR";
   33964     case StructureType::eExportFenceWin32HandleInfoKHR: return "ExportFenceWin32HandleInfoKHR";
   33965     case StructureType::eFenceGetWin32HandleInfoKHR: return "FenceGetWin32HandleInfoKHR";
   33966     case StructureType::eImportFenceFdInfoKHR: return "ImportFenceFdInfoKHR";
   33967     case StructureType::eFenceGetFdInfoKHR: return "FenceGetFdInfoKHR";
   33968     case StructureType::ePhysicalDevicePointClippingPropertiesKHR: return "PhysicalDevicePointClippingPropertiesKHR";
   33969     case StructureType::eRenderPassInputAttachmentAspectCreateInfoKHR: return "RenderPassInputAttachmentAspectCreateInfoKHR";
   33970     case StructureType::eImageViewUsageCreateInfoKHR: return "ImageViewUsageCreateInfoKHR";
   33971     case StructureType::ePipelineTessellationDomainOriginStateCreateInfoKHR: return "PipelineTessellationDomainOriginStateCreateInfoKHR";
   33972     case StructureType::ePhysicalDeviceSurfaceInfo2KHR: return "PhysicalDeviceSurfaceInfo2KHR";
   33973     case StructureType::eSurfaceCapabilities2KHR: return "SurfaceCapabilities2KHR";
   33974     case StructureType::eSurfaceFormat2KHR: return "SurfaceFormat2KHR";
   33975     case StructureType::ePhysicalDeviceVariablePointerFeaturesKHR: return "PhysicalDeviceVariablePointerFeaturesKHR";
   33976     case StructureType::eIosSurfaceCreateInfoMVK: return "IosSurfaceCreateInfoMVK";
   33977     case StructureType::eMacosSurfaceCreateInfoMVK: return "MacosSurfaceCreateInfoMVK";
   33978     case StructureType::eMemoryDedicatedRequirementsKHR: return "MemoryDedicatedRequirementsKHR";
   33979     case StructureType::eMemoryDedicatedAllocateInfoKHR: return "MemoryDedicatedAllocateInfoKHR";
   33980     case StructureType::ePhysicalDeviceSamplerFilterMinmaxPropertiesEXT: return "PhysicalDeviceSamplerFilterMinmaxPropertiesEXT";
   33981     case StructureType::eSamplerReductionModeCreateInfoEXT: return "SamplerReductionModeCreateInfoEXT";
   33982     case StructureType::eSampleLocationsInfoEXT: return "SampleLocationsInfoEXT";
   33983     case StructureType::eRenderPassSampleLocationsBeginInfoEXT: return "RenderPassSampleLocationsBeginInfoEXT";
   33984     case StructureType::ePipelineSampleLocationsStateCreateInfoEXT: return "PipelineSampleLocationsStateCreateInfoEXT";
   33985     case StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT: return "PhysicalDeviceSampleLocationsPropertiesEXT";
   33986     case StructureType::eMultisamplePropertiesEXT: return "MultisamplePropertiesEXT";
   33987     case StructureType::eBufferMemoryRequirementsInfo2KHR: return "BufferMemoryRequirementsInfo2KHR";
   33988     case StructureType::eImageMemoryRequirementsInfo2KHR: return "ImageMemoryRequirementsInfo2KHR";
   33989     case StructureType::eImageSparseMemoryRequirementsInfo2KHR: return "ImageSparseMemoryRequirementsInfo2KHR";
   33990     case StructureType::eMemoryRequirements2KHR: return "MemoryRequirements2KHR";
   33991     case StructureType::eSparseImageMemoryRequirements2KHR: return "SparseImageMemoryRequirements2KHR";
   33992     case StructureType::eImageFormatListCreateInfoKHR: return "ImageFormatListCreateInfoKHR";
   33993     case StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT: return "PhysicalDeviceBlendOperationAdvancedFeaturesEXT";
   33994     case StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT: return "PhysicalDeviceBlendOperationAdvancedPropertiesEXT";
   33995     case StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT: return "PipelineColorBlendAdvancedStateCreateInfoEXT";
   33996     case StructureType::ePipelineCoverageToColorStateCreateInfoNV: return "PipelineCoverageToColorStateCreateInfoNV";
   33997     case StructureType::ePipelineCoverageModulationStateCreateInfoNV: return "PipelineCoverageModulationStateCreateInfoNV";
   33998     case StructureType::eSamplerYcbcrConversionCreateInfoKHR: return "SamplerYcbcrConversionCreateInfoKHR";
   33999     case StructureType::eSamplerYcbcrConversionInfoKHR: return "SamplerYcbcrConversionInfoKHR";
   34000     case StructureType::eBindImagePlaneMemoryInfoKHR: return "BindImagePlaneMemoryInfoKHR";
   34001     case StructureType::eImagePlaneMemoryRequirementsInfoKHR: return "ImagePlaneMemoryRequirementsInfoKHR";
   34002     case StructureType::ePhysicalDeviceSamplerYcbcrConversionFeaturesKHR: return "PhysicalDeviceSamplerYcbcrConversionFeaturesKHR";
   34003     case StructureType::eSamplerYcbcrConversionImageFormatPropertiesKHR: return "SamplerYcbcrConversionImageFormatPropertiesKHR";
   34004     case StructureType::eBindBufferMemoryInfoKHR: return "BindBufferMemoryInfoKHR";
   34005     case StructureType::eBindImageMemoryInfoKHR: return "BindImageMemoryInfoKHR";
   34006     case StructureType::eValidationCacheCreateInfoEXT: return "ValidationCacheCreateInfoEXT";
   34007     case StructureType::eShaderModuleValidationCacheCreateInfoEXT: return "ShaderModuleValidationCacheCreateInfoEXT";
   34008     case StructureType::eDeviceQueueGlobalPriorityCreateInfoEXT: return "DeviceQueueGlobalPriorityCreateInfoEXT";
   34009     case StructureType::eImportMemoryHostPointerInfoEXT: return "ImportMemoryHostPointerInfoEXT";
   34010     case StructureType::eMemoryHostPointerPropertiesEXT: return "MemoryHostPointerPropertiesEXT";
   34011     case StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT: return "PhysicalDeviceExternalMemoryHostPropertiesEXT";
   34012     default: return "invalid";
   34013     }
   34014   }
   34015 
   34016   VULKAN_HPP_INLINE std::string to_string(SubpassContents value)
   34017   {
   34018     switch (value)
   34019     {
   34020     case SubpassContents::eInline: return "Inline";
   34021     case SubpassContents::eSecondaryCommandBuffers: return "SecondaryCommandBuffers";
   34022     default: return "invalid";
   34023     }
   34024   }
   34025 
   34026   VULKAN_HPP_INLINE std::string to_string(DynamicState value)
   34027   {
   34028     switch (value)
   34029     {
   34030     case DynamicState::eViewport: return "Viewport";
   34031     case DynamicState::eScissor: return "Scissor";
   34032     case DynamicState::eLineWidth: return "LineWidth";
   34033     case DynamicState::eDepthBias: return "DepthBias";
   34034     case DynamicState::eBlendConstants: return "BlendConstants";
   34035     case DynamicState::eDepthBounds: return "DepthBounds";
   34036     case DynamicState::eStencilCompareMask: return "StencilCompareMask";
   34037     case DynamicState::eStencilWriteMask: return "StencilWriteMask";
   34038     case DynamicState::eStencilReference: return "StencilReference";
   34039     case DynamicState::eViewportWScalingNV: return "ViewportWScalingNV";
   34040     case DynamicState::eDiscardRectangleEXT: return "DiscardRectangleEXT";
   34041     case DynamicState::eSampleLocationsEXT: return "SampleLocationsEXT";
   34042     default: return "invalid";
   34043     }
   34044   }
   34045 
   34046   VULKAN_HPP_INLINE std::string to_string(DescriptorUpdateTemplateTypeKHR value)
   34047   {
   34048     switch (value)
   34049     {
   34050     case DescriptorUpdateTemplateTypeKHR::eDescriptorSet: return "DescriptorSet";
   34051     case DescriptorUpdateTemplateTypeKHR::ePushDescriptors: return "PushDescriptors";
   34052     default: return "invalid";
   34053     }
   34054   }
   34055 
   34056   VULKAN_HPP_INLINE std::string to_string(ObjectType value)
   34057   {
   34058     switch (value)
   34059     {
   34060     case ObjectType::eUnknown: return "Unknown";
   34061     case ObjectType::eInstance: return "Instance";
   34062     case ObjectType::ePhysicalDevice: return "PhysicalDevice";
   34063     case ObjectType::eDevice: return "Device";
   34064     case ObjectType::eQueue: return "Queue";
   34065     case ObjectType::eSemaphore: return "Semaphore";
   34066     case ObjectType::eCommandBuffer: return "CommandBuffer";
   34067     case ObjectType::eFence: return "Fence";
   34068     case ObjectType::eDeviceMemory: return "DeviceMemory";
   34069     case ObjectType::eBuffer: return "Buffer";
   34070     case ObjectType::eImage: return "Image";
   34071     case ObjectType::eEvent: return "Event";
   34072     case ObjectType::eQueryPool: return "QueryPool";
   34073     case ObjectType::eBufferView: return "BufferView";
   34074     case ObjectType::eImageView: return "ImageView";
   34075     case ObjectType::eShaderModule: return "ShaderModule";
   34076     case ObjectType::ePipelineCache: return "PipelineCache";
   34077     case ObjectType::ePipelineLayout: return "PipelineLayout";
   34078     case ObjectType::eRenderPass: return "RenderPass";
   34079     case ObjectType::ePipeline: return "Pipeline";
   34080     case ObjectType::eDescriptorSetLayout: return "DescriptorSetLayout";
   34081     case ObjectType::eSampler: return "Sampler";
   34082     case ObjectType::eDescriptorPool: return "DescriptorPool";
   34083     case ObjectType::eDescriptorSet: return "DescriptorSet";
   34084     case ObjectType::eFramebuffer: return "Framebuffer";
   34085     case ObjectType::eCommandPool: return "CommandPool";
   34086     case ObjectType::eSurfaceKHR: return "SurfaceKHR";
   34087     case ObjectType::eSwapchainKHR: return "SwapchainKHR";
   34088     case ObjectType::eDisplayKHR: return "DisplayKHR";
   34089     case ObjectType::eDisplayModeKHR: return "DisplayModeKHR";
   34090     case ObjectType::eDebugReportCallbackEXT: return "DebugReportCallbackEXT";
   34091     case ObjectType::eDescriptorUpdateTemplateKHR: return "DescriptorUpdateTemplateKHR";
   34092     case ObjectType::eObjectTableNVX: return "ObjectTableNVX";
   34093     case ObjectType::eIndirectCommandsLayoutNVX: return "IndirectCommandsLayoutNVX";
   34094     case ObjectType::eSamplerYcbcrConversionKHR: return "SamplerYcbcrConversionKHR";
   34095     case ObjectType::eValidationCacheEXT: return "ValidationCacheEXT";
   34096     default: return "invalid";
   34097     }
   34098   }
   34099 
   34100   VULKAN_HPP_INLINE std::string to_string(QueueFlagBits value)
   34101   {
   34102     switch (value)
   34103     {
   34104     case QueueFlagBits::eGraphics: return "Graphics";
   34105     case QueueFlagBits::eCompute: return "Compute";
   34106     case QueueFlagBits::eTransfer: return "Transfer";
   34107     case QueueFlagBits::eSparseBinding: return "SparseBinding";
   34108     default: return "invalid";
   34109     }
   34110   }
   34111 
   34112   VULKAN_HPP_INLINE std::string to_string(QueueFlags value)
   34113   {
   34114     if (!value) return "{}";
   34115     std::string result;
   34116     if (value & QueueFlagBits::eGraphics) result += "Graphics | ";
   34117     if (value & QueueFlagBits::eCompute) result += "Compute | ";
   34118     if (value & QueueFlagBits::eTransfer) result += "Transfer | ";
   34119     if (value & QueueFlagBits::eSparseBinding) result += "SparseBinding | ";
   34120     return "{" + result.substr(0, result.size() - 3) + "}";
   34121   }
   34122 
   34123   VULKAN_HPP_INLINE std::string to_string(MemoryPropertyFlagBits value)
   34124   {
   34125     switch (value)
   34126     {
   34127     case MemoryPropertyFlagBits::eDeviceLocal: return "DeviceLocal";
   34128     case MemoryPropertyFlagBits::eHostVisible: return "HostVisible";
   34129     case MemoryPropertyFlagBits::eHostCoherent: return "HostCoherent";
   34130     case MemoryPropertyFlagBits::eHostCached: return "HostCached";
   34131     case MemoryPropertyFlagBits::eLazilyAllocated: return "LazilyAllocated";
   34132     default: return "invalid";
   34133     }
   34134   }
   34135 
   34136   VULKAN_HPP_INLINE std::string to_string(MemoryPropertyFlags value)
   34137   {
   34138     if (!value) return "{}";
   34139     std::string result;
   34140     if (value & MemoryPropertyFlagBits::eDeviceLocal) result += "DeviceLocal | ";
   34141     if (value & MemoryPropertyFlagBits::eHostVisible) result += "HostVisible | ";
   34142     if (value & MemoryPropertyFlagBits::eHostCoherent) result += "HostCoherent | ";
   34143     if (value & MemoryPropertyFlagBits::eHostCached) result += "HostCached | ";
   34144     if (value & MemoryPropertyFlagBits::eLazilyAllocated) result += "LazilyAllocated | ";
   34145     return "{" + result.substr(0, result.size() - 3) + "}";
   34146   }
   34147 
   34148   VULKAN_HPP_INLINE std::string to_string(MemoryHeapFlagBits value)
   34149   {
   34150     switch (value)
   34151     {
   34152     case MemoryHeapFlagBits::eDeviceLocal: return "DeviceLocal";
   34153     case MemoryHeapFlagBits::eMultiInstanceKHX: return "MultiInstanceKHX";
   34154     default: return "invalid";
   34155     }
   34156   }
   34157 
   34158   VULKAN_HPP_INLINE std::string to_string(MemoryHeapFlags value)
   34159   {
   34160     if (!value) return "{}";
   34161     std::string result;
   34162     if (value & MemoryHeapFlagBits::eDeviceLocal) result += "DeviceLocal | ";
   34163     if (value & MemoryHeapFlagBits::eMultiInstanceKHX) result += "MultiInstanceKHX | ";
   34164     return "{" + result.substr(0, result.size() - 3) + "}";
   34165   }
   34166 
   34167   VULKAN_HPP_INLINE std::string to_string(AccessFlagBits value)
   34168   {
   34169     switch (value)
   34170     {
   34171     case AccessFlagBits::eIndirectCommandRead: return "IndirectCommandRead";
   34172     case AccessFlagBits::eIndexRead: return "IndexRead";
   34173     case AccessFlagBits::eVertexAttributeRead: return "VertexAttributeRead";
   34174     case AccessFlagBits::eUniformRead: return "UniformRead";
   34175     case AccessFlagBits::eInputAttachmentRead: return "InputAttachmentRead";
   34176     case AccessFlagBits::eShaderRead: return "ShaderRead";
   34177     case AccessFlagBits::eShaderWrite: return "ShaderWrite";
   34178     case AccessFlagBits::eColorAttachmentRead: return "ColorAttachmentRead";
   34179     case AccessFlagBits::eColorAttachmentWrite: return "ColorAttachmentWrite";
   34180     case AccessFlagBits::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
   34181     case AccessFlagBits::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
   34182     case AccessFlagBits::eTransferRead: return "TransferRead";
   34183     case AccessFlagBits::eTransferWrite: return "TransferWrite";
   34184     case AccessFlagBits::eHostRead: return "HostRead";
   34185     case AccessFlagBits::eHostWrite: return "HostWrite";
   34186     case AccessFlagBits::eMemoryRead: return "MemoryRead";
   34187     case AccessFlagBits::eMemoryWrite: return "MemoryWrite";
   34188     case AccessFlagBits::eCommandProcessReadNVX: return "CommandProcessReadNVX";
   34189     case AccessFlagBits::eCommandProcessWriteNVX: return "CommandProcessWriteNVX";
   34190     case AccessFlagBits::eColorAttachmentReadNoncoherentEXT: return "ColorAttachmentReadNoncoherentEXT";
   34191     default: return "invalid";
   34192     }
   34193   }
   34194 
   34195   VULKAN_HPP_INLINE std::string to_string(AccessFlags value)
   34196   {
   34197     if (!value) return "{}";
   34198     std::string result;
   34199     if (value & AccessFlagBits::eIndirectCommandRead) result += "IndirectCommandRead | ";
   34200     if (value & AccessFlagBits::eIndexRead) result += "IndexRead | ";
   34201     if (value & AccessFlagBits::eVertexAttributeRead) result += "VertexAttributeRead | ";
   34202     if (value & AccessFlagBits::eUniformRead) result += "UniformRead | ";
   34203     if (value & AccessFlagBits::eInputAttachmentRead) result += "InputAttachmentRead | ";
   34204     if (value & AccessFlagBits::eShaderRead) result += "ShaderRead | ";
   34205     if (value & AccessFlagBits::eShaderWrite) result += "ShaderWrite | ";
   34206     if (value & AccessFlagBits::eColorAttachmentRead) result += "ColorAttachmentRead | ";
   34207     if (value & AccessFlagBits::eColorAttachmentWrite) result += "ColorAttachmentWrite | ";
   34208     if (value & AccessFlagBits::eDepthStencilAttachmentRead) result += "DepthStencilAttachmentRead | ";
   34209     if (value & AccessFlagBits::eDepthStencilAttachmentWrite) result += "DepthStencilAttachmentWrite | ";
   34210     if (value & AccessFlagBits::eTransferRead) result += "TransferRead | ";
   34211     if (value & AccessFlagBits::eTransferWrite) result += "TransferWrite | ";
   34212     if (value & AccessFlagBits::eHostRead) result += "HostRead | ";
   34213     if (value & AccessFlagBits::eHostWrite) result += "HostWrite | ";
   34214     if (value & AccessFlagBits::eMemoryRead) result += "MemoryRead | ";
   34215     if (value & AccessFlagBits::eMemoryWrite) result += "MemoryWrite | ";
   34216     if (value & AccessFlagBits::eCommandProcessReadNVX) result += "CommandProcessReadNVX | ";
   34217     if (value & AccessFlagBits::eCommandProcessWriteNVX) result += "CommandProcessWriteNVX | ";
   34218     if (value & AccessFlagBits::eColorAttachmentReadNoncoherentEXT) result += "ColorAttachmentReadNoncoherentEXT | ";
   34219     return "{" + result.substr(0, result.size() - 3) + "}";
   34220   }
   34221 
   34222   VULKAN_HPP_INLINE std::string to_string(BufferUsageFlagBits value)
   34223   {
   34224     switch (value)
   34225     {
   34226     case BufferUsageFlagBits::eTransferSrc: return "TransferSrc";
   34227     case BufferUsageFlagBits::eTransferDst: return "TransferDst";
   34228     case BufferUsageFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
   34229     case BufferUsageFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
   34230     case BufferUsageFlagBits::eUniformBuffer: return "UniformBuffer";
   34231     case BufferUsageFlagBits::eStorageBuffer: return "StorageBuffer";
   34232     case BufferUsageFlagBits::eIndexBuffer: return "IndexBuffer";
   34233     case BufferUsageFlagBits::eVertexBuffer: return "VertexBuffer";
   34234     case BufferUsageFlagBits::eIndirectBuffer: return "IndirectBuffer";
   34235     default: return "invalid";
   34236     }
   34237   }
   34238 
   34239   VULKAN_HPP_INLINE std::string to_string(BufferUsageFlags value)
   34240   {
   34241     if (!value) return "{}";
   34242     std::string result;
   34243     if (value & BufferUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
   34244     if (value & BufferUsageFlagBits::eTransferDst) result += "TransferDst | ";
   34245     if (value & BufferUsageFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
   34246     if (value & BufferUsageFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
   34247     if (value & BufferUsageFlagBits::eUniformBuffer) result += "UniformBuffer | ";
   34248     if (value & BufferUsageFlagBits::eStorageBuffer) result += "StorageBuffer | ";
   34249     if (value & BufferUsageFlagBits::eIndexBuffer) result += "IndexBuffer | ";
   34250     if (value & BufferUsageFlagBits::eVertexBuffer) result += "VertexBuffer | ";
   34251     if (value & BufferUsageFlagBits::eIndirectBuffer) result += "IndirectBuffer | ";
   34252     return "{" + result.substr(0, result.size() - 3) + "}";
   34253   }
   34254 
   34255   VULKAN_HPP_INLINE std::string to_string(BufferCreateFlagBits value)
   34256   {
   34257     switch (value)
   34258     {
   34259     case BufferCreateFlagBits::eSparseBinding: return "SparseBinding";
   34260     case BufferCreateFlagBits::eSparseResidency: return "SparseResidency";
   34261     case BufferCreateFlagBits::eSparseAliased: return "SparseAliased";
   34262     default: return "invalid";
   34263     }
   34264   }
   34265 
   34266   VULKAN_HPP_INLINE std::string to_string(BufferCreateFlags value)
   34267   {
   34268     if (!value) return "{}";
   34269     std::string result;
   34270     if (value & BufferCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
   34271     if (value & BufferCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
   34272     if (value & BufferCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
   34273     return "{" + result.substr(0, result.size() - 3) + "}";
   34274   }
   34275 
   34276   VULKAN_HPP_INLINE std::string to_string(ShaderStageFlagBits value)
   34277   {
   34278     switch (value)
   34279     {
   34280     case ShaderStageFlagBits::eVertex: return "Vertex";
   34281     case ShaderStageFlagBits::eTessellationControl: return "TessellationControl";
   34282     case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation";
   34283     case ShaderStageFlagBits::eGeometry: return "Geometry";
   34284     case ShaderStageFlagBits::eFragment: return "Fragment";
   34285     case ShaderStageFlagBits::eCompute: return "Compute";
   34286     case ShaderStageFlagBits::eAllGraphics: return "AllGraphics";
   34287     case ShaderStageFlagBits::eAll: return "All";
   34288     default: return "invalid";
   34289     }
   34290   }
   34291 
   34292   VULKAN_HPP_INLINE std::string to_string(ShaderStageFlags value)
   34293   {
   34294     if (!value) return "{}";
   34295     std::string result;
   34296     if (value & ShaderStageFlagBits::eVertex) result += "Vertex | ";
   34297     if (value & ShaderStageFlagBits::eTessellationControl) result += "TessellationControl | ";
   34298     if (value & ShaderStageFlagBits::eTessellationEvaluation) result += "TessellationEvaluation | ";
   34299     if (value & ShaderStageFlagBits::eGeometry) result += "Geometry | ";
   34300     if (value & ShaderStageFlagBits::eFragment) result += "Fragment | ";
   34301     if (value & ShaderStageFlagBits::eCompute) result += "Compute | ";
   34302     if (value & ShaderStageFlagBits::eAllGraphics) result += "AllGraphics | ";
   34303     if (value & ShaderStageFlagBits::eAll) result += "All | ";
   34304     return "{" + result.substr(0, result.size() - 3) + "}";
   34305   }
   34306 
   34307   VULKAN_HPP_INLINE std::string to_string(ImageUsageFlagBits value)
   34308   {
   34309     switch (value)
   34310     {
   34311     case ImageUsageFlagBits::eTransferSrc: return "TransferSrc";
   34312     case ImageUsageFlagBits::eTransferDst: return "TransferDst";
   34313     case ImageUsageFlagBits::eSampled: return "Sampled";
   34314     case ImageUsageFlagBits::eStorage: return "Storage";
   34315     case ImageUsageFlagBits::eColorAttachment: return "ColorAttachment";
   34316     case ImageUsageFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
   34317     case ImageUsageFlagBits::eTransientAttachment: return "TransientAttachment";
   34318     case ImageUsageFlagBits::eInputAttachment: return "InputAttachment";
   34319     default: return "invalid";
   34320     }
   34321   }
   34322 
   34323   VULKAN_HPP_INLINE std::string to_string(ImageUsageFlags value)
   34324   {
   34325     if (!value) return "{}";
   34326     std::string result;
   34327     if (value & ImageUsageFlagBits::eTransferSrc) result += "TransferSrc | ";
   34328     if (value & ImageUsageFlagBits::eTransferDst) result += "TransferDst | ";
   34329     if (value & ImageUsageFlagBits::eSampled) result += "Sampled | ";
   34330     if (value & ImageUsageFlagBits::eStorage) result += "Storage | ";
   34331     if (value & ImageUsageFlagBits::eColorAttachment) result += "ColorAttachment | ";
   34332     if (value & ImageUsageFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
   34333     if (value & ImageUsageFlagBits::eTransientAttachment) result += "TransientAttachment | ";
   34334     if (value & ImageUsageFlagBits::eInputAttachment) result += "InputAttachment | ";
   34335     return "{" + result.substr(0, result.size() - 3) + "}";
   34336   }
   34337 
   34338   VULKAN_HPP_INLINE std::string to_string(ImageCreateFlagBits value)
   34339   {
   34340     switch (value)
   34341     {
   34342     case ImageCreateFlagBits::eSparseBinding: return "SparseBinding";
   34343     case ImageCreateFlagBits::eSparseResidency: return "SparseResidency";
   34344     case ImageCreateFlagBits::eSparseAliased: return "SparseAliased";
   34345     case ImageCreateFlagBits::eMutableFormat: return "MutableFormat";
   34346     case ImageCreateFlagBits::eCubeCompatible: return "CubeCompatible";
   34347     case ImageCreateFlagBits::eBindSfrKHX: return "BindSfrKHX";
   34348     case ImageCreateFlagBits::e2DArrayCompatibleKHR: return "2DArrayCompatibleKHR";
   34349     case ImageCreateFlagBits::eBlockTexelViewCompatibleKHR: return "BlockTexelViewCompatibleKHR";
   34350     case ImageCreateFlagBits::eExtendedUsageKHR: return "ExtendedUsageKHR";
   34351     case ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT: return "SampleLocationsCompatibleDepthEXT";
   34352     case ImageCreateFlagBits::eDisjointKHR: return "DisjointKHR";
   34353     case ImageCreateFlagBits::eAliasKHR: return "AliasKHR";
   34354     default: return "invalid";
   34355     }
   34356   }
   34357 
   34358   VULKAN_HPP_INLINE std::string to_string(ImageCreateFlags value)
   34359   {
   34360     if (!value) return "{}";
   34361     std::string result;
   34362     if (value & ImageCreateFlagBits::eSparseBinding) result += "SparseBinding | ";
   34363     if (value & ImageCreateFlagBits::eSparseResidency) result += "SparseResidency | ";
   34364     if (value & ImageCreateFlagBits::eSparseAliased) result += "SparseAliased | ";
   34365     if (value & ImageCreateFlagBits::eMutableFormat) result += "MutableFormat | ";
   34366     if (value & ImageCreateFlagBits::eCubeCompatible) result += "CubeCompatible | ";
   34367     if (value & ImageCreateFlagBits::eBindSfrKHX) result += "BindSfrKHX | ";
   34368     if (value & ImageCreateFlagBits::e2DArrayCompatibleKHR) result += "2DArrayCompatibleKHR | ";
   34369     if (value & ImageCreateFlagBits::eBlockTexelViewCompatibleKHR) result += "BlockTexelViewCompatibleKHR | ";
   34370     if (value & ImageCreateFlagBits::eExtendedUsageKHR) result += "ExtendedUsageKHR | ";
   34371     if (value & ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT) result += "SampleLocationsCompatibleDepthEXT | ";
   34372     if (value & ImageCreateFlagBits::eDisjointKHR) result += "DisjointKHR | ";
   34373     if (value & ImageCreateFlagBits::eAliasKHR) result += "AliasKHR | ";
   34374     return "{" + result.substr(0, result.size() - 3) + "}";
   34375   }
   34376 
   34377   VULKAN_HPP_INLINE std::string to_string(PipelineCreateFlagBits value)
   34378   {
   34379     switch (value)
   34380     {
   34381     case PipelineCreateFlagBits::eDisableOptimization: return "DisableOptimization";
   34382     case PipelineCreateFlagBits::eAllowDerivatives: return "AllowDerivatives";
   34383     case PipelineCreateFlagBits::eDerivative: return "Derivative";
   34384     case PipelineCreateFlagBits::eViewIndexFromDeviceIndexKHX: return "ViewIndexFromDeviceIndexKHX";
   34385     case PipelineCreateFlagBits::eDispatchBaseKHX: return "DispatchBaseKHX";
   34386     default: return "invalid";
   34387     }
   34388   }
   34389 
   34390   VULKAN_HPP_INLINE std::string to_string(PipelineCreateFlags value)
   34391   {
   34392     if (!value) return "{}";
   34393     std::string result;
   34394     if (value & PipelineCreateFlagBits::eDisableOptimization) result += "DisableOptimization | ";
   34395     if (value & PipelineCreateFlagBits::eAllowDerivatives) result += "AllowDerivatives | ";
   34396     if (value & PipelineCreateFlagBits::eDerivative) result += "Derivative | ";
   34397     if (value & PipelineCreateFlagBits::eViewIndexFromDeviceIndexKHX) result += "ViewIndexFromDeviceIndexKHX | ";
   34398     if (value & PipelineCreateFlagBits::eDispatchBaseKHX) result += "DispatchBaseKHX | ";
   34399     return "{" + result.substr(0, result.size() - 3) + "}";
   34400   }
   34401 
   34402   VULKAN_HPP_INLINE std::string to_string(ColorComponentFlagBits value)
   34403   {
   34404     switch (value)
   34405     {
   34406     case ColorComponentFlagBits::eR: return "R";
   34407     case ColorComponentFlagBits::eG: return "G";
   34408     case ColorComponentFlagBits::eB: return "B";
   34409     case ColorComponentFlagBits::eA: return "A";
   34410     default: return "invalid";
   34411     }
   34412   }
   34413 
   34414   VULKAN_HPP_INLINE std::string to_string(ColorComponentFlags value)
   34415   {
   34416     if (!value) return "{}";
   34417     std::string result;
   34418     if (value & ColorComponentFlagBits::eR) result += "R | ";
   34419     if (value & ColorComponentFlagBits::eG) result += "G | ";
   34420     if (value & ColorComponentFlagBits::eB) result += "B | ";
   34421     if (value & ColorComponentFlagBits::eA) result += "A | ";
   34422     return "{" + result.substr(0, result.size() - 3) + "}";
   34423   }
   34424 
   34425   VULKAN_HPP_INLINE std::string to_string(FenceCreateFlagBits value)
   34426   {
   34427     switch (value)
   34428     {
   34429     case FenceCreateFlagBits::eSignaled: return "Signaled";
   34430     default: return "invalid";
   34431     }
   34432   }
   34433 
   34434   VULKAN_HPP_INLINE std::string to_string(FenceCreateFlags value)
   34435   {
   34436     if (!value) return "{}";
   34437     std::string result;
   34438     if (value & FenceCreateFlagBits::eSignaled) result += "Signaled | ";
   34439     return "{" + result.substr(0, result.size() - 3) + "}";
   34440   }
   34441 
   34442   VULKAN_HPP_INLINE std::string to_string(FormatFeatureFlagBits value)
   34443   {
   34444     switch (value)
   34445     {
   34446     case FormatFeatureFlagBits::eSampledImage: return "SampledImage";
   34447     case FormatFeatureFlagBits::eStorageImage: return "StorageImage";
   34448     case FormatFeatureFlagBits::eStorageImageAtomic: return "StorageImageAtomic";
   34449     case FormatFeatureFlagBits::eUniformTexelBuffer: return "UniformTexelBuffer";
   34450     case FormatFeatureFlagBits::eStorageTexelBuffer: return "StorageTexelBuffer";
   34451     case FormatFeatureFlagBits::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic";
   34452     case FormatFeatureFlagBits::eVertexBuffer: return "VertexBuffer";
   34453     case FormatFeatureFlagBits::eColorAttachment: return "ColorAttachment";
   34454     case FormatFeatureFlagBits::eColorAttachmentBlend: return "ColorAttachmentBlend";
   34455     case FormatFeatureFlagBits::eDepthStencilAttachment: return "DepthStencilAttachment";
   34456     case FormatFeatureFlagBits::eBlitSrc: return "BlitSrc";
   34457     case FormatFeatureFlagBits::eBlitDst: return "BlitDst";
   34458     case FormatFeatureFlagBits::eSampledImageFilterLinear: return "SampledImageFilterLinear";
   34459     case FormatFeatureFlagBits::eSampledImageFilterCubicIMG: return "SampledImageFilterCubicIMG";
   34460     case FormatFeatureFlagBits::eTransferSrcKHR: return "TransferSrcKHR";
   34461     case FormatFeatureFlagBits::eTransferDstKHR: return "TransferDstKHR";
   34462     case FormatFeatureFlagBits::eSampledImageFilterMinmaxEXT: return "SampledImageFilterMinmaxEXT";
   34463     case FormatFeatureFlagBits::eMidpointChromaSamplesKHR: return "MidpointChromaSamplesKHR";
   34464     case FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilterKHR: return "SampledImageYcbcrConversionLinearFilterKHR";
   34465     case FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilterKHR: return "SampledImageYcbcrConversionSeparateReconstructionFilterKHR";
   34466     case FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitKHR: return "SampledImageYcbcrConversionChromaReconstructionExplicitKHR";
   34467     case FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceableKHR: return "SampledImageYcbcrConversionChromaReconstructionExplicitForceableKHR";
   34468     case FormatFeatureFlagBits::eDisjointKHR: return "DisjointKHR";
   34469     case FormatFeatureFlagBits::eCositedChromaSamplesKHR: return "CositedChromaSamplesKHR";
   34470     default: return "invalid";
   34471     }
   34472   }
   34473 
   34474   VULKAN_HPP_INLINE std::string to_string(FormatFeatureFlags value)
   34475   {
   34476     if (!value) return "{}";
   34477     std::string result;
   34478     if (value & FormatFeatureFlagBits::eSampledImage) result += "SampledImage | ";
   34479     if (value & FormatFeatureFlagBits::eStorageImage) result += "StorageImage | ";
   34480     if (value & FormatFeatureFlagBits::eStorageImageAtomic) result += "StorageImageAtomic | ";
   34481     if (value & FormatFeatureFlagBits::eUniformTexelBuffer) result += "UniformTexelBuffer | ";
   34482     if (value & FormatFeatureFlagBits::eStorageTexelBuffer) result += "StorageTexelBuffer | ";
   34483     if (value & FormatFeatureFlagBits::eStorageTexelBufferAtomic) result += "StorageTexelBufferAtomic | ";
   34484     if (value & FormatFeatureFlagBits::eVertexBuffer) result += "VertexBuffer | ";
   34485     if (value & FormatFeatureFlagBits::eColorAttachment) result += "ColorAttachment | ";
   34486     if (value & FormatFeatureFlagBits::eColorAttachmentBlend) result += "ColorAttachmentBlend | ";
   34487     if (value & FormatFeatureFlagBits::eDepthStencilAttachment) result += "DepthStencilAttachment | ";
   34488     if (value & FormatFeatureFlagBits::eBlitSrc) result += "BlitSrc | ";
   34489     if (value & FormatFeatureFlagBits::eBlitDst) result += "BlitDst | ";
   34490     if (value & FormatFeatureFlagBits::eSampledImageFilterLinear) result += "SampledImageFilterLinear | ";
   34491     if (value & FormatFeatureFlagBits::eSampledImageFilterCubicIMG) result += "SampledImageFilterCubicIMG | ";
   34492     if (value & FormatFeatureFlagBits::eTransferSrcKHR) result += "TransferSrcKHR | ";
   34493     if (value & FormatFeatureFlagBits::eTransferDstKHR) result += "TransferDstKHR | ";
   34494     if (value & FormatFeatureFlagBits::eSampledImageFilterMinmaxEXT) result += "SampledImageFilterMinmaxEXT | ";
   34495     if (value & FormatFeatureFlagBits::eMidpointChromaSamplesKHR) result += "MidpointChromaSamplesKHR | ";
   34496     if (value & FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilterKHR) result += "SampledImageYcbcrConversionLinearFilterKHR | ";
   34497     if (value & FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilterKHR) result += "SampledImageYcbcrConversionSeparateReconstructionFilterKHR | ";
   34498     if (value & FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitKHR) result += "SampledImageYcbcrConversionChromaReconstructionExplicitKHR | ";
   34499     if (value & FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceableKHR) result += "SampledImageYcbcrConversionChromaReconstructionExplicitForceableKHR | ";
   34500     if (value & FormatFeatureFlagBits::eDisjointKHR) result += "DisjointKHR | ";
   34501     if (value & FormatFeatureFlagBits::eCositedChromaSamplesKHR) result += "CositedChromaSamplesKHR | ";
   34502     return "{" + result.substr(0, result.size() - 3) + "}";
   34503   }
   34504 
   34505   VULKAN_HPP_INLINE std::string to_string(QueryControlFlagBits value)
   34506   {
   34507     switch (value)
   34508     {
   34509     case QueryControlFlagBits::ePrecise: return "Precise";
   34510     default: return "invalid";
   34511     }
   34512   }
   34513 
   34514   VULKAN_HPP_INLINE std::string to_string(QueryControlFlags value)
   34515   {
   34516     if (!value) return "{}";
   34517     std::string result;
   34518     if (value & QueryControlFlagBits::ePrecise) result += "Precise | ";
   34519     return "{" + result.substr(0, result.size() - 3) + "}";
   34520   }
   34521 
   34522   VULKAN_HPP_INLINE std::string to_string(QueryResultFlagBits value)
   34523   {
   34524     switch (value)
   34525     {
   34526     case QueryResultFlagBits::e64: return "64";
   34527     case QueryResultFlagBits::eWait: return "Wait";
   34528     case QueryResultFlagBits::eWithAvailability: return "WithAvailability";
   34529     case QueryResultFlagBits::ePartial: return "Partial";
   34530     default: return "invalid";
   34531     }
   34532   }
   34533 
   34534   VULKAN_HPP_INLINE std::string to_string(QueryResultFlags value)
   34535   {
   34536     if (!value) return "{}";
   34537     std::string result;
   34538     if (value & QueryResultFlagBits::e64) result += "64 | ";
   34539     if (value & QueryResultFlagBits::eWait) result += "Wait | ";
   34540     if (value & QueryResultFlagBits::eWithAvailability) result += "WithAvailability | ";
   34541     if (value & QueryResultFlagBits::ePartial) result += "Partial | ";
   34542     return "{" + result.substr(0, result.size() - 3) + "}";
   34543   }
   34544 
   34545   VULKAN_HPP_INLINE std::string to_string(CommandBufferUsageFlagBits value)
   34546   {
   34547     switch (value)
   34548     {
   34549     case CommandBufferUsageFlagBits::eOneTimeSubmit: return "OneTimeSubmit";
   34550     case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue";
   34551     case CommandBufferUsageFlagBits::eSimultaneousUse: return "SimultaneousUse";
   34552     default: return "invalid";
   34553     }
   34554   }
   34555 
   34556   VULKAN_HPP_INLINE std::string to_string(CommandBufferUsageFlags value)
   34557   {
   34558     if (!value) return "{}";
   34559     std::string result;
   34560     if (value & CommandBufferUsageFlagBits::eOneTimeSubmit) result += "OneTimeSubmit | ";
   34561     if (value & CommandBufferUsageFlagBits::eRenderPassContinue) result += "RenderPassContinue | ";
   34562     if (value & CommandBufferUsageFlagBits::eSimultaneousUse) result += "SimultaneousUse | ";
   34563     return "{" + result.substr(0, result.size() - 3) + "}";
   34564   }
   34565 
   34566   VULKAN_HPP_INLINE std::string to_string(QueryPipelineStatisticFlagBits value)
   34567   {
   34568     switch (value)
   34569     {
   34570     case QueryPipelineStatisticFlagBits::eInputAssemblyVertices: return "InputAssemblyVertices";
   34571     case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives: return "InputAssemblyPrimitives";
   34572     case QueryPipelineStatisticFlagBits::eVertexShaderInvocations: return "VertexShaderInvocations";
   34573     case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations: return "GeometryShaderInvocations";
   34574     case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives: return "GeometryShaderPrimitives";
   34575     case QueryPipelineStatisticFlagBits::eClippingInvocations: return "ClippingInvocations";
   34576     case QueryPipelineStatisticFlagBits::eClippingPrimitives: return "ClippingPrimitives";
   34577     case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations: return "FragmentShaderInvocations";
   34578     case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches: return "TessellationControlShaderPatches";
   34579     case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations";
   34580     case QueryPipelineStatisticFlagBits::eComputeShaderInvocations: return "ComputeShaderInvocations";
   34581     default: return "invalid";
   34582     }
   34583   }
   34584 
   34585   VULKAN_HPP_INLINE std::string to_string(QueryPipelineStatisticFlags value)
   34586   {
   34587     if (!value) return "{}";
   34588     std::string result;
   34589     if (value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices) result += "InputAssemblyVertices | ";
   34590     if (value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives) result += "InputAssemblyPrimitives | ";
   34591     if (value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations) result += "VertexShaderInvocations | ";
   34592     if (value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations) result += "GeometryShaderInvocations | ";
   34593     if (value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives) result += "GeometryShaderPrimitives | ";
   34594     if (value & QueryPipelineStatisticFlagBits::eClippingInvocations) result += "ClippingInvocations | ";
   34595     if (value & QueryPipelineStatisticFlagBits::eClippingPrimitives) result += "ClippingPrimitives | ";
   34596     if (value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations) result += "FragmentShaderInvocations | ";
   34597     if (value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches) result += "TessellationControlShaderPatches | ";
   34598     if (value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations) result += "TessellationEvaluationShaderInvocations | ";
   34599     if (value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations) result += "ComputeShaderInvocations | ";
   34600     return "{" + result.substr(0, result.size() - 3) + "}";
   34601   }
   34602 
   34603   VULKAN_HPP_INLINE std::string to_string(ImageAspectFlagBits value)
   34604   {
   34605     switch (value)
   34606     {
   34607     case ImageAspectFlagBits::eColor: return "Color";
   34608     case ImageAspectFlagBits::eDepth: return "Depth";
   34609     case ImageAspectFlagBits::eStencil: return "Stencil";
   34610     case ImageAspectFlagBits::eMetadata: return "Metadata";
   34611     case ImageAspectFlagBits::ePlane0KHR: return "Plane0KHR";
   34612     case ImageAspectFlagBits::ePlane1KHR: return "Plane1KHR";
   34613     case ImageAspectFlagBits::ePlane2KHR: return "Plane2KHR";
   34614     default: return "invalid";
   34615     }
   34616   }
   34617 
   34618   VULKAN_HPP_INLINE std::string to_string(ImageAspectFlags value)
   34619   {
   34620     if (!value) return "{}";
   34621     std::string result;
   34622     if (value & ImageAspectFlagBits::eColor) result += "Color | ";
   34623     if (value & ImageAspectFlagBits::eDepth) result += "Depth | ";
   34624     if (value & ImageAspectFlagBits::eStencil) result += "Stencil | ";
   34625     if (value & ImageAspectFlagBits::eMetadata) result += "Metadata | ";
   34626     if (value & ImageAspectFlagBits::ePlane0KHR) result += "Plane0KHR | ";
   34627     if (value & ImageAspectFlagBits::ePlane1KHR) result += "Plane1KHR | ";
   34628     if (value & ImageAspectFlagBits::ePlane2KHR) result += "Plane2KHR | ";
   34629     return "{" + result.substr(0, result.size() - 3) + "}";
   34630   }
   34631 
   34632   VULKAN_HPP_INLINE std::string to_string(SparseImageFormatFlagBits value)
   34633   {
   34634     switch (value)
   34635     {
   34636     case SparseImageFormatFlagBits::eSingleMiptail: return "SingleMiptail";
   34637     case SparseImageFormatFlagBits::eAlignedMipSize: return "AlignedMipSize";
   34638     case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize";
   34639     default: return "invalid";
   34640     }
   34641   }
   34642 
   34643   VULKAN_HPP_INLINE std::string to_string(SparseImageFormatFlags value)
   34644   {
   34645     if (!value) return "{}";
   34646     std::string result;
   34647     if (value & SparseImageFormatFlagBits::eSingleMiptail) result += "SingleMiptail | ";
   34648     if (value & SparseImageFormatFlagBits::eAlignedMipSize) result += "AlignedMipSize | ";
   34649     if (value & SparseImageFormatFlagBits::eNonstandardBlockSize) result += "NonstandardBlockSize | ";
   34650     return "{" + result.substr(0, result.size() - 3) + "}";
   34651   }
   34652 
   34653   VULKAN_HPP_INLINE std::string to_string(SparseMemoryBindFlagBits value)
   34654   {
   34655     switch (value)
   34656     {
   34657     case SparseMemoryBindFlagBits::eMetadata: return "Metadata";
   34658     default: return "invalid";
   34659     }
   34660   }
   34661 
   34662   VULKAN_HPP_INLINE std::string to_string(SparseMemoryBindFlags value)
   34663   {
   34664     if (!value) return "{}";
   34665     std::string result;
   34666     if (value & SparseMemoryBindFlagBits::eMetadata) result += "Metadata | ";
   34667     return "{" + result.substr(0, result.size() - 3) + "}";
   34668   }
   34669 
   34670   VULKAN_HPP_INLINE std::string to_string(PipelineStageFlagBits value)
   34671   {
   34672     switch (value)
   34673     {
   34674     case PipelineStageFlagBits::eTopOfPipe: return "TopOfPipe";
   34675     case PipelineStageFlagBits::eDrawIndirect: return "DrawIndirect";
   34676     case PipelineStageFlagBits::eVertexInput: return "VertexInput";
   34677     case PipelineStageFlagBits::eVertexShader: return "VertexShader";
   34678     case PipelineStageFlagBits::eTessellationControlShader: return "TessellationControlShader";
   34679     case PipelineStageFlagBits::eTessellationEvaluationShader: return "TessellationEvaluationShader";
   34680     case PipelineStageFlagBits::eGeometryShader: return "GeometryShader";
   34681     case PipelineStageFlagBits::eFragmentShader: return "FragmentShader";
   34682     case PipelineStageFlagBits::eEarlyFragmentTests: return "EarlyFragmentTests";
   34683     case PipelineStageFlagBits::eLateFragmentTests: return "LateFragmentTests";
   34684     case PipelineStageFlagBits::eColorAttachmentOutput: return "ColorAttachmentOutput";
   34685     case PipelineStageFlagBits::eComputeShader: return "ComputeShader";
   34686     case PipelineStageFlagBits::eTransfer: return "Transfer";
   34687     case PipelineStageFlagBits::eBottomOfPipe: return "BottomOfPipe";
   34688     case PipelineStageFlagBits::eHost: return "Host";
   34689     case PipelineStageFlagBits::eAllGraphics: return "AllGraphics";
   34690     case PipelineStageFlagBits::eAllCommands: return "AllCommands";
   34691     case PipelineStageFlagBits::eCommandProcessNVX: return "CommandProcessNVX";
   34692     default: return "invalid";
   34693     }
   34694   }
   34695 
   34696   VULKAN_HPP_INLINE std::string to_string(PipelineStageFlags value)
   34697   {
   34698     if (!value) return "{}";
   34699     std::string result;
   34700     if (value & PipelineStageFlagBits::eTopOfPipe) result += "TopOfPipe | ";
   34701     if (value & PipelineStageFlagBits::eDrawIndirect) result += "DrawIndirect | ";
   34702     if (value & PipelineStageFlagBits::eVertexInput) result += "VertexInput | ";
   34703     if (value & PipelineStageFlagBits::eVertexShader) result += "VertexShader | ";
   34704     if (value & PipelineStageFlagBits::eTessellationControlShader) result += "TessellationControlShader | ";
   34705     if (value & PipelineStageFlagBits::eTessellationEvaluationShader) result += "TessellationEvaluationShader | ";
   34706     if (value & PipelineStageFlagBits::eGeometryShader) result += "GeometryShader | ";
   34707     if (value & PipelineStageFlagBits::eFragmentShader) result += "FragmentShader | ";
   34708     if (value & PipelineStageFlagBits::eEarlyFragmentTests) result += "EarlyFragmentTests | ";
   34709     if (value & PipelineStageFlagBits::eLateFragmentTests) result += "LateFragmentTests | ";
   34710     if (value & PipelineStageFlagBits::eColorAttachmentOutput) result += "ColorAttachmentOutput | ";
   34711     if (value & PipelineStageFlagBits::eComputeShader) result += "ComputeShader | ";
   34712     if (value & PipelineStageFlagBits::eTransfer) result += "Transfer | ";
   34713     if (value & PipelineStageFlagBits::eBottomOfPipe) result += "BottomOfPipe | ";
   34714     if (value & PipelineStageFlagBits::eHost) result += "Host | ";
   34715     if (value & PipelineStageFlagBits::eAllGraphics) result += "AllGraphics | ";
   34716     if (value & PipelineStageFlagBits::eAllCommands) result += "AllCommands | ";
   34717     if (value & PipelineStageFlagBits::eCommandProcessNVX) result += "CommandProcessNVX | ";
   34718     return "{" + result.substr(0, result.size() - 3) + "}";
   34719   }
   34720 
   34721   VULKAN_HPP_INLINE std::string to_string(CommandPoolCreateFlagBits value)
   34722   {
   34723     switch (value)
   34724     {
   34725     case CommandPoolCreateFlagBits::eTransient: return "Transient";
   34726     case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer";
   34727     default: return "invalid";
   34728     }
   34729   }
   34730 
   34731   VULKAN_HPP_INLINE std::string to_string(CommandPoolCreateFlags value)
   34732   {
   34733     if (!value) return "{}";
   34734     std::string result;
   34735     if (value & CommandPoolCreateFlagBits::eTransient) result += "Transient | ";
   34736     if (value & CommandPoolCreateFlagBits::eResetCommandBuffer) result += "ResetCommandBuffer | ";
   34737     return "{" + result.substr(0, result.size() - 3) + "}";
   34738   }
   34739 
   34740   VULKAN_HPP_INLINE std::string to_string(CommandPoolResetFlagBits value)
   34741   {
   34742     switch (value)
   34743     {
   34744     case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources";
   34745     default: return "invalid";
   34746     }
   34747   }
   34748 
   34749   VULKAN_HPP_INLINE std::string to_string(CommandPoolResetFlags value)
   34750   {
   34751     if (!value) return "{}";
   34752     std::string result;
   34753     if (value & CommandPoolResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
   34754     return "{" + result.substr(0, result.size() - 3) + "}";
   34755   }
   34756 
   34757   VULKAN_HPP_INLINE std::string to_string(CommandBufferResetFlagBits value)
   34758   {
   34759     switch (value)
   34760     {
   34761     case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources";
   34762     default: return "invalid";
   34763     }
   34764   }
   34765 
   34766   VULKAN_HPP_INLINE std::string to_string(CommandBufferResetFlags value)
   34767   {
   34768     if (!value) return "{}";
   34769     std::string result;
   34770     if (value & CommandBufferResetFlagBits::eReleaseResources) result += "ReleaseResources | ";
   34771     return "{" + result.substr(0, result.size() - 3) + "}";
   34772   }
   34773 
   34774   VULKAN_HPP_INLINE std::string to_string(SampleCountFlagBits value)
   34775   {
   34776     switch (value)
   34777     {
   34778     case SampleCountFlagBits::e1: return "1";
   34779     case SampleCountFlagBits::e2: return "2";
   34780     case SampleCountFlagBits::e4: return "4";
   34781     case SampleCountFlagBits::e8: return "8";
   34782     case SampleCountFlagBits::e16: return "16";
   34783     case SampleCountFlagBits::e32: return "32";
   34784     case SampleCountFlagBits::e64: return "64";
   34785     default: return "invalid";
   34786     }
   34787   }
   34788 
   34789   VULKAN_HPP_INLINE std::string to_string(SampleCountFlags value)
   34790   {
   34791     if (!value) return "{}";
   34792     std::string result;
   34793     if (value & SampleCountFlagBits::e1) result += "1 | ";
   34794     if (value & SampleCountFlagBits::e2) result += "2 | ";
   34795     if (value & SampleCountFlagBits::e4) result += "4 | ";
   34796     if (value & SampleCountFlagBits::e8) result += "8 | ";
   34797     if (value & SampleCountFlagBits::e16) result += "16 | ";
   34798     if (value & SampleCountFlagBits::e32) result += "32 | ";
   34799     if (value & SampleCountFlagBits::e64) result += "64 | ";
   34800     return "{" + result.substr(0, result.size() - 3) + "}";
   34801   }
   34802 
   34803   VULKAN_HPP_INLINE std::string to_string(AttachmentDescriptionFlagBits value)
   34804   {
   34805     switch (value)
   34806     {
   34807     case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias";
   34808     default: return "invalid";
   34809     }
   34810   }
   34811 
   34812   VULKAN_HPP_INLINE std::string to_string(AttachmentDescriptionFlags value)
   34813   {
   34814     if (!value) return "{}";
   34815     std::string result;
   34816     if (value & AttachmentDescriptionFlagBits::eMayAlias) result += "MayAlias | ";
   34817     return "{" + result.substr(0, result.size() - 3) + "}";
   34818   }
   34819 
   34820   VULKAN_HPP_INLINE std::string to_string(StencilFaceFlagBits value)
   34821   {
   34822     switch (value)
   34823     {
   34824     case StencilFaceFlagBits::eFront: return "Front";
   34825     case StencilFaceFlagBits::eBack: return "Back";
   34826     case StencilFaceFlagBits::eVkStencilFrontAndBack: return "VkStencilFrontAndBack";
   34827     default: return "invalid";
   34828     }
   34829   }
   34830 
   34831   VULKAN_HPP_INLINE std::string to_string(StencilFaceFlags value)
   34832   {
   34833     if (!value) return "{}";
   34834     std::string result;
   34835     if (value & StencilFaceFlagBits::eFront) result += "Front | ";
   34836     if (value & StencilFaceFlagBits::eBack) result += "Back | ";
   34837     if (value & StencilFaceFlagBits::eVkStencilFrontAndBack) result += "VkStencilFrontAndBack | ";
   34838     return "{" + result.substr(0, result.size() - 3) + "}";
   34839   }
   34840 
   34841   VULKAN_HPP_INLINE std::string to_string(DescriptorPoolCreateFlagBits value)
   34842   {
   34843     switch (value)
   34844     {
   34845     case DescriptorPoolCreateFlagBits::eFreeDescriptorSet: return "FreeDescriptorSet";
   34846     default: return "invalid";
   34847     }
   34848   }
   34849 
   34850   VULKAN_HPP_INLINE std::string to_string(DescriptorPoolCreateFlags value)
   34851   {
   34852     if (!value) return "{}";
   34853     std::string result;
   34854     if (value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet) result += "FreeDescriptorSet | ";
   34855     return "{" + result.substr(0, result.size() - 3) + "}";
   34856   }
   34857 
   34858   VULKAN_HPP_INLINE std::string to_string(DependencyFlagBits value)
   34859   {
   34860     switch (value)
   34861     {
   34862     case DependencyFlagBits::eByRegion: return "ByRegion";
   34863     case DependencyFlagBits::eViewLocalKHX: return "ViewLocalKHX";
   34864     case DependencyFlagBits::eDeviceGroupKHX: return "DeviceGroupKHX";
   34865     default: return "invalid";
   34866     }
   34867   }
   34868 
   34869   VULKAN_HPP_INLINE std::string to_string(DependencyFlags value)
   34870   {
   34871     if (!value) return "{}";
   34872     std::string result;
   34873     if (value & DependencyFlagBits::eByRegion) result += "ByRegion | ";
   34874     if (value & DependencyFlagBits::eViewLocalKHX) result += "ViewLocalKHX | ";
   34875     if (value & DependencyFlagBits::eDeviceGroupKHX) result += "DeviceGroupKHX | ";
   34876     return "{" + result.substr(0, result.size() - 3) + "}";
   34877   }
   34878 
   34879   VULKAN_HPP_INLINE std::string to_string(PresentModeKHR value)
   34880   {
   34881     switch (value)
   34882     {
   34883     case PresentModeKHR::eImmediate: return "Immediate";
   34884     case PresentModeKHR::eMailbox: return "Mailbox";
   34885     case PresentModeKHR::eFifo: return "Fifo";
   34886     case PresentModeKHR::eFifoRelaxed: return "FifoRelaxed";
   34887     case PresentModeKHR::eSharedDemandRefresh: return "SharedDemandRefresh";
   34888     case PresentModeKHR::eSharedContinuousRefresh: return "SharedContinuousRefresh";
   34889     default: return "invalid";
   34890     }
   34891   }
   34892 
   34893   VULKAN_HPP_INLINE std::string to_string(ColorSpaceKHR value)
   34894   {
   34895     switch (value)
   34896     {
   34897     case ColorSpaceKHR::eSrgbNonlinear: return "SrgbNonlinear";
   34898     case ColorSpaceKHR::eDisplayP3NonlinearEXT: return "DisplayP3NonlinearEXT";
   34899     case ColorSpaceKHR::eExtendedSrgbLinearEXT: return "ExtendedSrgbLinearEXT";
   34900     case ColorSpaceKHR::eDciP3LinearEXT: return "DciP3LinearEXT";
   34901     case ColorSpaceKHR::eDciP3NonlinearEXT: return "DciP3NonlinearEXT";
   34902     case ColorSpaceKHR::eBt709LinearEXT: return "Bt709LinearEXT";
   34903     case ColorSpaceKHR::eBt709NonlinearEXT: return "Bt709NonlinearEXT";
   34904     case ColorSpaceKHR::eBt2020LinearEXT: return "Bt2020LinearEXT";
   34905     case ColorSpaceKHR::eHdr10St2084EXT: return "Hdr10St2084EXT";
   34906     case ColorSpaceKHR::eDolbyvisionEXT: return "DolbyvisionEXT";
   34907     case ColorSpaceKHR::eHdr10HlgEXT: return "Hdr10HlgEXT";
   34908     case ColorSpaceKHR::eAdobergbLinearEXT: return "AdobergbLinearEXT";
   34909     case ColorSpaceKHR::eAdobergbNonlinearEXT: return "AdobergbNonlinearEXT";
   34910     case ColorSpaceKHR::ePassThroughEXT: return "PassThroughEXT";
   34911     case ColorSpaceKHR::eExtendedSrgbNonlinearEXT: return "ExtendedSrgbNonlinearEXT";
   34912     default: return "invalid";
   34913     }
   34914   }
   34915 
   34916   VULKAN_HPP_INLINE std::string to_string(DisplayPlaneAlphaFlagBitsKHR value)
   34917   {
   34918     switch (value)
   34919     {
   34920     case DisplayPlaneAlphaFlagBitsKHR::eOpaque: return "Opaque";
   34921     case DisplayPlaneAlphaFlagBitsKHR::eGlobal: return "Global";
   34922     case DisplayPlaneAlphaFlagBitsKHR::ePerPixel: return "PerPixel";
   34923     case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied";
   34924     default: return "invalid";
   34925     }
   34926   }
   34927 
   34928   VULKAN_HPP_INLINE std::string to_string(DisplayPlaneAlphaFlagsKHR value)
   34929   {
   34930     if (!value) return "{}";
   34931     std::string result;
   34932     if (value & DisplayPlaneAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
   34933     if (value & DisplayPlaneAlphaFlagBitsKHR::eGlobal) result += "Global | ";
   34934     if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel) result += "PerPixel | ";
   34935     if (value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied) result += "PerPixelPremultiplied | ";
   34936     return "{" + result.substr(0, result.size() - 3) + "}";
   34937   }
   34938 
   34939   VULKAN_HPP_INLINE std::string to_string(CompositeAlphaFlagBitsKHR value)
   34940   {
   34941     switch (value)
   34942     {
   34943     case CompositeAlphaFlagBitsKHR::eOpaque: return "Opaque";
   34944     case CompositeAlphaFlagBitsKHR::ePreMultiplied: return "PreMultiplied";
   34945     case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied";
   34946     case CompositeAlphaFlagBitsKHR::eInherit: return "Inherit";
   34947     default: return "invalid";
   34948     }
   34949   }
   34950 
   34951   VULKAN_HPP_INLINE std::string to_string(CompositeAlphaFlagsKHR value)
   34952   {
   34953     if (!value) return "{}";
   34954     std::string result;
   34955     if (value & CompositeAlphaFlagBitsKHR::eOpaque) result += "Opaque | ";
   34956     if (value & CompositeAlphaFlagBitsKHR::ePreMultiplied) result += "PreMultiplied | ";
   34957     if (value & CompositeAlphaFlagBitsKHR::ePostMultiplied) result += "PostMultiplied | ";
   34958     if (value & CompositeAlphaFlagBitsKHR::eInherit) result += "Inherit | ";
   34959     return "{" + result.substr(0, result.size() - 3) + "}";
   34960   }
   34961 
   34962   VULKAN_HPP_INLINE std::string to_string(SurfaceTransformFlagBitsKHR value)
   34963   {
   34964     switch (value)
   34965     {
   34966     case SurfaceTransformFlagBitsKHR::eIdentity: return "Identity";
   34967     case SurfaceTransformFlagBitsKHR::eRotate90: return "Rotate90";
   34968     case SurfaceTransformFlagBitsKHR::eRotate180: return "Rotate180";
   34969     case SurfaceTransformFlagBitsKHR::eRotate270: return "Rotate270";
   34970     case SurfaceTransformFlagBitsKHR::eHorizontalMirror: return "HorizontalMirror";
   34971     case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90: return "HorizontalMirrorRotate90";
   34972     case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180";
   34973     case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270";
   34974     case SurfaceTransformFlagBitsKHR::eInherit: return "Inherit";
   34975     default: return "invalid";
   34976     }
   34977   }
   34978 
   34979   VULKAN_HPP_INLINE std::string to_string(SurfaceTransformFlagsKHR value)
   34980   {
   34981     if (!value) return "{}";
   34982     std::string result;
   34983     if (value & SurfaceTransformFlagBitsKHR::eIdentity) result += "Identity | ";
   34984     if (value & SurfaceTransformFlagBitsKHR::eRotate90) result += "Rotate90 | ";
   34985     if (value & SurfaceTransformFlagBitsKHR::eRotate180) result += "Rotate180 | ";
   34986     if (value & SurfaceTransformFlagBitsKHR::eRotate270) result += "Rotate270 | ";
   34987     if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirror) result += "HorizontalMirror | ";
   34988     if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90) result += "HorizontalMirrorRotate90 | ";
   34989     if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180) result += "HorizontalMirrorRotate180 | ";
   34990     if (value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270) result += "HorizontalMirrorRotate270 | ";
   34991     if (value & SurfaceTransformFlagBitsKHR::eInherit) result += "Inherit | ";
   34992     return "{" + result.substr(0, result.size() - 3) + "}";
   34993   }
   34994 
   34995   VULKAN_HPP_INLINE std::string to_string(DebugReportFlagBitsEXT value)
   34996   {
   34997     switch (value)
   34998     {
   34999     case DebugReportFlagBitsEXT::eInformation: return "Information";
   35000     case DebugReportFlagBitsEXT::eWarning: return "Warning";
   35001     case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning";
   35002     case DebugReportFlagBitsEXT::eError: return "Error";
   35003     case DebugReportFlagBitsEXT::eDebug: return "Debug";
   35004     default: return "invalid";
   35005     }
   35006   }
   35007 
   35008   VULKAN_HPP_INLINE std::string to_string(DebugReportFlagsEXT value)
   35009   {
   35010     if (!value) return "{}";
   35011     std::string result;
   35012     if (value & DebugReportFlagBitsEXT::eInformation) result += "Information | ";
   35013     if (value & DebugReportFlagBitsEXT::eWarning) result += "Warning | ";
   35014     if (value & DebugReportFlagBitsEXT::ePerformanceWarning) result += "PerformanceWarning | ";
   35015     if (value & DebugReportFlagBitsEXT::eError) result += "Error | ";
   35016     if (value & DebugReportFlagBitsEXT::eDebug) result += "Debug | ";
   35017     return "{" + result.substr(0, result.size() - 3) + "}";
   35018   }
   35019 
   35020   VULKAN_HPP_INLINE std::string to_string(DebugReportObjectTypeEXT value)
   35021   {
   35022     switch (value)
   35023     {
   35024     case DebugReportObjectTypeEXT::eUnknown: return "Unknown";
   35025     case DebugReportObjectTypeEXT::eInstance: return "Instance";
   35026     case DebugReportObjectTypeEXT::ePhysicalDevice: return "PhysicalDevice";
   35027     case DebugReportObjectTypeEXT::eDevice: return "Device";
   35028     case DebugReportObjectTypeEXT::eQueue: return "Queue";
   35029     case DebugReportObjectTypeEXT::eSemaphore: return "Semaphore";
   35030     case DebugReportObjectTypeEXT::eCommandBuffer: return "CommandBuffer";
   35031     case DebugReportObjectTypeEXT::eFence: return "Fence";
   35032     case DebugReportObjectTypeEXT::eDeviceMemory: return "DeviceMemory";
   35033     case DebugReportObjectTypeEXT::eBuffer: return "Buffer";
   35034     case DebugReportObjectTypeEXT::eImage: return "Image";
   35035     case DebugReportObjectTypeEXT::eEvent: return "Event";
   35036     case DebugReportObjectTypeEXT::eQueryPool: return "QueryPool";
   35037     case DebugReportObjectTypeEXT::eBufferView: return "BufferView";
   35038     case DebugReportObjectTypeEXT::eImageView: return "ImageView";
   35039     case DebugReportObjectTypeEXT::eShaderModule: return "ShaderModule";
   35040     case DebugReportObjectTypeEXT::ePipelineCache: return "PipelineCache";
   35041     case DebugReportObjectTypeEXT::ePipelineLayout: return "PipelineLayout";
   35042     case DebugReportObjectTypeEXT::eRenderPass: return "RenderPass";
   35043     case DebugReportObjectTypeEXT::ePipeline: return "Pipeline";
   35044     case DebugReportObjectTypeEXT::eDescriptorSetLayout: return "DescriptorSetLayout";
   35045     case DebugReportObjectTypeEXT::eSampler: return "Sampler";
   35046     case DebugReportObjectTypeEXT::eDescriptorPool: return "DescriptorPool";
   35047     case DebugReportObjectTypeEXT::eDescriptorSet: return "DescriptorSet";
   35048     case DebugReportObjectTypeEXT::eFramebuffer: return "Framebuffer";
   35049     case DebugReportObjectTypeEXT::eCommandPool: return "CommandPool";
   35050     case DebugReportObjectTypeEXT::eSurfaceKhr: return "SurfaceKhr";
   35051     case DebugReportObjectTypeEXT::eSwapchainKhr: return "SwapchainKhr";
   35052     case DebugReportObjectTypeEXT::eDebugReportCallbackExt: return "DebugReportCallbackExt";
   35053     case DebugReportObjectTypeEXT::eDisplayKhr: return "DisplayKhr";
   35054     case DebugReportObjectTypeEXT::eDisplayModeKhr: return "DisplayModeKhr";
   35055     case DebugReportObjectTypeEXT::eObjectTableNvx: return "ObjectTableNvx";
   35056     case DebugReportObjectTypeEXT::eIndirectCommandsLayoutNvx: return "IndirectCommandsLayoutNvx";
   35057     case DebugReportObjectTypeEXT::eValidationCacheExt: return "ValidationCacheExt";
   35058     case DebugReportObjectTypeEXT::eDescriptorUpdateTemplateKHR: return "DescriptorUpdateTemplateKHR";
   35059     case DebugReportObjectTypeEXT::eSamplerYcbcrConversionKHR: return "SamplerYcbcrConversionKHR";
   35060     default: return "invalid";
   35061     }
   35062   }
   35063 
   35064   VULKAN_HPP_INLINE std::string to_string(RasterizationOrderAMD value)
   35065   {
   35066     switch (value)
   35067     {
   35068     case RasterizationOrderAMD::eStrict: return "Strict";
   35069     case RasterizationOrderAMD::eRelaxed: return "Relaxed";
   35070     default: return "invalid";
   35071     }
   35072   }
   35073 
   35074   VULKAN_HPP_INLINE std::string to_string(ExternalMemoryHandleTypeFlagBitsNV value)
   35075   {
   35076     switch (value)
   35077     {
   35078     case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32: return "OpaqueWin32";
   35079     case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt: return "OpaqueWin32Kmt";
   35080     case ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image: return "D3D11Image";
   35081     case ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt: return "D3D11ImageKmt";
   35082     default: return "invalid";
   35083     }
   35084   }
   35085 
   35086   VULKAN_HPP_INLINE std::string to_string(ExternalMemoryHandleTypeFlagsNV value)
   35087   {
   35088     if (!value) return "{}";
   35089     std::string result;
   35090     if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32) result += "OpaqueWin32 | ";
   35091     if (value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt) result += "OpaqueWin32Kmt | ";
   35092     if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image) result += "D3D11Image | ";
   35093     if (value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt) result += "D3D11ImageKmt | ";
   35094     return "{" + result.substr(0, result.size() - 3) + "}";
   35095   }
   35096 
   35097   VULKAN_HPP_INLINE std::string to_string(ExternalMemoryFeatureFlagBitsNV value)
   35098   {
   35099     switch (value)
   35100     {
   35101     case ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly: return "DedicatedOnly";
   35102     case ExternalMemoryFeatureFlagBitsNV::eExportable: return "Exportable";
   35103     case ExternalMemoryFeatureFlagBitsNV::eImportable: return "Importable";
   35104     default: return "invalid";
   35105     }
   35106   }
   35107 
   35108   VULKAN_HPP_INLINE std::string to_string(ExternalMemoryFeatureFlagsNV value)
   35109   {
   35110     if (!value) return "{}";
   35111     std::string result;
   35112     if (value & ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly) result += "DedicatedOnly | ";
   35113     if (value & ExternalMemoryFeatureFlagBitsNV::eExportable) result += "Exportable | ";
   35114     if (value & ExternalMemoryFeatureFlagBitsNV::eImportable) result += "Importable | ";
   35115     return "{" + result.substr(0, result.size() - 3) + "}";
   35116   }
   35117 
   35118   VULKAN_HPP_INLINE std::string to_string(ValidationCheckEXT value)
   35119   {
   35120     switch (value)
   35121     {
   35122     case ValidationCheckEXT::eAll: return "All";
   35123     case ValidationCheckEXT::eShaders: return "Shaders";
   35124     default: return "invalid";
   35125     }
   35126   }
   35127 
   35128   VULKAN_HPP_INLINE std::string to_string(IndirectCommandsLayoutUsageFlagBitsNVX value)
   35129   {
   35130     switch (value)
   35131     {
   35132     case IndirectCommandsLayoutUsageFlagBitsNVX::eUnorderedSequences: return "UnorderedSequences";
   35133     case IndirectCommandsLayoutUsageFlagBitsNVX::eSparseSequences: return "SparseSequences";
   35134     case IndirectCommandsLayoutUsageFlagBitsNVX::eEmptyExecutions: return "EmptyExecutions";
   35135     case IndirectCommandsLayoutUsageFlagBitsNVX::eIndexedSequences: return "IndexedSequences";
   35136     default: return "invalid";
   35137     }
   35138   }
   35139 
   35140   VULKAN_HPP_INLINE std::string to_string(IndirectCommandsLayoutUsageFlagsNVX value)
   35141   {
   35142     if (!value) return "{}";
   35143     std::string result;
   35144     if (value & IndirectCommandsLayoutUsageFlagBitsNVX::eUnorderedSequences) result += "UnorderedSequences | ";
   35145     if (value & IndirectCommandsLayoutUsageFlagBitsNVX::eSparseSequences) result += "SparseSequences | ";
   35146     if (value & IndirectCommandsLayoutUsageFlagBitsNVX::eEmptyExecutions) result += "EmptyExecutions | ";
   35147     if (value & IndirectCommandsLayoutUsageFlagBitsNVX::eIndexedSequences) result += "IndexedSequences | ";
   35148     return "{" + result.substr(0, result.size() - 3) + "}";
   35149   }
   35150 
   35151   VULKAN_HPP_INLINE std::string to_string(ObjectEntryUsageFlagBitsNVX value)
   35152   {
   35153     switch (value)
   35154     {
   35155     case ObjectEntryUsageFlagBitsNVX::eGraphics: return "Graphics";
   35156     case ObjectEntryUsageFlagBitsNVX::eCompute: return "Compute";
   35157     default: return "invalid";
   35158     }
   35159   }
   35160 
   35161   VULKAN_HPP_INLINE std::string to_string(ObjectEntryUsageFlagsNVX value)
   35162   {
   35163     if (!value) return "{}";
   35164     std::string result;
   35165     if (value & ObjectEntryUsageFlagBitsNVX::eGraphics) result += "Graphics | ";
   35166     if (value & ObjectEntryUsageFlagBitsNVX::eCompute) result += "Compute | ";
   35167     return "{" + result.substr(0, result.size() - 3) + "}";
   35168   }
   35169 
   35170   VULKAN_HPP_INLINE std::string to_string(IndirectCommandsTokenTypeNVX value)
   35171   {
   35172     switch (value)
   35173     {
   35174     case IndirectCommandsTokenTypeNVX::ePipeline: return "Pipeline";
   35175     case IndirectCommandsTokenTypeNVX::eDescriptorSet: return "DescriptorSet";
   35176     case IndirectCommandsTokenTypeNVX::eIndexBuffer: return "IndexBuffer";
   35177     case IndirectCommandsTokenTypeNVX::eVertexBuffer: return "VertexBuffer";
   35178     case IndirectCommandsTokenTypeNVX::ePushConstant: return "PushConstant";
   35179     case IndirectCommandsTokenTypeNVX::eDrawIndexed: return "DrawIndexed";
   35180     case IndirectCommandsTokenTypeNVX::eDraw: return "Draw";
   35181     case IndirectCommandsTokenTypeNVX::eDispatch: return "Dispatch";
   35182     default: return "invalid";
   35183     }
   35184   }
   35185 
   35186   VULKAN_HPP_INLINE std::string to_string(ObjectEntryTypeNVX value)
   35187   {
   35188     switch (value)
   35189     {
   35190     case ObjectEntryTypeNVX::eDescriptorSet: return "DescriptorSet";
   35191     case ObjectEntryTypeNVX::ePipeline: return "Pipeline";
   35192     case ObjectEntryTypeNVX::eIndexBuffer: return "IndexBuffer";
   35193     case ObjectEntryTypeNVX::eVertexBuffer: return "VertexBuffer";
   35194     case ObjectEntryTypeNVX::ePushConstant: return "PushConstant";
   35195     default: return "invalid";
   35196     }
   35197   }
   35198 
   35199   VULKAN_HPP_INLINE std::string to_string(DescriptorSetLayoutCreateFlagBits value)
   35200   {
   35201     switch (value)
   35202     {
   35203     case DescriptorSetLayoutCreateFlagBits::ePushDescriptorKHR: return "PushDescriptorKHR";
   35204     default: return "invalid";
   35205     }
   35206   }
   35207 
   35208   VULKAN_HPP_INLINE std::string to_string(DescriptorSetLayoutCreateFlags value)
   35209   {
   35210     if (!value) return "{}";
   35211     std::string result;
   35212     if (value & DescriptorSetLayoutCreateFlagBits::ePushDescriptorKHR) result += "PushDescriptorKHR | ";
   35213     return "{" + result.substr(0, result.size() - 3) + "}";
   35214   }
   35215 
   35216   VULKAN_HPP_INLINE std::string to_string(ExternalMemoryHandleTypeFlagBitsKHR value)
   35217   {
   35218     switch (value)
   35219     {
   35220     case ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd: return "OpaqueFd";
   35221     case ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueWin32: return "OpaqueWin32";
   35222     case ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueWin32Kmt: return "OpaqueWin32Kmt";
   35223     case ExternalMemoryHandleTypeFlagBitsKHR::eD3D11Texture: return "D3D11Texture";
   35224     case ExternalMemoryHandleTypeFlagBitsKHR::eD3D11TextureKmt: return "D3D11TextureKmt";
   35225     case ExternalMemoryHandleTypeFlagBitsKHR::eD3D12Heap: return "D3D12Heap";
   35226     case ExternalMemoryHandleTypeFlagBitsKHR::eD3D12Resource: return "D3D12Resource";
   35227     case ExternalMemoryHandleTypeFlagBitsKHR::eDmaBufEXT: return "DmaBufEXT";
   35228     case ExternalMemoryHandleTypeFlagBitsKHR::eHostAllocationEXT: return "HostAllocationEXT";
   35229     case ExternalMemoryHandleTypeFlagBitsKHR::eHostMappedForeignMemoryEXT: return "HostMappedForeignMemoryEXT";
   35230     default: return "invalid";
   35231     }
   35232   }
   35233 
   35234   VULKAN_HPP_INLINE std::string to_string(ExternalMemoryHandleTypeFlagsKHR value)
   35235   {
   35236     if (!value) return "{}";
   35237     std::string result;
   35238     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueFd) result += "OpaqueFd | ";
   35239     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueWin32) result += "OpaqueWin32 | ";
   35240     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eOpaqueWin32Kmt) result += "OpaqueWin32Kmt | ";
   35241     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eD3D11Texture) result += "D3D11Texture | ";
   35242     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eD3D11TextureKmt) result += "D3D11TextureKmt | ";
   35243     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eD3D12Heap) result += "D3D12Heap | ";
   35244     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eD3D12Resource) result += "D3D12Resource | ";
   35245     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eDmaBufEXT) result += "DmaBufEXT | ";
   35246     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eHostAllocationEXT) result += "HostAllocationEXT | ";
   35247     if (value & ExternalMemoryHandleTypeFlagBitsKHR::eHostMappedForeignMemoryEXT) result += "HostMappedForeignMemoryEXT | ";
   35248     return "{" + result.substr(0, result.size() - 3) + "}";
   35249   }
   35250 
   35251   VULKAN_HPP_INLINE std::string to_string(ExternalMemoryFeatureFlagBitsKHR value)
   35252   {
   35253     switch (value)
   35254     {
   35255     case ExternalMemoryFeatureFlagBitsKHR::eDedicatedOnly: return "DedicatedOnly";
   35256     case ExternalMemoryFeatureFlagBitsKHR::eExportable: return "Exportable";
   35257     case ExternalMemoryFeatureFlagBitsKHR::eImportable: return "Importable";
   35258     default: return "invalid";
   35259     }
   35260   }
   35261 
   35262   VULKAN_HPP_INLINE std::string to_string(ExternalMemoryFeatureFlagsKHR value)
   35263   {
   35264     if (!value) return "{}";
   35265     std::string result;
   35266     if (value & ExternalMemoryFeatureFlagBitsKHR::eDedicatedOnly) result += "DedicatedOnly | ";
   35267     if (value & ExternalMemoryFeatureFlagBitsKHR::eExportable) result += "Exportable | ";
   35268     if (value & ExternalMemoryFeatureFlagBitsKHR::eImportable) result += "Importable | ";
   35269     return "{" + result.substr(0, result.size() - 3) + "}";
   35270   }
   35271 
   35272   VULKAN_HPP_INLINE std::string to_string(ExternalSemaphoreHandleTypeFlagBitsKHR value)
   35273   {
   35274     switch (value)
   35275     {
   35276     case ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueFd: return "OpaqueFd";
   35277     case ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueWin32: return "OpaqueWin32";
   35278     case ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueWin32Kmt: return "OpaqueWin32Kmt";
   35279     case ExternalSemaphoreHandleTypeFlagBitsKHR::eD3D12Fence: return "D3D12Fence";
   35280     case ExternalSemaphoreHandleTypeFlagBitsKHR::eSyncFd: return "SyncFd";
   35281     default: return "invalid";
   35282     }
   35283   }
   35284 
   35285   VULKAN_HPP_INLINE std::string to_string(ExternalSemaphoreHandleTypeFlagsKHR value)
   35286   {
   35287     if (!value) return "{}";
   35288     std::string result;
   35289     if (value & ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueFd) result += "OpaqueFd | ";
   35290     if (value & ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueWin32) result += "OpaqueWin32 | ";
   35291     if (value & ExternalSemaphoreHandleTypeFlagBitsKHR::eOpaqueWin32Kmt) result += "OpaqueWin32Kmt | ";
   35292     if (value & ExternalSemaphoreHandleTypeFlagBitsKHR::eD3D12Fence) result += "D3D12Fence | ";
   35293     if (value & ExternalSemaphoreHandleTypeFlagBitsKHR::eSyncFd) result += "SyncFd | ";
   35294     return "{" + result.substr(0, result.size() - 3) + "}";
   35295   }
   35296 
   35297   VULKAN_HPP_INLINE std::string to_string(ExternalSemaphoreFeatureFlagBitsKHR value)
   35298   {
   35299     switch (value)
   35300     {
   35301     case ExternalSemaphoreFeatureFlagBitsKHR::eExportable: return "Exportable";
   35302     case ExternalSemaphoreFeatureFlagBitsKHR::eImportable: return "Importable";
   35303     default: return "invalid";
   35304     }
   35305   }
   35306 
   35307   VULKAN_HPP_INLINE std::string to_string(ExternalSemaphoreFeatureFlagsKHR value)
   35308   {
   35309     if (!value) return "{}";
   35310     std::string result;
   35311     if (value & ExternalSemaphoreFeatureFlagBitsKHR::eExportable) result += "Exportable | ";
   35312     if (value & ExternalSemaphoreFeatureFlagBitsKHR::eImportable) result += "Importable | ";
   35313     return "{" + result.substr(0, result.size() - 3) + "}";
   35314   }
   35315 
   35316   VULKAN_HPP_INLINE std::string to_string(SemaphoreImportFlagBitsKHR value)
   35317   {
   35318     switch (value)
   35319     {
   35320     case SemaphoreImportFlagBitsKHR::eTemporary: return "Temporary";
   35321     default: return "invalid";
   35322     }
   35323   }
   35324 
   35325   VULKAN_HPP_INLINE std::string to_string(SemaphoreImportFlagsKHR value)
   35326   {
   35327     if (!value) return "{}";
   35328     std::string result;
   35329     if (value & SemaphoreImportFlagBitsKHR::eTemporary) result += "Temporary | ";
   35330     return "{" + result.substr(0, result.size() - 3) + "}";
   35331   }
   35332 
   35333   VULKAN_HPP_INLINE std::string to_string(ExternalFenceHandleTypeFlagBitsKHR value)
   35334   {
   35335     switch (value)
   35336     {
   35337     case ExternalFenceHandleTypeFlagBitsKHR::eOpaqueFd: return "OpaqueFd";
   35338     case ExternalFenceHandleTypeFlagBitsKHR::eOpaqueWin32: return "OpaqueWin32";
   35339     case ExternalFenceHandleTypeFlagBitsKHR::eOpaqueWin32Kmt: return "OpaqueWin32Kmt";
   35340     case ExternalFenceHandleTypeFlagBitsKHR::eSyncFd: return "SyncFd";
   35341     default: return "invalid";
   35342     }
   35343   }
   35344 
   35345   VULKAN_HPP_INLINE std::string to_string(ExternalFenceHandleTypeFlagsKHR value)
   35346   {
   35347     if (!value) return "{}";
   35348     std::string result;
   35349     if (value & ExternalFenceHandleTypeFlagBitsKHR::eOpaqueFd) result += "OpaqueFd | ";
   35350     if (value & ExternalFenceHandleTypeFlagBitsKHR::eOpaqueWin32) result += "OpaqueWin32 | ";
   35351     if (value & ExternalFenceHandleTypeFlagBitsKHR::eOpaqueWin32Kmt) result += "OpaqueWin32Kmt | ";
   35352     if (value & ExternalFenceHandleTypeFlagBitsKHR::eSyncFd) result += "SyncFd | ";
   35353     return "{" + result.substr(0, result.size() - 3) + "}";
   35354   }
   35355 
   35356   VULKAN_HPP_INLINE std::string to_string(ExternalFenceFeatureFlagBitsKHR value)
   35357   {
   35358     switch (value)
   35359     {
   35360     case ExternalFenceFeatureFlagBitsKHR::eExportable: return "Exportable";
   35361     case ExternalFenceFeatureFlagBitsKHR::eImportable: return "Importable";
   35362     default: return "invalid";
   35363     }
   35364   }
   35365 
   35366   VULKAN_HPP_INLINE std::string to_string(ExternalFenceFeatureFlagsKHR value)
   35367   {
   35368     if (!value) return "{}";
   35369     std::string result;
   35370     if (value & ExternalFenceFeatureFlagBitsKHR::eExportable) result += "Exportable | ";
   35371     if (value & ExternalFenceFeatureFlagBitsKHR::eImportable) result += "Importable | ";
   35372     return "{" + result.substr(0, result.size() - 3) + "}";
   35373   }
   35374 
   35375   VULKAN_HPP_INLINE std::string to_string(FenceImportFlagBitsKHR value)
   35376   {
   35377     switch (value)
   35378     {
   35379     case FenceImportFlagBitsKHR::eTemporary: return "Temporary";
   35380     default: return "invalid";
   35381     }
   35382   }
   35383 
   35384   VULKAN_HPP_INLINE std::string to_string(FenceImportFlagsKHR value)
   35385   {
   35386     if (!value) return "{}";
   35387     std::string result;
   35388     if (value & FenceImportFlagBitsKHR::eTemporary) result += "Temporary | ";
   35389     return "{" + result.substr(0, result.size() - 3) + "}";
   35390   }
   35391 
   35392   VULKAN_HPP_INLINE std::string to_string(SurfaceCounterFlagBitsEXT value)
   35393   {
   35394     switch (value)
   35395     {
   35396     case SurfaceCounterFlagBitsEXT::eVblank: return "Vblank";
   35397     default: return "invalid";
   35398     }
   35399   }
   35400 
   35401   VULKAN_HPP_INLINE std::string to_string(SurfaceCounterFlagsEXT value)
   35402   {
   35403     if (!value) return "{}";
   35404     std::string result;
   35405     if (value & SurfaceCounterFlagBitsEXT::eVblank) result += "Vblank | ";
   35406     return "{" + result.substr(0, result.size() - 3) + "}";
   35407   }
   35408 
   35409   VULKAN_HPP_INLINE std::string to_string(DisplayPowerStateEXT value)
   35410   {
   35411     switch (value)
   35412     {
   35413     case DisplayPowerStateEXT::eOff: return "Off";
   35414     case DisplayPowerStateEXT::eSuspend: return "Suspend";
   35415     case DisplayPowerStateEXT::eOn: return "On";
   35416     default: return "invalid";
   35417     }
   35418   }
   35419 
   35420   VULKAN_HPP_INLINE std::string to_string(DeviceEventTypeEXT value)
   35421   {
   35422     switch (value)
   35423     {
   35424     case DeviceEventTypeEXT::eDisplayHotplug: return "DisplayHotplug";
   35425     default: return "invalid";
   35426     }
   35427   }
   35428 
   35429   VULKAN_HPP_INLINE std::string to_string(DisplayEventTypeEXT value)
   35430   {
   35431     switch (value)
   35432     {
   35433     case DisplayEventTypeEXT::eFirstPixelOut: return "FirstPixelOut";
   35434     default: return "invalid";
   35435     }
   35436   }
   35437 
   35438   VULKAN_HPP_INLINE std::string to_string(PeerMemoryFeatureFlagBitsKHX value)
   35439   {
   35440     switch (value)
   35441     {
   35442     case PeerMemoryFeatureFlagBitsKHX::eCopySrc: return "CopySrc";
   35443     case PeerMemoryFeatureFlagBitsKHX::eCopyDst: return "CopyDst";
   35444     case PeerMemoryFeatureFlagBitsKHX::eGenericSrc: return "GenericSrc";
   35445     case PeerMemoryFeatureFlagBitsKHX::eGenericDst: return "GenericDst";
   35446     default: return "invalid";
   35447     }
   35448   }
   35449 
   35450   VULKAN_HPP_INLINE std::string to_string(PeerMemoryFeatureFlagsKHX value)
   35451   {
   35452     if (!value) return "{}";
   35453     std::string result;
   35454     if (value & PeerMemoryFeatureFlagBitsKHX::eCopySrc) result += "CopySrc | ";
   35455     if (value & PeerMemoryFeatureFlagBitsKHX::eCopyDst) result += "CopyDst | ";
   35456     if (value & PeerMemoryFeatureFlagBitsKHX::eGenericSrc) result += "GenericSrc | ";
   35457     if (value & PeerMemoryFeatureFlagBitsKHX::eGenericDst) result += "GenericDst | ";
   35458     return "{" + result.substr(0, result.size() - 3) + "}";
   35459   }
   35460 
   35461   VULKAN_HPP_INLINE std::string to_string(MemoryAllocateFlagBitsKHX value)
   35462   {
   35463     switch (value)
   35464     {
   35465     case MemoryAllocateFlagBitsKHX::eDeviceMask: return "DeviceMask";
   35466     default: return "invalid";
   35467     }
   35468   }
   35469 
   35470   VULKAN_HPP_INLINE std::string to_string(MemoryAllocateFlagsKHX value)
   35471   {
   35472     if (!value) return "{}";
   35473     std::string result;
   35474     if (value & MemoryAllocateFlagBitsKHX::eDeviceMask) result += "DeviceMask | ";
   35475     return "{" + result.substr(0, result.size() - 3) + "}";
   35476   }
   35477 
   35478   VULKAN_HPP_INLINE std::string to_string(DeviceGroupPresentModeFlagBitsKHX value)
   35479   {
   35480     switch (value)
   35481     {
   35482     case DeviceGroupPresentModeFlagBitsKHX::eLocal: return "Local";
   35483     case DeviceGroupPresentModeFlagBitsKHX::eRemote: return "Remote";
   35484     case DeviceGroupPresentModeFlagBitsKHX::eSum: return "Sum";
   35485     case DeviceGroupPresentModeFlagBitsKHX::eLocalMultiDevice: return "LocalMultiDevice";
   35486     default: return "invalid";
   35487     }
   35488   }
   35489 
   35490   VULKAN_HPP_INLINE std::string to_string(DeviceGroupPresentModeFlagsKHX value)
   35491   {
   35492     if (!value) return "{}";
   35493     std::string result;
   35494     if (value & DeviceGroupPresentModeFlagBitsKHX::eLocal) result += "Local | ";
   35495     if (value & DeviceGroupPresentModeFlagBitsKHX::eRemote) result += "Remote | ";
   35496     if (value & DeviceGroupPresentModeFlagBitsKHX::eSum) result += "Sum | ";
   35497     if (value & DeviceGroupPresentModeFlagBitsKHX::eLocalMultiDevice) result += "LocalMultiDevice | ";
   35498     return "{" + result.substr(0, result.size() - 3) + "}";
   35499   }
   35500 
   35501   VULKAN_HPP_INLINE std::string to_string(SwapchainCreateFlagBitsKHR value)
   35502   {
   35503     switch (value)
   35504     {
   35505     case SwapchainCreateFlagBitsKHR::eBindSfrKHX: return "BindSfrKHX";
   35506     default: return "invalid";
   35507     }
   35508   }
   35509 
   35510   VULKAN_HPP_INLINE std::string to_string(SwapchainCreateFlagsKHR value)
   35511   {
   35512     if (!value) return "{}";
   35513     std::string result;
   35514     if (value & SwapchainCreateFlagBitsKHR::eBindSfrKHX) result += "BindSfrKHX | ";
   35515     return "{" + result.substr(0, result.size() - 3) + "}";
   35516   }
   35517 
   35518   VULKAN_HPP_INLINE std::string to_string(ViewportCoordinateSwizzleNV value)
   35519   {
   35520     switch (value)
   35521     {
   35522     case ViewportCoordinateSwizzleNV::ePositiveX: return "PositiveX";
   35523     case ViewportCoordinateSwizzleNV::eNegativeX: return "NegativeX";
   35524     case ViewportCoordinateSwizzleNV::ePositiveY: return "PositiveY";
   35525     case ViewportCoordinateSwizzleNV::eNegativeY: return "NegativeY";
   35526     case ViewportCoordinateSwizzleNV::ePositiveZ: return "PositiveZ";
   35527     case ViewportCoordinateSwizzleNV::eNegativeZ: return "NegativeZ";
   35528     case ViewportCoordinateSwizzleNV::ePositiveW: return "PositiveW";
   35529     case ViewportCoordinateSwizzleNV::eNegativeW: return "NegativeW";
   35530     default: return "invalid";
   35531     }
   35532   }
   35533 
   35534   VULKAN_HPP_INLINE std::string to_string(DiscardRectangleModeEXT value)
   35535   {
   35536     switch (value)
   35537     {
   35538     case DiscardRectangleModeEXT::eInclusive: return "Inclusive";
   35539     case DiscardRectangleModeEXT::eExclusive: return "Exclusive";
   35540     default: return "invalid";
   35541     }
   35542   }
   35543 
   35544   VULKAN_HPP_INLINE std::string to_string(SubpassDescriptionFlagBits value)
   35545   {
   35546     switch (value)
   35547     {
   35548     case SubpassDescriptionFlagBits::ePerViewAttributesNVX: return "PerViewAttributesNVX";
   35549     case SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX: return "PerViewPositionXOnlyNVX";
   35550     default: return "invalid";
   35551     }
   35552   }
   35553 
   35554   VULKAN_HPP_INLINE std::string to_string(SubpassDescriptionFlags value)
   35555   {
   35556     if (!value) return "{}";
   35557     std::string result;
   35558     if (value & SubpassDescriptionFlagBits::ePerViewAttributesNVX) result += "PerViewAttributesNVX | ";
   35559     if (value & SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX) result += "PerViewPositionXOnlyNVX | ";
   35560     return "{" + result.substr(0, result.size() - 3) + "}";
   35561   }
   35562 
   35563   VULKAN_HPP_INLINE std::string to_string(PointClippingBehaviorKHR value)
   35564   {
   35565     switch (value)
   35566     {
   35567     case PointClippingBehaviorKHR::eAllClipPlanes: return "AllClipPlanes";
   35568     case PointClippingBehaviorKHR::eUserClipPlanesOnly: return "UserClipPlanesOnly";
   35569     default: return "invalid";
   35570     }
   35571   }
   35572 
   35573   VULKAN_HPP_INLINE std::string to_string(SamplerReductionModeEXT value)
   35574   {
   35575     switch (value)
   35576     {
   35577     case SamplerReductionModeEXT::eWeightedAverage: return "WeightedAverage";
   35578     case SamplerReductionModeEXT::eMin: return "Min";
   35579     case SamplerReductionModeEXT::eMax: return "Max";
   35580     default: return "invalid";
   35581     }
   35582   }
   35583 
   35584   VULKAN_HPP_INLINE std::string to_string(TessellationDomainOriginKHR value)
   35585   {
   35586     switch (value)
   35587     {
   35588     case TessellationDomainOriginKHR::eUpperLeft: return "UpperLeft";
   35589     case TessellationDomainOriginKHR::eLowerLeft: return "LowerLeft";
   35590     default: return "invalid";
   35591     }
   35592   }
   35593 
   35594   VULKAN_HPP_INLINE std::string to_string(SamplerYcbcrModelConversionKHR value)
   35595   {
   35596     switch (value)
   35597     {
   35598     case SamplerYcbcrModelConversionKHR::eRgbIdentity: return "RgbIdentity";
   35599     case SamplerYcbcrModelConversionKHR::eYcbcrIdentity: return "YcbcrIdentity";
   35600     case SamplerYcbcrModelConversionKHR::eYcbcr709: return "Ycbcr709";
   35601     case SamplerYcbcrModelConversionKHR::eYcbcr601: return "Ycbcr601";
   35602     case SamplerYcbcrModelConversionKHR::eYcbcr2020: return "Ycbcr2020";
   35603     default: return "invalid";
   35604     }
   35605   }
   35606 
   35607   VULKAN_HPP_INLINE std::string to_string(SamplerYcbcrRangeKHR value)
   35608   {
   35609     switch (value)
   35610     {
   35611     case SamplerYcbcrRangeKHR::eItuFull: return "ItuFull";
   35612     case SamplerYcbcrRangeKHR::eItuNarrow: return "ItuNarrow";
   35613     default: return "invalid";
   35614     }
   35615   }
   35616 
   35617   VULKAN_HPP_INLINE std::string to_string(ChromaLocationKHR value)
   35618   {
   35619     switch (value)
   35620     {
   35621     case ChromaLocationKHR::eCositedEven: return "CositedEven";
   35622     case ChromaLocationKHR::eMidpoint: return "Midpoint";
   35623     default: return "invalid";
   35624     }
   35625   }
   35626 
   35627   VULKAN_HPP_INLINE std::string to_string(BlendOverlapEXT value)
   35628   {
   35629     switch (value)
   35630     {
   35631     case BlendOverlapEXT::eUncorrelated: return "Uncorrelated";
   35632     case BlendOverlapEXT::eDisjoint: return "Disjoint";
   35633     case BlendOverlapEXT::eConjoint: return "Conjoint";
   35634     default: return "invalid";
   35635     }
   35636   }
   35637 
   35638   VULKAN_HPP_INLINE std::string to_string(CoverageModulationModeNV value)
   35639   {
   35640     switch (value)
   35641     {
   35642     case CoverageModulationModeNV::eNone: return "None";
   35643     case CoverageModulationModeNV::eRgb: return "Rgb";
   35644     case CoverageModulationModeNV::eAlpha: return "Alpha";
   35645     case CoverageModulationModeNV::eRgba: return "Rgba";
   35646     default: return "invalid";
   35647     }
   35648   }
   35649 
   35650   VULKAN_HPP_INLINE std::string to_string(ValidationCacheHeaderVersionEXT value)
   35651   {
   35652     switch (value)
   35653     {
   35654     case ValidationCacheHeaderVersionEXT::eOne: return "One";
   35655     default: return "invalid";
   35656     }
   35657   }
   35658 
   35659   VULKAN_HPP_INLINE std::string to_string(ShaderInfoTypeAMD value)
   35660   {
   35661     switch (value)
   35662     {
   35663     case ShaderInfoTypeAMD::eStatistics: return "Statistics";
   35664     case ShaderInfoTypeAMD::eBinary: return "Binary";
   35665     case ShaderInfoTypeAMD::eDisassembly: return "Disassembly";
   35666     default: return "invalid";
   35667     }
   35668   }
   35669 
   35670   VULKAN_HPP_INLINE std::string to_string(QueueGlobalPriorityEXT value)
   35671   {
   35672     switch (value)
   35673     {
   35674     case QueueGlobalPriorityEXT::eLow: return "Low";
   35675     case QueueGlobalPriorityEXT::eMedium: return "Medium";
   35676     case QueueGlobalPriorityEXT::eHigh: return "High";
   35677     case QueueGlobalPriorityEXT::eRealtime: return "Realtime";
   35678     default: return "invalid";
   35679     }
   35680   }
   35681 
   35682   VULKAN_HPP_INLINE std::string to_string(ConservativeRasterizationModeEXT value)
   35683   {
   35684     switch (value)
   35685     {
   35686     case ConservativeRasterizationModeEXT::eDisabled: return "Disabled";
   35687     case ConservativeRasterizationModeEXT::eOverestimate: return "Overestimate";
   35688     case ConservativeRasterizationModeEXT::eUnderestimate: return "Underestimate";
   35689     default: return "invalid";
   35690     }
   35691   }
   35692 
   35693 } // namespace VULKAN_HPP_NAMESPACE
   35694 
   35695 #endif
   35696